Skip to navigation

Request a pet quote

View as Markdown

To get pet insurance quotes, send a POST /v1/quote-requests request with line set to pet. Prefill what you already know about the pet owner, such as their name or email address, and ask them for the rest. If you don’t know an optional value, omit the field instead of guessing.

Get the pet owner’s agreement

Before you request quotes, the pet owner must agree to Truvo’s quote disclosure. GET /v1/capabilities returns it as quote_disclosure. Show the pet owner its text as written, and ask whether they agree. If they agree, send its version as quote_disclosure_version, with quote_disclosure_accepted set to true. If the version isn’t the current one, the request fails with 422. The quote disclosure lists each rule and its error.

Minimal request

Generate one Idempotency-Key for each new quote request, and reuse it when you retry. To retry, rerun the curl command without regenerating KEY. Over MCP, pass the key as request_key.

Set TRUVO_API_KEY to your sandbox key and replace quote_disclosure_version with the version the pet owner agreed to:

KEY=$(uuidgen)
curl -X POST https://api.truvo.com/v1/quote-requests \
-H "Authorization: Bearer $TRUVO_API_KEY" \
-H "Truvo-Version: 2026-09-26" \
-H "Idempotency-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"line": "pet",
"quote_disclosure_version": "2026-10-06.1",
"quote_disclosure_accepted": true,
"application": {
"owner": {
"name": {
"first_name": "Test",
"last_name": "Applicant One"
},
"email": "alex@example.com",
"phone": "512-555-0123",
"address": {
"line1": "1 Main St",
"city": "Atlanta",
"state": "GA",
"postal_code": "30301"
}
},
"pets": [
{
"name": "Biscuit",
"species": "dog",
"breed": "Labrador Retriever",
"date_of_birth": "2021-04-02",
"sex": "female"
}
]
}
}'

Truvo returns 202 with a quote request. Poll the quote request to get its quotes.

Request fields

LabelMeaning
RequiredThe request fails with 422 without the field.
Required ifThe request fails with 422 without the field when the condition after the label is true.
RecommendedOptional. Carriers use the value to price the quote, so send it when you have it. If you omit it, they receive a default or no value.
No labelOptional. If Truvo applies a default, the table lists it.

Top-level fields · application · owner · pets[] · coverage

Top-level fields

FieldTypeDescription
line
Required
stringThe insurance line.
Value: pet.
quote_disclosure_version
Required
stringThe version of the quote disclosure that the pet owner agreed to. GET /v1/capabilities returns it as quote_disclosure.version.
quote_disclosure_accepted
Required
booleanSet to true after the pet owner agrees to the quote disclosure. Their agreement covers the quote and contact by phone, text, and email. If the value isn’t true, the request fails with 422.
application
Required
objectThe pet owner, pets, and coverage to quote. GET /v1/capabilities returns its JSON Schema as the line’s required_facts_schema.

application

FieldTypeDescription
owner
Required
objectThe pet owner’s name, contact details, and home address.
pets
Required
array of 1 to 10 objectsThe pets to insure.
coverageobjectThe coverage settings for all pets in the request. Truvo applies a default for each one you omit.

application.owner

FieldTypeDescription
name
Required
objectThe pet owner’s name.
name.first_name
Required
string, 1 to 100 charactersThe first name, such as Alex.
name.last_name
Required
string, 1 to 100 charactersThe last name, such as Smith.
email
Required
string (email), up to 254 charactersThe pet owner’s email address.
phone
Required
string, 1 to 32 charactersThe pet owner’s US phone number, including its area code, such as 512-555-0123. The sandbox accepts 512-555-0123; for live quotes, use the pet owner’s number. A live request with a number that nobody could answer, such as a fictional number in the 555-0100 to 555-0199 range, fails with 422.
address
Required
objectThe address of the pet owner’s home.
address.line1
Required
string, 1 to 200 charactersThe street address, such as 100 Example Way.
address.city
Required
string, 1 to 100 charactersThe city, such as Austin.
address.state
Required
stringThe two-letter state code, such as TX.
address.postal_code
Required
stringThe ZIP code, such as 78701 or 78701-1234.
address.line2string or null, 1 to 200 charactersA second address line, such as a unit number.

