status is terminal for its phase. For live progress,
prefer the thread stream.
Authentication
Requires anx-api-key header. See Authentication.
Response by status
Every response carriesrun_id, status, and created_at. The rest depends on
status:
One of
queued, running, blocked, awaiting_approval, completed,
failed, or canceled.status | Extra fields |
|---|---|
queued / running | message — a human-readable update (e.g. "Cleaning your data", "Retrying (attempt 2 of 5)"), or null. |
blocked | questions[] — the agent hit a genuinely ambiguous decision and is waiting on you. Answer via the messages sub-resource. |
awaiting_approval | (none) — a generate/update run produced a preview. Fetch it from GET /preview. |
completed | report for an execute run (see below); nothing extra for a clarify run. |
failed | error — the agent couldn’t produce a working result even after self-healing. For an execute, no rows were inserted. |
canceled | (none) — the run was stopped before it finished. |
execute carries a report:
Total rows imported across all sheets.
Per-template counts —
{ templateName, sheetId, rowCount }.The number of rows that still have at least one cell that failed validation
— not a count of individual cells. The import succeeded; those rows are simply
flagged. The default CSV download (
?filter=valid) excludes any flagged row
entirely, so a single bad cell drops its whole row. See
Export CSV.An optional value-completeness profile — per-column fill/distinct stats for the
source inputs and the imported outputs — so a hollow import (right row count,
dropped fields) is detectable programmatically.
null when profiling wasn’t
available for the run.A blocked run
When a run isblocked, the poll response carries the questions you need to
render in your own UI. Each question is self-describing —
{ id, question, context?, options[], allowCustom }:
Recovering a run
If you lose arun_id (a crash, a dropped response, a page reload), re-issue the
same run you were running. Because only one run
runs at a time per migration, the call returns 409 with the active run’s ID:
run_id as usual.
A run whose engine dies without writing a terminal status is swept to
failed
(“Import timed out”) once it goes stale — so a lookup never reports a zombie run
as forever-running.Cancel a run
canceled) shape.
Errors
| Status | Meaning |
|---|---|
400 | (PATCH) body isn’t { "status": "cancel_requested" }. |
401 | API key missing or invalid. |
404 | No such run, or the migration isn’t in your account. |
429 | Rate limit hit — back off and retry. |
500 | Server error. |
Example
Next
- Answer the agent — resume a
blockedrun. - Get the preview — read what a generate/update produced.
- Export CSV — get the validated rows out.