Developer guide
Connect to the authorized record.
The API uses the same workspace, role and MFA/SSO policies as the application. Requests do not bypass coverage, approval, evidence inspection or payment controls.
Explore the platformAuthentication and scope
Use an authenticated same-origin session or a signed, short-lived user access token in the Authorization header. Set X-Workspace-ID to a workspace you can access. Never use or expose a service-role credential in a browser or customer integration. This API does not issue unrestricted machine keys.
Authorization: Bearer <short-lived-user-access-token> X-Workspace-ID: <authorized-workspace-uuid> Content-Type: application/json Idempotency-Key: <stable-request-uuid>
Use your configured authentication flow to obtain/refresh user sessions. Missing authentication returns UNAUTHENTICATED; denied workspace or role returns FORBIDDEN. Delegated records require their separately granted scoped routes and cannot be accessed by copying a client workspace ID.
Endpoints
| Method | Path | Behavior |
|---|---|---|
| GET | /api/v1/entities | List authorized company records; pages of 50. |
| POST | /api/v1/entities | Create a company using a stable UUID request key. |
| POST | /api/v1/imports/preview | Save mapped CSV preview for human review. |
| POST | /api/v1/imports/{id}/commit | Commit explicitly reviewed row indices; inspect per-row outcomes. |
| GET | /api/v1/entities/{id}/registrations | Source registration records, including verification state. |
| GET | /api/v1/entities/{id}/obligations | Recorded obligations; no inferred legal coverage. |
| POST | /api/v1/quotes | Create a quote from reviewed coverage. |
| POST | /api/v1/orders | Move an exact quoted planning version to review. |
| POST | /api/v1/orders/{id}/approvals | Approve the exact version; owner/administrator required. |
| GET | /api/v1/orders/{id}/timeline | Paginated retained order decisions. |
| GET | /api/v1/orders/{id}/deliverables | Versioned delivery contract, current item states and paginated originals. |
| POST | /api/v1/delegations | Record a scoped client grant with explicit expiry; professional acceptance is separate. |
| POST | /api/v1/exports | Request a bounded, expiring asynchronous ZIP. |
| GET | /api/v1/exports/{id} | Read export state; download=true retrieves a ready authorized ZIP. |
Write requests and retry
- Generate a UUID once for the intended creation or action. Reuse the same key and exact normalized input after a network timeout. Do not blindly create a new key while the first outcome is unknown.
- Company creation, quote creation, preview and export creation require a stable request UUID. Orders, approvals and delegation creation require Idempotency-Key as well. Import commit uses the saved import ID and recorded per-row outcomes.
- Order review/approval requires the exact positive integer version. If the record changes, reload and obtain fresh authorization; a new key does not bypass stale approval.
- Review, approval, delegation and export requests retain actor-bound replay records. Replayed results describe the original request. For orders, current_status and current_version disclose a later change; replay does not repeat or renew authorization.
- Changed inputs or a different actor on the same action key return IDEMPOTENCY_CONFLICT. A repeated revoked delegation remains revoked; use a fresh, explicitly authorized grant if needed.
POST /api/v1/orders/<order-uuid>/approvals
Idempotency-Key: <stable-action-uuid>
{
"version": 4,
"reason": "Reviewed this exact saved scope and itemized estimate."
}Order review creation accepts quote_id, version and an optional reason. Quotes require entity_id, coverage_id and scope. Export creation accepts an optional order_id; omit it for workspace scope. Delegation creation requires professional_id, entities, actions and expiry. A client grant alone does not activate professional access.
Pagination and evidence
Lists use offset (integer 0–100000), limit 50, total and next_offset. Use next_offset until null; do not assume one response contains the whole portfolio. Deliverables return delivery_contract and delivery_items separately from the paginated original artifact inventory. An item can be missing, unreviewed or stale even when files are present.
Exports are asynchronous. Poll the returned export ID, check ready status, expiry and checksum, then download while access remains authorized. Scope/size limits fail visibly. Preserve original artifacts and the manifest; PDF/HTML summaries do not certify fulfillment. Expiry and access revocation can prevent later download.
Errors and events
Errors contain a stable code and readable error: INVALID_INPUT, UNAUTHENTICATED, FORBIDDEN, NOT_FOUND, IDEMPOTENCY_CONFLICT, VERSION_CONFLICT, INVALID_ACTION, PAYLOAD_TOO_LARGE or UNAVAILABLE. A resource outside the authorized scope can be unavailable without exposing its existence.
Webhook receivers must validate signatures and replay windows, deduplicate event IDs and tolerate out-of-order delivery. Configure allowlisted receivers through Operations → Exports & integrations; inspect delivery history, retries and dead letters. Canonical events include entity.updated, obligation.changed, approval.required, order.submitted, order.accepted, order.rejected, notice.received, deliverable.ready and renewal.upcoming. Actual delivery requires a configured receiver and operating worker.
Read the uncertain-outcome procedure →