# info.description
Public and explicitly scoped read APIs for agentcommunity.org — an open community of the companies, researchers, and developers building the agentic web, and the applicant for the proposed .agent top-level domain (pending ICANN approval). Includes globe data, site content search, deterministic NLWeb-compatible public-documentation answers at /ask, a hosted MCP server at /mcp, and two Bearer-protected own-account resources. Exact member lookup is provided through MCP; broad directory access is not a supported anonymous integration. Anonymous operations declare security: []; own-account operations declare their exact agentBearer scope. API versioning: public REST endpoints are versioned by URL path (/api/v1/). Breaking changes ship as a new version prefix; prior versions are intended to remain available for a transition period (target: at least 6 months) after a successor ships, with retirement announced in the spec via deprecated: true. Unversioned legacy paths are deprecated aliases of /api/v1.

# paths./.well-known/oauth-protected-resource/api.get.summary
Discover authorization for the protected Agent API resource

# paths./.well-known/oauth-protected-resource/api.get.description
RFC 9728 metadata for the exact protected resource https://agentcommunity.org/api. This discovery operation is public; the protected resource itself is separate.

# paths./.well-known/oauth-authorization-server.get.summary
Discover the Agent Community agent authorization server

# paths./.well-known/oauth-authorization-server.get.description
Token-only WorkOS auth.md profile metadata composed with IETF OAuth standards. response_types_supported is deliberately omitted because no authorization response type exists.

# paths./.well-known/jwks.json.get.summary
Read Agent Community agent authorization public keys

# paths./.well-known/jwks.json.get.description
Public Ed25519 verification keys for signed agent authorization assertions. Private signing material is never exposed.

# paths./api/v1/agent/account.get.description
Returns only the verified auth account and the current delegation authorization envelope. Accepts no query parameters or request body.

# paths./api/v1/agent/account.get.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.200.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.400.description
Invalid request transport, including query parameters, body signals, or multiple credentials.

# paths./api/v1/agent/account.get.responses.400.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.400.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.400.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.401.description
Missing, malformed, invalid, expired, revoked, or incorrectly bound access token.

# paths./api/v1/agent/account.get.responses.401.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.401.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.401.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.403.description
Foreign Origin or insufficient route scope.

# paths./api/v1/agent/account.get.responses.403.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.403.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.403.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.429.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.503.description
Authorization repository, account reader, or server configuration unavailable.

# paths./api/v1/agent/account.get.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/account.get.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/account.get.responses.503.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.summary
Read the access token owner registration

# paths./api/v1/agent/registrations.get.description
Returns zero or one registration selected only by the authenticated user ID. Accepts no search, filter, pagination, query parameters, or request body.

# paths./api/v1/agent/registrations.get.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.200.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.400.description
Invalid request transport, including query parameters, body signals, or multiple credentials.

# paths./api/v1/agent/registrations.get.responses.400.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.400.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.400.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.401.description
Missing, malformed, invalid, expired, revoked, or incorrectly bound access token.

# paths./api/v1/agent/registrations.get.responses.401.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.401.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.401.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.403.description
Foreign Origin or insufficient route scope.

# paths./api/v1/agent/registrations.get.responses.403.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.403.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.403.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.429.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.503.description
Authorization repository, account reader, or server configuration unavailable.

# paths./api/v1/agent/registrations.get.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/agent/registrations.get.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/agent/registrations.get.responses.503.headers.X-RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity.post.description
Starts the WorkOS service_auth ceremony. Strict JSON, 16 KiB maximum. Accepts absent Origin or exactly https://agentcommunity.org; no CORS or OPTIONS extension.

# paths./agent/identity.post.responses.200.description
One-time outer claim token and initial ten-minute claim attempt.

# paths./agent/identity.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity.post.responses.400.description
Malformed or non-canonical registration request.

# paths./agent/identity.post.responses.403.description
Present Origin was not the exact allowed origin.

# paths./agent/identity.post.responses.415.description
Content-Type is not application/json with optional UTF-8 charset.

