Webhook events & payloads
InsurGrid pushes data to a URL you control — you never poll. There are two events, delivered as two distinct envelopes. Subscribe to either or both, on separate endpoint URLs if you like.
Event (topic)
Sent when
data carries
A declaration page is extracted (policy-data flow).
A time-limited document link, the policy type, and the extracted policy fields.
A consumer completes and submits an embedded form.
The full form response — every answer, file links, and any filled ACORD forms.
Both share the same outer shape:
{
"topic": "client-submission",
"data": { /* event-specific — see below */ }
}Both are verified the same way and follow the same delivery rules — see Verify signatures and Delivery & de-duplication. In short: every request carries an x-signature header (HMAC-SHA256 of the raw request body); delivery is at-least-once, so de-duplicate — form-submission carries submission_id; the policy-data body has no dedicated id, so de-duplicate on a hash of the payload contents.
Policy-data event: client-submission
Fired when InsurGrid finishes extracting a submitted declaration page. data always carries document_link and policy_type, plus the extracted policy fields — which fields appear depends on policy_type.
Field sets vary by insurance line; the examples below are representative. InsurGrid extracts over twenty insurance lines, from a handful of source formats, and the exact field set for a given document depends on what that document actually contains. Rather than a single frozen schema, this page leads with two fully-worked, real-shape examples — auto and homeowners, the two most common lines — with complete field tables, then gives a compact map of what to expect from every other line. Treat the field tables as "the shape you'll usually see," not a contract that every field is always present.
Envelope
topic
string
The event type. Always "client-submission" for policy data.
"client-submission"
data.document_link
string (URL)
A time-limited link to the source declaration-page file. Fetch and store it promptly — see the warning below.
"https://files.insurgrid.com/dl/9f2a7b/declaration.pdf"
data.policy_type
string
A descriptive label for the insurance line, set per document (e.g. "Personal Auto", "Commercial Auto", "Homeowners", "Umbrella", "Other"). It is not a fixed code — don't hard-match on exact strings; use it as a hint and branch on the fields actually present. See Insurance line → field groups.
"Personal Auto"
data.*
object / array
The extracted policy fields. Set depends on policy_type.
—
document_linkexpires. It's a temporary download link. If you need the file, fetch and store it on your side promptly — don't save the link and expect it to work later.
Example: an auto policy
Auto field reference
policy.provider
string
Carrier that wrote the policy.
"Progressive"
policy.policy_number
string
The policy number.
"912345678"
policy.coverage_period.start_date / end_date
string (date)
Policy effective and expiration dates.
"2026-03-01"
policy.annual_policy_premium
number
Total annual premium.
1842.00
policy.payment_schedule
string
How the premium is billed.
"monthly"
policy.policy_status
string
Lifecycle state of the policy as of extraction.
"active"
policyholder.full_name
string
Named insured's full name.
"Jane Roe"
policyholder.address
object
Mailing address — address_line_1, city, state, postal_code, country.
{ "city": "Austin", "state": "TX" }
policyholder.phone / email
string
Contact details, when present on the declaration page.
"jane.roe@example.com"
drivers[]
array of object
Every listed driver — name, date_of_birth, driver_license_number, driver_license_state, relationship_to_policyholder, assigned_vehicles.
—
vehicles[]
array of object
Every scheduled vehicle.
—
vehicles[].vin
string
Vehicle identification number.
"JTMRFREV0ND123456"
vehicles[].year / make / model
number / string / string
Vehicle description.
2022, "Toyota", "RAV4"
vehicles[].garaging_address
object
Where the vehicle is principally kept.
{ "city": "Austin" }
vehicles[].coverages_details.liability
object
Per-person / per-accident bodily injury and property damage limits.
{ "bodily_injury_per_person": "$100,000" }
vehicles[].coverages_details.comprehensive / .collision
object
deductible and limit for each.
{ "deductible": "$500" }
discounts[]
array of object
Applied discounts — type, description, amount or percentage.
{ "type": "multi-policy", "percentage": 10 }
insurer_information
object
Carrier contact details — company_name, company_phone, claims_phone, agent_name, agent_phone.
{ "agent_name": "Sam Carter" }
prior_carrier
object
Previous carrier, when shown on the declaration page — name, policy_number, expiration_date.
{ "name": "GEICO" }
Auto policies can also carry additional_insured[], surcharges[], endorsements[], exclusions[], group_plan, and billing_information when the source document includes them.
Example: a homeowners policy
Homeowners field reference
policy.provider / policy_number
string
Carrier and policy number.
"State Farm", "HO-3345219"
policy.coverage_period.start_date / end_date
string (date)
Policy effective and expiration dates.
"2026-05-15"
policy.annual_policy_premium
number
Total annual premium.
2140.00
policyholder.full_name
string
Named insured's full name.
"Marcus Lee"
policyholder.address
object
Mailing address.
{ "city": "Round Rock" }
properties[]
array of object
Every insured property (usually one).
—
properties[].location
object
The property's address.
{ "address_line_1": "48 Birchwood Ln" }
properties[].ownership_status
string
owned, rented, leased, or other.
"owned"
properties[].construction_type
string
Building construction.
"frame"
properties[].year_built / square_footage
number
Building characteristics.
2004, 2350
properties[].roof_type / roof_year
string / number
Roof material and install/replacement year.
"composition shingle", 2019
properties[].coverages[]
array of object
Each coverage line — type (e.g. Dwelling, Personal Property, Loss of Use, Liability), limit, deductible, replacement_cost.
{ "type": "Dwelling", "limit": 420000 }
properties[].deductibles
object
Named deductibles — all_peril, wind_hail, hurricane, earthquake, flood.
{ "all_peril": 2500 }
properties[].mortgagee[]
array of object
Lienholder(s) on the property — name, loan_number.
{ "name": "Wells Fargo Home Mortgage" }
insurer_information
object
Carrier contact details — company_name, company_phone, claims_phone, agent_name, agent_phone.
{ "agent_name": "Priya Nair" }
prior_carrier
object
Previous carrier, when shown on the declaration page.
{ "name": "Allstate" }
Homeowners policies can also carry additional_insured[], policy_level_coverages[], and billing_information when the source document includes them.
Insurance line → field groups
InsurGrid extracts these insurance lines. Every one shares the same envelope (document_link, policy_type, plus policy fields) — this table tells you which top-level groups to expect in data for each line, so you know what to look for even for a line not fully worked out above.
Auto
policy, policyholder, additional_insured, drivers, vehicles, discounts, surcharges, endorsements, exclusions, insurer_information, prior_carrier, billing_information — see full example above
Homeowners
policy, policyholder, additional_insured, properties, policy_level_coverages, insurer_information, billing_information, prior_carrier — see full example above
Condo · renters · landlord · pet · personal marine/watercraft · powersports · general liability · other/uncommon lines
policy, policyholder, additional_insured, drivers, vehicles, discounts, surcharges, endorsements, exclusions, insurer_information (auto-shaped groups apply only where relevant, e.g. drivers/vehicles on a marine or powersports policy describe the operator and the craft/vehicle)
Personal umbrella
policy_information, contacts, coverages, underlying_policies, scheduled_exposures, drivers, endorsements, premium_breakdown, exclusions, territorial_coverage, business_activities, prior_coverage
Personal / small-business cyber
policy_information, contacts, coverages, endorsements, monetary_values
Flood
named_insured, insurer_information, agent_information, insured_information, policy_details, property_information, coverage_details, renewal_payment_information, mortgagee_information, additional_interests
Directors & officers (D&O)
policy, policyholder, additional_insureds, coverages, limits_and_retentions, premium_details, endorsements, exclusions, broker_information, locations, expiring_policy
Commercial package (CPP)
policy_information, contacts, coverage_parts_summary, coverages, business_operations, site_locations, mortgageholders, loss_payees, excluded_persons, endorsements, premium_breakdown, vehicles
Commercial auto
policy info, premium info, coverage limits, vehicles, drivers, business info (FEIN/NAICS/SIC), hired & non-owned auto exposure, form type & covered autos, endorsements
Business owner's policy (BOP)
policy info, premium info, property coverage (Section I: building/BPP/business income), liability coverage (Section II: the "Big 6" limits), built-in coverages, locations, additional insureds, endorsements
Commercial general liability (CGL)
policy info, premium info, coverage limits (the CGL "Big 6"), deductibles, locations & classifications, additional insureds, endorsements
Workers' compensation
policy info, premium info, Part 1 (workers' comp coverage), Part 2 (employers liability), classifications & payroll, experience modification, locations, other-states coverage, administrative details, audit provisions, endorsements
Commercial cyber
policy info, premium info, coverage limits, aggregate limit, retention / self-insured retention, business info, endorsements
Commercial flood
policy info, NFIP/program details, rating & pricing factors, premium info, coverage limits, increased cost of compliance (ICC), locations/buildings, mortgagees, claims history, endorsements
Commercial property (habitational)
policy info, premium info, coverage limits, property locations, additional info, endorsements
Commercial inland marine
policy info, premium info, coverages, scheduled items, additional insureds, endorsements
Commercial umbrella
policy info, premium info, coverage limits, underlying policies, form type & additional info
form-submission
Fired when a consumer completes and submits an embedded form (see Builder sessions → Embedding the fill form). Carries the entire response in one delivery — every answer, links to any uploaded documents, and filled ACORD forms. No follow-up API calls needed.
Envelope
Example
Field reference
form
object
Which form was submitted — id, public_id, name, insurance_line (personal / commercial).
{ "id": 4412, "insurance_line": "commercial" }
submission_id
integer
Unique id for this submission. De-duplicate on this.
55231
trace_id
string
Correlation id for this submission across InsurGrid systems — quote it when contacting support or matching logs.
"tr_5f3c9a2b7e14"
submitted_at
string (ISO-8601)
When the submission completed, UTC.
"2026-08-24T18:22:40Z"
agent
object
The agent this submission is attributed to — id, name, email.
{ "name": "Jane Smith" }
contact
object
The consumer's contact details, when captured — name, email, phone.
{ "email": "jane.roe@example.com" }
answers[]
array of object
Every answer, each with the question's question_id, label, type, and submitted value. See Answer value types.
—
acord
object
Present when the form maps to ACORD forms. is_acord_ready, form_ids, archive_url (a zip of the filled ACORD PDFs).
{ "form_ids": ["125", "140"] }
metadata
object
Any correlation values you supplied when the form link was generated, echoed back.
{ "partner_ref": "your-correlation-id" }
Answer value types
The type on each answer matches the question's type in Forms API → Question fields, and determines the shape of value:
Question type
value shape
Example
short_text, long_text, email, date
string
"Jane Roe"
number
number
24
dropdown, single_choice
string (the chosen option)
"Commercial"
multi_choice
array of string
["Fire", "Theft"]
address
object: line1, line2, city, state, zip, country
{ "city": "Austin", "state": "TX" }
file_upload
array of { filename, content_type, url }
[{ "filename": "losses.pdf", "url": "https://…" }]
data_table
array of row objects; columns described by the answer's own column_schema
[{ "building": "A", "units": 24 }]
File links. Each url under file_upload is a time-limited download link, as is acord.archive_url. Fetch and store the file on your side promptly — the link expires. Re-fetching the submission via GET /v2/submissions/{submission_id} re-signs the links if you need them again later.
Related
Delivery & de-duplication — retry behavior and de-dupe patterns (content hash for policy-data,
submission_idfor form-submission).Verify signatures — the
x-signatureHMAC check, over the exact raw request bytes.Register your endpoint & choose an auth type — signature, Bearer, Basic, or API-key delivery auth.
Submissions API — re-fetch a
form-submissionpayload on demand; same object shape.Forms API — question types and
field_mappingreferenced byanswers[].
