API and Webhooks
Uploading and reading documents is available through the REST API. Account management, folders, labels, and connections remain in the app.
Key
It is created in Settings → For Developers. The key is shown only once, upon creation — after that, only its hash is saved. A lost key cannot be recovered; a new one must be created, and the old one will be deleted. You can have five keys, each with an optional validity period of up to two years.
The account owner will receive an email for each new key, as well as two weeks before the key expires. See Email Notifications.
The key is sent in the X-API-Key header.
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 results in the target format |
GET /api/jobs/{id}/original | Uploaded file |
DELETE /api/jobs/{id} | Move to trash |
Excel and PDF results are delivered as Base64. If the result is not needed, send includeResult=false, saving the conversion on the server.
The interface description in OpenAPI format is available at /api/docs; the link is in the settings by the keys. The description is generated from the running code, so it reflects what the API does.
Check for Documents from API
The check before sending applies by default to documents uploaded with a key: the document waits for confirmation in the app, and the webhook is sent only after that. Those building an integration where nobody is sitting at the screen can remove the API channel in Settings → Check Before Sending, or turn off the check.
MCP
For AI agents, the MCP server is available at /api/mcp with the same key. It can read and search documents, but not upload; uploading will return as a completed command that the agent executes itself.
Webhooks
Instead of polling for status, have the result sent to you when it's ready. The address is set for the entire account in Settings → For Developers, or for individual uploads using the targetWebhookUrl parameter. The button in settings will send a test message.
A POST with JSON is sent: document identifier, file name, format, and result in the target format. If the document passes the check or is processed again, the webhook will arrive again with a correction flag (IsCorrection).
The message is not signed. Verify the sender by adding your secret token to the address. Addresses to private networks are rejected.
If the webhook does not arrive after all attempts, an email will be sent after about four and a half hours. This will only happen once during one outage; further failures will be logged in the activity. An email will also be sent after any change to the webhook address if changed by someone other than you.
Failed deliveries will be retried with increasing delays, eleven attempts over approximately four and a half hours. Each attempt is logged in the activity along with your side's response; a document in the list will show an icon with the delivery result.
Limits
The API has no specific 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 will come back as a 400 error with a code indicating why. The MCP server is limited to ten queries per second.