# Errors and Rate Limits

> Part of the NocoDB documentation (APIs). Index of all pages: https://nocodb.com/llms.txt. Any docs page is available as Markdown by adding `.md` to its URL.

URL: https://nocodb.com/docs/apis/errors
Last updated: 2026-10-21

NocoDB REST API errors and rate limits: the JSON error body, what each HTTP status code means, request IDs, and how to handle a 429 response.

When a NocoDB API request fails, the response has an HTTP status code and, in most cases, a JSON error body. Match on the `error` code, not on the message.

## Error response

Most errors return an `error` code and a `message`, plus `details` when there is extra context:

```json
{
  "error": "ERR_FEATURE_NOT_SUPPORTED",
  "message": "Accessing api token api require enterprise plan"
}
```

| Field     | Description                                                                                                                                                                                             |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `error`   | A stable code that a program can match, for example `ERR_TABLE_NOT_FOUND`. It is not present on an unhandled server error.                                                                              |
| `message` | A description of the problem for people. The text can change between releases.                                                                                                                          |
| `details` | More context, for example the failed validation entries of a request body, or the plan, limit and current count when a plan limit refuses the request. It is not present when there is no more context. |

Some older endpoints return only `{"msg": "<text>"}`, with no `error` code.

## Status codes

| Status | Meaning                                                                                                                                                                                       |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | The request body or a query parameter failed validation.                                                                                                                                      |
| `401`  | No credential was sent, the credential is not valid, or the operation does not accept this kind of credential.                                                                                |
| `403`  | The request is authenticated but not allowed: the role is too low, the token scope does not cover the operation, or the plan does not include the feature or allows no more of this resource. |
| `404`  | The resource does not exist. Hooks and documents return `404`. Most other resources return `422`.                                                                                             |
| `422`  | The request is well formed, but NocoDB cannot act on it. Usually a base, table, field, view, script, dashboard, widget or workflow that the request names does not exist.                     |
| `429`  | The rate limit is exceeded. See [Rate Limits](#rate-limits).                                                                                                                                  |
| `500`  | An unexpected server error. The body has a `message` and no `error` code.                                                                                                                     |

## Rate Limits

NocoDB APIs have rate limits. The limits keep usage fair and performance good for all users. The default rate limit is **5 requests per second per user**. These limits are the same on all plans.

If you go above these limits, the API returns a 429 status code (Too Many Requests). Wait 30 seconds before you send more requests.

To keep good service performance, NocoDB can change these limits or add more rate tiers for pricing plans.

All API tokens of one user share the same limit. A `429` response has these headers:

| Header                  | Description                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------- |
| `Retry-After`           | How long to wait before you try again.                                                 |
| `X-RateLimit-Limit`     | The number of requests allowed in the current window. Sent only on API token requests. |
| `X-RateLimit-Remaining` | The number of requests left in the current window. Sent only on API token requests.    |
| `X-RateLimit-Reset`     | The time until the current window resets. Sent only on API token requests.             |

The body of a `429` response is a JSON string, for example `"ThrottlerException: Too Many Requests"`, not the error object above.

## Request IDs

Outside the Community Edition, every NocoDB API error response carries an `x-request-id` header. In the v3 APIs, the error body also has a `requestId` field with the same value. Send this id with a bug report. It names the exact call that failed.

To use an id of your own, set an `x-request-id` header on the request. NocoDB keeps your value when it is 100 characters or less and has only letters, digits, `_`, `.`, `:`, and `-`. For any other value, NocoDB uses an id of its own.

## Related

* [Authentication](/docs/apis/authentication)
* [Filtering](/docs/apis/filtering)

---

## Related pages

- [NocoDB API Quickstart](https://nocodb.com/docs/apis.md): Make your first NocoDB REST API request: create an API token, find your project and table IDs, then list the records of a table with the v3 Data API.
- [Authentication](https://nocodb.com/docs/apis/authentication.md): Authenticate NocoDB REST API requests with an API token, sent in the xc-token header or as a Bearer token, and explore endpoints in the Swagger UI.
- [Find IDs](https://nocodb.com/docs/apis/ids.md): Find the workspace, base, table, view, field, record, user and data source IDs that NocoDB REST API endpoints need, and the prefix of each ID.
- [Filtering](https://nocodb.com/docs/apis/filtering.md): Filter NocoDB REST API results with the where query parameter: comparison operators, date sub-operators, logical operators and the quoted v3 syntax.
- [Query Parameters](https://nocodb.com/docs/apis/query-parameters.md): Query parameters of NocoDB REST API list requests: where, limit, offset, sort, fields and shuffle, with their aliases, defaults and example values.
- [Pagination](https://nocodb.com/docs/apis/pagination.md): Page through NocoDB REST API results: follow the next and prev URLs of v3 record lists, and use limit, offset and pageInfo for the base list.
- [Upload Files](https://nocodb.com/docs/apis/upload-files.md): Upload local files to a NocoDB Attachment field with the REST API: code samples in JavaScript, Bash, TypeScript, Python, Ruby and Java, for one file or a batch.
- [Delete Records by ID](https://nocodb.com/docs/apis/delete-records.md): Delete NocoDB records, or unlink linked records, by sending the record ids in a records query parameter when a client or proxy removes the DELETE body.
