Retrieve a result
Read an existing job without repeating extraction or consuming another unit.
GET https://ocr.ecostudios.dev/api/v3/ine/{request_id}
Send the API key belonging to the company that created the job. An Idempotency-Key and image files are not needed for GET.
curl --max-time 90 --include \
"https://ocr.ecostudios.dev/api/v3/ine/$REQUEST_ID" \
-H "X-API-Key: $INE_API_KEY" \
-H 'Accept: application/json' \
-H 'User-Agent: ine-api-backend-example/1.0'
This command may print personal data. Use it only in a private environment.
Polling
When a response is 202, wait for Retry-After before another GET. The normal processing interval is two seconds. Set a bounded wait in your application, then let the user check later if the job remains in progress.
Validate that status_url is exactly /api/v3/ine/{request_id} for the UUID in the response. Build the GET URL on your configured API origin. Never forward the API key to an arbitrary status URL or follow a redirect automatically.
GET reads the current job state. It does not restart extraction, resume interrupted work or consume another reading unit. You can retrieve an existing job even when the company's new-job or monthly allowance is exhausted.
Status handling
| HTTP | Meaning |
|---|---|
200 | The reading succeeded. Review and consume data. |
202 | The job is still processing. Poll after Retry-After. |
401 | Authentication is missing, invalid or revoked. |
404 | The job is not available to this company, or the identifier is unknown. |
409 | Submission could not be confirmed. Follow error.action; do not create a retry loop. |
410 | The result's access window has expired. |
422 | The reserved job failed. This is terminal; follow error.action. |
503 | The result or service could not be accessed. Inspect the structured error. |
Not every error's request_id represents a reserved job. For example, a validation rejection can have a support identifier without a retrievable result.
Expiry
Current results are accessible for 23 hours from reservation. expires_at states the deadline. Save needed data in your own system before then. An expired key replay does not create a fresh reading or extend retention.
A historical compatible result can have expires_at: null; that does not promise indefinite access. Jobs are shared across API versions, so you can retrieve an existing job through the English /api/v3 route without another extraction.