# paths./agent/identity.post.responses.429.description
Trusted-IP or normalized-login-hint start limit rejected the request.

# paths./agent/identity.post.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity.post.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity.post.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity.post.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity/claim.post.description
Atomically closes the current attempt and creates a fresh ten-minute attempt while the outer claim remains active. It never returns the outer claim token.

# paths./agent/identity/claim.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity/claim.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity/claim.post.responses.403.description
Present Origin was not the exact allowed origin.

# paths./agent/identity/claim.post.responses.415.description
Content-Type is not application/json with optional UTF-8 charset.

# paths./agent/identity/claim.post.responses.429.description
Trusted-IP or normalized-login-hint start limit rejected the request.

# paths./agent/identity/claim.post.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity/claim.post.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./agent/identity/claim.post.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./agent/identity/claim.post.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/token.post.summary
Poll a claim or exchange a service identity assertion

# paths./oauth2/token.post.description
Strict form endpoint, 8 KiB maximum. Successful claim polls mint a fresh access-token/assertion pair each time; JWT Bearer exchange returns a fresh access token only.

# paths./oauth2/token.post.responses.200.description
Fresh credentials for an approved claim or valid assertion.

# paths./oauth2/token.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/token.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/token.post.responses.400.description
OAuth error: invalid request/target/grant, pending, slow_down, denied, or expired.

# paths./oauth2/token.post.responses.400.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/token.post.responses.400.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/token.post.responses.403.description
Present Origin was not the exact allowed origin.

# paths./oauth2/token.post.responses.415.description
Content-Type is not application/x-www-form-urlencoded with optional UTF-8 charset.

# paths./oauth2/token.post.responses.429.description
Trusted-IP token limit rejected the request.

# paths./oauth2/token.post.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/token.post.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/token.post.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/token.post.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/revoke.post.description
RFC 7009-style idempotent single-token revocation. Unknown or already-revoked values return the same empty 200. This does not cancel a delegation.

# paths./oauth2/revoke.post.responses.200.description
Token processed idempotently; empty response body.

# paths./oauth2/revoke.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/revoke.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/revoke.post.responses.403.description
Present Origin was not the exact allowed origin.

# paths./oauth2/revoke.post.responses.415.description
Content-Type is not application/x-www-form-urlencoded with optional UTF-8 charset.

# paths./oauth2/revoke.post.responses.429.description
Trusted-IP revoke limit rejected the request.

# paths./oauth2/revoke.post.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/revoke.post.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./oauth2/revoke.post.responses.503.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./oauth2/revoke.post.responses.503.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/globe.get.description
Geographic point data for the member globe visualization. Cached (5 min).

# paths./api/map/globe.get.description
Unversioned alias of /api/v1/globe. Still supported; new integrations should use /api/v1/globe.

# paths./api/v1/content-search.get.description
Search blog posts, docs, and pages. Deprecated for new integrations: use /api/v1/content?q=... for deterministic cursor pagination.

# paths./api/v1/content.get.summary
List and search public site content with cursor pagination

# paths./api/v1/content.get.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/content.get.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/content.get.responses.200.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./api/v1/content.get.responses.400.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/content.get.responses.400.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/content.get.responses.400.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./api/v1/content.get.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./api/v1/content.get.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./api/v1/content.get.responses.429.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./api/v1/batch.post.description
Anonymous JSON batch for content.list and docs.ask. One request carries at most 10 operations and at most 262144 bytes; each current operation costs 1 against a total cost budget of 10. Execution is sequential with concurrency one. The content.list item response cap is 262144 bytes, the docs.ask item response cap is 65536 bytes, and the total encoded response cap is 1048576 bytes. The trusted-IP policy allows 10 requests per 60 seconds. The 10-second batch execution deadline begins when validated execution starts, and no later operation begins once that deadline is reached. Work already running may finish. Envelope failures reject the request; operation failures remain ordered item-level errors in an HTTP 200 response, never 207.

