Content Management API

CMA Technical Limits & Rate Limits

These are limits for the REST Content Management API

For limits applicable to the GraphQL Content Delivery API, please instead see CDA Technical Limits & Rate Limits

Our shared-service infrastructure is built to maintain steady performance for every customer, thanks to carefully set technical limits. If any API call or CMS action goes over these boundaries, it'll trigger an error message. Should your project require higher limits, get in touch with us to discuss further.

CMA Technical Limits: Per-project and projectwide

Here are the technical limits currently in place for the CMA:

  • Per-record limits (read more):

    • Maximum Record size: 300 KB, including content in nested blocks (assets and linked records do not count toward the limit).

    • Number of blocks per record: 500

    • Maximum depth for nested blocks: 5 levels

    • Number of concurrent editors per record: 1 (with presence indicator and record locking, read more)

  • Project-wide limits:

    • Assets upload: Max size of 1 GB per asset

    • Plugin global user-defined settings: Max size of 10KB per plugin (read more)

    • Plugin field extension user-defined settings: Max size of 10KB per field (read more)

CMA Rate Limits

The Content Management API is limited to 60 requests every 3 seconds.

CMA Rate Limit Examples

  1. You make 80 requests at once and hit the limit immediately. The last 20 requests are rejected with a 429. You should retry again after x-ratelimit-reset: 3 seconds.

  2. You sustain 30 requests/second. You will hit the limit in 2 seconds. The last 30 requests are rejected with a 429. You should retry again after x-ratelimit-reset: 1 second.

  3. You sustain 20 requests/second and stay under the limit. Well done!

Official clients and rate limits

Our Javascript client already manages rate limit errors for you with a retry mechanism! If it encounters a 429 status code, the promise won't be rejected. The client will repeat the requests until the API stops returning 429 status codes, and only then will the promise will be resolved with success.

429 Status Responses in DatoCMS Shared Infrastructure

Even when you are operating within your rate limits, there is a possibility of encountering a 429 status code in situations of high system load if your project is hosted on the DatoCMS shared infrastructure or medium-density infrastructure.

Nevertheless, it's essential to acknowledge that this occurrence is rare, and our official clients are equipped with an automatic retry mechanism to seamlessly handle such situations.

HTTP Headers for CMA Rate Limit

Every CMA response will include these HTTP headers to help you stay within the rate limit:

  • x-ratelimit-limit: The number of requests you can make every 3 seconds (usually 60)

  • x-ratelimit-remaining: The number of remaining requests you can still make before the next refill

Exceeding the CMA rate limit will cause the HTTP status code to become 429 Too Many Requests, and an additional header will be added:

  • x-ratelimit-reset: Number of seconds until the next refill (only appears when rate-limited)

Reaching your plan monthly API calls limit

Every DatoCMS plan offers a number of API requests per month. What happens you exceed the included quota?

  • If your project is under a free plan, API responses will be temporarily disabled until the beginning of the following calendar month, unless you switch to a paid plan.

  • If your project is under a paid plan, you will pay an additional cost for the additional usage you made of the API.

For more details, check our Plans, billing and pricing page.

Last updated: