This page lists what the REST API answers when something is wrong, in the order the checks run, and every limit that applies to keys and requests. Use it to decide which errors to retry and which to fix.
Error shape
Every error is JSON with a human-readable message:
{
"message": "Invalid API key."
}
Validation errors add an errors object. Each key is a field name and each value is a list of messages:
{
"message": "The Name field is required.",
"errors": {
"name": ["The Name field is required."]
}
}
Messages are in English and may change wording. Decide what to do from the status code and the keys of errors, not from the message text.
Order of checks
Each request is checked in this order, and the first failure answers:
- The per-address limit of 600 requests a minute for the endpoint. Over it gets
429 Too Many Attempts. - HTTPS. Plain HTTP gets
403 HTTPS is required. - The key. A missing, wrong or revoked key, or one whose creator or company is no longer active, gets
401 Invalid API key. - The plan and the creator's custom role. Without API access the answer is
403 API access is not in this plan. - For
POSTandDELETE: a Read only key gets403 This key is read only. - For
POSTandDELETE: a body that is not declared as JSON gets415 Send JSON. - The key's limit of 120 requests a minute. Over it gets
429 Too many requests. - The endpoint itself: role, validation and records.
Status codes
| Status | Meaning | What to do |
|---|---|---|
200 |
Success | |
201 |
A record was created | Store the returned id |
401 |
The key is not valid | Do not retry. Check the key, or create a new one |
403 |
HTTPS missing, the plan lacks the feature, the key is read only, or the creator's role does not allow the action (This action is unauthorized.) |
Do not retry. Fix the key, role or plan |
404 |
Not found. The path does not exist, the ID is not a UUID, or the record is not in this company. Erased and merged contacts also answer 404 |
Do not retry. Look the record up again |
405 |
The method is not supported on this path | Fix the request |
409 |
Possible duplicate contact, with matches |
Use the existing contact, or resend with confirm_duplicate |
415 |
POST or DELETE without Content-Type: application/json |
Add the header |
422 |
Invalid data. Usually with errors. A bad search, page, contact ID or stage ID answers 422 with no errors |
Fix the data. Retrying the same body fails again |
429 |
Rate limit reached | Wait for the next minute, then retry |
500 |
Server Error. Something failed on our side |
Retry later with a pause between attempts |
Retrying safely
Retry only 429 and 500, and errors where no response arrived. Wait before each retry and make the wait longer each time. Remember that creating a deal or adding a note twice creates two records, so check before you retry those. See Idempotency.
Limits
| Limit | Value |
|---|---|
| Active keys per company | 10 |
| Requests per key | 120 a minute, counted from the start of each clock minute |
| Requests per sending address | 600 a minute for each endpoint |
| Contacts per page | 25 |
Search text q |
120 characters |
| Pages | 1 to 99999 |
| Contact name | 160 characters |
| Note | 5000 characters |
| Deal title | 160 characters |
| Pipelines and stages listed | 20 pipelines, 12 stages each |
| Orders listed for a contact | The 10 newest |
| Tags listed for a contact | 20 |
| Duplicate matches returned | 5 |
| Ad spend rows per request | 1000 |
| Ad spend days | Today and the 399 days before |
| Webhook endpoints per company | 5 |
Your plan may also limit how many contacts the company can hold. When that limit is reached, creating a contact answers 422 with the error under limit.
Troubleshooting
| Symptom | Likely cause |
|---|---|
Every request answers 401, though the key is right |
The person who created the key was suspended or removed, or the company was suspended |
Reads work but writes answer 403 |
The key is Read only, or its creator is now a viewer |
POST /hooks or POST /ad-spend answers 403 This action is unauthorized. while other writes work |
The key's creator is a member. These need an owner or administrator |
POST /ad-spend answers 403 Campaign returns are not allowed for this role. |
A custom role blocks Campaign returns for the key's creator |
DELETE /hooks/HOOK_ID answers 415 |
Add Content-Type: application/json, even with no body |
429 long before 120 requests |
Several systems share one key. Give each its own key |
Last updated 2026-11-08