Every document this account has run
const url = 'https://example.com/v1/runs?limit=100';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/v1/runs?limit=100' \ --header 'Authorization: Bearer <token>'Newest first, across every key you own, singles and batch documents both.
A run that failed stays in the list. So does one you have deleted, with
result_available false, because the record that the work happened is
worth keeping after the work itself is gone.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Successful Response
What this account has run, across every key it owns.
Every run here is collectable by a signed-in person, whichever of the account’s keys ran it. The listing used to name the key the browser extracts through, because the collect routes answered for one key and the page had to avoid offering a button that would 404; they answer for the account now, so the field is gone rather than left saying nothing.
Results are kept until you delete them. Nothing expires on a clock.
result_available reports what the API still holds at the moment you
asked, and it turns false when you delete a run through
DELETE /v1/runs/{reference} or clear the account with DELETE /v1/runs.
The record that the work happened outlives the work itself, because an
invoice points at it.
object
One document an account ran, whichever way it was submitted.
A person does not think in tables. They ran a deed on Tuesday and want to
know where it went, and whether it came through /v1/extracts or inside a
folder batch is our filing rather than theirs. So this flattens
extract_jobs and batch_items, which already carry the same facts under
different column names.
result_available is the whole point of the row. It reports what the API
still holds right now, and a false there is the honest answer to “where did
my result go”: the retention sweep took it, and nothing resurrects it.
object
Example
{ "runs": [ { "result_available": false, "placements": 0 } ]}Missing, unknown, or revoked API key
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}Validation Error
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}Extraction temporarily unavailable
object
object
Example
{ "error": { "documents_used": 200, "message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.", "monthly_cap": 200, "resets_on": "2026-08-01", "type": "quota_exceeded" }}