Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Get a slot to upload a large document into

POST
/v1/uploads
curl --request POST \
--url https://example.com/v1/uploads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "bytes": 12400000 }'

Stage a document too big to send in one request.

PUT the PDF to the returned URL, then call /v1/extract with X-Upload-Id. The object is deleted as it is read, on every tier, so staging is transport rather than storage: nothing survives the extraction that consumed it, and an upload nobody extracts expires on its own.

Available on every plan. The documents that need this are the large scanned as-builts that government and compliance-sensitive buyers work with, which is the last group that should be locked out of it.

Media typeapplication/json
Any of:
UploadRequest
object
bytes
Any of:
integer
> 0

Successful Response

Media typeapplication/json
UploadResponse

A one-shot slot to PUT a document into.

The document goes straight to storage rather than through this API, which is what lifts the size ceiling: a Lambda Function URL base64-encodes request bodies and caps them near 4.5 MB. Extraction then takes the upload_id and the object is deleted as it is read.

object
upload_id
required
Upload Id

Pass this to /v1/extract as X-Upload-Id.

string
put_url
required
Put Url

PUT the PDF here. Single use, and it expires.

string
expires_in
required
Expires In

Seconds the URL stays valid.

integer
max_bytes
required
Max Bytes
integer
Example
{
"expires_in": 900,
"max_bytes": 33554432,
"put_url": "https://easting-staging.s3.amazonaws.com/staging/...",
"upload_id": "upl_9dK2mQxLp7ZvR4tYbN6w"
}

Missing, unknown, or revoked API key

Media typeapplication/json
ErrorResponse
object
error
required
ErrorDetail
object
type
required
Type
string
message
required
Message
string
key
additional properties
any
Example
{
"error": {
"documents_used": 200,
"message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.",
"monthly_cap": 200,
"resets_on": "2026-08-01",
"type": "quota_exceeded"
}
}

That upload id is not the caller’s

Media typeapplication/json
ErrorResponse
object
error
required
ErrorDetail
object
type
required
Type
string
message
required
Message
string
key
additional properties
any
Example
{
"error": {
"documents_used": 200,
"message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.",
"monthly_cap": 200,
"resets_on": "2026-08-01",
"type": "quota_exceeded"
}
}

No such upload; ids work exactly once

Media typeapplication/json
ErrorResponse
object
error
required
ErrorDetail
object
type
required
Type
string
message
required
Message
string
key
additional properties
any
Example
{
"error": {
"documents_used": 200,
"message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.",
"monthly_cap": 200,
"resets_on": "2026-08-01",
"type": "quota_exceeded"
}
}

Document over the staged size limit

Media typeapplication/json
ErrorResponse
object
error
required
ErrorDetail
object
type
required
Type
string
message
required
Message
string
key
additional properties
any
Example
{
"error": {
"documents_used": 200,
"message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.",
"monthly_cap": 200,
"resets_on": "2026-08-01",
"type": "quota_exceeded"
}
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}

Staging is not configured on this server

Media typeapplication/json
ErrorResponse
object
error
required
ErrorDetail
object
type
required
Type
string
message
required
Message
string
key
additional properties
any
Example
{
"error": {
"documents_used": 200,
"message": "Monthly document quota reached: 200 of 200 documents used this month. The cap resets on 2026-08-01. Email sales@easting.ai to raise it.",
"monthly_cap": 200,
"resets_on": "2026-08-01",
"type": "quota_exceeded"
}
}