Private preview of the new site. Not live.

Errors

Errors are JSON: {"code": "...", "message": "...", "status": 400}. The message is for you; the code is stable.

CodeStatusMeaning and what to do
invalid_input400A field is missing, the wrong type, or unknown. The message names the field. Fix the input; don't retry as is.
disclosure_ack_required400The customer must acknowledge the Idaho disclosure on the hosted signing page.
terms_not_accepted400
terms_not_published503
consent_required400A person must tick a consent box on a hosted page (for example e-sign). Send them the link.
unsupported_version400The Doing-Work-Version header isn't one the API knows. Use 2026-11-01.
bad_signature400A signature didn't verify.
invalid_link400The link was used, expired, or replaced by a newer one. Get a new link.
invalid_request400An OAuth request is malformed.
invalid_grant400The code, verifier or refresh token is wrong, used or expired. Start sign-in again.
unsupported_grant_type400Use authorization_code or refresh_token.
invalid_target400The resource parameter doesn't match this server.
invalid_scope400The requested scope isn't offered.
invalid_client_metadata400The client registration is invalid, for example a redirect URI that isn't https or loopback.
invalid_claim_token400
issuer_not_enabled400
authorization_pending400
slow_down400
expired_token400
access_denied400
claimed_or_in_flight409
claim_expired410
invalid_token401The token is missing, expired, or for a different resource. Refresh it or sign in again.
session_required403A person has to be signed in on a browser for this step.
owner_cannot_leave409The owner can't leave a shop. Ownership moves only by transfer.
owner_role_fixed409The owner's role can't be changed.
unauthenticated401No token was sent. Sign in first.
forbidden403This worker's role can't do this, or it needs a person's own sign-in rather than an agent token. Tell the person who can.
human_only403This step happens on a hosted page the person opens themselves. Send them the link; don't try another route.
feature_unavailable403This isn't available for this shop or place yet.
private_beta403This is invite only for now. Tell the person to email contact@doingwork.work.
not_found404No such record, or this worker can't see it.
conflict409The record is in the wrong state for this, for example sending a quote that's already signed. Read it again and pick the next step.
checklist_open409
payment_pending409A bank (ACH) payment for this invoice is still clearing, which takes a few business days. Don't ask the customer to pay again. Wait for invoice.paid or invoice.payment_failed.
payments_not_set_up409The shop hasn't connected Stripe. The owner does that on a hosted page.
payments_paused409
idempotency_in_progress409A request with this Idempotency-Key is still running. Wait and retry with the same key.
idempotency_key_reused422This Idempotency-Key was used with a different body. Use a new key for a new request.
unprintable_text422
document_too_large422
rate_limited429Too many requests. Wait for the Retry-After time, then retry.
payload_too_large413
internal500Something broke on our side. Retry later with the same Idempotency-Key.
not_supported501Not supported yet.