Get a task
GET https://api.noptcha.com/v1/tasks/{id}
Native API (v1). Guide. Operation ID getTask.
Returns the task: 200 when final, 202 while processing. With ?wait=N (or Prefer: wait=N) this
is a long poll of up to N seconds (at most 90) that returns as soon as the task completes. Unknown and
expired tasks, tasks of other organizations, and sandbox tasks asked with a live key (or the reverse)
are 404.
One task may be polled 5 times per second (bursts of 10); a long poll counts once. Over the limit:
429 rate_limited with Retry-After and RateLimit-Policy: "poll";q=10;w=2. When the server already
has too many waiting requests, a long poll returns processing at once (without
Preference-Applied); wait a second before asking again.
Request
Authentication: Authorization: Bearer <key> (Keys).
| Parameter | In | Description |
|---|---|---|
idrequired | path | Task ID (decimal digits; the same number as the compatibility API's |
waitoptional | query | Seconds to wait for the result (capped at 90). Takes precedence over |
Preferoptional | header |
|
Responses
200
The task is final.
Headers: Location (optional), Noptcha-Request-Id, Preference-Applied (optional).
Content: application/json
| Field | Type | Description |
|---|---|---|
completed_atoptional | string | When the task became final; absent while processing. format: date-time · pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ |
costrequired | object | What the task cost (zero unless solved and charged). |
cost.amountrequired | string | Decimal US dollars with 6 places. pattern: ^-?[0-9]+\.[0-9]{6}$ |
cost.currencyrequired | const "USD" | |
created_atrequired | string | format: date-time · pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ |
errorrequired | one of | null | Why the task failed when TaskError |
idrequired | string | Task ID (a 53-bit integer as a string). pattern: ^[0-9]+$ |
metadataoptional | object | Your own key-value pairs, returned with the task. At most 16 keys; keys 1–64 characters, values
strings of at most 256 characters (Unicode code points, as JSON Schema counts them). A value that is
not a string is |
metadata.<any key>optional | string | max length 256 |
paramsrequired | object | null | The task's parameters with secrets removed (proxy login and password, cookies where the type marks
them sensitive) and strings longer than 256 bytes (images) replaced by |
sandboxoptional | const true | Present (true) on tasks created with a test key. |
solutionrequired | one of | null | The answer when Solution |
statusrequired | enum | one of "processing", "solved", "failed" |
typerequired | string | Canonical task type, e.g. |
202
The task is still processing.
Headers: Location (optional), Noptcha-Request-Id, Preference-Applied (optional).
Content: application/json
| Field | Type | Description |
|---|---|---|
completed_atoptional | string | When the task became final; absent while processing. format: date-time · pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ |
costrequired | object | What the task cost (zero unless solved and charged). |
cost.amountrequired | string | Decimal US dollars with 6 places. pattern: ^-?[0-9]+\.[0-9]{6}$ |
cost.currencyrequired | const "USD" | |
created_atrequired | string | format: date-time · pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ |
errorrequired | one of | null | Why the task failed when TaskError |
idrequired | string | Task ID (a 53-bit integer as a string). pattern: ^[0-9]+$ |
metadataoptional | object | Your own key-value pairs, returned with the task. At most 16 keys; keys 1–64 characters, values
strings of at most 256 characters (Unicode code points, as JSON Schema counts them). A value that is
not a string is |
metadata.<any key>optional | string | max length 256 |
paramsrequired | object | null | The task's parameters with secrets removed (proxy login and password, cookies where the type marks
them sensitive) and strings longer than 256 bytes (images) replaced by |
sandboxoptional | const true | Present (true) on tasks created with a test key. |
solutionrequired | one of | null | The answer when Solution |
statusrequired | enum | one of "processing", "solved", "failed" |
typerequired | string | Canonical task type, e.g. |
401
unauthorized: the key is malformed, unknown, revoked or expired.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional).
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
403
forbidden: the key lacks the scope this endpoint needs, the client IP is not in the key's allowlist,
the key may not use this task type, or the organization is suspended (detail says which).
Also returned, without detail, when the request did not pass through our edge network.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional).
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
404
not_found: no such task, it expired (results are kept 10 minutes after completion) or it belongs to
another organization; or the task created with this Idempotency-Key has expired.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional).
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
413
request_too_large: the body exceeds the limit (1 MB for image types, 64 KB otherwise). Any request
with a body over 1 MB gets this, GET requests included.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional).
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
429
rate_limited: too many tasks created per second by this key, the same task polled too often, the
sandbox's per-organization rate, usage queried too often, the catalog fetched too often from this IP, or
this IP sent too many invalid keys.
concurrency_limited: the organization has too many tasks in flight for this captcha family (or, with a
test key, too many sandbox tasks still processing). Wait Retry-After seconds.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional), Retry-After.
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
500
internal: an error on our side.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional).
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
503
service_unavailable: no capacity right now (all solvers busy or failing, the gateway is overloaded,
a dependency is unavailable). For POST /v1/tasks nothing was created or charged. Wait Retry-After.
Headers: Noptcha-Request-Id, RateLimit (optional), RateLimit-Policy (optional), Retry-After.
Content: application/problem+json
| Field | Type | Description |
|---|---|---|
coderequired | string | Machine-readable error code (see the table). |
detailoptional | string | Human-readable explanation of this occurrence. |
request_idrequired | string | Same as the |
statusrequired | integer | The HTTP status code. |
titlerequired | string | |
typerequired | string | format: uri |
Header descriptions and every schema: Schemas. Machine-readable: openapi.json, openapi.yaml.