New You can now talk to your Gelee agent from Claude, ChatGPT or Cursor through our MCP. Read the docs →

Reference

Errors

Status codes, error codes and what to do about each.

Last updated 22 October 2026

Every error has a stable code to branch on and a message in plain words you can show a person.

Error
{ "error": { "code": "seat_limit_reached",
             "message": "This seat has reached its message limit for now. Try again after 14:00." } }

Status codes

StatusMeaningWhat to do
400Something in the request is wrong. The message names it.Fix the request. Do not retry as is.
401Missing, invalid or revoked key.Check the Authorization header and the key.
403The key cannot do this: a read key on a write, or no send permission on a send.Use a key with the right permission.
404Not found, or not in your workspace.Check the id. Ids from another workspace look exactly like this.
409It 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.
422A message failed a check and was not sent.Change the text or the recipient.
429Too many requests, or the seat is out of sends for now.Wait for Retry-After or the time in the message.
5xxOur side.Retry with backoff. Sends with an Idempotency-Key are safe to retry.

Codes you will see most

codeMeaning
invalid_api_keyThe key is missing, wrong or revoked.
read_only_keyA read key was used on a write.
send_not_allowedThis key cannot send messages. Make one with Read + write + send messages.
not_foundNo such thing in your workspace.
invalid_input / invalid_jsonThe body is not what the endpoint expects.
duplicate_messageThis exact message already went to this person in the last day.
already_bookedThis person has a call booked, so the assistant will not message them.
blacklisted / opted_outThe person is on your blocklist or asked to stop.
text_blocked / link_blockedThe text failed a safety check, or has a link that is not one of your workspace's own.
seat_pacedThe seat sent a few seconds ago. Retry shortly.
seat_limit_reachedThe seat is out of sends for now.
draft_not_pendingThe draft already went out or was skipped.
url_test_failedA 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.