Skip to content

Error Reference

All error responses return JSON with a detail field:

{ "detail": "Human-readable error message" }

HTTP Status Codes

Code Name Typical Cause
400 Bad Request Invalid request body; prompt injection detected in input text; no processor available for the uploaded file format; no translatable content found
401 Unauthorized Missing or invalid X-API-Key header
404 Not Found Job, glossary, or batch ID does not exist
409 Conflict Duplicate content — the same text or file hash was already submitted. Response body includes job_id and status of the existing job. Also returned when attempting to retrieve results for a job that is still running.
410 Gone Original uploaded file has been deleted from the server and cannot be downloaded
413 Payload Too Large Uploaded file exceeds the 10 MB limit
415 Unsupported Media Type File MIME type does not match the declared extension
422 Unprocessable Entity Invalid language combination; too many files or target languages in a batch; file extraction failed; target_lang is a string where a list is required
429 Too Many Requests Rate limit exceeded (50 requests per minute per IP)
500 Internal Server Error File injection failed; no processor available for reassembly
503 Service Unavailable Health check failed — Redis, Supabase, or Anthropic API is unreachable

409 Conflict — Duplicate Job

When submitting content that was already submitted, the 409 response includes the existing job:

{
  "detail": "Duplicate content",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed"
}

You can use the returned job_id to retrieve the existing result directly.


409 Conflict — Job Not Ready

When calling GET /v1/jobs/{id}/result or GET /v1/jobs/{id}/download before the job is complete:

{
  "detail": "Job not yet complete",
  "status": "processing"
}

Poll GET /v1/jobs/{id} to check status, or use webhooks for event-driven notification.


Rate Limiting

429 Too Many Requests is returned when the IP exceeds 50 requests per minute. The limit resets on a rolling 60-second window.

Implement exponential backoff when you receive a 429.