Guides

Publish a Service Document

Give Agents one public entry point for understanding your Service and the ODP operations it supports.

The Service entry point

Every ODP Service publishes a JSON Service Document at its origin.

PublicGET/.well-known/odp
The Service Document is public

The Service Document must be available without enrollment, authentication, or payment. A Service can protect the catalog operations advertised by the document, but it cannot protect the document itself.

Minimum Service Document

A conformant Service begins with descriptive metadata, language information, at least the two required Offering operations, and an HTTP endpoint base.

{
  "odp_version": "1.0",
  "name": "Example Service",
  "description": "Search and retrieve digital research services.",
  "language": "en",
  "localizations": ["en"],
  "operations": [
    {
      "name": "list-offerings",
      "authentication": "not-required"
    },
    {
      "name": "get-offering",
      "authentication": "not-required"
    }
  ],
  "http": {
    "endpoint_base": "/odp/"
  }
}
FieldPurpose
odp_versionSelects the ODP document contract used by the Service.
name and descriptionExplain what the Service is and what it makes available.
language and localizationsIdentify the current representation language and the Service metadata languages available.
operationsAdvertise only the catalog operations the Service implements.
http.endpoint_baseProvides the origin-relative base path for fixed ODP operation paths.

See the Minimum Service example for the Offering list and Full Offering that complete the required discovery flow.

The origin is the identity

The origin from which the final Service Document is retrieved identifies the Service. An Agent does not trust a self-asserted identifier inside the document.

Do not declare a second identity

The Service Document cannot contain a self-asserted Service identifier or a root web_url. Use website_url when you want to identify the human-facing website or storefront.

Describe the Service

Required metadata gives every Agent a useful baseline. Optional fields add discovery, presentation, integration, and operational context.

GroupFieldsUse
Requiredodp_version, name, description, language, localizations, operations, httpEstablish the minimum Service metadata and catalog operations.
Discoverykeywords, search_capabilitiesHelp Agents and directories understand how the Service can be found and searched.
Branding and public linksbranding, website_url, documentation_url, support_url, status_urlProvide recognizable branding plus human-facing, support, documentation, and operational destinations.
Compositionprotocols, payment_origins, mcp, http.openapiAdvertise related protocol support and machine-readable integration surfaces.

Keywords are freeform discovery hints in the document's language. They do not define accepted search terms, filters, or a protocol-wide taxonomy.

Advertise implemented operations

Every Service implements and advertises list-offerings and get-offering. The remaining operations are optional and appear only when the Service supports them.

CapabilityOperations
Required Offering accesslist-offerings, get-offering
Offering searchsearch-offerings
Collection navigationlist-collections, search-collections, get-collection, list-collection-offerings

Each descriptor declares whether Service authentication is not-required, optional, or required. Using optional or required also requires the Service Document to advertise AEP enrollment. An Agent must not probe for an operation that the document does not advertise.

See Discovery and operations for fixed paths, request methods, and operation construction.

Locate the endpoints

http.endpoint_base begins with one forward slash and identifies the base path for ODP operations. An Agent removes a trailing slash, appends one slash, and then appends the fixed path for the advertised operation.

01

Start with the Service origin

https://service.example
02

Apply the endpoint base

/odp
03

Append the advertised operation path

https://service.example/odp/offerings

http.openapi can identify a reusable OpenAPI 3.1 document for Actions. It enriches Action invocation but is not required for navigating ODP.

Compose protocols and integrations

The Service Document can advertise enrollment through AEP, payments through MPP or x402, and trust through TAP. It can also provide remote MCP endpoints and the origins that may issue payment challenges.

This excerpt shows the exact placement of the optional composition fields. The surrounding Service Document must still contain every required field shown in the minimum example.

{
  "payment_origins": [
    "https://payments.example.net"
  ],
  "protocols": {
    "enrollment": [
      {
        "name": "aep"
      }
    ],
    "payments": [
      {
        "name": "mpp",
        "authentication": "required",
        "options": ["inflow", "tempo"]
      },
      {
        "name": "x402",
        "authentication": "required",
        "options": ["base", "solana"]
      }
    ],
    "trust": [
      {
        "name": "tap"
      }
    ]
  },
  "mcp": [
    {
      "type": "streamable-http",
      "url": "/mcp",
      "name": "Catalog tools",
      "description": "Agent tools for this Service."
    }
  ],
  "http": {
    "endpoint_base": "/odp",
    "openapi": {
      "url": "/openapi.json"
    }
  }
}
FieldWhat it advertisesImportant boundary
protocols.enrollmentAEP enrollment support.The array contains the single descriptor {"name":"aep"} when present.
protocols.paymentsMPP, x402, or both in Service-preference order.authentication states whether Service authentication is required first; options contains compatibility labels.
protocols.trustTAP support.Advertisement does not replace TAP request validation or prove ownership.
payment_originsAdditional origins that can issue payment challenges.Omit it when challenges come only from the canonical Service origin.
mcpRemote MCP Streamable HTTP endpoints.The descriptor locates an endpoint; it does not enumerate MCP tools or authorize a connection.
http.openapiThe default OpenAPI 3.1 document for Actions.An Action-level openapi.url overrides this reference.

Omit unsupported protocol categories instead of serializing empty arrays. A payment descriptor names mpp or x402 and uses not-required or required for authentication. Names are unique, at most two descriptors can appear, and their order expresses Service preference. A descriptor with required authentication also requires protocols.enrollment to advertise AEP.

options can contain algorand, aptos, arbitrum, avalanche, base, card, ethereum, hedera, inflow, lightning, polygon, solana, stellar, stripe, tempo, and ton. These compact compatibility labels do not replace protocol-specific payment methods, networks, assets, or settlement terms.

An Agent filters unknown protocol names without invalidating an otherwise usable document. Known descriptors must still satisfy their complete contract. All composition fields advertise support; their defining protocols and live endpoints remain authoritative for authentication, payment, trust, and MCP behavior. See Protocol composition for the boundaries between them.

Keep the document bounded

The Service Document is a flat JSON object. Its decoded representation cannot exceed 65,536 bytes or a JSON nesting depth of eight, and its successful response uses application/odp+json. An Agent rejects an invalid document as a whole rather than acting on a partially parsed result.

Retrieval follows at most five redirects. Every redirect remains on the same scheme, host, and effective port as the preceding request.

Keep catalog data behind operations

Do not embed a growing catalog in the Service Document. Publish Service-level metadata and capabilities here, then return Collections and Offerings from the operations that own them.

Implementation checklist

  • Public endpoint: serve GET /.well-known/odp without enrollment, authentication, or payment
  • Media type: return successful documents as application/odp+json
  • Required fields: include every member shown in the minimum document
  • Operations: advertise only operations that are implemented with the declared access behavior
  • References: use valid origin-relative paths or absolute HTTPS URLs
  • Validation: validate the document and advertised integration before publication

Next steps

Quick start

Implement a working Service

Turn the minimum document into a complete ODP integration.

Build a Service
Readiness

Check the integration

Validate the public document and every advertised operation before publication.

Validate an integration