202 Accepted with an operation, not a result. Ingestion, review, drafting, draft improvement, template runs, compare, matrix runs and workflow runs all use the same envelope, so you write one polling loop rather than one per feature.
202 also carries two headers worth using:
The five statuses
There are exactly five, and no others will ever appear.succeeded, failed and cancelled are terminal. A terminal operation always has completedAt set, and a non-terminal one never does.
Internally these features use nineteen different status vocabularies. They are mapped onto these five before they reach you, so an internal value can never leak into your integration and become something you depend on.
Reading progress
progress carries done, total and a unit. The unit matters: {done: 43, total: 100} means something quite different for cells than for documents, and a progress bar built without it will be wrong.
A partial success reports succeeded with done short of total, rather than failed. The work that completed is real and available; failing the whole operation would tell you nothing worked when most of it did.
Polling well
RespectRetry-After on the first poll, then back off. Operations remain readable for 30 days, so a poller that dies can resume.
When it fails
error carries a code and a message written for the person reading your logs. Internal exception text, file paths and stack frames are stripped before it reaches you.
A worker that dies mid-job does not leave you polling forever: a sweeper moves abandoned operations to failed with STUCK_OPERATION.
