Skip to main content
Tanqory IconTanqory Logo
Log In
Get Started
  • Home
  • Why Tanqory
  • Pricing
  • Partners
  • Themes
  • App Store
  • Academy
  • Affiliates
  • Community
  • Developers
  • Support
  • Business Tools
  • News
  • Research
  • Blog
  • Engineering
  • Legal
  • Status
  • Build & Launch
  • Sell & Get Paid
  • Market & Engage
  • Ship & Deliver
  • Operate & Control
  • Go Global
  • Platform Overview
  • Commerce Core
  • Builder
  • Creative & Brand
  • Intelligence & Automation
  • Operations
  • Integrations
  • Industries overview
  • E-commerce & Retail
  • Wholesale & B2B
  • Restaurants
  • Events & Ticketing
  • Health & Wellness
  • Services
  • About
  • Executive
  • Leadership
  • Governance
  • Brand Identity
  • Careers
  • Legal
Reference
Tanqory.com
API reference
  • Overview
  • Admin API
  • Store API
  • AI API
Get started
  • Quickstart
  • Authentication
  • Base URLs and regions
  • Pagination
  • Errors
  • Rate limits
  • Webhooks
  • Versioning
Build with
  • SDKs
  • MCP server
  • Agent runtime
Resources
  • Publication coverage
  • API license and terms↗
  • Status↗
  • Trust center↗
API reference
  • Overview
  • Admin API
  • Store API
  • AI API
Get started
  • Quickstart
  • Authentication
  • Base URLs and regions
  • Pagination
  • Errors
  • Rate limits
  • Webhooks
  • Versioning
Build with
  • SDKs
  • MCP server
  • Agent runtime
Resources
  • Publication coverage
  • API license and terms↗
  • Status↗
  • Trust center↗

Errors

HTTP status codes Tanqory returns, what the spec says, and how to recover.

The OpenAPI spec declares only a free-text description on 4xx / 5xx codes — the structured envelope is not yet in the spec. The shape below is documented from the live gateway, verified against real responses (June 2026). The spec will be amended to declare it formally in a later round ([FOUNDER TO CONFIRM]).

The envelope (runtime contract)

Every error response is a single error object. A validation failure — the richest case — looks like this (verbatim from the gateway):

{
  "error": {
    "type": "validation_error",
    "code": "validation_failed",
    "title": "Please check your input",
    "message": "Some fields need attention before you can continue.",
    "status": 400,
    "param": "email",
    "errors": [
      { "field": "email", "code": "invalid_type", "message": "Required" },
      { "field": "password", "code": "invalid_type", "message": "Required" }
    ],
    "doc_url": "https://docs.tanqory.com/errors/validation_failed",
    "request_id": "e7cab0b72a2507b9953f4d1d3afb092f",
    "instance": "/api/v1/auth/register",
    "timestamp": "2026-06-09T09:49:35.685Z"
  }
}
FieldAlways?Meaning
error.type✓Category enum. Verified values: authentication_error, invalid_request_error, validation_error. (More exist; switch on code, not type.)
error.code✓Stable machine-readable code (snake_case). Switch on this.
error.title✓Short human-readable title.
error.message✓Human-readable detail. May contain end-user PII — do not log naively.
error.status✓HTTP status, mirrored in the body.
error.paramvalidationThe top-level offending field.
error.errors[]validationPer-field problems — { field, code, message } (field-level code e.g. invalid_type).
error.doc_url✓Canonical doc for the code: https://docs.tanqory.com/errors/{code}.
error.request_id✓Send this to support — it identifies the request in our trace.
error.instance✓The request path that produced the error.
error.timestamp✓ISO-8601 server time.

Error code catalogue (verified)

Switch on error.code. Codes verified against the live gateway:

codetypeHTTPWhen
auth_token_invalidauthentication_error401Missing / invalid / expired bearer token. Re-authenticate; don't retry the same token.
resource_not_foundinvalid_request_error404Path or resource id doesn't exist. Verify id + tenant; don't retry.
validation_failedvalidation_error400One or more fields rejected — inspect errors[]. Fix input; don't retry the same payload.

This catalogue lists only codes confirmed from real responses. The full catalogue is generated from the gateway and grows as more codes are verified — never hard-code against an unlisted code. Each code's doc_url is the source of truth for that code.

Status codes that appear in the spec

The table below counts how many publishable operations declare each status code in the Admin API. The "What spec says" column quotes the first declared description verbatim from the spec — your client should treat the runtime envelope as authoritative.

StatusOps declaring itVerified spec description (sample)What the client should do
200326(no description — success)Continue.
20140"Registration successful" (envelope schema declared on this code: RegisterResponseDto)Continue.
2042(no body)Continue.
3021"Redirects to domain settings page"Follow the Location header (browser flow only — server-to-server should not auto-follow without user consent).
40039"Unsupported provider"Fix client input. Do not retry the same payload.
40132"Invalid credentials"Re-issue the token; do not retry the same token. See Authentication.
4032"Account locked"The principal is recognised but blocked. Do not retry without user intervention.
40423"Export request not found"Verify the ID + tenant. Do not retry.
4095"Email already registered"Inspect error.code to decide between user-prompt vs. automatic retry.
4291"Too many export requests"Honor the Retry-After header. See Rate limits.
5031"Service is not ready"Retry after a short delay. Check status.tanqory.com if it persists.

Gaps in the spec — do not infer:

  • 5xx codes other than 503 are not yet declared on individual ops in this spec.
  • 405, 415, 422 — not declared on any op today. The runtime may return them on legitimate misuse; treat as 4xx generic.
  • 402, 423, 430 — not used by Tanqory today.

Idempotency

Two POST endpoints declare an Idempotency-Key header in the spec today:

EndpointUse the key when
POST /api/v1/storesCreating a store — guard against double-create on network failures.
POST /api/v1/stores/process-paymentCharging a payment method — must never replay.

Submit the same key on retry; the gateway returns the original response. For other mutating endpoints, an Idempotency-Key header is accepted silently but is not yet a declared spec contract — relying on it elsewhere is at your own risk until the spec is amended.

Retry guidance

StatusRetryable?How
2xxn/aSuccess — no retry.
400, 404, 409NoClient error — fix the request first.
401, 403NoRe-authenticate; do not retry the same token.
429YesHonour Retry-After header — see Rate limits.
5xxYesExponential backoff starting at 250 ms, max 4 attempts. Send the same Idempotency-Key if the endpoint declares it.

Next steps

TopicWhen to read it
AuthenticationOn every 401.
Rate limitsOn every 429.
WebhooksIf you are retrying because a webhook delivery failed.
StatusIf 5xx persists beyond your retry budget.
  • Home
  • Why Tanqory
  • Pricing
  • Partners
  • Themes
  • App Store