Skip to main content

Error Codes

ExtractForm uses standard HTTP status codes. Error responses include a message and optional details.

HTTP status codes

StatusMeaningCommon causes
400Bad RequestInvalid body, missing required field, unsupported file type
401UnauthorizedMissing, expired, or invalid token/API key
403ForbiddenInsufficient role (e.g. ADMIN-only route)
404Not FoundResource does not exist or belongs to another user
409ConflictDuplicate resource (e.g. idempotency key reuse with different payload)
413Payload Too LargeFile exceeds MAX_FILE_SIZE
429Too Many RequestsRate limit exceeded (auth endpoints throttled)
500Internal Server ErrorUnexpected server error — retry with backoff

Authentication errors

ScenarioStatusFix
No Authorization header401Add Authorization: Bearer <token>
Expired access token401Call POST /api/auth/refresh
Revoked or expired API key401Create a new key or use a valid JWT
Invalid credentials on login401Check email and password

Job errors

When a job reaches FAILED status, check errorMessage and errorCode on the job object:

curl http://localhost:4000/api/jobs/JOB_ID \
-H "Authorization: Bearer YOUR_TOKEN"

Common failure reasons:

  • Unsupported or corrupted file format
  • Schema not found or deleted
  • AI provider timeout or rate limit
  • Document parsing failure

Use POST /api/jobs/:id/restart to retry a failed job.

Webhook delivery errors

Webhook deliveries retry with exponential backoff. Check delivery logs:

curl "http://localhost:4000/api/webhooks/WEBHOOK_ID/deliveries?status=DEAD" \
-H "Authorization: Bearer YOUR_TOKEN"

Endpoints are auto-disabled after WEBHOOK_AUTO_DISABLE_THRESHOLD consecutive dead deliveries (default 5).

Integration errors

ScenarioFix
OAuth token expiredDisconnect and reconnect the integration
Dropbox permission deniedEnable required scopes in Dropbox App Console
S3 access deniedVerify access key, bucket, and region
File not found in remote storageConfirm fileId and folder path

Validation errors

400 responses from validation include details about which field failed:

{
"statusCode": 400,
"message": ["email must be an email", "password must be longer than or equal to 6 characters"],
"error": "Bad Request"
}