code,
show or log the fix, and quote the requestId when you ask Tassyir for
help.
The shape
The Admin API answers errors asapplication/problem+json:
A 5xx never carries an internal message. The token endpoint is the one
exception to this shape: it answers OAuth errors (below).
In
@tassyir/app, an Admin API error is a TassyirApiError (code, fix,
status, requestId, retryAfterSeconds, problem), a token endpoint
error a TassyirOAuthError (its code is OAUTH_ and the OAuth error in
capitals), and every other refusal a TassyirError with a code and a
fix. App Bridge’s errors are listed in
Embedded pages, the manifest’s in
The manifest.
Common errors and what to do
VALIDATION_FAILED
HTTP 400. A parameter or a field failed validation, or is not one the route
takes. errors lists each problem. Fix the request: unknown parameters are
refused on purpose, so a misspelt filter never silently returns everything.
INVALID_CURSOR
HTTP 400. The cursor is not this list’s, was edited, or was made with other
filters. Send nextCursor back unchanged, with the same filters; to change a
filter, start again without a cursor.
INVALID_FIELDS
HTTP 400. fields names a field the resource does not have. allowedFields
lists the valid names; fields are top-level only.
APP_TOKEN_REQUIRED
HTTP 401. No Authorization: Bearer header. Send the installation’s access token.
APP_TOKEN_INVALID
HTTP 401. The token is unknown, expired or revoked, or its installation or app is
no longer active. Refresh it once (the SDK does). If the refresh is refused,
the installation was uninstalled, suspended or had its scopes changed: an
embedded app gets a new token on the next page view, a headless app needs a
new install code.
PERMISSION_DENIED
HTTP 403. Your installation lacks the permission the route checks (permission).
The fix names the scope: add it to the manifest, upload a version, and the
merchant must accept the update. With an online token, the person may lack
it even when your app has it.
STORE_SCOPE_FORBIDDEN
HTTP 460. Your request named a store (storeId) outside the stores the
merchant gave your installation. Use one of its stores; list them with
GET /stores (read_stores).
NOT_FOUND
HTTP 404. No such route, or no resource your token can read under that id: a
resource of another store or business, or a malformed id, reads the same.
RATE_LIMITED
HTTP 429. Your installation’s bucket is empty. Wait Retry-After seconds, then
retry; spread your calls using the RateLimit-* headers.
BUSINESS_RATE_LIMITED
HTTP 429. All the apps of this business together are past its ceiling. Wait
Retry-After seconds; other apps are using the room, so slow down.
API_BUSY
HTTP 503. The API was too busy to take your call and did nothing. Wait
Retry-After (1 second) and send the same call again, a write included.
IDEMPOTENCY_KEY_REUSED
HTTP 422. You reused an Idempotency-Key with another method, path, query or
body. Use a new key for a different write.
IDEMPOTENCY_KEY_IN_USE
HTTP 409. A request with the same key is still running. Wait, then retry with the
same key: you will get its answer.
IDEMPOTENCY_UNAVAILABLE
HTTP 503. Tassyir cannot check idempotency keys right now, so the write was not
attempted. Retry after Retry-After with the same key.
PLAN_FEATURE_REQUIRED
HTTP 403. The merchant’s plan lacks the feature (feature), such as stock at a
chosen location. Do without it, or tell the merchant.
SUBSCRIPTION_REQUIRED
HTTP 422. The route needs a plan, and the business has no usable subscription.
Tell the merchant.
ORDER_LIMIT_REACHED
HTTP 403. The order is waiting: it is past the plan’s order allowance, and
cannot be confirmed until it unlocks (orders/updated with waiting).
ORDER_NOT_EDITABLE
HTTP 409. The order is dispatched, delivered or returned (orderStatus): it can
no longer be edited, confirmed or cancelled.
ORDER_STATUS_CONFLICT
HTTP 409. The order’s status does not allow this move (orderStatus,
requestedStatus): read the order again and decide.
MEDIA_URL_NOT_ALLOWED
HTTP 400. An image is not on https://cdn.tassyir.io/ and not already on the
resource (field, url). Upload it with POST /images first
(Products and collections).
APP_DATA_KEY_NOT_DECLARED
HTTP 400. Your installation’s version does not declare that key for that owner
type. Declare it under [[data.definitions]], upload, and have the merchant
accept the update.
INTERNAL_ERROR
HTTP 500. Tassyir’s fault. Retry reads with backoff; retry writes only with the
same Idempotency-Key. Quote the requestId if it persists.
SERVICE_UNAVAILABLE
HTTP 503. Something Tassyir depends on is down. Retry with backoff, writes with the
same Idempotency-Key.
Every Admin API code
Generated from the OpenAPI document of API version2026-10 that @tassyir/app is typed from (41 operations under /apps/2026-10/). An operation lists every code it can answer, per status, in that document.
Token endpoint errors
POST /apps/oauth/token answers OAuth errors, { "error": "…", "error_description": "…" }, never problem+json.