Errors
The error envelope, HTTP statuses and the most common error codes.
Error envelope
Every Partner API error has the same shape. Branch on code, show message to humans.
{
"error": {
"message": "No such store for this seller.",
"code": "STORE_NOT_FOUND"
}
}Validation errors add details, one entry per field (paths are dot-joined):
{
"error": {
"message": "Validation failed",
"code": "VALIDATION_ERROR",
"details": [
{
"field": "lines.0.lineTotal",
"message": "Amount must be a decimal string in major units, e.g. \"299.00\""
}
]
}
}Scope errors add required. The OAuth token and revoke endpoints use the OAuth shape { "error", "error_description" } instead — see OAuth errors.
HTTP statuses
| Status | Meaning | What to do |
|---|---|---|
| 200 / 201 / 204 | Success (201 created, 204 no content). | — |
| 400 | Malformed request (VALIDATION_ERROR). | Fix the request; do not retry as is. |
| 401 | INVALID_TOKEN: missing, expired or revoked token; app deactivated; seller account not active or deactivated. | Refresh once; if it still fails, the seller must reconnect. |
| 403 | INSUFFICIENT_SCOPE (also after a scope was removed from your app), COUNTRY_NOT_ALLOWED, COD_DROP_ACCESS_CLOSED, COD_DROP_CATALOG_NOT_ENABLED, and business refusals (RESELLER_BLOCKED…). | Do not retry. |
| 404 | NOT_FOUND / PRODUCT_NOT_FOUND / ADOPTION_NOT_FOUND / NOT_ADOPTED: not found for this seller and app. | Do not retry. |
| 409 | Conflict (SKU_CONFLICT, UNIQUE_CONSTRAINT, AMBIGUOUS_PRODUCT_REFERENCE); on the sandbox, a refused test step (ILLEGAL_TRANSITION, SANDBOX_NO_STOCK…). | Change the input. |
| 422 | Business rule refused the request (see each endpoint). | Do not retry as is. |
| 429 | RATE_LIMITED. | Back off, see Rate limits. |
| 500 / 504 | INTERNAL_ERROR, DB_TIMEOUT. | Retry with backoff. POST /orders and adoptions are safe to retry. |
| 503 | SANDBOX_SYSTEM_USER_MISSING (sandbox test helper only). | Tell ColiSwift. |
Common codes
| Code | Status | Where |
|---|---|---|
INVALID_TOKEN | 401 | Any call |
INSUFFICIENT_SCOPE | 403 | Any call |
VALIDATION_ERROR | 400 | Any write, list queries |
RATE_LIMITED | 429 | Any call |
COUNTRY_NOT_ALLOWED | 403 | country filters, POST /orders, COD Drop catalogue |
NOT_FOUND | 404 | Orders, products |
STORE_NOT_FOUND | 422 | POST /orders |
PRODUCT_NOT_FOUND | 404 | POST /orders, COD Drop |
LEAD_VARIANT_REQUIRED · INVALID_VARIANT · PRODUCT_INACTIVE · PRODUCT_NOT_IN_LEAD_COUNTRY | 422 | POST /orders |
MIXED_SALE_TYPE · COD_DROP_PACK_NOT_SUPPORTED | 422 | POST /orders |
NOT_OWNED | 422 | PUT /products/{id} on an adopted product |
REFERENCE_EXISTS | 409 | POST/PUT /products |
PRODUCT_COUNTRY_NOT_ALLOWED | 422 | POST/PUT /products |
SALE_BELOW_CESSION · COUNTRY_NOT_OPEN · SKU_CONFLICT · CANNOT_ADOPT_OWN · NOT_COD_DROP | 422 / 409 | COD Drop adoptions |
ADOPTION_NOT_FOUND · NOT_ADOPTED | 404 | PUT / DELETE /cod-drop/adoptions/{productId} |
COD_DROP_ACCESS_CLOSED | 403 | Every /cod-drop/* endpoint, when the seller’s COD Drop access is closed (details) |
COD_DROP_CATALOG_NOT_ENABLED | 403 | GET /cod-drop/catalog, GET /cod-drop/catalog/{productId}, when ColiSwift has not enabled the catalogue synchronisation for your app |
Sandbox test helper codes
Answered by POST /test/orders/{externalId}/advance, which exists on the sandbox only — see Advance an order.
| Code | Status | Meaning |
|---|---|---|
NOT_FOUND | 404 | No such order created by your app for this seller (also: the route on production). |
ILLEGAL_TRANSITION | 409 | Step not allowed from the order’s stage; the message lists the allowed ones. |
SANDBOX_NO_STOCK | 409 | No warehouse holds stock for every line. |
SANDBOX_NO_ZONE | 409 | No active city and neighbourhood for the chosen warehouse. |
ORDER_IN_CALL · ORDER_CHANGED | 409 | An agent is calling the customer; the order changed during the call (retry). |
COURIER_MANAGED | 409 | Orders of this country are handled by a courier partner. |
LEAD_ALREADY_INVOICED | 409 | The order is on an invoice; its delivery status cannot change. |
SANDBOX_SYSTEM_USER_MISSING | 503 | Sandbox misconfigured; tell ColiSwift. |
Codes shown in ColiSwift screens
Not Partner API answers, but codes you may meet while testing:
| Code | Status | Where |
|---|---|---|
OAUTH_APP_PRIVATE | 403 | Consent page: a sandbox developer app opened by a seller other than its creator (consent errors). |
GRANT_REVOKED | 409 | « Replay » of a webhook delivery to an app the seller is no longer connected to (replay). |
EVENT_NOT_GRANTED | 409 | « Replay » of a delivery the app may no longer receive: an event type its scopes no longer entitle, or a stored event whose body holds a field the app may not see. |
COD_DROP_CLOSED | 409 | « Replay » of a cod_drop.catalog_changed delivery once the app’s catalogue synchronisation or the seller’s COD Drop access is closed. |
SCOPE_NOT_SELF_SERVICE | 400 | « Applications développeur »: the restricted scopes orders:details and products:details are enabled by ColiSwift only, on request. |
DEVELOPER_APP_LIMIT | 409 | « Applications développeur »: already 5 active apps. |
APP_DEACTIVATED | 409 | « Applications développeur »: editing, rotating or pinging a deleted app. |
NO_WEBHOOK_URL | 400 | « Applications développeur »: test event on an app without a webhook URL. |
TEST_EVENT_RATE_LIMITED | 429 | « Applications développeur »: more than one test event in 10 seconds for an app, or 30 in an hour for a seller. |

