Error Reference

All Connect API errors follow RFC 9457 Problem Detail format. Use the type field to programmatically handle errors in your integration.

Error Format

json
{
  "type": "VALIDATION_ERROR",
  "title": "Validation failed",
  "status": 422,
  "detail": "Field 'name' is required.",
  "instance": "/connect/v1/supplier/catalog/products"
}
FieldDescription
typeMachine-readable error code. Use this in your switch/case logic.
titleShort human-readable summary.
statusHTTP status code.
detailDetailed explanation with specifics (e.g., which field failed).
instanceThe API endpoint that produced the error.

HTTP Status Codes

CodeMeaningAction
200OKRequest succeeded.
201CreatedResource created successfully.
400Bad RequestCheck request body and parameters.
401UnauthorizedAPI key is missing, invalid, or expired.
403ForbiddenKey lacks required scope for this endpoint.
404Not FoundResource does not exist or belongs to another tenant.
405Method Not AllowedWrong HTTP method for this path. Check the endpoint docs.
409ConflictVersion / lock / duplicate conflict (e.g. ORDER_VERSION_CONFLICT, CONFLICT_OPTIMISTIC_LOCK, DATA_INTEGRITY_VIOLATION, IDEMPOTENCY_KEY_REUSED). Re-read and retry. Note: STOCK_INSUFFICIENT is 422, not 409.
410GoneResource was permanently removed (e.g. an erased Studio instance). Do not retry.
413Payload Too LargeRequest body exceeds 2 MB. Split into smaller batches.
415Unsupported Media TypeSend Content-Type: application/json on JSON endpoints.
422Unprocessable EntityValidation or business-rule error (incl. STOCK_INSUFFICIENT). Check the detail field.
429Too Many RequestsRate limited. Check X-RateLimit-Reset header.
500Internal Server ErrorServer error. Retry with exponential backoff.

Error Types

The following error types may appear in the type field:

TypeStatusDescription
VALIDATION_ERROR422Request body or parameters failed validation.
MALFORMED_REQUEST400Request body is not valid JSON or cannot be parsed.
MISSING_PARAMETER400A required query or path parameter is missing.
TYPE_MISMATCH400A parameter has the wrong type (e.g. a non-numeric order id).
INVALID_ARGUMENT400An argument value is invalid for this endpoint.
UNAUTHORIZED401No valid credentials — the API key or token is missing, malformed, revoked, or expired.
FORBIDDEN403Credential is valid but lacks the required scope or side for this endpoint.
NOT_FOUND404The requested resource does not exist or belongs to another tenant. Domain lookups use the <ENTITY>_NOT_FOUND convention (ORDER_NOT_FOUND, PRODUCT_NOT_FOUND, ...).
METHOD_NOT_ALLOWED405Wrong HTTP method for this path.
UNSUPPORTED_MEDIA_TYPE415Content-Type is not application/json on a JSON endpoint.
PAYLOAD_TOO_LARGE413Request body exceeds the 2 MB limit. Split into smaller batches.
STOCK_INSUFFICIENT422Not enough stock to fulfill the request.
ORDER_CANNOT_CANCEL422The order has moved past PREPARING — cancellation is no longer a valid transition.
MEDIA_TYPE_NOT_SUPPORTED422Image content type is not image/jpeg, image/png, or image/webp.
MEDIA_TOO_LARGE422Image exceeds 5 MB. Resize before uploading.
MEDIA_HANDLE_INVALID422The upload handle does not belong to this product, or the digest does not match the one it was issued for. Request a new upload URL.
INVALID_LINK_CODE422The Studio link code is invalid or expired.
INSTANCE_ALREADY_LINKED409This Studio instance is already linked to a tenant.
INSTANCE_RECONCILE_REQUIRED409The Studio instance state diverged and must reconcile before continuing.
INSTANCE_GONE410The Studio installation was removed by an administrator. Contact support to restore it.
AMENDMENT_IN_FLIGHT422Order has a pending buyer amendment. Wait for the buyer to accept or reject before dispatching, cancelling, or amending again.
CREDIT_LIMIT_EXCEEDED422Buyer's order would exceed their credit limit with the supplier (Q5b).
CREDIT_HOLD422Buyer's credit account is on hold by the supplier (Q5b).
DUPLICATE_EXTERNAL_ID422A product with this externalId already exists (use upsert).
PRICE_NOT_SUPPORTED_VIA_CONNECT422The catalog payload carried unitPrice or currency. A product has no single price here — pricing is per buyer through price lists, managed in the supplier portal. Remove both fields.
ORDER_VERSION_CONFLICT409The If-Match token no longer matches the order: it changed since you read it. Re-read the order and decide again.
CONFLICT_OPTIMISTIC_LOCK409Resource was modified by another request between read and write. Reload and retry.
DATA_INTEGRITY_VIOLATION409Request conflicts with existing data (unique constraint, FK, etc.). It may already exist.
IDEMPOTENCY_KEY_REUSED409This Idempotency-Key was already used with a different request body. Retrying the identical request replays the stored response; a different body needs a fresh key.
RATE_LIMIT_EXCEEDED429Too many requests. Slow down and retry after the reset window.
INTERNAL_ERROR500Unexpected server error. Contact support if persistent.

Retry Strategy

On receiving HTTP 429, wait until the time specified in X-RateLimit-Reset (Unix epoch seconds). Add random jitter (0-1 second) to prevent thundering herd. For 5xx errors, use exponential backoff starting at 1 second.

Rate Limiting

When rate limited, the response includes headers to help you handle the limit:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window.
X-RateLimit-RemainingRequests remaining in the current window.
X-RateLimit-ResetUnix timestamp when the window resets.
Retry-AfterSeconds to wait before retrying (only on 429 responses).
response
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711015260
Retry-After: 45
Content-Type: application/problem+json

{
  "type": "RATE_LIMIT_EXCEEDED",
  "title": "Rate limit exceeded",
  "status": 429,
  "detail": "Rate limit reached. Retry after 45 seconds.",
  "instance": "/connect/v1/supplier/catalog/products"
}

Error Handling Best Practices

  • 1.Always check the type field — use it as your primary error discriminator, not the HTTP status code alone.
  • 2.Implement exponential backoff for 429 and 5xx errors. Start with 1 second and double on each retry.
  • 3.Use idempotency keys on all mutating requests so retries are safe.
  • 4.Log the full error response including the instance field for debugging.
  • 5.Never retry 4xx errors (except 429) without changing the request. They indicate a client-side issue.