-
unauthorized401
Credentials are missing, malformed or expired.
-
share-required428
This order will be placed with your Tenvelo account. Agree to share your details with the business once, and try again.
-
last-partner-admin409
A team keeps at least one admin. Make someone else an admin first.
-
merchant-intent-mismatch400
This screen belongs to another business. Reload it.
-
insufficient-authentication401
This needs a stronger sign-in. Sign in again with a second step.
-
no-account403
That sign-in has no account in any merchant. Ask a merchant owner to invite you, then try again.
-
forbidden403
This account is not permitted to perform that operation.
-
pin-locked429
That PIN has been tried too many times and is locked for a while. Try again later, or have a manager reset it.
-
email-unverified403
The sign-in provider has not verified that email. Verify it at the provider, then try again.
-
requires-manager403
This refund or void is above the merchant's approval limit. A manager or owner must complete it.
-
not-entitled403
This merchant is not licensed for that suite.
-
not-found404
No such resource, or none visible to this account.
-
no-open-order404
Nothing has been ordered at this table yet, so there is no bill to show.
-
version-conflict412
The resource has changed since the version you read. Re-read it, re-apply your change, and retry.
-
immutable409
This resource is append-only and cannot be modified. Void it and issue a replacement.
-
idempotency-key-reused422
This Idempotency-Key was already used for a different request body. Use a new key, or resend the original request unchanged.
-
idempotency-key-in-flight409
An identical request is still being processed. Retry shortly.
-
device-not-settled409
This device has recorded facts that are not yet part of the books, and this write is judged against them. Nothing is wrong with it — it is early. Keep it queued and send it again; it will be accepted once the facts are applied.
-
totals-mismatch422
The submitted totals do not match the server's calculation. The device may be running stale tax configuration.
-
tax-rule-missing422
A product in a tax class was sold in a fulfilment the class has no rule for. Set the class's rule for that fulfilment in the back office.
-
currency-mismatch422
Amounts in different currencies cannot be combined.
-
unit-mismatch422
Quantities in different dimensions cannot be combined: a mass and a volume need a density, which is never guessed.
-
unknown-unit422
The unit of measure is not one this API knows: each, g, kg, ml or l.
-
cursor-too-old422
This cursor is older than the retained change log, so the changes between it and the oldest kept row are gone. Discard the cached data it refers to and start again from a snapshot; retrying with the same cursor would silently skip them.
-
api-version-retired410
This request names an API-Version this server no longer serves, so none of it was read. Keep what was sent, update, then send it again.
-
api-version-unknown400
This request names an API-Version later than this server speaks, or not a date, so none of it was read. Keep what was sent: it goes once the server is updated.
-
terminal-checkout-in-progress409
This order already has a card payment in progress. Wait for its outcome, or cancel it, before taking another card.
-
campaign-audience-empty422
The campaign's audience is empty: no guest in the segment may be told it. Widen the segment and try again.
-
account-closed409
This customer's account takes no more charges: it is closed, or was never opened. Take the payment another way.
-
receipt-exceeds-balance422
The receipt is more than the account owes, and would leave it in credit. Record no more than the balance.
-
receipt-already-recorded409
This receipt is already recorded against the account; recording it again would count the same money twice.
-
card-hold-not-held409
This card hold is no longer held: it was captured, released or expired, or was never authorised.
-
card-hold-declined409
The card was declined for the authorisation. Take the card another way, or ask the guest for another card.
-
table-occupied409
This table has an open order on it and cannot be withdrawn. Clear or move the tab first.
-
invalid-dispute-transition409
This dispute cannot move to that status from the one it is in: evidence is not submitted against one already won or lost.
-
invalid-payout-transition409
This payout cannot move to that status from the one it is in: a failed payout is not marked paid, and a paid one does not go back.
-
order-not-written202
The facts are recorded, but the order was not written — the reason is on the order's flag.
-
already-settled409
That house account charge is already recorded as received.
-
partner-bill-unchanged409
The bill already stands in that state.
-
conflict409
The request conflicts with the current state of the resource.
-
bad-request400
The request could not be read: malformed JSON, or a path or query parameter that does not parse.
-
unsupported-media-type415
Request bodies must be JSON, sent as application/json.
-
too-many-requests429
Rate limit exceeded for this client and merchant. Retry after the time in Retry-After; the limit is per process.
-
not-implemented501
This endpoint is defined in the API specification but is not yet available.
-
validation-failed422
One or more fields failed validation.
-
service-unavailable503
The service is temporarily unavailable. Retry after the time in Retry-After, with the same Idempotency-Key.
-
internal-server-error500
An unexpected error occurred.
Errors · RFC 9457
Problem types
Every error is a problem document served as application/problem+json. These are the types this API sends. Branch on type, which never changes; title and detail are prose and may be reworded.