Every API in this reference follows the same conventions. Read this page once, and it applies to all of them.
Versions
The version is part of the path of each endpoint. There are three:
-
/v2: the current version, for exampleGET /v2/archive/tenants. Use it for every new integration. -
/x19512: the preservation protocol of the ETSI TS 119 512 standard, for examplePOST /x19512/RetrievePO. To use it, go to x19512 API. -
The first version (v1): the older endpoints, such as
/documentsand/search/{searchName}. Their paths have no version segment. Docbyte keeps them available for existing integrations, in the environments where they're turned on.
No breaking changes are introduced within the same API version. If a breaking change is required, a new version is released (for example /v3), while the previous version remains available and supported.
Docbyte follows a quarterly release cycle, and the API documentation is kept per release.
Base URL
Each environment has its own base URL, and Docbyte gives you yours when you start. All the APIs use the same base URL, followed by the versioned path:
GET https://{base-url}/v2/archive/tenants
Rate limits
You can send up to 500 requests per 5 minutes from one IP address. If your integration needs more, ask Docbyte to raise the limit, and tell them how many requests you expect.
Request size
By default, a request body can be up to 21 MB, and a single text value in a JSON body can be up to 20,000,000 characters. A larger request gets a 413 error.
Tip: To add a file that's larger than that, upload it first with an upload URL, and then refer to it in your ingest request. The Ingest API shows how.
Paging and sorting
Most endpoints that return a list return it one page at a time. You choose the page with these query parameters:
|
Name |
Type |
Required |
Description |
|---|---|---|---|
|
|
integer |
No |
The page to return, starting at |
|
|
integer |
No |
How many items each page holds, at least |
|
|
string |
No |
The field to sort on. Each endpoint lists the fields that it accepts, and its default. |
|
|
string |
No |
|
A page of results looks like this:
{
"items": [
{ "packageId": "HR-2024-0042", "packageType": "AIP", "title": "Contract renewal 2024" }
],
"page": 0,
"pageSize": 100,
"totalResults": 1
}
totalResults is the number of items on all pages together. To get every item, ask for the next page until you've received that many items.
Note: The list of users in the Admin API calls this field total.
Some lists aren't paged. They return a plain array, such as GET /v2/search, GET /v2/search/saved, and GET /v2/user/search, or an object with only items, such as GET /v2/archive/tenants.
Some endpoints have a maximum page size, for example 1000 to list SIPs, and their pages say so. Keep pageSize between 1 and that maximum, and use asc or desc for sortOrder. Endpoints that check these values return a 400 error when you don't. Errors lists the reasons.
Enrichers
To get more than the basic fields of a package, such as its metadata or its retention status, list what you want in the enrichers header. The values are in Common headers.
Dates and times
Dates use the ISO 8601 format.
In date query parameters, such as a from or to filter, you can send a date in these forms:
-
2026-01-15T09:30:00Zor2026-01-15T09:30:00+01:00: an exact moment, with its time zone. -
2026-01-15T09:30:00: a date and time without a time zone, read as UTC. -
2026-01-15: a date only, read as the start of that day in UTC.
Anything else gets a 400 error with the reason INVALID_DATE. For a to filter, the page of the endpoint says whether a date only covers the whole day. The filter.* parameters of a search work differently: the Dissemination API describes them.
In JSON request bodies, send a date and time with its time zone, for example 2026-08-01T00:00:00Z.
In responses, dates and times are in UTC, for example 2026-06-08T10:15:30.000+00:00. Some fields leave out the milliseconds or use Z for UTC, so read them with an ISO 8601 parser instead of a fixed pattern.
Empty fields in responses
A response leaves out the fields that have no value, such as an empty list. Treat a missing field as empty.