Skip to content

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

Start free: three documents, no card

POST
/v1/signup
curl --request POST \
--url https://example.com/v1/signup \
--header 'Content-Type: application/json' \
--data '{ "accepted_terms": true, "company": "Coates Field Service", "email": "dana@coates-field.com", "role": "Right of Way Agent" }'
Media typeapplication/json
SignupRequest

What someone answers to get three documents without a card.

All three are required. Company and role are the onboarding half of the trade: the card used to prove intent as well as identity, and asking who somebody is keeps a little of that without asking them to pay first.

object
email
required
Email

Where the account and its invite go

string
company
required
Company
string
>= 1 characters <= 200 characters
role
required
Role
string
>= 1 characters <= 200 characters
accepted_terms
Accepted Terms

Acceptance of the Terms of Service and Privacy Policy. Checkout used to ask for this explicitly; with no checkout in the path, the signup has to.

boolean

Successful Response

Media typeapplication/json
SignupResponse

The key, shown once, exactly as the claim page shows one.

The plaintext travels in this response because the plugin has to work without a browser round trip. Nothing changes about storage: the digest is all the server keeps, and there is no recovery path other than rotating.

object
api_key
required
Api Key
string
prefix
required
Prefix
string
documents
required
Documents

Documents in the allowance, never expiring

integer
invited
required
Invited

Whether a sign-in invitation was mailed for app.easting.ai

boolean
Example
{
"api_key": "east_live_AbCdEfGh1JkLmNoPqRsTuVwX",
"documents": 3,
"invited": true,
"prefix": "east_live_AbCdEfGh"
}

The request was understood and refused

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": {}
}
]
}

Rate limited; read Retry-After

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"
}
}

Extraction temporarily unavailable

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"
}
}