Skip to content
Taskadence Developers

0.x — pre-release, no compatibility promise yet.What this means

What this is: the one shape every error has, and the list of types. When you need it: writing the except / catch around any call.

Terminal window
curl -i "$TASKADENCE_API_URL/v1/tasks/T0000000" \
-H "Authorization: Bearer $TASKADENCE_TOKEN"

Every error is application/problem+json (RFC 9457):

FieldTypeMeaning
typestringabout:blank or a urn:taskadence:problem:* identifier
titlestringe.g. "Forbidden"
statusintegere.g. 403
detailanyHuman-readable explanation (a string; for a 422, the list of validation errors)
instancestringe.g. "/v1/tasks/T123"
request_idstringe.g. "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
errors (optional)arrayStructured failures: validation errors, or {loc, msg, allowed} for a bad parameter
mfa (optional)objectOn an mfa-required problem only: enrolled (does the person have an authenticator app set up), required_for (all or admins) and reason (org_policy: the organization's requirement; step_up: this action needs a second step)

Branch on status and type. Show detail to people. When you ask for help, quote request_id — it is also the X-Request-ID response header.

StatustypeWhat happened — and what to do
anyabout:blankA plain HTTP error; the status and detail say everything.
422…:validationThe request body or query did not validate. errors lists each failure (loc, msg, type).
400…:invalid-parameterA query parameter is outside what the operation accepts; errors[].allowed lists the valid values.
412…:precondition-failedIf-Match did not match the resource's current ETag - re-read it and retry.
422…:idempotency-key-reusedThis Idempotency-Key was first used for a different request (method, path or body).
409…:idempotency-key-in-flightThe first request with this Idempotency-Key has not finished; retry shortly.
400…:idempotency-key-invalidIdempotency-Key must be 1–255 printable ASCII characters.
429…:rate-limitToo many requests with this access token, or a signed-in user, or an address; wait Retry-After seconds (X-RateLimit-* say where you stand).
500…:internalAn unexpected server error. Quote request_id to support.
401…:token-invalidThe access token is unknown or malformed (or its principal no longer exists).
401…:token-expiredThe access token is past its expires_at; mint a new one.
401…:token-revokedThe access token was revoked (by its owner, an admin, a rotation, or its service account's deactivation).
403…:insufficient-scopeThe access token does not carry the scope this operation needs (errors[0].required; null = not available to tokens).
403…:test-token-read-onlyA tkd_test_ token can authenticate and read, never write.
403 · 422…:token-policyThe organization's token policy refuses this token (personal tokens off, expiry required, or past the maximum lifetime).
422…:url-refusedThe webhook URL is refused: not https, carries credentials, or resolves to a private, loopback, link-local, metadata, multicast or reserved address (errors[0].reason).
403 · 409…:mfa-requiredThe organization requires two-step sign-in and this session signed in with one step. mfa.enrolled says whether the person has an authenticator app set up (sign in with it) or must set one up first; mfa.required_for is all or admins. Access tokens are not affected.
403…:email-unverifiedThe signed-in person has not confirmed their email address yet. Confirm it from the email that was sent (or ask for a new one), then retry. Access tokens are not affected.
413…:upload-too-largeThe file is over the size limit (detail names it): 25 MB for attachments and project files, 2 MB for an avatar. A zip whose contents unpack to over 10 times the limit counts as too large.
415…:upload-type-not-allowedThe file's type is not allowed (detail lists the allowed types). Executables, scripts, HTML, SVG, XML and macro-enabled Office files are never accepted, nor a zip holding one.
415…:upload-type-mismatchThe file's contents are not what its extension (or its declared content type) says, for example an executable named .png, or a .txt that is not UTF-8 text.
422 · 503…:upload-rejectedThe malware scan refused the file (422), or could not scan it right now (503: retry later).

…: is urn:taskadence:problem:. Match on the identifiers, not on title or detail; responses from before the rename used urn:tasksmate:problem: (see the changelog).

The Python SDK raises one exception class per type (Python SDK → Errors).