| 400 | invalid_request | One or more required fields are missing or malformed. | Inspect the message field for the offending field. Validate inputs client-side before sending. |
| 400 | invalid_recurring_token | The recurring token is unknown, revoked, or expired. | Re-prompt the buyer for a new card. Do not retry the charge. |
| 401 | unauthorized | API key is missing, malformed, or invalid. | Verify the Authorization header is Bearer <secret_key> and the key is from the right brand. |
| 403 | forbidden | The API key does not have access to this resource. | Confirm the key has the required scopes in the merchant portal. |
| 404 | not_found | The purchase, client, or webhook does not exist. | Double-check the ID. Records in CHIP Collect are not deleted by default. |
| 409 | conflict | The operation is not valid for the resource’s current state. | Inspect the resource’s status field. For example, you cannot capture an already-captured purchase. |
| 422 | unprocessable_entity | The request is well-formed but semantically invalid. | Read the message field. Common cause: amount exceeds the remaining capturable balance. |
| 429 | rate_limited | Too many requests in a short window. | Back off and retry with jitter. Honor any Retry-After header if present. |
| 500 | internal_error | Something went wrong on CHIP’s side. | Safe to retry with idempotency. If it persists, contact support@chip-in.asia. |
| 502 | bad_gateway | Upstream provider (bank, card network) returned an error. | Do not retry immediately. Wait for the corresponding webhook before acting. |
| 503 | service_unavailable | Planned maintenance or temporary outage. | Retry with exponential backoff. Status page: https://status.chip-in.asia (if available). |