Error Codes
Reference for all Chirpie API error codes and how to handle them.
Error Response Format
All errors follow this format:
{
"error": {
"code": "error_code",
"message": "Human-readable description of what went wrong"
}
}Error Codes
| HTTP Status | Code | Description | What to Do |
|---|---|---|---|
400 | bad_request | Invalid request body, missing fields, or validation error | Check the message for specifics. Fix the request and retry. |
401 | unauthorized | Missing, invalid, expired, or revoked API key | Check your Authorization header format: Bearer chirpie_sk_... |
404 | not_found | Resource doesn't exist or belongs to another user | Verify the ID. Posts/accounts are scoped to your user. |
429 | rate_limited | Monthly quota or burst rate limit exceeded | Wait and retry, or upgrade your plan. |
500 | internal_error | Unexpected server error | Retry after a moment. If persistent, contact support. |
502 | upstream_error | Platform API returned an error | Often temporary. Scheduled posts auto-retry. For immediate posts, retry after a delay. |
Common Scenarios
"Invalid API key"
{ "error": { "code": "unauthorized", "message": "Invalid API key" } }The key doesn't match any active key in our database. It may have been revoked or mistyped.
"API key has been revoked"
{ "error": { "code": "unauthorized", "message": "API key has been revoked" } }This key was explicitly revoked. Create a new key from the dashboard or API.
"Monthly post limit reached"
{ "error": { "code": "rate_limited", "message": "Monthly post limit reached (50/50 used)..." } }You've hit your plan's monthly post quota. Upgrade your plan or wait for the next month.
"Account not found or not active"
{ "error": { "code": "not_found", "message": "Account not found or not active" } }The account_id doesn't exist, belongs to another user, or the credentials have expired. For OAuth-based accounts (X, LinkedIn, Threads, Mastodon, Instagram, Facebook, Reddit, Pinterest, TikTok, YouTube, Google Business Profile, Snapchat), re-authorize from the dashboard. For Bluesky, generate a new app password and reconnect. For Telegram, verify your bot token and chat ID.
X API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: X API error - Rate limit exceeded" } }X/Twitter rejected the request. Common causes: rate limits, suspended account, or content policy violation.
Bluesky API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Bluesky API error - InvalidToken" } }Bluesky rejected the request. Common causes: revoked app password, expired session, rate limits, or content policy violation. Generate a new app password and reconnect the account if the error persists.
Bluesky-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 300 characters for Bluesky" } }Bluesky has a 300-character limit. If your post exceeds this, shorten the text or use a thread.
{ "error": { "code": "bad_request", "message": "Video media is not supported on Bluesky" } }Bluesky does not support video uploads. Use images only (up to 4 per post).
LinkedIn API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: LinkedIn API error - Rate limit exceeded" } }LinkedIn rejected the request. Common causes: rate limits (100 posts/day per member), expired OAuth tokens, or content policy violation. Re-authorize via OAuth from the dashboard if the error persists.
LinkedIn-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 3000 characters for LinkedIn" } }LinkedIn has a 3,000-character limit. Shorten the text or use a thread (each item posts separately on LinkedIn).
{ "error": { "code": "bad_request", "message": "Video media is not supported on LinkedIn" } }LinkedIn posts are image-only. Use JPEG, PNG, or GIF (up to 4 per post, max 8MB each).
Threads API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Threads API error - Rate limit exceeded" } }Threads rejected the request. Common causes: rate limits (250 posts/24hr), expired Meta OAuth tokens, or content policy violation. Re-authorize via Meta OAuth from the dashboard if the error persists.
Threads-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 500 characters for Threads" } }Threads has a 500-character limit. Shorten the text or use a thread.
{ "error": { "code": "bad_request", "message": "Threads supports a maximum of 1 image per post" } }Threads supports only 1 image per post. Remove extra images from media_urls.
Mastodon API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Mastodon API error - Rate limit exceeded" } }Mastodon rejected the request. Common causes: rate limits (300 posts/3hr default), expired OAuth tokens, or content policy violation. Re-authorize via OAuth from the dashboard if the error persists.
Mastodon-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 500 characters for Mastodon" } }The Mastodon limit is 500 characters. Shorten the text or use a thread.
Instagram API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Instagram API error - Rate limit exceeded" } }Instagram rejected the request. Common causes: rate limits (50 posts/24hr), expired OAuth tokens, or content policy violation. Re-authorize via Instagram Login from the dashboard if the error persists.
Instagram-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 2200 characters for Instagram" } }Instagram has a 2,200-character limit for captions. Shorten the text.
{ "error": { "code": "bad_request", "message": "Instagram requires at least one image. Text-only posts are not supported." } }Instagram does not support text-only posts. You must include at least one image in media_urls.
{ "error": { "code": "bad_request", "message": "Instagram supports a maximum of 10 images per carousel post" } }Instagram supports up to 10 images per carousel post. Remove extra images from media_urls.
Facebook API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Facebook API error - Rate limit exceeded" } }Facebook rejected the request. Common causes: rate limits (4,800 API calls/24hr per page), content policy violation, or page permissions revoked. Facebook Page tokens do not expire, but if you revoke page permissions or the app is removed, re-authorize via Facebook Login from the dashboard.
Facebook-Specific Validation Errors
{ "error": { "code": "bad_request", "message": "Post exceeds maximum length of 63206 characters for Facebook" } }Facebook has a 63,206-character limit. Shorten the text.
Telegram API Errors
{ "error": { "code": "upstream_error", "message": "Failed to post: Telegram API error - Bad Request: chat not found" } }Telegram rejected the request. Common causes: invalid bot token, bot not added to channel/group as admin, invalid chat ID. Verify your bot token and chat ID in the dashboard. Telegram has a 4,096-character limit. No analytics available.