Get Harvest
Return the harvest job and its status. A done job has its result: a link for its manifest, its stats and each shard, which works 7 days and needs no API key; each answer makes new links. With wait, wait up to that many seconds for its status to change. An API key may have 4 such waits at once; past that, the answer comes at once with X-Acs-Longpoll: declined and Retry-After: 3.
bearerAuthorizationBearer <token>An API key: Authorization: Bearer sk-acs-..., or a key of the old platform, acs-bm-.... A User makes and revokes keys in the App.
job_id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$uuidwait?stringHarvestJob
application/json- response
job_id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$uuidrun_id*string^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$uuidstatus*stringpending while it waits for the Runner, then running, then done, failed or cancelled.
"pending""running""done""failed""cancelled"model*stringn_prompts*integerHow many prompts it has.
reserved_tokens*integerThe tokens it holds against your budget while it runs: each prompt's UTF-8 bytes, and 1 more for its start token.
layers*array<integer>The layers it reads, in ascending order.
tokens*|The tokens it was charged: what the engine read when it is done, the reserved tokens when it was cancelled after its GPU run started, else 0. null until it ends.
created_at*stringAn ISO 8601 time in UTC, such as 2026-11-03T09:30:00.123+00:00.
started_at*|When its GPU run started. null until it starts.
completed_at*|When it ended. null until it ends.
result?The files of a done harvest job. Each link works 7 days and needs no API key. Each answer makes new links; the files are kept.
urls_expire_at?stringWith result: when its links stop working, 7 days after this answer.
error?stringWhy it failed. Only on a failed job.
curl -X GET 'https://api.v2.infra.acsresearch.org/v1/harvest/497f6eca-6276-4993-bfeb-53cbbbba6f08' \ -H 'Authorization: Bearer <API_KEY>'{ "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f", "run_id": "dded282c-8ebd-44cf-8ba5-9a234973d1ec", "status": "pending", "model": "string", "n_prompts": 0, "reserved_tokens": 0, "layers": [ 0 ], "tokens": 0, "created_at": "string", "started_at": "string", "completed_at": "string", "result": { "n_shards": 0, "layer_indices": [ 0 ], "manifest_url": "string", "shard_urls": [ "string" ], "stats_url": "string", "contents": "activations", "tokens": 0, "bytes_written": 0, "timings": { "load_s": 0, "forward_s": 0, "save_s": 0, "upload_s": 0 } }, "urls_expire_at": "string", "error": "string"}Create Harvest POST
Queue a harvest job: the residual stream of a Base model at the chosen layers, for each token of up to 4,096 prompts, written as files that you download by the links in its `result`. It holds the prompts' tokens while it runs and is charged the tokens the engine read. Only this route takes a body of up to 50 MiB. Answers the job, `pending`.
Cancel Harvest DELETE
Cancel a pending or running harvest job, and stop its GPU run, also one that is still starting. A job that is running and whose GPU run started is charged the tokens it holds; any other cancel costs nothing. Answers the cancelled job, also for a second cancel.