API details, without the tutorial.
Endpoints, job types, status values, webhooks, and errors in a surface built to stay open while you work.
The shipped surface.
One job envelope, room to grow.
The native jobs API is organized by job type so a second workload can land without changing the reference structure.
A small, stable state machine.
A supported pilot path, with limits.
POST /v1/audio/transcriptions is a supported pilot path, not a full OpenAI Audio clone.
POST /api/v1/jobs with callback_url for async work
● Timeouts: deadline_exceeded keeps the backend job alive; poll it, or resubmit with {"audio_url":"https://example.com/audio.mp3","callback_url":"https://yourapp.com/hooks/acorn"}
● Setup: multipart uploads require ACORN_ALLOW_LOCAL_AUDIO_JOBS=true; otherwise the route returns local_audio_not_enabled
Signed, retried, replayable.
When a partner callback secret is configured, deliveries include X-Acorn-Timestamp and X-Acorn-Signature: sha256=<hex digest>. Verify the digest with HMAC-SHA256 over the timestamp header, a period, and the raw request body using your callback secret. Compare in constant time, reject missing signatures or timestamps outside five minutes, and use job_id for idempotency. Deliveries are at least once.
Stable codes, actionable retries.
Errors include a stable code, message, and X-Request-ID. Retry 429 and 503 according to Retry-After; fix other 4xx requests before retrying.
{ "error": { "code": "invalid_audio_duration",
"message": "audio_duration must be zero or greater.",
"request_id": "7f3a92c1b04d4e6f" } }Not shipping yet.
These routes return 404 today and keep an OpenAI-compatible shape when they land.
Bring-your-own MLX checkpoint path POST /v1/batch is planned, not available. Contact us if you need an early checkpoint evaluation.