---
title: "1Post API error codes and how to fix each"
url: "https://get1post.com/docs/errors.md"
canonical_url: "https://get1post.com/docs/errors"
last_updated: "2026-10-26"
type: "reference"
summary: "Every error code the 1Post API returns, what it means and what to do: one envelope with a stable code, a message, a fix and a request id."
related: ["https://get1post.com/docs/api.md", "https://get1post.com/docs/api-rate-limits.md", "https://get1post.com/docs/reconnect-and-failures.md"]
---

# 1Post API error codes and how to fix each

Every error code the 1Post API returns, what it means and what to do: one envelope with a stable code, a message, a fix and a request id.

Every error has the same envelope: a stable code, a message, a fix that says what to change, a retryable flag, a docs link and a request id. Match on the code, not the message. Retryable says whether sending the same request again can work. Quote the request id when you write to us.

## The envelope

The body is {"error":{"code","message","fix","docs_url","retryable","request_id"}}. The code is safe to match on; the message and fix are for people.

## Codes

| Code | Usual status | What it means |
| --- | --- | --- |
| unauthorized | 401 | The API key is missing, malformed, revoked or unknown. |
| forbidden | 403 | This API key is not allowed to make this request. |
| insufficient_credits | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| rate_limited | 429 | Too many requests for this API key. |
| invalid_input | 400 | The request input is invalid. |
| unknown_product | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| method_not_allowed | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| payload_too_large | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| provider_unavailable | 503 | The data source for this product is unavailable right now. |
| internal_error | 500 | An unexpected error occurred. |
| not_found | 404 | Nothing exists at this address. |
| conflict | 409 | The request conflicts with the current state of the resource. |
| signature_invalid | 400 | The request signature is missing or does not match. |
| plan_limit | 402 | The current plan does not allow this. |
| subscription_required | 402 | This needs an active subscription. |
| trial_expired | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| account_limit | 402 | The plan allows no more connected accounts. |
| queue_limit | 402 | The plan allows no more queued scheduled posts. |
| allowance_used | 402 | A monthly allowance of the plan is used up. |
| media_storage_full | 503 | Media storage is full for now. |
| daily_cap | 409 | The account reached its daily posting limit for that day. |
| horizon | 400 | The time is further ahead than the plan schedules. |
| invalid_for_platform | 422 | The post breaks a rule of the destination. |
| reconnect_needed | 409 | The account must be connected again before it can post. |
| no_free_slot | 409 | There is no free weekly slot for these accounts. |
| media_not_ready | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |
| outcome_unknown | 409 | The destination may already have the post, so it is not retried. |
| feature_off | varies | Returned when the request breaks this rule; the message and fix fields say what to change. |

## Questions

**Which errors should I retry?**

Those with retryable true, such as rate_limited and internal_error, after the wait in Retry-After. Fix the others first.

## Related

- [1Post API reference: every route, key and role](https://get1post.com/docs/api.md)
- [Rate limits and request size: 1Post docs](https://get1post.com/docs/api-rate-limits.md)
- [Failures, retries and unknown outcomes: 1Post docs](https://get1post.com/docs/reconnect-and-failures.md)