application.pets[]

FieldTypeDefaultDescription
name
Required
string, 1 to 100 charactersThe pet’s name, such as Biscuit.
species
Required
stringThe pet’s species.
Values: dog, cat.
breed
Required
string, 1 to 100 charactersThe pet’s breed, such as Labrador Retriever.
date_of_birth
Required
string (date)The pet’s date of birth, in YYYY-MM-DD format.
sex
Required
stringThe pet’s sex.
Values: female, male.
neutered
Recommended
booleanfalseWhether the pet is spayed or neutered.

application.coverage

FieldTypeDefaultDescription
deductible_minorinteger, 0 or more, a multiple of 100 (whole dollars)50000 ($500)The deductible, in US cents: 50000 is $500. If a carrier quotes a different amount, its quote reports the change in evidence.assumptions.
5000 $50
10000 $100
20000 $200
25000 $250
30000 $300
35000 $350
40000 $400
45000 $450
50000 $500
55000 $550
60000 $600
65000 $650
70000 $700
75000 $750
80000 $800
85000 $850
90000 $900
95000 $950
100000 $1,000
110000 $1,100
120000 $1,200
130000 $1,300
140000 $1,400
150000 $1,500
160000 $1,600
170000 $1,700
180000 $1,800
190000 $1,900
200000 $2,000
210000 $2,100
220000 $2,200
230000 $2,300
240000 $2,400
250000 $2,500
reimbursement_percentinteger, 1 to 10080The percentage of covered vet expenses that the carrier reimburses after the deductible, such as 80 for 80%. If a carrier quotes a different percentage, its quote reports the change in evidence.assumptions.
annual_limit_minorinteger, greater than 0, a multiple of 100 (whole dollars)1000000 ($10,000)The annual limit, in US cents: 1000000 is $10,000. If a carrier quotes a different amount, its quote reports the change in evidence.assumptions.
250000 $2,500
300000 $3,000
400000 $4,000
500000 $5,000
600000 $6,000
700000 $7,000
750000 $7,500
800000 $8,000
900000 $9,000
1000000 $10,000
1250000 $12,500
1500000 $15,000
2000000 $20,000
2500000 $25,000
3000000 $30,000

Responses

RequestResponse
Has every required field202 with a quote request. Its assumptions lists each default that Truvo applied.
Is missing a required field of application422 needs_information. field_errors lists each missing field with the code required.
Is missing line, application, or a disclosure field422 invalid_input. field_errors identifies the field.
Has an invalid value422 invalid_input. field_errors lists each invalid field, with allowed_values when the API can list the values the field accepts.

A request that fails with 422 isn’t stored, so you can send the corrected request with the same Idempotency-Key or a new one.

After Truvo accepts a request, a carrier can still report missing_information in market_outcomes if it needs more information than the request included. See Why did a request finish with no quotes?.

Default values

If you omit neutered or a coverage field, Truvo sends carriers the default and reports it in the quote request’s assumptions:

{
"path": "application.coverage.deductible_minor",
"value": 50000,
"source": "pet_coverage_default",
"label": "Truvo default, $500."
}

To send carriers another value, create a new quote request that includes the field.

Missing required fields

If pets is missing or empty, field_errors lists the array and the required fields of its first item. The following response is for a request whose application is empty:

{
"error": {
"code": "needs_information",
"message": "The quote request needs more information.",
"field_errors": [
{
"path": "application.owner.name.first_name",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.name.last_name",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.email",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.phone",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.address.line1",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.address.city",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.address.state",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.owner.address.postal_code",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets.0.name",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets.0.species",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets.0.breed",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets.0.date_of_birth",
"message": "This fact is required.",
"code": "required"
},
{
"path": "application.pets.0.sex",
"message": "This fact is required.",
"code": "required"
}
],
"retry_action": {
"type": "supply_facts",
"summary": "Supply the missing facts and send the request again."
},
"doc_url": "https://docs.truvo.com/v1/errors/needs_information"
},
"request_id": "req_2a20b55ec50f115e"
}