# paths./api/v1/batch.post.requestBody.description
Strict batch envelope. Item IDs must be unique even though JSON Schema uniqueItems cannot express uniqueness by one object property. Unknown operation names remain envelope-valid and produce item-level errors; the closed known-operation argument union is BatchKnownItem.

# paths./api/v1/batch.post.requestBody.content.application/json.example.items[].arguments.query
How can agents discover AgentCommunity resources?

# paths./api/v1/batch.post.responses.200.description
Ordered per-item success and closed error results, including mixed outcomes.

# paths./api/v1/batch.post.responses.200.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/batch.post.responses.400.description
Malformed JSON or invalid strict batch envelope.

# paths./api/v1/batch.post.responses.400.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/batch.post.responses.413.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/batch.post.responses.415.description
Content-Type is not application/json or Content-Encoding is not identity.

# paths./api/v1/batch.post.responses.415.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/batch.post.responses.429.description
Trusted client identity is absent or the fail-closed batch limiter rejected the request.

# paths./api/v1/batch.post.responses.429.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/batch.post.responses.500.description
Batch execution or validated response serialization failed.

# paths./api/v1/batch.post.responses.500.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.summary
Simulate an agent protocol response without writes

# paths./api/v1/sandbox/simulate.post.description
Deterministic no-write contract simulator with exactly these fixture scenarios: agent_auth_challenge, agent_auth_pending, agent_auth_success, batch_mixed_result. Responses use the same production Zod response schemas and serializers with fixed synthetic values. The route never reads member data, calls production services, signs credentials, or performs writes. Requests are capped at 32768 bytes, and the trusted-IP policy allows 30 requests per 60 seconds.

# paths./api/v1/sandbox/simulate.post.responses.200.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.responses.200.content.application/json.examples.agent_auth_success.summary
Synthetic approved agent authorization response

# paths./api/v1/sandbox/simulate.post.responses.200.content.application/json.examples.batch_mixed_result.summary
Synthetic mixed public-read batch response

# paths./api/v1/sandbox/simulate.post.responses.200.content.application/json.examples.batch_mixed_result.value.items[].result.items[].description
Synthetic fixture; no production content or member data.

# paths./api/v1/sandbox/simulate.post.responses.400.description
The authorization-pending fixture response, malformed JSON, or an invalid strict request.

# paths./api/v1/sandbox/simulate.post.responses.400.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.responses.413.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.responses.415.description
Content-Type is not application/json with an optional UTF-8 charset.

# paths./api/v1/sandbox/simulate.post.responses.415.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.responses.429.description
Trusted client identity is absent or the fail-closed sandbox limiter rejected the request.

# paths./api/v1/sandbox/simulate.post.responses.429.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/v1/sandbox/simulate.post.responses.500.description
Simulation response construction or validation failed.

# paths./api/v1/sandbox/simulate.post.responses.500.headers.RateLimit-Policy.description
Static draft-11 named policy. No remaining or reset state is claimed.

# paths./api/content-search.get.description
Unversioned alias of /api/v1/content-search. Still supported; new integrations should use /api/v1/content-search. Deprecated for new integrations: use /api/v1/content?q=... for deterministic cursor pagination.

# paths./ask.get.summary
Answer questions from published documentation

# paths./ask.get.description
NLWeb v0.55-compatible deterministic extractive answers from published documentation only. The response includes Schema.org Article citations and never reads member, authenticated, Supabase, or private data. query is canonical; q is a PAGE compatibility alias, and both query and q are invalid. Set streaming=true or Accept: text/event-stream for start, result, complete SSE events.

# paths./ask.get.parameters[].description
Canonical natural-language question. Omit every parameter to receive a capability envelope describing this endpoint instead of an answer.

# paths./ask.get.parameters[].description
PAGE compatibility alias for canonical query. Send exactly one of query or q; both are invalid.

# paths./ask.get.responses.200.description
NLWeb v0.55 answer or compatible event stream.

# paths./ask.get.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./ask.get.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./ask.get.responses.200.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./ask.get.responses.200.content.application/json.example.answer
AID: AID provides an identity and discovery record for agents.

