Reference
Errors
Status codes, error codes and what to do about each.
Every error has a stable code to branch on and a message in plain words you can show a person.
{ "error": { "code": "seat_limit_reached",
"message": "This seat has reached its message limit for now. Try again after 14:00." } }Status codes
| Status | Meaning | What to do |
|---|---|---|
400 | Something in the request is wrong. The message names it. | Fix the request. Do not retry as is. |
401 | Missing, invalid or revoked key. | Check the Authorization header and the key. |
403 | The key cannot do this: a read key on a write, or no send permission on a send. | Use a key with the right permission. |
404 | Not found, or not in your workspace. | Check the id. Ids from another workspace look exactly like this. |
409 | It cannot change from where it is: a finished campaign, a draft that already went out, someone already booked, the same message twice in a day. | Read the current state and decide. |
422 | A message failed a check and was not sent. | Change the text or the recipient. |
429 | Too many requests, or the seat is out of sends for now. | Wait for Retry-After or the time in the message. |
5xx | Our side. | Retry with backoff. Sends with an Idempotency-Key are safe to retry. |
Codes you will see most
| code | Meaning |
|---|---|
invalid_api_key | The key is missing, wrong or revoked. |
read_only_key | A read key was used on a write. |
send_not_allowed | This key cannot send messages. Make one with Read + write + send messages. |
not_found | No such thing in your workspace. |
invalid_input / invalid_json | The body is not what the endpoint expects. |
duplicate_message | This exact message already went to this person in the last day. |
already_booked | This person has a call booked, so the assistant will not message them. |
blacklisted / opted_out | The person is on your blocklist or asked to stop. |
text_blocked / link_blocked | The text failed a safety check, or has a link that is not one of your workspace's own. |
seat_paced | The seat sent a few seconds ago. Retry shortly. |
seat_limit_reached | The seat is out of sends for now. |
draft_not_pending | The draft already went out or was skipped. |
url_test_failed | A webhook URL did not answer the test with a 2xx. |
Errors never contain internal details or the names of the services we use. If a LinkedIn seat needs attention, the message says so in Gelee's words, for example that the seat needs to be reconnected.
Two older endpoints, /analytics/daily and /api/webhooks/conversions, and 429 answers return a plain { "error": "…" } string. Read error defensively.