Re-scan Extraction
POST/api/purchase-invoices/ocr/:purchase_extraction_id/rescan
Re-dispatch the OCR extraction job for an existing PurchaseInvoiceOcrExtraction. Resets status to 'processing', clears any previous error_message, and re-queues a background job against the original PDF in S3. Useful when Azure misread the document (wrong supplier match, missing lines) and the user wants to re-run extraction without re-uploading.
orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Allowed from any status except 'confirmed' (a confirmed extraction has already produced a PurchaseInvoice and is locked).
Response 200:
{
"data": {
"extraction_id": 7,
"tracked_job_log_id": 1234,
"status": "processing"
},
"message": "Re-scan started."
}
Response 422 — confirmed extraction:
{ "message": "Confirmed extractions cannot be re-scanned." }
Response 422 — file no longer available:
{ "message": "Cannot re-scan — original file is no longer available." }
Poll GET /purchase-invoices/ocr/{id} until status flips back to 'pending_review' (or 'failed').
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
Successful response
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.