{"version":1,"docs_url":"https://api.getqragent.com/api/v1/errors","codes":[{"code":"API_KEY_INVALID","status":401,"message":"That API key is not valid, has been revoked, or has expired.","retryable":false,"error":"unauthenticated","reason":"api_key_invalid_or_expired","anchor":"api-key-invalid"},{"code":"API_KEY_ORPHANED","status":401,"message":"That API key can no longer be used. Issue a new one from the dashboard.","retryable":false,"error":"unauthenticated","reason":"api_key_creator_not_found","anchor":"api-key-orphaned"},{"code":"API_KEY_REQUIRED","status":401,"message":"Send your API key as 'Authorization: Bearer sk_...'.","retryable":false,"error":"unauthenticated","reason":"api_key_required","anchor":"api-key-required"},{"code":"DELEGATION_CREATOR_NOT_FOUND","status":401,"message":"The user this delegated token acts for no longer exists.","retryable":false,"error":"unauthenticated","reason":"delegation_creator_not_found","anchor":"delegation-creator-not-found"},{"code":"DELEGATION_INVALID","status":401,"message":"The delegated token is unknown, revoked, or past its expiry. Mint a new one from the parent API key.","retryable":false,"error":"unauthenticated","reason":"delegation_invalid_or_expired","anchor":"delegation-invalid"},{"code":"DELEGATION_SCOPES_EMPTY","status":401,"message":"The parent API key no longer grants any of this token's scopes, so it confers nothing. Mint a new token.","retryable":false,"error":"unauthenticated","reason":"delegation_scopes_empty","anchor":"delegation-scopes-empty"},{"code":"UNAUTHENTICATED","status":401,"message":"This endpoint requires an API key.","retryable":false,"error":"unauthenticated","reason":null,"anchor":"unauthenticated"},{"code":"UNAUTHENTICATED","status":401,"message":"This endpoint requires an API key.","retryable":false,"error":"unauthenticated","reason":"no_session","anchor":"unauthenticated"},{"code":"UNAUTHENTICATED","status":401,"message":"This endpoint requires an API key.","retryable":false,"error":"unauthenticated","reason":"session_invalid_or_expired","anchor":"unauthenticated"},{"code":"ACCESS_LINK_LIMIT_REACHED","status":402,"message":"This QR code has reached the access-link limit for its plan.","retryable":false,"error":"plan_limit_exceeded","reason":"access_link_limit_reached","anchor":"access-link-limit-reached"},{"code":"AGENT_BUDGET_EXHAUSTED","status":402,"message":"This workspace has used its metered agent operations for the month. Reading, listing and archiving still work so you can wind an integration down; upgrade the plan or wait for the next period to create more.","retryable":false,"error":"plan_limit_exceeded","reason":"agent_budget_exhausted","anchor":"agent-budget-exhausted"},{"code":"API_ACCESS_NOT_IN_PLAN","status":402,"message":"This workspace's plan does not include API access. Upgrade to use the API.","retryable":false,"error":"plan_limit_exceeded","reason":"api_access_not_in_plan","anchor":"api-access-not-in-plan"},{"code":"PLAN_LIMIT_EXCEEDED","status":402,"message":"This workspace's plan does not allow that. Upgrade to raise the limit.","retryable":false,"error":"plan_limit_exceeded","reason":null,"anchor":"plan-limit-exceeded"},{"code":"QR_COUNT_LIMIT_REACHED","status":402,"message":"This workspace has reached the QR-code limit for its plan.","retryable":false,"error":"plan_limit_exceeded","reason":"qr_count_limit_reached","anchor":"qr-count-limit-reached"},{"code":"SCAN_LIMIT_REACHED","status":402,"message":"This workspace has reached the scan limit for the current billing period.","retryable":false,"error":"plan_limit_exceeded","reason":"scan_limit_reached","anchor":"scan-limit-reached"},{"code":"STORAGE_LIMIT_REACHED","status":402,"message":"This workspace has reached the storage limit for its plan.","retryable":false,"error":"plan_limit_exceeded","reason":"storage_limit_reached","anchor":"storage-limit-reached"},{"code":"USER_LIMIT_REACHED","status":402,"message":"This workspace has reached the member limit for its plan.","retryable":false,"error":"plan_limit_exceeded","reason":"user_limit_reached","anchor":"user-limit-reached"},{"code":"AGENT_GATE_DOWNGRADE_FORBIDDEN","status":403,"message":"An agent may not move this code to a weaker gate. A human can make that change in the dashboard.","retryable":false,"error":"forbidden","reason":"agent_gate_downgrade_forbidden","anchor":"agent-gate-downgrade-forbidden"},{"code":"AGENT_PUBLIC_MODE_FORBIDDEN","status":403,"message":"An agent may not create or move a code into public access mode. Turning a gated code into a public one is a decision a human makes in the dashboard.","retryable":false,"error":"forbidden","reason":"agent_public_mode_forbidden","anchor":"agent-public-mode-forbidden"},{"code":"API_KEY_MISSING_SCOPE","status":403,"message":"This API key does not carry the scope this endpoint requires.","retryable":false,"error":"forbidden","reason":"api_key_missing_scope","anchor":"api-key-missing-scope"},{"code":"APPROVAL_NOT_SPENDABLE","status":403,"message":"The supplied approval could not be spent. It is unknown, already used, denied, expired, or was granted for different arguments or a different version of the target.","retryable":false,"error":"forbidden","reason":"approval_not_spendable","anchor":"approval-not-spendable"},{"code":"APPROVAL_REQUIRED","status":403,"message":"A person must approve this exact call before it runs. The response carries the approval id; repeat the request with the X-Approval-Id header once a workspace owner has granted it.","retryable":false,"error":"forbidden","reason":"approval_required","anchor":"approval-required"},{"code":"CREDENTIAL_ENVIRONMENT_MISMATCH","status":403,"message":"This credential declares a different environment from the workspace it belongs to. A sandbox key (sk_test_) cannot act on a live workspace, or the reverse.","retryable":false,"error":"forbidden","reason":"credential_environment_mismatch","anchor":"credential-environment-mismatch"},{"code":"CREDENTIAL_NOT_ACCEPTED_HERE","status":403,"message":"This endpoint does not accept API-key authentication. Use the dashboard, or the /api/v1 surface.","retryable":false,"error":"forbidden","reason":"credential_not_accepted_here","anchor":"credential-not-accepted-here"},{"code":"CROSS_ENVIRONMENT_RESOURCE","status":403,"message":"That identifier belongs to the other environment of this workspace. A sandbox credential cannot address live resources, or the reverse.","retryable":false,"error":"forbidden","reason":"cross_environment_resource","anchor":"cross-environment-resource"},{"code":"CROSS_ORIGIN_BLOCKED","status":403,"message":"This write carried an Origin header from a host that is not the configured application origin. A server-side client should send no Origin header at all; a browser client must be served from the application's own origin.","retryable":false,"error":"forbidden","reason":"cross_origin_blocked","anchor":"cross-origin-blocked"},{"code":"CUSTOM_BRANDING_NOT_IN_PLAN","status":403,"message":"Custom branding is not included in this workspace's plan.","retryable":false,"error":"forbidden","reason":"custom_branding_not_in_plan","anchor":"custom-branding-not-in-plan"},{"code":"DELEGATION_CANNOT_DELEGATE","status":403,"message":"A delegated token cannot mint another delegated token. Mint from the parent API key instead.","retryable":false,"error":"forbidden","reason":"delegation_cannot_delegate","anchor":"delegation-cannot-delegate"},{"code":"DELEGATION_CANNOT_MINT_ACCESS_LINK","status":403,"message":"A delegated token cannot mint a magic link, because the link itself is a bearer credential. Use POST /api/v1/qrs/{qr_id}/deliveries to deliver access to a verified recipient instead.","retryable":false,"error":"forbidden","reason":"delegation_cannot_mint_access_link","anchor":"delegation-cannot-mint-access-link"},{"code":"DELEGATION_MAY_REVOKE_ONLY_ITSELF","status":403,"message":"A delegated token may revoke itself but not another token. Use the parent API key to revoke others.","retryable":false,"error":"forbidden","reason":"delegation_may_revoke_only_itself","anchor":"delegation-may-revoke-only-itself"},{"code":"DELEGATION_PARENT_REVOKED","status":403,"message":"The API key this delegated token was minted from has been revoked or expired. Re-minting will not help until a valid key is issued.","retryable":false,"error":"forbidden","reason":"delegation_parent_revoked","anchor":"delegation-parent-revoked"},{"code":"DELEGATION_REQUIRES_API_KEY","status":403,"message":"Minting a delegated token requires authenticating with an API key.","retryable":false,"error":"forbidden","reason":"delegation_requires_api_key","anchor":"delegation-requires-api-key"},{"code":"DELEGATION_RESOURCE_SCOPE","status":403,"message":"This delegated token is bound to a single QR code and cannot address this path. See qr_id in the response.","retryable":false,"error":"forbidden","reason":"delegation_resource_scope","anchor":"delegation-resource-scope"},{"code":"DESIGN_OUTSIDE_BRAND_KIT","status":403,"message":"The requested design falls outside this workspace's brand kit. See details.","retryable":false,"error":"forbidden","reason":"design_outside_brand_kit","anchor":"design-outside-brand-kit"},{"code":"E2E_UNSUPPORTED","status":403,"message":"This workspace uses end-to-end encryption, so the server cannot read or write this code's content. Use the dashboard, which encrypts in the browser.","retryable":false,"error":"forbidden","reason":"e2e_unsupported","anchor":"e2e-unsupported"},{"code":"EMAIL_NOT_VERIFIED","status":403,"message":"The account behind this credential has not verified its email address.","retryable":false,"error":"forbidden","reason":"email_not_verified","anchor":"email-not-verified"},{"code":"FOLDER_SCOPE_DENIED","status":403,"message":"The member who owns this credential is restricted to certain folders, and this code or folder is not among them.","retryable":false,"error":"forbidden","reason":"folder_scope_denied","anchor":"folder-scope-denied"},{"code":"FORBIDDEN","status":403,"message":"This credential is not allowed to perform that action.","retryable":false,"error":"forbidden","reason":null,"anchor":"forbidden"},{"code":"IDEMPOTENCY_AUTHORITY_NARROWED","status":403,"message":"This credential no longer holds the scopes it had when this request was first made, so the stored response cannot be replayed. Re-issue the request with a credential that holds them.","retryable":false,"error":"forbidden","reason":"idempotency_authority_narrowed","anchor":"idempotency-authority-narrowed"},{"code":"INSUFFICIENT_ROLE","status":403,"message":"The member who owns this API key does not have a high enough role for that action.","retryable":false,"error":"forbidden","reason":"insufficient_role","anchor":"insufficient-role"},{"code":"NO_TENANT","status":403,"message":"This credential is not attached to a workspace.","retryable":false,"error":"forbidden","reason":"no_tenant","anchor":"no-tenant"},{"code":"QR_NOT_FOUND","status":403,"message":"No QR code with that id is available to this credential.","retryable":false,"error":"forbidden","reason":"qr_not_found_in_tenant","anchor":"qr-not-found"},{"code":"REPORT_CAPABILITY_EXCLUDED","status":403,"message":"That report is not available on any surface, by decision rather than by omission. GET /api/v1/reports/capabilities lists what is answerable and why the rest is not.","retryable":false,"error":"forbidden","reason":"report_capability_excluded","anchor":"report-capability-excluded"},{"code":"SANDBOX_EXPIRED","status":403,"message":"This sandbox workspace has expired and no longer accepts requests. Provision a new one from the live workspace that owns it.","retryable":false,"error":"forbidden","reason":"sandbox_expired","anchor":"sandbox-expired"},{"code":"ACCESS_LINK_NOT_FOUND","status":404,"message":"No access link with that id is available to this credential.","retryable":false,"error":"not_found","reason":"access_link_not_found","anchor":"access-link-not-found"},{"code":"BULK_JOB_NOT_FOUND","status":404,"message":"No bulk job with that id is available to this credential.","retryable":false,"error":"not_found","reason":"job_not_found","anchor":"bulk-job-not-found"},{"code":"DELEGATION_NOT_FOUND","status":404,"message":"No delegated token with that id exists in this workspace.","retryable":false,"error":"not_found","reason":"delegation_not_found","anchor":"delegation-not-found"},{"code":"DELIVERY_NOT_FOUND","status":404,"message":"No delivery with that id exists in this workspace.","retryable":false,"error":"not_found","reason":"delivery_not_found","anchor":"delivery-not-found"},{"code":"NOT_FOUND","status":404,"message":"No resource with that id is available to this credential.","retryable":false,"error":"not_found","reason":null,"anchor":"not-found"},{"code":"QR_NOT_FOUND","status":404,"message":"No QR code with that id is available to this credential.","retryable":false,"error":"not_found","reason":"qr_not_found","anchor":"qr-not-found"},{"code":"BULK_EXPORT_NOT_READY","status":409,"message":"That export is still running. Poll the job until its status is 'completed'.","retryable":true,"error":"conflict","reason":"export_not_ready","anchor":"bulk-export-not-ready"},{"code":"BULK_JOB_NOT_AN_EXPORT","status":409,"message":"That bulk job is not an export, so it has no download.","retryable":false,"error":"conflict","reason":"not_an_export_job","anchor":"bulk-job-not-an-export"},{"code":"CONFLICT","status":409,"message":"The resource is not in a state that allows that action.","retryable":false,"error":"conflict","reason":null,"anchor":"conflict"},{"code":"IDEMPOTENCY_KEY_IN_PROGRESS","status":409,"message":"A request with that Idempotency-Key is still being processed. Retry shortly.","retryable":true,"error":"conflict","reason":"idempotency_key_in_progress","anchor":"idempotency-key-in-progress"},{"code":"IDEMPOTENCY_KEY_REUSE","status":409,"message":"That Idempotency-Key was already used with a different request body.","retryable":false,"error":"conflict","reason":"idempotency_key_reuse","anchor":"idempotency-key-reuse"},{"code":"QR_ARCHIVED","status":409,"message":"That QR code is archived. Restore it before changing it.","retryable":false,"error":"conflict","reason":"qr_archived","anchor":"qr-archived"},{"code":"GONE","status":410,"message":"That resource is archived and no longer resolves.","retryable":false,"error":"gone","reason":null,"anchor":"gone"},{"code":"QR_ARCHIVED","status":410,"message":"That QR code is archived and no longer resolves.","retryable":false,"error":"gone","reason":"qr_archived","anchor":"qr-archived"},{"code":"STALE_REVISION","status":412,"message":"The resource changed since the revision you read. Re-read it, re-apply your change, and retry with the ETag from that read.","retryable":false,"error":"conflict","reason":"stale_revision","anchor":"stale-revision"},{"code":"CONTENT_HANDLE_ALREADY_USED","status":422,"message":"That content handle has already been redeemed. A handle creates exactly one QR; check whether the QR you wanted already exists.","retryable":false,"error":"validation_error","reason":"handle_already_used","anchor":"content-handle-already-used"},{"code":"CONTENT_HANDLE_EXPIRED","status":422,"message":"That content handle has expired. Ask for a new one to be staged.","retryable":false,"error":"validation_error","reason":"handle_expired","anchor":"content-handle-expired"},{"code":"CONTENT_HANDLE_NOT_FOUND","status":422,"message":"No content handle with that value exists in this workspace. A handle is staged by a workspace member, not through the API.","retryable":false,"error":"validation_error","reason":"handle_not_found","anchor":"content-handle-not-found"},{"code":"CONTENT_HANDLE_REVOKED","status":422,"message":"That content handle was withdrawn before it was redeemed.","retryable":false,"error":"validation_error","reason":"handle_revoked","anchor":"content-handle-revoked"},{"code":"CONTENT_HANDLE_TYPE_MISMATCH","status":422,"message":"The payload_type you asked for is not the type that was staged. Omit payload_type to use the staged one.","retryable":false,"error":"validation_error","reason":"handle_type_mismatch","anchor":"content-handle-type-mismatch"},{"code":"CURSOR_AND_PAGE_CONFLICT","status":422,"message":"Send either 'cursor' or 'page', never both.","retryable":false,"error":"validation_error","reason":"cursor_and_page_exclusive","anchor":"cursor-and-page-conflict"},{"code":"CURSOR_FILTER_MISMATCH","status":422,"message":"The cursor was issued for a different filter set. Start the walk again without it.","retryable":false,"error":"validation_error","reason":"cursor_filter_mismatch","anchor":"cursor-filter-mismatch"},{"code":"CURSOR_INVALID","status":422,"message":"The pagination cursor is malformed or was not issued by this API.","retryable":false,"error":"validation_error","reason":"cursor_invalid","anchor":"cursor-invalid"},{"code":"DESTINATION_FLAGGED_MALICIOUS","status":422,"message":"A destination-reputation provider identifies that URL as malicious. Point the code somewhere else.","retryable":false,"error":"validation_error","reason":"destination_flagged_malicious","anchor":"destination-flagged-malicious"},{"code":"FOLDER_NOT_FOUND","status":422,"message":"No folder with that id exists in this workspace.","retryable":false,"error":"validation_error","reason":"folder_not_found","anchor":"folder-not-found"},{"code":"IDEMPOTENCY_KEY_TOO_LONG","status":422,"message":"The Idempotency-Key header exceeds the maximum length. See details for the limit.","retryable":false,"error":"validation_error","reason":"idempotency_key_too_long","anchor":"idempotency-key-too-long"},{"code":"NO_MATCHING_QRS","status":422,"message":"The selection matched no QR codes, so there is nothing to act on.","retryable":false,"error":"validation_error","reason":"no_matching_qrs","anchor":"no-matching-qrs"},{"code":"NO_VERIFIED_RECIPIENTS","status":422,"message":"None of the recipient references named are verified and usable in this workspace. See details.refused. A recipient is added and verified by a workspace member, not through the API.","retryable":false,"error":"validation_error","reason":"no_verified_recipients","anchor":"no-verified-recipients"},{"code":"PIN_REQUIRED_FOR_MODE","status":422,"message":"The requested access mode needs a PIN and none was supplied.","retryable":false,"error":"validation_error","reason":"pin_required_for_mode","anchor":"pin-required-for-mode"},{"code":"PUBLIC_MODE_REQUIRES_URL_PAYLOAD","status":422,"message":"Access mode 'public' is only available for URL payloads.","retryable":false,"error":"validation_error","reason":"public_mode_requires_url_payload","anchor":"public-mode-requires-url-payload"},{"code":"PUBLIC_MODE_URL_SCHEME_INVALID","status":422,"message":"A public QR must point at an http or https URL.","retryable":false,"error":"validation_error","reason":"public_mode_url_must_be_http_or_https","anchor":"public-mode-url-scheme-invalid"},{"code":"SCOPES_NOT_SUBSET_OF_PARENT","status":422,"message":"A delegated token cannot hold a scope its parent API key does not grant. See details.excess for the rejected scopes.","retryable":false,"error":"validation_error","reason":"scopes_not_subset_of_parent","anchor":"scopes-not-subset-of-parent"},{"code":"TEMPLATE_NOT_FOUND","status":422,"message":"No design template with that id exists in this workspace.","retryable":false,"error":"validation_error","reason":"template_not_found","anchor":"template-not-found"},{"code":"VALIDATION_FAILED","status":422,"message":"The request body or query string did not match the expected shape. See details.","retryable":false,"error":"validation_error","reason":null,"anchor":"validation-failed"},{"code":"ACTION_BUDGET_EXCEEDED","status":429,"message":"This API key has used its write-action budget for the day. It resets on a rolling 24-hour window; upgrade the plan or split work across keys to raise it.","retryable":true,"error":"rate_limited","reason":"action_budget_exceeded","anchor":"action-budget-exceeded"},{"code":"RATE_LIMITED","status":429,"message":"Too many requests. Wait for the number of seconds in Retry-After, then retry.","retryable":true,"error":"rate_limited","reason":null,"anchor":"rate-limited"},{"code":"RATE_LIMITED","status":429,"message":"Too many requests. Wait for the number of seconds in Retry-After, then retry.","retryable":true,"error":"rate_limited","reason":"too_many_requests","anchor":"rate-limited"},{"code":"VELOCITY_CAP_EXCEEDED","status":429,"message":"This credential's hourly velocity cap has been reached. It resets on a rolling 1-hour window; wait or upgrade the plan to raise it.","retryable":true,"error":"rate_limited","reason":"velocity_cap_exceeded","anchor":"velocity-cap-exceeded"},{"code":"CONTENT_DECRYPT_FAILED","status":500,"message":"The stored content could not be decrypted. Nothing about the payload is inferable from this refusal; contact support with the QR id.","retryable":false,"error":"internal_error","reason":"decrypt_failed","anchor":"content-decrypt-failed"},{"code":"CONTENT_PAYLOAD_CORRUPT","status":500,"message":"The stored content decrypted but is not readable as a payload. Contact support with the QR id; a retry will fail the same way.","retryable":false,"error":"internal_error","reason":"payload_corrupt","anchor":"content-payload-corrupt"},{"code":"INTERNAL_ERROR","status":500,"message":"Something went wrong on our side. Retry with backoff; contact support if it persists.","retryable":true,"error":"internal_error","reason":null,"anchor":"internal-error"},{"code":"STAGED_CONTENT_UNREADABLE","status":500,"message":"The staged content could not be read. Contact support; the handle has been spent.","retryable":false,"error":"internal_error","reason":"staged_content_unreadable","anchor":"staged-content-unreadable"},{"code":"STORAGE_UNAVAILABLE","status":500,"message":"File storage is temporarily unavailable. Retry with backoff.","retryable":true,"error":"internal_error","reason":"storage_unavailable","anchor":"storage-unavailable"},{"code":"DESTINATION_SCREENING_UNAVAILABLE","status":503,"message":"Destination screening is temporarily unavailable, so this machine credential's request is refused rather than accepted unchecked. Retry shortly.","retryable":true,"error":"validation_error","reason":"destination_screening_unavailable","anchor":"destination-screening-unavailable"}]}