Errors
Every error comes back as { error: { code, message } } with a code from this list. The code is what your agent should branch on; the message is for a human, and where a platform gave us a reason it is that platform’s own words rather than something we invented.
Nothing here is charged for
Credits come off once, when a render succeeds. Every error on this page means no credits moved — including insufficient_credits, and including a render that failed halfway through the provider call. Retrying with the same idempotency_key returns the original job rather than starting a second one.
The codes
| Code | What it means | What to do |
|---|---|---|
unauthorized | No API key, or one that has been revoked. | Send your key as a bearer token. Regenerate it in Settings → API if you have lost it; keys are stored hashed and cannot be shown again. |
invalid_params | An argument is missing, the wrong type, or not an allowed value for that platform. | The message names the offending field and, for enums, what is accepted. Nothing was charged. |
insufficient_credits | The render would cost more credits than the account holds. | Ask for estimate_cost before a large job, choose a cheaper model, or top up. Nothing was charged. |
job_not_found | No job with that id on this account. | Check the id. Jobs are scoped to the account that created them — another account’s id reads as missing rather than forbidden. |
job_not_ready | You asked to publish a job that has not succeeded yet. | Poll get_job until status is "succeeded", then publish. Polling is free. |
account_not_found | No connected social account with that id. | Call list_accounts for current ids. A disconnected account stops appearing. |
connector_disconnected | The account is known but the platform has stopped accepting our token. | Reconnect it from Accounts. Platforms expire tokens on password changes and permission revocations. |
platform_rejected | The platform itself refused the post, and its reason is passed through. | Read the message — it is the platform’s own. Typical causes are media the platform will not accept, or an account not eligible for that post type. |
not_supported | The action exists but not for that platform. | Platforms differ in what they allow. The tool reference lists what applies where. |
schedule_not_found | No queued post with that id — usually already published, or cancelled. | list_schedules shows what is still queued. |
post_not_found | No post with that id on this account. | list_posts returns ids for what has gone out. |
source_not_found | No ingested source with that id. | Sources are created by create_source; check get_source_status while one is still processing. |
brand_not_found | A brand_id was passed that does not exist on this account. | list_brand_kits returns current ids. |
comment_not_found | The comment is gone or was never on your post. | Authors delete comments; re-read with list_comments. |
conversation_not_found | No conversation with that id. | list_conversations for current ids. |
message_not_found | No message with that id in that conversation. | list_messages for current ids. |
Why there is no generic failure code
An agent cannot act on “something went wrong”. Each code above corresponds to a different next step — retry, fix an argument, reconnect an account, wait — which is the only reason to have more than one.