> This page is for Data API, version v2 (default).
> For other versions, use one of these documentation indexes:
> - v2 (default): https://developers.webflow.com/data/v2.0.0/llms.txt
> - v2 Beta: https://developers.webflow.com/data/v2.0.0-beta/llms.txt
> - v1: https://developers.webflow.com/data/v1.0.0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.webflow.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.webflow.com/_mcp/server.

# Multi-Channel Content Delivery

> Learn how to deliver CMS content across your digital channels with Webflow's Content Delivery API

The Webflow Data API provides endpoints to create, write, update, and delete CMS content.
This API always returns the most up-to-date data via the Webflow backend servers.

However, to serve CMS content quickly, you can use the Webflow Content Delivery API.
This API mirrors certain Data API read-only endpoints and serves cached data for fast, reliable performance.
The Content Delivery API is appropriate for high-volume requests and for serving content consistently across multiple channels like websites, apps, email campaigns, and digital touchpoints.

## Endpoints

The Content Delivery API provides the following read-only endpoints for accessing published CMS content:

* [List live collection items](/data/reference/cms/collection-items/live-items/list-items-live): Retrieves all published items in the specified collection
* [Get a live collection item](/data/reference/cms/collection-items/live-items/get-item-live): Retrieves a published item from a collection

To use the Content Delivery API, replace the standard API host name (`api.webflow.com`) with the host name `api-cdn.webflow.com` in your requests.
For example, this request calls the [List live collection items](/data/reference/cms/collection-items/live-items/list-items-live) endpoint on the Content Delivery API:

```bash
curl -G https://api-cdn.webflow.com/v2/collections/580e63fc8c9a982ac9b8b745/items/live \
  -H "Authorization: Bearer <token>" \
  -d offset=0 \
  -d limit=100
```

To use the Content Delivery API with the JavaScript/Typescript SDK, set the host name with the `baseUrl` option as in this example:

```javascript
// Query Content Delivery API for cached content
const webflowCDN = new WebflowClient({
  accessToken: process.env.WEBFLOW_TOKEN,
  baseUrl: 'https://api-cdn.webflow.com',
});
const items = await webflow.collections.items.listItems(collectionId);
console.log(items);
```

To use the Content Delivery API with the Python SDK, set the host name with the `baseUrl` option as in this example:

```python
from webflow.client import Webflow
from webflow import WebflowEnvironment

cdn_environment = WebflowEnvironment(
    base="https://api-cdn.webflow.com/v2",
    data_api="https://api.webflow.com/v2",
    content_delivery_api="https://api-cdn.webflow.com/v2",
)
client_cdn = Webflow(access_token=token, environment=cdn_environment)

response = client_cdn.collections.items.list_items(collection_id)
for item in response.items or []:
    print(f"{item.id}  {item.field_data.name}")
```

## Authentication

The Content Delivery API uses the same authentication methods as the [Webflow API](/data/reference/authentication), supporting both [site tokens](/data/reference/site-token) and [OAuth access tokens](/data/reference/oauth-app).

For optimal security and management, create a dedicated API token with [CMS read-only permissions](/data/reference/scopes) for each delivery channel.
Using a separate token allows you to manage access independently and revoke access quickly without affecting other integrations.

## Responses

The responses from the Content Delivery API are the same as for the equivalent endpoints in the Data API except that responses from the Content Delivery API include the `cf-cache-status` header.
If the value of this header is `HIT`, the response was served from the CDN cache.
If the value is `MISS` or `BYPASS`, the request was served from the origin.

## Caching policy

Caching improves content delivery performance by reducing server load, minimizing latency, and ensuring reliable performance during high traffic.

Here's how Webflow's CDN caching works:

### Initial requests

The first request to the Content Delivery API for published CMS data goes to the Data API at `api.webflow.com`.
The response is stored in the CDN cache.
The API serves subsequent identical requests directly from the cache, providing faster response times.

### Cache duration

Cached responses are stored for 120 seconds for enterprise plans and 300 seconds for other plans.
After this period, the cache entry is automatically purged and future requests behave like initial requests.

### Content updates

Due to the cache duration, when you update or delete published CMS items there may be a delay before changes are reflected in the API responses.
During this period, users may still receive the previous version of the content until the cache refreshes.

## Rate limits

Calls to the Content Delivery API that return a cached response do not count against your plan's rate limits.
Therefore, there are effectively no rate limits for cached calls to the Content Delivery API.

Calls to Content Delivery API that require data from the Data API origin server count against your plan's rate limits.
When you exceed the rate limit, the API responds with a `429 Too Many Requests` status code.
To learn more about the specific rate limits for your plan, see the [Rate limits](/data/reference/rate-limits).

To minimize rate limit errors when working with requests for cached content:

* Implement retry logic with exponential backoff for 429 responses
* [Stagger initial, uncached requests to avoid overwhelming the origin server](https://newsletter.scalablethread.com/p/how-to-handle-sudden-bursts-of-traffic?open=false#%C2%A7exponential-jitter-and-retry)