# Deliver an async converter result

> Token-authed callback for a tool converter that deferred conversion by

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Deliver an async converter result"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/api/v1/documents/{document_id}/ingestion-callback"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Token-authed callback for a tool converter that deferred conversion by
returning `{ "status": "pending" }` (see the Ingestion Rules module
docs). Not IAM-gated — the external converter is not a SOAT principal,
so it authenticates with the single-use token minted for this
document and ingestion attempt (delivered as `callback.token` /
embedded in `callback.url` in the original converter invocation).
Accepted only while the document is still awaiting that exact
attempt; rejected with `409` if the attempt already completed, timed
out, or was superseded by a re-ingest.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./complete-ingestion-callback.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./complete-ingestion-callback.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./complete-ingestion-callback.StatusCodes.json")}
>
  
</StatusCodes>
