Rutba CRM

Errors and limits

Every status code the Rutba CRM REST API returns, the shape of its errors, and the limits on keys, requests and data.

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:

  1. The per-address limit of 600 requests a minute for the endpoint. Over it gets 429 Too Many Attempts.
  2. HTTPS. Plain HTTP gets 403 HTTPS is required.
  3. The key. A missing, wrong or revoked key, or one whose creator or company is no longer active, gets 401 Invalid API key.
  4. The plan and the creator's custom role. Without API access the answer is 403 API access is not in this plan.
  5. For POST and DELETE: a Read only key gets 403 This key is read only.
  6. For POST and DELETE: a body that is not declared as JSON gets 415 Send JSON.
  7. The key's limit of 120 requests a minute. Over it gets 429 Too many requests.
  8. 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