Quickstart
This guide walks you through authenticating with the API and getting your first insurance quote.
Prerequisites
- API credentials (username and password) from Cover Whale — request access if you don’t have them
- A tool for making HTTP requests (cURL, Postman, or your preferred HTTP client)
Step 1: Authenticate
Exchange your credentials for an access token:
curl -X POST https://app.coverwhale.com/api/v1/authentication \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"username": "your-email@example.com",
"password": "your-password"
}'
Response:
{
"AccessToken": "eyJraWQiOiJnRk5oTTh2RnRKWXVDVXU1S...",
"RefreshToken": "eyJjdHkiOiJKV1QiLCJlbmMiOi...",
"ExpiresIn": 3600
}
Save the AccessToken — you’ll include it in all subsequent requests. It expires after 3600 seconds (1 hour).
Step 2: Get an Indication
Submit basic information to get preliminary pricing. The request body is organized by section — insured info, coverage options, and addresses:
curl -X POST https://app.coverwhale.com/api/v1/getindication \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "AccessToken: YOUR_ACCESS_TOKEN" \
-d '{
"insuredInformation": {
"dotNumber": 1234567,
"legalName": "ACME TRUCKING LLC",
"yearsInBusiness": 3
},
"coverage": {
"requestAl": "Y",
"requestApd": "Y",
"requestMtc": "Y",
"effectiveDate": "03/01/2026"
},
"garageAddress": {
"garageState": "CA",
"garageZip": "90016"
},
"mailingAddress": {
"mailingState": "CA",
"mailingZip": "90016"
},
"limits": {
"nbrOfTrucks": 3,
"valueOfTrucks": 150000
}
}'
Response:
{
"status": "Indication",
"submission_number": "2172961",
"coverages": {
"al": {
"totalCost": 0,
"premium": 20617.52,
"limit": 1000000,
"deductible": 0
}
}
}
The response includes preliminary pricing for each requested coverage line (AL, APD, MTC, etc.).
The submission_number in the response is your key identifier. Save it — you’ll use it for checking status, binding, endorsements, and every other operation on this submission.
Step 3: Get a Full Quote
For final pricing, submit the complete application with insured details, addresses, vehicles, and drivers:
curl -X POST https://app.coverwhale.com/api/v1/getquote \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "AccessToken: YOUR_ACCESS_TOKEN" \
-d '{
"insuredInformation": {
"dotNumber": 1234567,
"legalName": "ACME TRUCKING LLC",
"yearsInBusiness": 3,
"email": "insured@example.com"
},
"coverage": {
"requestAl": "Y",
"requestApd": "Y",
"requestMtc": "Y",
"effectiveDate": "03/01/2026"
},
"garageAddress": {
"garageStreet": "123 Main St",
"garageCity": "Los Angeles",
"garageState": "CA",
"garageZip": "90016",
"garageCounty": "Los Angeles"
},
"mailingAddress": {
"mailingStreet": "123 Main St",
"mailingCity": "Los Angeles",
"mailingState": "CA",
"mailingZip": "90016",
"mailingCounty": "Los Angeles"
},
"limits": {
"nbrOfTrucks": 3,
"valueOfTrucks": 150000,
"limitAutoLiability": 1000000
},
"vehicles": [
{
"year": 2020,
"make": "Freightliner",
"model": "Cascadia",
"vin": "1FUJGLDR0CLBK5432",
"value": 55000,
"classKey": "1"
}
],
"drivers": [
{
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "06/15/1985",
"licenseState": "CA",
"licenseNumber": "D1234567",
"yearsExperience": 8
}
]
}'
Response:
{
"status": "Quoted",
"submission_number": "2172961",
"coverages": {
"al": {
"totalCost": 20617.52,
"premium": 20617.52,
"limit": 1000000,
"deductible": 0
}
}
}
The response includes final pricing with premiums, fees, limits, and deductibles for each coverage line.
Step 4: Check Submission Status
After submitting a quote, check its status. The submission moves through a lifecycle: Submitted → In Review → Quoted → Request to Bind → Bound.
curl -X GET https://app.coverwhale.com/api/v1/submission/2172961 \
-H "Accept: application/json" \
-H "AccessToken: YOUR_ACCESS_TOKEN"
Once the status is Quoted, you can proceed to bind.
Step 5: Bind the Quote
Binding converts the quote into an active insurance policy. You’ll select which coverage lines to include and provide binding details:
curl -X PUT https://app.coverwhale.com/api/v1/bind/2172961 \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "AccessToken: YOUR_ACCESS_TOKEN" \
-d '{
"coverage": {
"includeAL": "Y",
"includeAPD": "Y",
"includeMTC": "Y",
"brokerFeeAL": 10,
"brokerFeeAPD": 10,
"brokerFeeMTC": 10,
"optInCWFinancing": "N",
"electTRIA": "N",
"effectiveDate": "03/01/2026"
},
"bindingMethod": {
"signFirst": "N",
"electronicSignature": "Y",
"retailAgentEmail": "agent@example.com",
"insuredEmail": "insured@example.com",
"insuredFullName": "John Doe"
},
"shippingAddress": {
"dashcam_shipping_address": "insured",
"street": "123 Main St",
"city": "Los Angeles",
"state": "CA",
"zip": "90016",
"county": "Los Angeles"
}
}'
Response:
After binding, the submission status changes to Request to Bind. Cover Whale’s underwriting team reviews and finalizes the policy — the status then moves to Bound and policy documents are generated.
That’s the complete flow: Authenticate → Get Pricing → Submit Quote → Bind Policy.
Next Steps