Authentication & Errors
API Key Authentication
Section titled “API Key Authentication”Public API-key endpoints use:
Authorization: api-key <environment-api-key>
Applicable Endpoint Paths And Methods
Section titled “Applicable Endpoint Paths And Methods”This shared contract applies to:
POST /api/v1/extractFieldsPOST /api/v1/extraction-jobsGET /api/v1/extraction-jobs/:idGET /api/v1/extraction-jobs/:id/resultPOST /api/v1/extractFieldsAsync(legacy polling-only route)
Legacy exception:
GET /api/v1/checkStatus/:guidis retained for older async clients and is not protected byapiKeyAuth
Request Schema
Section titled “Request Schema”These endpoints require:
Authorizationheader using theapi-keyscheme- No additional auth body fields
Auth Header Rules
Section titled “Auth Header Rules”- The scheme must be exactly
api-key - A missing header is rejected
- An empty token is rejected
- A malformed token is rejected before the upstream auth lookup
Example:
Authorization: api-key <environment-api-key>Response Schema
Section titled “Response Schema”Successful responses vary by endpoint. Shared auth and runtime failures use the standard error shape.
Standard Error Shape
Section titled “Standard Error Shape”Most public runtime errors return:
{ "success": false, "error": { "code": "ERROR_CODE", "message": "Human-readable message", "requestId": "request-id" }}The requestId is included on every error response and is useful for support and log correlation.
Example Request
Section titled “Example Request”curl -X GET "$BASE_URL/api/v1/extraction-jobs/$JOB_ID" \ -H "Authorization: api-key $API_KEY"Example Response
Section titled “Example Response”{ "success": false, "error": { "code": "JOB_NOT_FOUND", "message": "Extraction job not found.", "requestId": "request-id" }}Common Status Codes
Section titled “Common Status Codes”400 Bad Requestinvalid body fields, unsupported delivery mode, or rejected webhook routing input401 Unauthorizedmissing or invalid API key404 Not Foundtemplate, filter-scoped resource, or job not found409 Conflictasync result exists conceptually but is not retrievable in the requested state410 Goneasync result expired after completion429 Too Many Requestsrequest-level or polling rate limit triggered500 Internal Server Errorunexpected server failure503 Service Unavailabledependent service unavailable504 Gateway Timeoutauth or upstream extraction timeout
Common API-Key Errors
Section titled “Common API-Key Errors”Missing API Key
Section titled “Missing API Key”{ "success": false, "error": { "code": "MISSING_API_KEY", "message": "Missing API key", "requestId": "request-id" }}Unsupported Auth Scheme
Section titled “Unsupported Auth Scheme”{ "success": false, "error": { "code": "UNSUPPORTED_AUTH_SCHEME", "message": "Unsupported authentication scheme: Bearer", "requestId": "request-id" }}Invalid Or Expired API Key
Section titled “Invalid Or Expired API Key”{ "success": false, "error": { "code": "INVALID_API_KEY", "message": "Invalid or expired API key", "requestId": "request-id" }}Common Async Job Errors
Section titled “Common Async Job Errors”Job Not Found
Section titled “Job Not Found”{ "success": false, "error": { "code": "JOB_NOT_FOUND", "message": "Extraction job not found.", "requestId": "request-id" }}Result Not Ready
Section titled “Result Not Ready”{ "success": false, "error": { "code": "RESULT_NOT_READY", "message": "Extraction result is not ready yet.", "requestId": "request-id" }}Review Required
Section titled “Review Required”{ "success": false, "error": { "code": "REVIEW_REQUIRED", "message": "Extraction result is awaiting manual review.", "requestId": "request-id" }}Job Failed
Section titled “Job Failed”{ "success": false, "error": { "code": "JOB_FAILED", "message": "Extraction job failed. Check the job status for details.", "requestId": "request-id" }}Result Expired
Section titled “Result Expired”{ "success": false, "error": { "code": "RESULT_EXPIRED", "message": "Extraction result is no longer available.", "requestId": "request-id" }}Poll Rate Limit
Section titled “Poll Rate Limit”{ "success": false, "error": { "code": "RATE_LIMIT", "message": "Too many status checks, please try again shortly.", "requestId": "request-id" }}Legacy Route Error Shape
Section titled “Legacy Route Error Shape”GET /api/v1/checkStatus/:guid is a compatibility route and does not fully match the canonical job error contract.
Examples:
{ "success": false, "error": { "message": "Too many status checks, please try again shortly.", "code": "RATE_LIMIT" }}{ "success": false, "message": "This job was not found. It may have expired or never existed."}