Integrate your own system with the Paige API
Create a Paige API key, call the same REST API the Paige web app uses, and pull finished documents, their field values, and their PDFs into your own database or application — or push files in for processing.
Before you begin
- A Paige user account with access to the company and scan job you'll read from
- A developer, or a tool that can make HTTPS requests with a bearer token (curl, Postman, Power Automate's HTTP action, a script)
At the end of this guide you'll have an API key, a working request that lists the finished documents in a scan job, and the two follow-up requests that fetch each document's field values and PDF — the three calls every custom integration is built from.
The API is the same one the Paige web app uses, so anything you can see in Paige you can read programmatically. The reference is published as OpenAPI: interactive docs at https://client-api.paige.app/api/v1/docs, and the machine-readable spec at https://client-api.paige.app/api/v1/openapi.json (or openapi.yaml). Point a code generator at the spec and you get a typed client for free.
Export or API: which one do you want?
| You want to… | Use |
|---|---|
| Drop finished documents into a folder, a DMS, or an accounting app without writing code | Export — see the Zapier, Make, and Power Automate guide |
| Query Paige from your own application on your own schedule | The API |
| Send files into Paige from another system | The API (or Folder Monitor if the other system can write to a Windows folder) |
| Both — export the PDFs by SFTP, but read the data live | Both. They don't conflict. |
Create an API key
In Paige, open the avatar menu at the top right and choose API Keys.
Enter a name in Enter API key name — name it for the system that will use it, like
ERP sync— and click Create API Key.
Copy the key immediately and store it in your application's secret store. The page means it: "Make sure to copy your API key now. You won't be able to see it again!" A lost key isn't a crisis — create a new one and delete the old.
The API Keys page with one named key listed and the create form above it
The key acts as the user who created it: it can read and change exactly what that user can, in that user's current company. Each user can hold up to 10 keys. For an integration, create the key from a dedicated Paige user with the narrowest role that can see the scan job — not from an administrator's personal account — so you can retire it without touching anyone's login.
Authenticate
Send the key as a bearer token on every request:
Authorization: Bearer <your API key>Check it works:
curl -H "Authorization: Bearer YOUR_KEY" https://client-api.paige.app/api/v1/user/profileWhat you should see: a JSON object describing the key's user, including the current company. If you get 401, the key is wrong or was deleted.
Find your IDs
Every document call is scoped by company and scan job.
Company ID:
GET /api/v1/user/companieslists the companies the key's user belongs to, with each company's ID.Scan job ID:
GET /api/v1/companies/{companyId}/scanJobslists the scan jobs the user can see. Each scan job in the response also carries its document types and their fields, with the field IDs you'll need to name values later — save this response.
The three calls that make an integration
1. List finished documents
GET /api/v1/companies/{companyId}/scanJobs/{scanJobId}/documentPagesReturns the first pages of the documents in the scan job — in Paige a document is identified by its first page. Each page in the response carries what you need to decide and to fetch more:
| Field | Use it for |
|---|---|
ID, BatchID | The pair every later call needs |
DocumentTypeID | Which document type the AI (or a person) assigned |
DocumentReviewed | true once a person has reviewed it in Paige |
DocumentExported | true once any Paige export has sent it |
DocumentPageCount | How many pages the document has |
WorkflowStage | Where it is in processing; wait for the export stage before you take it |
Results are paged: pass pageSize (up to 100) and keep sending back the returned Cursor until it comes back empty. Record the page IDs you've processed so you never import a document twice.
2. Get a document's field values
GET /api/v1/companies/{companyId}/scanJobs/{scanJobId}/batches/{batchId}/pages/{pageId}/fieldValuesReturns every field value on the document. Each value has a fieldId, the value as extracted or corrected (always a string), a confidence from 0 to 1, and, for line-item fields, lineItemColumnId and lineItemRow. Field IDs map to the names you gave them in the scan job's document type — that's the mapping you saved from the scan jobs call.
3. Get the document's pages and PDF
GET /api/v1/companies/{companyId}/scanJobs/{scanJobId}/batches/{batchId}/documentPages/{startPageId}Lists the pages that make up the document. Then, per batch:
| Endpoint | Returns |
|---|---|
…/batches/{batchId}/pageImages | Signed URLs for the page images |
…/batches/{batchId}/pageOCR_PDF | Signed URLs for the per-page OCR text layers |
…/batches/{batchId}/pageImages_300dpi_bw_tiff | Signed URLs for 300 dpi black-and-white TIFFs, for systems that want archival TIFF |
Signed URLs are temporary; download promptly and don't store the URL.
If all you need is a finished, searchable PDF per document, don't rebuild it from pages — turn on SFTP export for the scan job and let Paige write the PDF, then use the API only for the data. The JSON file Paige writes next to each PDF contains the same field values as call 2.
Pushing documents into Paige
The API can also feed Paige:
POST /api/v1/companies/{companyId}/scanJobs/{scanJobId}/batchescreates a batch.GET …/batches/{batchId}/newPagesreserves a new page and returns aSignedURLto upload the image or file to, plus theContentTypeto send. Upload the file to that URL, thenPUT …/newPages/{pageId}to finalize it and mark it as having a file.Paige processes the batch exactly as if it had been scanned: separation, document types, field extraction, then export.
For most systems, though, Folder Monitor is the easier way in — it does these calls for you for any file that lands in a Windows folder.
Polling, not webhooks
Paige does not send webhooks. An integration polls: list the documents, compare against what you've already taken, fetch the new ones. Every few minutes is plenty; documents take minutes to process anyway. If you'd rather be pushed, use SFTP export and let your SFTP server or an automation platform fire on the new file.
When it doesn't work
| Response | Meaning |
|---|---|
401 | Missing or invalid key. Keys deleted on the API Keys page stop working immediately. |
403 | The key's user isn't a user of that scan job. Add them under Settings > the scan job > Users. |
404 on a document | Wrong batch or page ID pairing — a page ID is only valid inside its batch. |
Empty list from documentPages | The scan job has no finished documents yet, or you're filtering them all out. |
If you're stuck, contact Ademero support with the request path, the status code, and the time of the request — never the key itself.
