Start free: three documents, no card
const url = 'https://example.com/v1/signup';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"accepted_terms":true,"company":"Coates Field Service","email":"dana@coates-field.com","role":"Right of Way Agent"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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" }'Request Bodyrequired
Section titled “Request Bodyrequired”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
Where the account and its invite go
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.
Responses
Section titled “Responses”Successful Response
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
Documents in the allowance, never expiring
Whether a sign-in invitation was mailed for app.easting.ai
Example
{ "api_key": "east_live_AbCdEfGh1JkLmNoPqRsTuVwX", "documents": 3, "invited": true, "prefix": "east_live_AbCdEfGh"}The request was understood and refused
object
object
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
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}Rate limited; read Retry-After
object
object
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
object
object
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" }}