- Added
POST /v1/extract (sync, up to 20 pages), POST /v1/jobs and GET /v1/jobs/:id (async, results by polling or webhooks), POST /v1/uploads for staged documents up to 50 MiB, and GET /v1/health. One error shape with stable codes. Full reference at /docs.
- Added
Idempotency-Key on POST /v1/extract and POST /v1/jobs: a retried request replays the stored response for 24 hours instead of running twice; a reused key with a different body returns 409 idempotency_key_conflict. Docs.
- Added
Webhook deliveries are signed per the Standard Webhooks scheme: webhook-id, webhook-timestamp and webhook-signature headers over id.timestamp.body, with whsec_ secrets. Docs.
- Added
Every response carries an x-request-id header; the same id appears as error.request_id in error bodies and meta.request_id in results. For an async job, the 202 body, the result and the webhook delivery carry one id. Docs.
- Added
Every response carries a velrim-version header naming the contract version, currently 2026-08-10. The promise it anchors is on Versioning and deprecation.
- Added
@velrim/sdk (npm) and velrim (PyPI): Zod/Pydantic models or plain JSON Schema, automatic retries with backoff and Retry-After, per-request idempotency keys, verifyWebhook / verify_webhook for deliveries, and request_id on errors and job handles.
- Added
The enforced limits, documented exactly: 20 MiB inline and 50 MiB staged, the 20-page sync cap, rate limits, the webhook retry schedule and 24-hour result retention.