Multi-Channel Content Delivery

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:

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 endpoint on the Content Delivery API:

$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:

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

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

1from webflow.client import Webflow
2from webflow import WebflowEnvironment
3
4cdn_environment = WebflowEnvironment(
5 base="https://api-cdn.webflow.com/v2",
6 data_api="https://api.webflow.com/v2",
7 content_delivery_api="https://api-cdn.webflow.com/v2",
8)
9client_cdn = Webflow(access_token=token, environment=cdn_environment)
10
11response = client_cdn.collections.items.list_items(collection_id)
12for item in response.items or []:
13 print(f"{item.id} {item.field_data.name}")

Authentication

The Content Delivery API uses the same authentication methods as the Webflow API, supporting both site tokens and OAuth access tokens.

For optimal security and management, create a dedicated API token with CMS read-only permissions 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.

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