API reference

Every route, one contract

JSON over HTTPS. Reads are keyless, every response is a typed envelope, and every reserved act answers a typed pending state.

Base URLhttps://api.insure
Formatapplication/json
Contract/openapi.json

Claims

The claim file, from first notice to payment. A claim waiting on a license is typed as waiting, never left in an untyped queue.

GET/claims

The claims collection. Filter by peril or stage. A filter that matches nothing answers a typed EMPTY, never a bare list.

200 · OK
{  "type": "OK",  "claims": [    {      "claim": "clm_8f3ka92",      "peril": "wind_hail",      "stage": "evaluate",      "status": "PENDING_ADJUSTER"    },    {      "claim": "clm_7d21m40",      "peril": "water_nonweather",      "stage": "decide",      "status": "DECIDED"    }  ]}

POST/claims

First notice of loss. Opens the claim, starts the state's clocks, and runs the open work: intake, acknowledgment, file assembly, coverage and estimate review.

Request
{  "policy": "HO3-4482-TX",  "loss": {    "date": "2026-07-14",    "peril": "wind_hail",    "state": "TX"  },  "posture": "first_party"}
202 · OK
{  "type": "OK",  "claim": "clm_8f3ka92",  "stage": "notice",  "openWork": [    "intake",    "acknowledge",    "assemble",    "coverage",    "estimate"  ],  "clocks": {    "acknowledge": {      "rule": "TX: 15 days",      "started": "2026-07-15",      "due": "2026-07-30"    }  },  "webhooks": ["decision.issued", "claim.paid"]}

GET/claims/:id

Waits on a licensed adjuster

One claim, with its stage, open work and clock state. At the reserved act it answers PENDING_ADJUSTER and names the license the act requires.

200 · OK
{  "type": "OK",  "claim": "clm_8f3ka92",  "policy": "HO3-4482-TX",  "line": "homeowners",  "posture": "first_party",  "stage": "evaluate",  "status": "PENDING_ADJUSTER",  "openWork": {    "fnol": "complete",    "acknowledgment": "sent",    "file": "assembled",    "coverage": "analyzed",    "estimate": "checked"  },  "reservedAct": {    "verb": "adjust",    "license": "TX all-lines adjuster",    "verified": "at_call_time",    "authority": "delegated_by_carrier",    "fee": { "shape": "flat", "fixed": "at_post" }  },  "clocks": {    "acknowledge": {      "rule": "TX: 15 days",      "closed": "2026-07-16"    },    "decide": {      "rule": "TX: 15 business days",      "started": "2026-07-24",      "due": "2026-08-14"    }  }}

Coverage

Rating is open work, so a rate answers at once. Offering, negotiating and binding are producer-reserved, so a bind waits on a licensed producer.

POST/quotes

Price coverage for a risk in one state and line. The quote holds its premium until it expires.

Request
{  "line": "personal_auto",  "state": "TX",  "risk": {    "vehicle": "2024 Subaru Outback",    "garaging": "78704"  },  "coverages": [    "liability",    "collision",    "comprehensive",    "gap"  ],  "term": "6_months"}
200 · OK
{  "type": "OK",  "quote": "qt_31c8f0",  "premium": {    "amount": 650,    "currency": "USD",    "term": "6_months"  },  "expires": "2026-08-12"}

POST/quotes/:id/bind

Waits on a licensed producer

Bind a quote. The call answers PENDING_PRODUCER while a licensed producer reviews and binds, then policy.bound arrives with the policy number.

202 · OK
{  "type": "OK",  "quote": "qt_31c8f0",  "status": "PENDING_PRODUCER",  "reservedAct": {    "verb": "bind",    "license": "TX general lines producer",    "verified": "at_call_time",    "fee": { "shape": "flat", "fixed": "at_post" }  },  "webhooks": ["policy.bound", "documents.issued"]}

GET/policies/:id

One policy record at ACORD grain: form, term, coverages and deductibles.

200 · OK
{  "type": "OK",  "policy": "HO3-4482-TX",  "form": "HO-3",  "insured": "Jordan Alvarez",  "term": {    "effective": "2026-03-01",    "expires": "2027-03-01"  },  "coverages": {    "dwelling": 412000,    "otherStructures": 41200,    "personalProperty": 206000  },  "deductible": { "windHail": "2%" }}

Documents

The documents a claim or a renewal runs on, normalized to one shape.

GET/loss-runs/:id

A normalized loss run: claims and incurred losses for a policy over a stated period.

200 · OK
{  "type": "OK",  "lossRun": "lr_4482tx_5y",  "policy": "HO3-4482-TX",  "years": 5,  "claims": 2,  "incurred": 22610,  "valued": "2026-07-31"}

GET/acord-forms

ACORD forms, normalized. Filter by form number.

GET/cois

Certificates of insurance at ACORD 25 grain.

GET/eobs

Explanations of benefits, normalized.

Events

Webhooks carry each reserved act's result back to your product. decision.issued and policy.bound release the meter; claim.paid and documents.issued are records.

EVENTdecision.issued

The adjuster's decision and their attestation, with the pay clock it starts. A denial is a decision too, and arrives with its reasons.

payload
{  "event": "decision.issued",  "claim": "clm_8f3ka92",  "stage": "decide",  "status": "DECIDED",  "decision": {    "outcome": "approved",    "by": "licensed_adjuster",    "license": "TX all-lines adjuster",    "attestation": "att_71b0e4",    "at": "2026-07-29T15:20:00Z"  },  "clocks": {    "pay": {      "rule": "TX: 5 business days",      "started": "2026-07-29",      "due": "2026-08-05"    }  },  "meter": "released"}

EVENTclaim.paid

The payment record once the payment is issued, with the decision it pays.

payload
{  "event": "claim.paid",  "claim": "clm_8f3ka92",  "stage": "pay",  "status": "DECIDED",  "decision": {    "outcome": "approved",    "by": "licensed_adjuster",    "attestation": "att_71b0e4",    "at": "2026-07-29T15:20:00Z"  },  "payment": {    "record": "pay_20c4d1",    "amount": 14210,    "currency": "USD",    "issued": "2026-07-31"  }}

EVENTpolicy.bound

The bound policy number and its effective date, once a licensed producer binds.

payload
{  "event": "policy.bound",  "quote": "qt_31c8f0",  "policy": "PAP-7741-TX",  "effective": "2026-08-03",  "meter": "released"}

EVENTdocuments.issued

The policy's documents: ID cards and the declarations page.

payload
{  "event": "documents.issued",  "policy": "PAP-7741-TX",  "documents": ["id_cards", "declarations"]}

How it refuses

A refusal is typed and worded, never a bare status code. The page your agent reads says what to do next.

StatusTypeWhen
200EMPTYA filter matched nothing. The body says what was asked.
401, 403BLOCKEDA key or scope can't reach this route. Reserved scopes answer with a worded reason.
402OFFERThe request would pass your spend ceiling. The body carries the re-authorization offer.
404The claim, quote or policy doesn't exist.
422The request is missing a required field, such as the loss date or state on a first notice.