> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/developers/docs/_mcp/server. # Introduction > **Info** > > **In active development:** The Destinations Delivery API is shared with design partners while it is being built out. The shape of resources and endpoints may change before general availability. The Destinations Delivery API, available at *xdn.contentful.com*, is a read-only API that returns the published routing tree of a Destination as a flattened sitemap and resolves Destination paths or Destination Node IDs to hydrated Experiences. Experience resolution can include optional personalization input. Destinations, their Destination Nodes, and the Channel they implement are authored and published with the [Destinations Management API](/references/experience-management-api/destinations-management). ## Basic API information API base URL `https://xdn.contentful.com` *This is a read-only API* ## Authentication The API is securely accessed via HTTPS. Pass a bearer token in the `Authorization` header or use the `access_token` query parameter. Do not expose tokens in client-side source code. Query-string tokens can appear in logs and browser history, so prefer the `Authorization` header where possible. ## Environment scope The route doesn't include an environment segment, so the API always resolves the `master` environment. Selecting another environment through a path or query parameter isn't supported. ## Sitemap response The published form of a Destination is a flattened sitemap — one entry per routable path, each naming the experience served at that path. The nesting of Destination Folder Nodes is resolved away, so a client reads a single list rather than walking a tree. The response has the following shape: ```json { "property": { "sys": { "type": "Destination" } }, "paths": { "sys": { "type": "Array" }, "limit": 100, "items": [ { "sys": { "type": "DestinationExperienceNode" }, "path": "/products", "experienceUrn": "crn:contentful:::experience:spaces/$self/environments/$self/experiences/productIndex" } ], "pages": { "next": "bnVsbDoxMDA" } } } ``` Each entry in `paths.items` includes the following fields: | Field | Type | Description | | ------------- | ------ | -------------------------------------------------------------- | | sys.type | String | Type of the Destination Node that claims this path | | path | String | The path this entry routes | | experienceUrn | String | Contentful Resource Name of the experience served at this path | ## Experience resolution The API can resolve a published Experience by absolute path or Destination Node ID. A successful resolution returns the hydrated Experience and child paths at the next depth level for lazy loading. If the path belongs to a Destination Redirect Node, the response contains the redirect target instead. Use the cacheable `GET` endpoint for an unpersonalized Destination Node lookup. Use `POST` when resolving by path or when supplying personalization profile and event data. ## Pagination The `paths` collection is cursor-paginated. The default page size is `100` and the maximum allowed limit is `1000`. The `paths.pages` object contains a `next` key when there are further paths to fetch, and a `prev` key when you have paged forward. Pass the value back as the `pageNext` or `pagePrev` query parameter to retrieve that page. Treat the tokens as opaque, and do not send `pageNext` and `pagePrev` in the same request. ## Publish propagation Publishing a Destination or one of its Destination Nodes rebuilds and uploads the delivery artifact asynchronously. A successful publish response from the Destinations Management API does not guarantee that this API has observed the new artifact yet, so poll for the paths you expect rather than reading once. A **404 Not Found** immediately after a first publish can mean the artifact is still being written. A persistent **404** means no artifact has been uploaded for that Destination. After a Destination is unpublished, the API stops serving its previous sitemap. ## API Docs - Destinations [Get a published Destination by ID](https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/get-published-destination.md) - Destinations [Get the sitemap for a published Destination](https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/get-destination-sitemap.md) - Destinations [Resolve Destination experiences by Destination Node ID](https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/resolve-destination-experiences-by-node-id.md) - Destinations [Resolve personalized Destination experiences by Destination Node ID](https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/resolve-personalized-destination-experiences-by-node-id.md) - Destinations [Resolve Destination experiences by absolute path](https://contentful.com/developers/docs/references/experience-delivery-api/destinations-delivery/resolve-destination-experiences-by-path.md) ## OpenAPI Specification The raw OpenAPI 3.1 specification for this API is available at: - [OpenAPI JSON](https://contentful.com/developers/docs/openapi.json) - [OpenAPI YAML](https://contentful.com/developers/docs/openapi.yaml)