# API error codes

Source: https://checkslip.com/en/docs/errors

When a call fails, the response is a Problem Details object (RFC 9457) with a code and a link to that code's page.

| Code | HTTP status | Meaning |
| --- | --- | --- |
| [`IDEMPOTENCY_KEY_INVALID`](https://checkslip.com/en/problems/idempotency-key-invalid) | `400` | Invalid Idempotency-Key |
| [`IDEMPOTENCY_KEY_REQUIRED`](https://checkslip.com/en/problems/idempotency-key-required) | `400` | Idempotency-Key required |
| [`INVALID_CURSOR`](https://checkslip.com/en/problems/invalid-cursor) | `400` | Invalid page cursor |
| [`VALIDATION_FAILED`](https://checkslip.com/en/problems/validation-failed) | `400` | The request is invalid |
| [`INVALID_CREDENTIALS`](https://checkslip.com/en/problems/invalid-credentials) | `401` | Wrong e-mail or password |
| [`OAUTH_REJECTED`](https://checkslip.com/en/problems/oauth-rejected) | `401` | Sign-in with that account failed |
| [`PASSKEY_REJECTED`](https://checkslip.com/en/problems/passkey-rejected) | `401` | Passkey not accepted |
| [`TOKEN_EXPIRED`](https://checkslip.com/en/problems/token-expired) | `401` | Link has expired |
| [`TOKEN_INVALID`](https://checkslip.com/en/problems/token-invalid) | `401` | Link is not valid |
| [`TOKEN_USED`](https://checkslip.com/en/problems/token-used) | `401` | Link already used |
| [`UNAUTHENTICATED`](https://checkslip.com/en/problems/unauthenticated) | `401` | Authentication failed |
| [`CREDIT_EXPIRED`](https://checkslip.com/en/problems/credit-expired) | `402` | Credit expired |
| [`NO_CREDIT`](https://checkslip.com/en/problems/no-credit) | `402` | Not enough credit |
| [`ACCOUNT_SUSPENDED`](https://checkslip.com/en/problems/account-suspended) | `403` | Account suspended |
| [`FORBIDDEN`](https://checkslip.com/en/problems/forbidden) | `403` | Not allowed |
| [`INVITE_EMAIL_MISMATCH`](https://checkslip.com/en/problems/invite-email-mismatch) | `403` | This invite is for a different email |
| [`KEY_NOT_YOURS`](https://checkslip.com/en/problems/key-not-yours) | `403` | You cannot change or revoke an API key someone else created |
| [`NOT_VIA_API_KEY`](https://checkslip.com/en/problems/not-via-api-key) | `403` | Not available with an API key |
| [`ORIGIN_NOT_ALLOWED`](https://checkslip.com/en/problems/origin-not-allowed) | `403` | This request must come from the Checkslip web app |
| [`PASSWORD_INCORRECT`](https://checkslip.com/en/problems/password-incorrect) | `403` | Current password is wrong |
| [`PHONE_NOT_VERIFIED`](https://checkslip.com/en/problems/phone-not-verified) | `403` | Mobile number not confirmed |
| [`ROLE_NOT_ALLOWED`](https://checkslip.com/en/problems/role-not-allowed) | `403` | Your role in this team cannot do this |
| [`STEP_UP_REQUIRED`](https://checkslip.com/en/problems/step-up-required) | `403` | Re-authentication required |
| [`TWO_STEP_REQUIRED`](https://checkslip.com/en/problems/two-step-required) | `403` | Two-step code required |
| [`ATTACHMENT_NOT_FOUND`](https://checkslip.com/en/problems/attachment-not-found) | `404` | Attachment not found |
| [`DELIVERY_NOT_FOUND`](https://checkslip.com/en/problems/delivery-not-found) | `404` | Delivery not found |
| [`ENDPOINT_NOT_FOUND`](https://checkslip.com/en/problems/endpoint-not-found) | `404` | Endpoint not found |
| [`KEY_NOT_FOUND`](https://checkslip.com/en/problems/key-not-found) | `404` | API key not found |
| [`NOT_FOUND`](https://checkslip.com/en/problems/not-found) | `404` | Not found |
| [`OAUTH_NOT_LINKED`](https://checkslip.com/en/problems/oauth-not-linked) | `404` | That account is not connected to Checkslip |
| [`ORDER_NOT_FOUND`](https://checkslip.com/en/problems/order-not-found) | `404` | Order not found |
| [`PACKAGE_NOT_FOUND`](https://checkslip.com/en/problems/package-not-found) | `404` | Package not found |
| [`RECEIPT_NOT_FOUND`](https://checkslip.com/en/problems/receipt-not-found) | `404` | Receipt not found |
| [`TICKET_NOT_FOUND`](https://checkslip.com/en/problems/ticket-not-found) | `404` | Ticket not found |
| [`ALREADY_MEMBER`](https://checkslip.com/en/problems/already-member) | `409` | This email is already in the team |
| [`ATTACHMENT_LIMIT_REACHED`](https://checkslip.com/en/problems/attachment-limit-reached) | `409` | Attachment limit reached |
| [`BILLING_INFO_REQUIRED`](https://checkslip.com/en/problems/billing-info-required) | `409` | Receipt details missing |
| [`DELETE_BALANCE_CHANGED`](https://checkslip.com/en/problems/delete-balance-changed) | `409` | Credit balance changed before deletion |
| [`ENDPOINT_DISABLED`](https://checkslip.com/en/problems/endpoint-disabled) | `409` | Endpoint is disabled |
| [`ENDPOINT_LIMIT_REACHED`](https://checkslip.com/en/problems/endpoint-limit-reached) | `409` | Endpoint limit reached |
| [`EXPORT_NOT_READY`](https://checkslip.com/en/problems/export-not-ready) | `409` | Export not ready |
| [`HOME_WORKSPACE`](https://checkslip.com/en/problems/home-workspace) | `409` | A first team cannot be deleted on its own |
| [`IDEMPOTENCY_IN_FLIGHT`](https://checkslip.com/en/problems/idempotency-in-flight) | `409` | Original request still in progress |
| [`KEY_LIMIT_REACHED`](https://checkslip.com/en/problems/key-limit-reached) | `409` | Active API key limit reached |
| [`KEY_NOT_ACTIVE`](https://checkslip.com/en/problems/key-not-active) | `409` | This API key is no longer active |
| [`LAST_OWNER`](https://checkslip.com/en/problems/last-owner) | `409` | An account always needs an owner |
| [`LAST_SIGN_IN_METHOD`](https://checkslip.com/en/problems/last-sign-in-method) | `409` | An account always needs a way to sign in |
| [`OAUTH_ALREADY_LINKED`](https://checkslip.com/en/problems/oauth-already-linked) | `409` | An account from this provider is already connected |
| [`OAUTH_EMAIL_IN_USE`](https://checkslip.com/en/problems/oauth-email-in-use) | `409` | This email already has a Checkslip account |
| [`OAUTH_IN_USE`](https://checkslip.com/en/problems/oauth-in-use) | `409` | That account is connected to another user |
| [`ORDER_ALREADY_PAID`](https://checkslip.com/en/problems/order-already-paid) | `409` | This order is already paid |
| [`ORDER_CANCELLED`](https://checkslip.com/en/problems/order-cancelled) | `409` | This order was cancelled |
| [`ORDER_PENDING`](https://checkslip.com/en/problems/order-pending) | `409` | An order is waiting for payment |
| [`OWNS_OTHER_WORKSPACES`](https://checkslip.com/en/problems/owns-other-workspaces) | `409` | Still the owner of another team |
| [`PASSWORD_NOT_SET`](https://checkslip.com/en/problems/password-not-set) | `409` | This account has no password yet |
| [`PASSWORD_SET`](https://checkslip.com/en/problems/password-set) | `409` | This account already has a password |
| [`PAYLOAD_INTEGRITY_MISMATCH`](https://checkslip.com/en/problems/payload-integrity-mismatch) | `409` | Cannot resend: the original message was not kept |
| [`PHONE_TAKEN`](https://checkslip.com/en/problems/phone-taken) | `409` | Phone number in use by another account |
| [`ROTATION_IN_PROGRESS`](https://checkslip.com/en/problems/rotation-in-progress) | `409` | Secret rotation in progress |
| [`STALE_WRITE`](https://checkslip.com/en/problems/stale-write) | `409` | Changed since you loaded it |
| [`TICKET_CLOSED`](https://checkslip.com/en/problems/ticket-closed) | `409` | Ticket is closed |
| [`TICKET_LIMIT_REACHED`](https://checkslip.com/en/problems/ticket-limit-reached) | `409` | Too many open tickets |
| [`TICKET_NOT_CLOSED`](https://checkslip.com/en/problems/ticket-not-closed) | `409` | Ticket is not closed |
| [`TICKET_REOPEN_EXPIRED`](https://checkslip.com/en/problems/ticket-reopen-expired) | `409` | Reopen window has passed |
| [`TICKET_VERSION_CONFLICT`](https://checkslip.com/en/problems/ticket-version-conflict) | `409` | Ticket was changed |
| [`TOO_MANY_INVITES`](https://checkslip.com/en/problems/too-many-invites) | `409` | Too many invites awaiting a reply |
| [`TOO_MANY_WORKSPACES`](https://checkslip.com/en/problems/too-many-workspaces) | `409` | Already own the maximum number of teams |
| [`TWO_STEP_ALREADY_ON`](https://checkslip.com/en/problems/two-step-already-on) | `409` | Two-step sign-in is already on |
| [`TWO_STEP_NOT_SET_UP`](https://checkslip.com/en/problems/two-step-not-set-up) | `409` | Two-step sign-in not set up yet |
| [`ATTACHMENT_EXPIRED`](https://checkslip.com/en/problems/attachment-expired) | `410` | Attachment removed |
| [`ENDPOINT_DELETED`](https://checkslip.com/en/problems/endpoint-deleted) | `410` | Endpoint was deleted |
| [`EXPORT_EXPIRED`](https://checkslip.com/en/problems/export-expired) | `410` | Export expired |
| [`OTP_EXPIRED`](https://checkslip.com/en/problems/otp-expired) | `410` | Code no longer valid |
| [`PAYLOAD_EXPIRED`](https://checkslip.com/en/problems/payload-expired) | `410` | Payload no longer available |
| [`ATTACHMENT_TOO_LARGE`](https://checkslip.com/en/problems/attachment-too-large) | `413` | File is too large to attach |
| [`PAYLOAD_TOO_LARGE`](https://checkslip.com/en/problems/payload-too-large) | `413` | Payload too large |
| [`ATTACHMENT_TYPE_NOT_ALLOWED`](https://checkslip.com/en/problems/attachment-type-not-allowed) | `415` | This file type cannot be attached |
| [`UNSUPPORTED_MEDIA_TYPE`](https://checkslip.com/en/problems/unsupported-media-type) | `415` | Unsupported media type |
| [`MISDIRECTED_REQUEST`](https://checkslip.com/en/problems/misdirected-request) | `421` | Request sent to the wrong host |
| [`ATTACHMENT_INFECTED`](https://checkslip.com/en/problems/attachment-infected) | `422` | File failed the virus scan |
| [`ATTACHMENT_UNREADABLE`](https://checkslip.com/en/problems/attachment-unreadable) | `422` | This image could not be read |
| [`AVATAR_REFUSED`](https://checkslip.com/en/problems/avatar-refused) | `422` | This picture cannot be used as a profile picture |
| [`CAPTCHA_FAILED`](https://checkslip.com/en/problems/captcha-failed) | `422` | Bot check failed |
| [`DESTINATION_BLOCKED`](https://checkslip.com/en/problems/destination-blocked) | `422` | Destination not allowed |
| [`DNS_UNRESOLVABLE`](https://checkslip.com/en/problems/dns-unresolvable) | `422` | Host could not be resolved |
| [`IDEMPOTENCY_KEY_REUSED`](https://checkslip.com/en/problems/idempotency-key-reused) | `422` | Idempotency-Key reused for a different request |
| [`INVALID_FILE`](https://checkslip.com/en/problems/invalid-file) | `422` | File cannot be read |
| [`INVALID_QR`](https://checkslip.com/en/problems/invalid-qr) | `422` | Invalid QR |
| [`MULTIPLE_SLIP_QR`](https://checkslip.com/en/problems/multiple-slip-qr) | `422` | More than one slip QR in one image |
| [`OTP_INVALID`](https://checkslip.com/en/problems/otp-invalid) | `422` | Wrong code |
| [`PACKAGE_NOT_FOR_SALE`](https://checkslip.com/en/problems/package-not-for-sale) | `422` | This package cannot be bought |
| [`PHONE_NOT_SUPPORTED`](https://checkslip.com/en/problems/phone-not-supported) | `422` | Only Thai mobile numbers |
| [`QR_TAMPERED`](https://checkslip.com/en/problems/qr-tampered) | `422` | QR tampered |
| [`RANGE_TOO_LARGE`](https://checkslip.com/en/problems/range-too-large) | `422` | Range too large |
| [`RECOVER_WINDOW_INVALID`](https://checkslip.com/en/problems/recover-window-invalid) | `422` | Invalid recover window |
| [`TOO_OLD`](https://checkslip.com/en/problems/too-old) | `422` | Too old |
| [`TWO_STEP_CODE_INVALID`](https://checkslip.com/en/problems/two-step-code-invalid) | `422` | Wrong two-step code |
| [`UNKNOWN_EVENT_TYPE`](https://checkslip.com/en/problems/unknown-event-type) | `422` | Unknown event type |
| [`URL_HAS_USERINFO`](https://checkslip.com/en/problems/url-has-userinfo) | `422` | URL contains credentials |
| [`URL_NOT_HTTPS`](https://checkslip.com/en/problems/url-not-https) | `422` | URL must use https |
| [`RATE_LIMITED`](https://checkslip.com/en/problems/rate-limited) | `429` | Rate limit exceeded |
| [`INTERNAL`](https://checkslip.com/en/problems/internal) | `500` | Internal error |
| [`ATTACHMENT_SCAN_UNAVAILABLE`](https://checkslip.com/en/problems/attachment-scan-unavailable) | `503` | File scanning temporarily unavailable |
| [`AVATAR_CHECK_UNAVAILABLE`](https://checkslip.com/en/problems/avatar-check-unavailable) | `503` | Picture check temporarily unavailable |
| [`CAPTCHA_UNAVAILABLE`](https://checkslip.com/en/problems/captcha-unavailable) | `503` | Bot check temporarily unavailable |
| [`CREDIT_UNAVAILABLE`](https://checkslip.com/en/problems/credit-unavailable) | `503` | Cannot check or hold credits right now |
| [`PAYMENTS_UNAVAILABLE`](https://checkslip.com/en/problems/payments-unavailable) | `503` | Payments unavailable |
| [`SERVICE_UNAVAILABLE`](https://checkslip.com/en/problems/service-unavailable) | `503` | Temporarily unavailable |
| [`SMS_UNAVAILABLE`](https://checkslip.com/en/problems/sms-unavailable) | `503` | SMS temporarily unavailable |
| [`STEP_UP_UNAVAILABLE`](https://checkslip.com/en/problems/step-up-unavailable) | `503` | Re-authentication check temporarily unavailable |
| [`UNAVAILABLE`](https://checkslip.com/en/problems/unavailable) | `503` | Unavailable |
| [`GATEWAY_TIMEOUT`](https://checkslip.com/en/problems/gateway-timeout) | `504` | The answer took too long |
