Get Field Request
API reference
GET /v1/field-requests/{request_id}
Poll a field request: status, queue position, the promised ETA, and — once the field is live — the resume call that answers your original ask.
GET
Get Field Request
Poll first — your session will be dead when this completes
A new-field build takes hours, not seconds. The agent (or session) that filed the request is almost certainly gone by the time the field is live, so the contract is built around resumption:- On
accepted_new, store therequest_idand theresumecall in durable task state — not in conversation context. - Poll this endpoint whenever a successor picks the task up. The poll state is the source of truth: it is always right, and it works even if every callback failed.
- When
statusislive, execute the storedresumecall (or re-read it from this response) — the exact/v1/fetchrequest that answers the original ask.
404 field_request_not_found either way, never a 403: a 403 would confirm
the id exists, which is a cross-tenant existence oracle over an enumerable
id space.
Response fields
Status vocabulary
The full set, in lifecycle order. Intake outcomes first:
Build lifecycle, once queued (each transition appears here as it happens):
Terminal set:
live, blocked, expired, rejected (and matched, which
is answered rather than terminal-by-refusal). Everything else is in motion —
poll at whatever cadence your task runs on (builds move on a scale of hours;
your plan’s normal request-per-minute limit is the only constraint).
The three build outcomes
A finished build lands in one of three terminal outcomes. On the poll surface they appear aslive or blocked; the callbacks (below) carry the finer
status distinction:
DONE→live, callbackevent_type: "request_live". The field passed its eval cleanly.SHIP_LOW_CONFIDENCE→live, callbackevent_type: "request_live_low_confidence". The field is live with an honest, stated limit — thecaveatfield in the callback. This is not a lesser approval: the caveat travels with the value, worded so an agent can propagate it into its own citations. If you consume the field, repeat the caveat wherever you cite the number.BLOCKED→blocked, callbackevent_type: "request_blocked", with a typedblocked_reason.code, an explanation, and — where one exists — acounter_offernaming the nearest thing that is possible. The typed codes:no_indexable_source,licensing,coverage_gap,quality_below_bar(we built it and the eval says it would mislead),realtime_only,cost_prohibitive,upstream_dead,pr_closed(built, but declined in review),other.
blocked, the
reason was also emailed/webhooked to the callback you registered (a callback
can be added after filing: re-POST the identical body with the same
idempotency_key and a callback — a present callback replaces the stored
one).
Webhook callbacks
If you registeredcallback.webhook_url, each event is POSTed to it as JSON.
Headers:
screening_completed fires when screening settles (useful mainly on the 202
path) and carries {request_id, status, disposition} — the same disposition
array the poll shows.
Completion events carry the machine-readable document:
value/unit/citationare the resolved value at your original example location — a value you can check beats a field id you have to go fetch to believe.caveatis present even whennull: an explicit null says “we checked, there isn’t one,” so a consumer branching on key-presence never mistakes a clean DONE for an un-inspected one.request_blockedadds ablocked_reasonobject:{"code": "coverage_gap", "explanation": "...", "counter_offer": "..."}.- Webhook URLs must resolve to a public address (private, loopback, and link-local targets are refused). Deliveries are retried on failure with backoff; the poll state stays correct regardless of delivery outcome.
- Webhooks are unsigned in V1 — the body contains only what you already know plus the result. Treat the payload as untrusted input to your own pipeline and verify via the poll endpoint if it matters.
Email callbacks
If you registeredcallback.email, completion mail is written for a human
and ends with the same machine-readable document in a fenced JSON block,
so the recipient can be an agent without asking it to parse prose:
Errors
What we keep
Same policy as the POST page: address strings fromexample_locations are scrubbed 30 days after the
request reaches a terminal state; resolved coordinates and geocode metadata
are kept. Poll responses remain available after the scrub — only the address
text is removed.Path Parameters
Response
Successful Response
The response is of type Response Get Field Request V1 Field Requests Request Id Get · object.