Skip to main content

Estateur API

The Estateur REST API lets Advanced-plan firms automate their workflows: create clients, send intake questionnaires, and read client, intake, and document status. Every request is scoped to the firm that owns the API key, so a key can only ever access its own data.

Generate and revoke keys in Settings → API.

Base URL

All endpoints live under your Estateur domain:

https://<your-estateur-domain>/api/v1

Authentication

Send your API key as a Bearer token. The API is available only on the Firm plan; other tiers receive 403 advanced_required. Keys are hashed at rest and never logged.

curl https://<your-estateur-domain>/api/v1/me \
  -H "Authorization: Bearer est_live_your_key_here"

Rate limits

Up to 120 requests per minute per key. Every response includes X-RateLimit-Limit and X-RateLimit-Remaining; exceeding the limit returns 429 rate_limited with a Retry-After header.

Endpoints

GET/api/v1/me

Returns the firm behind the key, its plan tier, and your remaining rate budget.

GET/api/v1/clients

List your clients with per-status counts. Optional query params: q (search name/matter) and status (one of lead, intake, drafting, in_review, executed, archived).

POST/api/v1/clients

Create a client. Body: displayName (required, 2–160 characters), and optional matterName, email (valid address), phone (7–15 digits), state (U.S. state or DC), and planType (will_based or trust_based).

curl -X POST https://<your-estateur-domain>/api/v1/clients \
  -H "Authorization: Bearer est_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"displayName":"Jane Roe","email":"jane@example.com","state":"IL"}'

201 Created

{
  "client": {
    "id": "665f...",
    "displayName": "Jane Roe",
    "email": "jane@example.com",
    "state": "IL",
    "status": "lead"
  }
}
GET/api/v1/clients/:clientId

Fetch one client and its current status.

POST/api/v1/clients/:clientId/questionnaires

Send an intake questionnaire to the client and email them the secure link. Provide exactly one source: templateId (a saved firm template), serviceKey (a premade package), or a full definition.

curl -X POST \
  https://<your-estateur-domain>/api/v1/clients/665f.../questionnaires \
  -H "Authorization: Bearer est_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"serviceKey":"will_based_plan"}'

201 Created

{
  "questionnaire": { "id": "667a...", "status": "sent", "completeness": 0 },
  "link": "https://<your-estateur-domain>/q/eyJ...",
  "emailed": true
}
GET/api/v1/clients/:clientId/questionnaires

List the questionnaires sent to a client with sent / completed status.

GET/api/v1/clients/:clientId/intake

Read a client's intake responses (answers plus the questionnaire definition).

GET/api/v1/clients/:clientId/documents

List a client's documents with their draft / review / execution status.

Errors

Errors are JSON with an error message and a stable code:

400 invalid_request      Missing or invalid input
400 invalid_client_input Client field failed validation (response includes field)
401 missing_key          No API key was supplied
401 invalid_key          Key is unknown or revoked
402 inactive             Subscription is not active
403 advanced_required    API access requires the Firm plan
404 not_found            No such client / resource for this firm
429 rate_limited         Too many requests (see Retry-After)

Webhooks for push notifications are on the roadmap; until then, poll the status endpoints above to track progress.