API Reference
Getting Started
Session Information
The Auto Insurance API requires basic
sessionInformation(the end user's IP address and user agent) with every offer search.Carriers use this information as part of underwriting, compliance, and fraud-prevention checks, so it must be collected from the live user session and passed through accurately.
Authentication & Environments
A representative from Engine by Gen will set up an account and provide an authorization token to access the Engine API.
An authorization token is required to authenticate every request. Include it in the request headers; otherwise the API returns an error.
Every request must also include an Api-Version header. The current supported version for the Auto Insurance API is
2026-02-25.Test and production tokens are separate. Requests made with a test token are not reflected in performance reporting or payable events. Switch to the production token once testing is complete.
A test token only works against the test environment, and a production token only works against production. Using a token against the wrong environment returns
401 Unauthorized.For more information, see our API Reference page
Test / Dev
https://dev-api.engine.tech
Test authorization token
Production
https://api.engine.tech
Production authorization token
Rate tables are environment-specific
A uuid created in the test environment cannot be polled against production (and vice versa). Doing so returns 404 Not Found.
Required Headers
Authorization
Bearer <AUTH_TOKEN>
Api-Version
Most recent API Version, e.g. 2026-02-25
Content-Type
application/json
Step 1: Retrieve Supported Issuers
Before submitting an offer search, retrieve the list of supported insurance carriers:
Example response:
Pass the issuer's id as the value of autoInsuranceInformation.currentIssuer in your offer search:
The name and logoImageUrl fields are provided for display purposes only. Use the id value when making requests.
Step 2: Submit the Offer Search
Set
productTypesto["AutomobileInsurance"]Submit a POST request to
/offerSearches/
Sample Request/Response
Request Fields
Fields marked Recommended for POST /offerSearches/ are technically optional, but providing them meaningfully improves quote accuracy and offer matching.
Omitting an optional field implies "no information" for that attribute.
Required fields
productTypes
array of strings
Types of products the user is interested in. Use ["AutomobileInsurance"].
sessionInformation.ipAddress
string
IP address of the end user's live session, used for underwriting and fraud checks.
sessionInformation.userAgent
string
User agent string of the end user's browser or device, captured from the live session.
Recommended fields
autoInsuranceInformation.currentIssuer
string
The lead's current or most recent auto insurance carrier. Use "notinsured" if the lead has no current coverage. Must be a valid issuer ID returned by GET /leads/autoInsurance/issuers.
autoInsuranceInformation.numberOfVehicles
integer
Number of vehicles the lead wants to insure.
autoInsuranceInformation.policyHolderInformation.isHomeOwner
boolean
Whether the lead owns their home. Used by carriers as a rating factor and may unlock bundling discounts.
autoInsuranceInformation.policyHolderInformation.isMilitary
boolean
Whether the lead is active-duty military, an honorable veteran, or a military family member. Used to surface military discounts.
personalInformation.zipCode
string
ZIP code of the lead's residence. Used to match the lead with carriers licensed in their state and to rate the offer.
personalInformation.dateOfBirth
string
Date of birth of the lead, in YYYY-MM-DD format. Used for age-based eligibility and rating.
Optional tracking fields
clientTags
array of strings
Client-defined tag(s) for tracking and attribution, such as a sub-affiliate or campaign ID. See Client Tags for Attribution below.
Client Tags for Attribution
Partners can optionally pass clientTags.subId, an array of client-defined string tags, with each offer search request.
Engine includes these tags in reporting, letting a partner attribute leads and revenue back to a specific sub-affiliate, campaign, or placement. This field has no effect on which offers are returned; it is purely for tracking.
See the Attribution Tracking page for more information
Step 3: Poll for the Rate Table
Capture the uuid returned in the Step 1 response and issue a GET request to the Offer Searches endpoint:
Polling Process
After the POST in Step 1, poll
GET /offerSearches/{uuid}once per second for up to 15 seconds.Check
pendingResponseson each response:Not empty: Engine is still waiting on one or more partners. Keep polling.
Empty: Every partner has finished. Stop polling;
offersis the final set.
As each partner responds, its offers are added to
offersand that partner is removed frompendingResponses.
Sample Responses
Immediately after submitting the offer search, the response may show no offers yet, with one or more partners listed under pendingResponses:
Once a partner has responded, its offer(s) appear in the offers array and pendingResponses no longer contains that partner:
Response Fields
uuid
string
Rate table UUID. Use this value to poll the rate table endpoint.
"6204740b-25ca-407a-9927-d229c2b3e315"
leadUuid
string
Unique identifier for the lead associated with the offer search.
"ad5cc266-b358-4c57-85f1-968f746ae0e4"
offers
array
Array of completed auto insurance offers returned so far. See Offer Fields below.
—
pendingResponses
array
Array of partners Engine is still waiting to hear back from. Keep polling while this array is non-empty.
—
pendingResponses[].partner
object
Metadata about a partner whose response is still pending. See Partner Fields below.
—
pendingResponses[].offerCatalogProductTypes
array of strings
Product type(s) the pending partner was queried for.
["AutomobileInsurance"]
createdAt
string (ISO 8601)
Timestamp the rate table was created.
"2026-07-30T17:58:31.957182Z"
Fields on pendingResponses[].partner. These describe a pending carrier/partner and supply the branding and disclosure content you may need to display.
uuid
string
Unique identifier for the partner.
"0ac9a64b-177f-4699-910b-7c301772331a"
name
string
Partner name.
"Sample Carrier Co."
brandName
string
Brand name shown to the consumer.
"Sample Carrier"
brandUuid
string
Unique identifier for the brand.
"871f6802-d27d-4092-8f82-d1d205c7a478"
imageUrl
string (url)
Partner/brand logo URL.
"https://images.engine.tech/logos/dev/sample-carrier-autoinsurance.svg"
description
string
Optional partner description. May be empty.
—
disclaimer
string
Partner-level disclaimer / license text. When populated, this must be displayed to the user. May be empty.
—
supportsPreSelect
boolean
Whether the partner supports pre-selection.
false
shouldDisplayPreSelect
boolean
Whether pre-selection should be displayed.
false
supportsPersonalizedOffers
boolean
Whether the partner supports personalized offers.
true
uuid
string
Unique identifier for the individual offer.
"88090bc3-dda6-445b-bb91-5a1e53dc18a5"
version
integer
Version number of the offer.
1
rank
integer
Engine's recommended display rank. Display offers in ascending order by rank (rank 1 first).
1
recommendationScore
number
Present in responses but not used for auto insurance ranking — use rank instead.
11
headline
string
Primary marketing headline to display on the offer card.
"Compare Auto Insurance Rates From Top-Rated Carriers"
descriptionPoints
array of strings
Marketing bullet points describing the offer. Display as checkmark bullets on the offer card.
["Free rate quote online — no sales calls", "..."]
productType
string
Product type of the offer.
"AutomobileInsurance"
productDisplayName
string
Display name for the product/offer type (e.g., internal labeling or subheadline).
"Compare-Discounts"
status
string
Status of the offer. Only display offers with status "active".
"active"
isMonetized
boolean
Whether the offer is monetized. Use with url / unmonetizedUrl.
true
url
string (url)
Click-through URL for the offer's monetized destination. Use as the "View Rate" CTA when isMonetized is true.
"https://offers.engine.tech/ref/..."
unmonetizedUrl
string (url)
Click-through URL for the offer's unmonetized destination. Use when the offer should not be tracked for monetization.
"https://offers.engine.tech/uref/..."
impressionTrackingPixelUrls
array of strings (url)
One or more tracking pixel URLs that must be fired when the offer is rendered/viewed. See Impression Tracking in Building Your UI.
["https://track.engine.tech/p/impr.gif?..."]
financialInstitutionUuid
string
Unique identifier for the carrier/financial institution offering the policy.
"8f04c171-85db-4753-bdc7-31bb11c59f4c"
financialInstitutionDisplayName
string
Display name of the carrier/financial institution.
"Sample Auto Insurance Provider"
financialInstitutionImageUrl
string (url)
URL of the carrier/financial institution's logo.
"https://images.engine.tech/logos/dev/sample-carrier-logo.png"
Response Codes & Error Handling
Successful Request (2xx)
201 Created
Endpoint: POST /offerSearches/
Meaning: The request was accepted and a rate table was created. This does not mean offers were returned.
Next action: Check offers and pendingResponses. Poll when pendingResponses is non-empty.
200 OK
Endpoint: GET /offerSearches/{uuid}
Meaning: The rate table was found and returned. offers may still be empty.
Next action: Check offers and pendingResponses. Keep polling until pendingResponses is empty.
Completed searches with no offers
An empty offers array and empty pendingResponses array means no matches were found. This is a silent failure. The request succeeded, but there are no offers to display.
Common causes include:
Missing FCRA consent.
State exclusions.
Missing required fields.
Automated risk screening.
Carrier unavailability.
Unsuccesful Request (4xx)
400 Bad Request
Endpoint: Any
Meaning: The request was malformed and was not processed.
Next action: Fix the malformed input.
Common causes:
Missing or invalid Api-Version header — required on every request; it must match a supported version, such as
2026-02-25.Invalid JSON — the request body could not be parsed.
Malformed UUID — a path parameter, such as
/offerSearches/{uuid}, used an invalid UUID format.
The response body contains error objects describing the failed field and reason.
401 Unauthorized
Endpoint: Any
Meaning: The authorization header is missing, expired, or invalid.
Next action: Verify the bearer token and environment. Test tokens only work with dev-api.engine.tech. Production tokens only work with api.engine.tech.
404 Not Found
Endpoint: GET /offerSearches/{uuid}
Meaning: The rate table UUID does not exist.
Next action: Verify the UUID and environment.
This can happen when:
The UUID was copied incorrectly.
A dev UUID is requested from production, or the reverse.
422 Unprocessable Entity
Endpoint: Any
Meaning: The Api-Version header is present, but its version string is not recognized.
Next action: Use a supported version. See Authentication & Environments.
Retry Request (429 & 5xx)
429 Too Many Requests
Endpoint: Any
Meaning: Too many requests were sent in a short window. This usually results from polling faster than the recommended cadence.
Next action: Slow polling, honor Retry-After when present, and retry with exponential backoff.
Poll no more than about once per second per rate table.
If
Retry-Afteris present, wait that many seconds before retrying.On repeated
429responses, back off exponentially, such as 1s, 2s, then 4s.
500 / 503 Server Error
Endpoint: Any
Meaning: Engine encountered a temporary internal error or is briefly unavailable. These responses are transient and are not caused by malformed input.
Next action: Retry with exponential backoff within the polling window. Contact your Engine representative if the error persists.
Retry with exponential backoff, such as 1s, 2s, then 4s.
Do not treat a single 5xx response as a failed search. Keep polling within your timeout window.
If 5xx responses continue past the timeout, stop polling and show a graceful error.
Last updated
Was this helpful?

