Introduction
Exelensia is a document data extraction platform. Upload documents (PDFs, images, office files, and more), define an extraction schema, and retrieve structured data via a REST API.
Quick Start
- Get your API key — Generate an API key in the Exelensia dashboard under Settings → API Keys.
- Define a schema — Create an extraction schema describing the fields you want, or pick a ready-made template.
- Upload a document — Send your file to the Upload API. You can associate a schema at upload time with the optional
schema_idfield. - Process the document — With auto-processing enabled (the default), the upload is queued for extraction automatically. Otherwise, submit it explicitly via the Process API.
- Retrieve results — Fetch the extracted data from the Results API, or export it as CSV.
Authentication
The endpoints in this reference accept an API key. Include your key in the x-api-key header on every request:
curl -H "x-api-key: wk_xxxxxxxx.your_secret_here" https://api.exelensia.com/v1/schemasAPI keys have the form wk_<prefix>.<secret> and are shown in full only once, when created. Generate and manage them in the Exelensia dashboard under Settings → API Keys.
These endpoints also accept a logged-in session via an
Authorization: Bearer <token>header, which is what the dashboard uses. For programmatic access, prefer an API key.
Base URL
https://api.exelensia.com/v1
All endpoints are served under the /v1 prefix.
Pagination
List endpoints return a data array alongside a meta object and accept these query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number (min: 1) |
limit | number | 20 | Items per page (min: 1, max: 100 — GET /v1/process is capped at 25) |
sort_by | string | created_at | Field to sort by. Allowed fields vary per endpoint; ignored where not supported |
sort_order | string | desc | Sort direction: asc or desc |
created_after | ISO 8601 | — | Return items created on or after this date |
created_before | ISO 8601 | — | Return items created on or before this date |
Every list response wraps its data in a meta envelope:
{
"data": [],
"meta": {
"total": 42,
"page": 2,
"limit": 20,
"totalPages": 3,
"hasNextPage": true,
"hasPrevPage": true
}
}Supported File Types
| Type | MIME Type |
|---|---|
application/pdf | |
| JPEG | image/jpeg |
| PNG | image/png |
| WebP | image/webp |
| DOCX | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| PPTX | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| XLSX | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| EPUB | application/epub+zip |
| RTF | application/rtf |
| ODT | application/vnd.oasis.opendocument.text |
| CSV | text/csv |
| TXT | text/plain |
Maximum file size: 50 MB (52,428,800 bytes).
Rate Limits
The API is rate limited per client. The default tiers are:
| Tier | Limit |
|---|---|
| Short | 5 requests / second |
| Medium | 20 requests / 10 seconds |
| Long | 100 requests / 60 seconds |
Exceeding a limit returns 429 Too Many Requests — wait and retry with exponential backoff. Some endpoints apply stricter limits (for example, the CSV export is capped at 5 requests per minute).
Errors
Errors return a normalized JSON body:
{
"statusCode": 400,
"timestamp": "2026-01-15T10:30:00.000Z",
"path": "/v1/schemas",
"message": "Validation failed"
}Some errors also include a machine-readable code (e.g. INVALID_DATE_RANGE) alongside the message.