{"openapi":"3.1.0","info":{"title":"TESSA Agent Directory","version":"0.1.0"},"paths":{"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/agent-card.json":{"get":{"summary":"Well Known Agent Card","operationId":"well_known_agent_card__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/did.json":{"get":{"summary":"Well Known Did Document","description":"Backs did:web:tessa.tech — tessa.tech/.well-known/did.json 301s here.","operationId":"well_known_did_document__well_known_did_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/mcp/server.json":{"get":{"summary":"Mcp Server Manifest","description":"The MCP registry manifest for whichever host was asked.\n\naiagent.tessa.tech serves server.json; each registry domain serves its own\nserver-<name>.json (the files had been in the repo since Phase 1b, but this\nroute only ever answered on the 'mcp' surface, so both registries 404'd).","operationId":"mcp_server_manifest__well_known_mcp_server_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/a2a":{"post":{"summary":"A2A Endpoint","operationId":"a2a_endpoint_a2a_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/t/{slug}/agent-card.json":{"get":{"summary":"Tenant Agent Card","operationId":"tenant_agent_card_t__slug__agent_card_json_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/t/{slug}/a2a":{"post":{"summary":"Tenant A2A Endpoint","operationId":"tenant_a2a_endpoint_t__slug__a2a_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/t/{slug}/s/{service_slug}/agent-card.json":{"get":{"summary":"Tenant Service Agent Card","operationId":"tenant_service_agent_card_t__slug__s__service_slug__agent_card_json_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"service_slug","in":"path","required":true,"schema":{"type":"string","title":"Service Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/t/{slug}/s/{service_slug}/a2a":{"post":{"summary":"Tenant Service A2A Endpoint","operationId":"tenant_service_a2a_endpoint_t__slug__s__service_slug__a2a_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"service_slug","in":"path","required":true,"schema":{"type":"string","title":"Service Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/s/{slug}/agent-card.json":{"get":{"summary":"Service Agent Card","operationId":"service_agent_card_s__slug__agent_card_json_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/s/{slug}/a2a":{"post":{"summary":"Service A2A Endpoint","operationId":"service_a2a_endpoint_s__slug__a2a_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/registry.json":{"get":{"summary":"Registry Index","description":"A2A-style segment index. Lists every public firm in this vertical.","operationId":"registry_index_registry_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{slug}/agent-card.json":{"get":{"summary":"Firm Card","operationId":"firm_card__slug__agent_card_json_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{slug}/profile.json":{"get":{"summary":"Firm Profile","description":"Convenience endpoint — same firm dossier the get-firm-profile skill returns.","operationId":"firm_profile__slug__profile_json_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{slug}/request-introduction":{"post":{"summary":"Firm Request Introduction","description":"Direct HTTP POST endpoint for the request-introduction skill.\n\nBody: { prospect_email, prospect_name?, prospect_org?, project_brief?, requested_window? }\nReturns: { status, tracking_id, target, delivery, message }","operationId":"firm_request_introduction__slug__request_introduction_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/registry/jsonrpc":{"post":{"summary":"Registry Jsonrpc","description":"A2A registry JSONRPC interface (vendored shape from allenday/a2a-registry).\n\nSupports: list_agents, get_agent. register_agent is a no-op for v1\n(cards are generated by TESSA, not externally registered).","operationId":"registry_jsonrpc_registry_jsonrpc_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/takedown":{"get":{"summary":"Takedown Form","operationId":"takedown_form_takedown_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Takedown Submit","operationId":"takedown_submit_takedown_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_takedown_submit_takedown_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/request-removal":{"get":{"summary":"Removal Form","operationId":"removal_form_request_removal_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Removal Submit","operationId":"removal_submit_request_removal_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_removal_submit_request_removal_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/request-removal/verify/{token}":{"get":{"summary":"Removal Verify","operationId":"removal_verify_request_removal_verify__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify-listing":{"get":{"summary":"Verify Form","operationId":"verify_form_verify_listing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Verify Submit","operationId":"verify_submit_verify_listing_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_verify_submit_verify_listing_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify-listing/confirm/{token}":{"get":{"summary":"Verify Confirm","operationId":"verify_confirm_verify_listing_confirm__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/claude":{"get":{"summary":"Claude Landing","operationId":"claude_landing_claude_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/chatgpt":{"get":{"summary":"Chatgpt Landing","operationId":"chatgpt_landing_chatgpt_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/gemini":{"get":{"summary":"Gemini Landing","operationId":"gemini_landing_gemini_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/extensions/":{"get":{"summary":"Extensions Index","operationId":"extensions_index_extensions__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/extensions/tessa-professional-services/v1/":{"get":{"summary":"Extension Spec Page","operationId":"extension_spec_page_extensions_tessa_professional_services_v1__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/extensions/tessa-professional-services/v1":{"get":{"summary":"Extension Spec Page","operationId":"extension_spec_page_extensions_tessa_professional_services_v1_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/extensions/tessa-professional-services/v1/schema.json":{"get":{"summary":"Extension Schema","operationId":"extension_schema_extensions_tessa_professional_services_v1_schema_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/extensions/tessa-professional-services/v1/example.json":{"get":{"summary":"Extension Example","operationId":"extension_example_extensions_tessa_professional_services_v1_example_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/extensions/tessa-professional-services/v1/changelog":{"get":{"summary":"Extension Changelog","operationId":"extension_changelog_extensions_tessa_professional_services_v1_changelog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/taxonomy":{"get":{"summary":"Taxonomy Index","operationId":"taxonomy_index_taxonomy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/taxonomy/":{"get":{"summary":"Taxonomy Index","operationId":"taxonomy_index_taxonomy__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/taxonomy/{name}.json":{"get":{"summary":"Taxonomy Json","operationId":"taxonomy_json_taxonomy__name__json_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/taxonomy/{name}/v{version}":{"get":{"summary":"Taxonomy Versioned","operationId":"taxonomy_versioned_taxonomy__name__v_version__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/taxonomy/{name}":{"get":{"summary":"Taxonomy No Suffix","description":"Forgiving route — serve JSON without the .json suffix if the name\nmatches a known taxonomy file. Must come LAST so it doesn't eat the\n``/taxonomy/{name}/v{version}`` route.","operationId":"taxonomy_no_suffix_taxonomy__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/requests":{"get":{"summary":"Admin Requests","operationId":"admin_requests_admin_requests_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"firm","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/first-hit":{"get":{"summary":"Admin First Hit","operationId":"admin_first_hit_admin_first_hit_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/visibility":{"get":{"summary":"Internal Visibility","description":"HTML dashboard of registration status across upstream A2A registries\nand MCP catalogs. Source-of-truth: data/registrations.json (committed).","operationId":"internal_visibility_internal_visibility_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/internal/visibility.json":{"get":{"summary":"Internal Visibility Json","description":"JSON variant of /internal/visibility for the cron health-check script.","operationId":"internal_visibility_json_internal_visibility_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vectors/health":{"get":{"summary":"Vectors Health","description":"Unauthenticated liveness probe: is the extension present and the table there?","operationId":"vectors_health_vectors_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vectors/info":{"get":{"summary":"Vectors Info","operationId":"vectors_info_vectors_info_get","parameters":[{"name":"collection","in":"query","required":true,"schema":{"type":"string","title":"Collection"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vectors/search":{"post":{"summary":"Vectors Search","description":"Dense + keyword search fused with reciprocal rank fusion.\n\nBoth legs receive the same filter, matching how the Qdrant client applied\nthe filter to both prefetch branches.","operationId":"vectors_search_vectors_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vectors/upsert":{"post":{"summary":"Vectors Upsert","description":"Insert or replace points. Matches Qdrant's upsert-by-point-id semantics.\n\nConflict target is (collection, id), not id alone: the plugins derive point\nIDs from post_id/chunk_index without the collection, so both plugins produce\nidentical IDs for the same WordPress post. Keying on id alone let one\ncollection's upsert steal rows from the other.\n\nThe `bm25` sparse vector Qdrant used is ignored: Postgres derives the\nkeyword index from chunk_text via a generated tsvector column.","operationId":"vectors_upsert_vectors_upsert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vectors/delete":{"post":{"summary":"Vectors Delete","description":"Delete every point in a collection matching a Qdrant-style filter.\n\nAn absent/empty filter clears the whole collection, which is what the\nplugin's delete_collection() relies on. Deliberately scoped to the\ncollection: the table is shared, so a DROP would take out both plugins.","operationId":"vectors_delete_vectors_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Registry Home","operationId":"registry_home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/{slug}":{"get":{"summary":"Firm Landing","operationId":"firm_landing__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{slug}/claim":{"get":{"summary":"Firm Claim Stub","description":"v1 placeholder — claim flow is v2. Shows a 'contact us' page.","operationId":"firm_claim_stub__slug__claim_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_removal_submit_request_removal_post":{"properties":{"firm_slug":{"type":"string","title":"Firm Slug"},"requester_email":{"type":"string","title":"Requester Email"},"requester_reason":{"type":"string","title":"Requester Reason","default":""}},"type":"object","required":["firm_slug","requester_email"],"title":"Body_removal_submit_request_removal_post"},"Body_takedown_submit_takedown_post":{"properties":{"firm_name":{"type":"string","title":"Firm Name"},"claimant_name":{"type":"string","title":"Claimant Name","default":""},"claimant_role":{"type":"string","title":"Claimant Role","default":""},"claimant_email":{"type":"string","title":"Claimant Email"},"reason":{"type":"string","title":"Reason"},"evidence_url":{"type":"string","title":"Evidence Url","default":""}},"type":"object","required":["firm_name","claimant_email","reason"],"title":"Body_takedown_submit_takedown_post"},"Body_verify_submit_verify_listing_post":{"properties":{"firm_name":{"type":"string","title":"Firm Name"},"contact_name":{"type":"string","title":"Contact Name"},"contact_email":{"type":"string","title":"Contact Email"},"contact_role":{"type":"string","title":"Contact Role","default":""},"contact_phone":{"type":"string","title":"Contact Phone","default":""},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["firm_name","contact_name","contact_email"],"title":"Body_verify_submit_verify_listing_post"},"DeleteRequest":{"properties":{"collection":{"type":"string","maxLength":64,"minLength":1,"title":"Collection"},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"}},"type":"object","required":["collection"],"title":"DeleteRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Point":{"properties":{"id":{"type":"string","title":"Id"},"vector":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{"type":"number"},"type":"array"}],"title":"Vector"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["id","vector"],"title":"Point"},"SearchRequest":{"properties":{"collection":{"type":"string","maxLength":64,"minLength":1,"title":"Collection"},"vector":{"items":{"type":"number"},"type":"array","minItems":1,"title":"Vector"},"query":{"type":"string","title":"Query","default":""},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":10},"prefetch_limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Prefetch Limit","default":20},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"}},"type":"object","required":["collection","vector"],"title":"SearchRequest"},"UpsertRequest":{"properties":{"collection":{"type":"string","maxLength":64,"minLength":1,"title":"Collection"},"points":{"items":{"$ref":"#/components/schemas/Point"},"type":"array","title":"Points"}},"type":"object","required":["collection","points"],"title":"UpsertRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}