# paths./ask.get.responses.200.content.text/event-stream.schema.description
SSE events named start, result, and complete only.

# paths./ask.get.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./ask.get.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./ask.get.responses.429.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./ask.post.summary
Answer questions with an NLWeb v0.55 request

# paths./ask.post.description
Accepts canonical flat query, PAGE compatibility alias q, or an NLWeb v0.55 request with query.text, optional query.site=agentcommunity.org, standard conversational-search preferences, and optional meta.version=0.55. Send exactly one of query or q for flat requests; both query and q are invalid. Responses are deterministic and public-documents-only.

# paths./ask.post.responses.200.description
NLWeb v0.55 answer or compatible event stream.

# paths./ask.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./ask.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./ask.post.responses.200.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./ask.post.responses.200.content.application/json.example.answer
AID: AID provides an identity and discovery record for agents.

# paths./ask.post.responses.200.content.text/event-stream.schema.description
SSE events named start, result, and complete only.

# paths./ask.post.responses.429.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./ask.post.responses.429.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./ask.post.responses.429.headers.RateLimit-Reset.description
Legacy compatibility delta-seconds field from an earlier RateLimit Internet-Draft generation. This route supplies an explicit conservative wait equal to the policy window; it is not a live countdown and is never draft-11 t.

# paths./mcp.post.description
Model Context Protocol endpoint (JSON-RPC 2.0 over HTTP POST, protocol 2026-07-28, with 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05 still served; stateless, no auth). Dual-era on one endpoint, selected per request: a modern 2026-07-28 request carries a params._meta block (io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities) and the standard headers below, and gets resultType, cache hints, io.modelcontextprotocol/serverInfo, and the modern error codes at their mandated HTTP statuses (-32020 header missing or mismatched and -32022 unsupported protocol revision at 400, -32601 unknown method at 404). A legacy request uses the initialize handshake, requires none of those headers, and is answered exactly as before with bare results at 200. The method initialize always selects legacy semantics; server/discover always selects modern. Tools: lookup_member, get_community_stats, register_agent, verify_certificate. Exact lookup returns only a minimal public projection; broad directory search is unsupported. The generic response policy is RateLimit-Policy: "mcp";q=30;w=60. Once register-specific enforcement is attempted, it is RateLimit-Policy: "mcp-register";q=2;w=60, even if KV is unavailable. A current RateLimit field and legacy RateLimit-Remaining are present only when the KV counter supplies a real remaining value; no t is claimed. Idempotency replays that bypass register-specific enforcement retain the generic policy. Manifest at /.well-known/mcp.

# paths./mcp.post.parameters[].description
Optional idempotency key honored for register_agent tool calls: the same key from the same caller IP within 24h returns the original result instead of re-registering. Replayed responses carry Idempotency-Replayed: true.

# paths./mcp.post.parameters[].description
Protocol revision. An unsupported explicit value is rejected with 400; the header may be omitted, in which case 2025-03-26 is assumed per the transport spec. REQUIRED on modern 2026-07-28 requests — absent there it is -32020 at 400, and it must agree with params._meta io.modelcontextprotocol/protocolVersion or it is -32020 HeaderMismatch. Never echoed back; it is attacker-controlled.

# paths./mcp.post.parameters[].description
REQUIRED on modern 2026-07-28 requests, and must equal the JSON-RPC method in the body. Absent or disagreeing is -32020 at 400. Ignored entirely on legacy requests.

# paths./mcp.post.parameters[].description
REQUIRED on modern 2026-07-28 name-bearing methods (tools/call, resources/read, prompts/get), and must equal params.name or params.uri. Absent or disagreeing is -32020 at 400. Ignored on every other method and on all legacy requests.

# paths./mcp.post.parameters[].description
Accepted at CORS preflight and then ignored, in both eras. This server is stateless: nothing reads it, and no response ever carries one. Sending it changes nothing.

# paths./mcp.post.responses.200.headers.RateLimit-Policy.description
Current draft-11 RateLimit-Policy Structured Field. Each item starts with a quoted policy identifier; q is quota and w is the static policy window in seconds.

