API and Webhooks
Uploading and reading documents is available via REST API. Account management, folders, labels, and integrations remain within the application.
Key
It is created in Settings → For Developers. The key is shown only once at creation — after that, only its hash is stored. A lost key cannot be recovered; a new one must be created, and the old one will be deleted. You can have up to five keys, each with an optional validity period of up to two years.
The key is sent in the header X-API-Key.
What the API Can Do
| Operation | Description |
|---|---|
POST /api/upload | Upload a file with options: format, direction, type, currency, schema, folder, webhook |
POST /api/upload/url | The same from a public address; we will download the file ourselves |
GET /api/jobs | List of documents with filters and pagination |
GET /api/jobs/{id} | Status, read data, findings, and result in the target format |
GET /api/jobs/{id}/original | Uploaded file |
DELETE /api/jobs/{id} | Move to trash |
Excel and PDF results are returned as Base64. If the result is not needed, send includeResult=false to save conversion on the server.
The interface description in OpenAPI format is available at /api/docs; the link is in the settings under keys. The description is generated from the running code, so it corresponds to what the API does.
Validation for Documents from the API
Validation before sending applies by default to documents uploaded via the key: the document waits for confirmation in the application, and the webhook will be sent only after that. Those building an integration where no one is sitting at the screen can disable the API channel or turn off validation in Settings → Validation Before Sending.
MCP
For AI agents, the MCP server is at /api/mcp with the same key. It can read and search documents but cannot upload; uploading returns as a completed command that the agent will execute on its own.
Webhooks
Instead of polling for status, receive the result when it's done. The address is set for the entire account in Settings → For Developers, or for individual uploads via the targetWebhookUrl parameter. The button in settings sends a test message.
A POST will be sent with JSON: document identifier, filename, format, and result in the target format. If the document passes validation or is processed again, the webhook will arrive a second time with a correction flag (IsCorrection).
The message is not signed. Verify the sender by including your secret token in the address. Addresses in private networks are rejected.
Failed deliveries are retried with increasing delays, eleven attempts over approximately four and a half hours. Each attempt is recorded in the activity along with your side's response; for the document in the listing, there is an icon with the delivery result.
Limits
The API does not have its own limit on the number of calls per minute; uploads are limited by credits, file size according to the plan, and twenty pages per document. A rejection returns a 400 error with a code explaining why. The MCP server is limited to ten queries per second.