# paths./mcp.post.responses.200.headers.RateLimit.description
Current draft-11 RateLimit Structured Field, present only when the register KV counter provides a real remaining value. r is real remaining quota; this route has no independently justified t.

# paths./mcp.post.responses.200.headers.RateLimit-Limit.description
Legacy compatibility quota field from an earlier RateLimit Internet-Draft generation.

# paths./mcp.post.responses.200.headers.RateLimit-Remaining.description
Legacy compatibility field present only when the register KV counter provides a real remaining value for the 2/60 mcp-register policy. It is absent when remaining is unknown and is never fabricated.

# paths./mcp.post.responses.200.headers.Idempotency-Replayed.description
Present and set to "true" only when the response is a replay of a stored register_agent result for the given Idempotency-Key + caller IP.

# paths./mcp.post.responses.202.description
MCP JSON-RPC notification acknowledgement. An accepted id-less notification returns HTTP 202 with an empty response body; it does not create an asynchronous REST operation, job resource, polling URL, or Location header.

# paths./mcp.post.responses.400.description
Modern-era protocol fault, with a JSON-RPC error body. -32020 when a required standard header (MCP-Protocol-Version, Mcp-Method, Mcp-Name) is absent or disagrees with the body; -32022 when the declared protocol revision is not served modern-style, carrying data: { supported, requested }; -32602 when a required params._meta member is missing. Legacy requests cannot produce any of these — they are answered at 200.

# paths./mcp.post.responses.403.description
Origin header present and structurally invalid — malformed, the literal "null", or a non-http(s) scheme. JSON-RPC error body, never an HTML page, and the offending value is never echoed back. An absent or well-formed http(s) Origin is accepted.

# paths./mcp.post.responses.404.description
Modern-era unknown method (-32601), with a JSON-RPC error body and the usual CORS headers. Includes ping, which 2026-07-28 removed. Legacy unknown methods return -32601 at 200 instead.

# components.schemas.NLWebAnswer.properties.query_id.description
Per-response query identifier compatible with the NLWeb reference REST API.

# components.schemas.NLWebAnswer.properties.query.description
Echo of the caller query; empty string in a capability response.

# components.schemas.NLWebAnswer.properties._meta.properties.response_type.description
answer for a normal query; capability for the parameterless probe response.

# components.schemas.NLWebAnswer.properties.answer.description
Deterministic extractive answer assembled from cited documentation. Each internal source excerpt is bounded to 320 characters before the full answer is capped.

# components.schemas.NLWebAnswer.properties.results.description
Canonical NLWeb result list. Array order and score come from the same deterministic documentation ranking.

# components.schemas.NLWebAnswer.properties.results.items.properties.score.description
Backend relevance score used to rank this result.

# components.schemas.GlobePoint.properties.count.description
Number of member organizations aggregated into this point (city cluster or country-jitter cell).

# components.securitySchemes.agentBearer.description
Header-only reusable access token for scoped own-account reads.

# components.securitySchemes.supabaseOidc.description
Human browser OpenID Connect via the canonical Supabase issuer. Member-only surfaces use cookie sessions established through this flow. This is not Agent Community OIDC discovery and grants no capability on the public operations in this document.

# components.securitySchemes.supabaseOAuth.description
OAuth 2.0 authorization-code flow (PKCE S256) via Supabase Auth. No API tokens are issued for the public endpoints in this spec; this scheme documents the human sign-in flow only. Each scope below is described with the exact data it exposes — none of them authorize a call to any path in this document, which is why every operation carries security: [].

# components.securitySchemes.supabaseOAuth.flows.authorizationCode.scopes.openid
Issue an ID token asserting the signed-in subject identifier. Grants no read or write access to any API in this document.

# components.securitySchemes.supabaseOAuth.flows.authorizationCode.scopes.email
Read the signed-in person's email address and its verification state. Grants no read or write access to any API in this document.

# components.securitySchemes.supabaseOAuth.flows.authorizationCode.scopes.profile
Read the signed-in person's display name and avatar. Grants no read or write access to any API in this document.