Cuvrd REST API
Single Vehicle Subscription VSC API - v1
Current Version
1.1.1, Updated August 14, 2023
Overview
The purpose of this API is to allow you to obtain Monthly Payment Subscription Extended Warranty/Vehicle Service Contract pricing for your customer's vehicles for display in your app or website, as well as provide a personalized link for that customer to your organization's whitelabel website so that they may purchase subscription extended warranty coverage.
The Cuvrd Single Vehicle Subscription VSC API is a single-step process: send us your customer's info and you'll get pricing and a link in return.
Our primary goal is to make it as simple as possible for you to get the universe of plans and pricing available for your customer's vehicle. We only ask for the vehicle's VIN (or Year, Make, and Model), current mileage, and the customer's state (along with your API credentials) to price out our plans.
In return, you will receive a summary pricing information as well as a personalized link for your customer to purchase a plan for their vehicle.
Personalized link info
If you pass your customer's personal information (such as name/address/email/phone), that data will be encrypted using a hash in the personalized link the API returns. This data is unlocked when your customer clicks on the personalized link, and is used to pre-fill their information during the checkout process.
If you do not wish to have your customer's data pre-filled during checkout, simply do not provide this data during the price request.
We do, however, encourage you to at the very least provide a unique customer_id
for each record that ties to a value in your system.
Sample requests
We provide sample API calls next to each method using cURL. All you need to do is insert your specific parameters, and you can test the calls from the command line. See this tutorial on using cURL with APIs.
You can also use Postman if you aren't familiar with cURL. Postman is an easy-to-use API development and testing platform. If you prefer to work with our Postman collection, contact us for access to the latest version.
Requests and response
Both request body data and response data are formatted as JSON. Content type for responses will
always be application/json
.
Errors
The Cuvrd Term VSC API provides detailed, user-friendly error codes to aid with development and debugging.
More details regarding error responses are located in the errors section toward the bottom of this page.
The API will typically respond with a status of 200
, even in cases involving
authentication errors.
Occasionally, the API may respond with a 404
or a 50x
error, and is an
indication that we've probably screwed something up and are working to fix it.
Please contact us and let us know right away if you receive anything other than status
200
.
Subscription API URL
The Cuvrd Subscription production API is located at:
https://api.cuvrd.com
The Cuvrd Subscription testing API is located at:
https://api.demo.cuvrd.com
Note: The Subscription API URLs are different than the Term VSC API URLs.
Authentication
Credentials are passed to the API in the URL of the request as query parameters. There is no need to pass
authentication credentials as a header. Our API requires two query parameters: apiKey
and whitelabel
.
Your organization will be issued production Subscription API credentials after you sign up with Cuvrd.
You may use the testing credentials provided in the next section in our test environment.
Testing Query Parameters
Testing Vendor ID:
whitelabel=api-testing-website
Testing API Key:
apiKey=CV.KbHvHnUrPUs1UcPuep.OFwBG24zLxRudK61Sy
Note: Test credentials work only in the testing environment--they do not work in production.
Documentation
Subscription Price/Personalized Link Request
Subscription API Endpoint:
/api/vendor/personalized-offer
Subscription API Full URL Example:
https://api.demo.cuvrd.com/api/vendor/personalized-offer?apiKey=CV.KbHvHnUrPUs1UcPuep.OFwBG24zLxRudK61Sy&whitelabel=api-testing-website
Header:
Content-Type: application/json
Body Parameters
Key/Type | Required | Description | vin string |
Yes* | 17 character vehicle identification number. *Required if year , make , and model are not sent.
If vin is provided, year , make , and model will be ignored. |
---|---|---|
year string |
Yes* | Vehicle year. *Required if vin is not sent.Will be ignored if vin is provided. |
make string |
Yes* | Vehicle make. *Required if vin is not sent.Will be ignored if vin is provided. |
model string |
Yes* | Vehicle model. *Required if vin is not sent.Will be ignored if vin is provided. |
series string |
No | Extended vehicle model information. |
mileage integer |
No | The vehicle's current mileage. |
customer_id string |
No | Your internal unique ID for this Customer. |
first_name string |
No | Customer's first name. |
last_name string |
No | Customer's last name. |
email string |
No | Customer's email address. |
phone string |
No | Customer's 10 digit phone number, digits only. |
address string |
No | Customer's street address. |
address_2 string |
No | Apt, Unit, etc. |
city string |
No | Customer's city. |
state_id string |
No | Customer's 2 letter state code, all caps. |
zip string |
No | Customer's 5 digit zip code. |
Notes:
– state_id
and zip
are not required but more accurate offers will be generated if one of the two are provided. If both state_id
and zip
are provided
state_id
takes prescedence over zip
.
– mileage
is not required but the API will return more accurate offers if provided. If mileage
is not provided, mileage will be estimated at 1,000 miles per month of vehicle
service, beginning in October of the year prior to the model year (i.e.: 2021 Ford Escape will have an estimated in-service date of October 1, 2020)
cURL example
curl --location --request POST 'https://api.demo.cuvrd.com/api/vendor/personalized-offer?apiKey=CV.KbHvHnUrPUs1UcPuep.OFwBG24zLxRudK61Sy&whitelabel=api-testing-website' \
--header 'Content-Type: application/json' \
--data-raw '{
"vin": "JTMRFREV1JJ192877",
"year": null,
"make": null,
"model": null,
"series": null,
"mileage": 36001,
"customer_id":"ABC12345",
"first_name": "Buddy",
"last_name": "DuBuque",
"email": "info@cuvrd.com",
"phone": "8889991212",
"address": "123 Any Street",
"address_2": null,
"city": "Norwichville",
"state_id": "WV",
"zip": "01234"
}'
Sample JSON
{
"vin": "JTMRFREV1JJ192877",
"year": null,
"make": null,
"model": null,
"series": null,
"mileage": 36001,
"customer_id":"ABC12345",
"first_name": "Buddy",
"last_name": "DuBuque",
"email": "info@cuvrd.com",
"phone": "8889991212",
"address": "123 Any Street",
"address_2": null,
"city": "Norwichville",
"state_id": "WV",
"zip": "01234"
}
Price Request Schema
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"title": "Cuvrd Single Vehicle Subscription Vendor API - Price request",
"description": "Subscription contract price request schema.",
"anyOf": [
{ "required": [
"vin"
]},
{ "required": [
"year",
"make",
"model"
]},
],
"vin": {
"type": "string",
"minLength": 17,
"maxLength": 17,
"description": "17 character alphanumeric VIN of the vehicle. If vin is provided, year, make, and model will be ignored.",
"example": "3C63R3GL3JG236800"
},
"year": {
"type": "string",
"minLength": 4,
"maxLength": 4,
"description": "Vehicle year",
"example": "2018"
},
"make": {
"type": "string",
"description": "Vehicle make",
"example": "TOYOTA"
},
"model": {
"type": "string",
"description": "Vehicle model",
"example": "CAMRY"
},
"series": {
"type": "string",
"description": "Extended vehicle model information",
"example": "CAMRY XLE"
},
"mileage": {
"type": "integer",
"minimum": 1,
"maximum": 999999,
"description": "The vehicle's current mileage"
},
"customer_id": {
"type": "string",
"maxLength": 20,
"description": "Your internal unique ID for this Customer"
},
"first_name": {
"type": "string",
"maxLength": 20,
"description": "Customer's last name"
},
"last_name": {
"type": "string",
"maxLength": 20,
"description": "Customer's last name"
},
"email": {
"type": "string",
"maxLength": 30,
"description": "Customer's email address"
},
"phone": {
"type": "string",
"minLength": 10,
"maxLength": 10,
"description": "Customer's 10 digit phone number - digits only",
"example": "3125551212"
},
"address": {
"type": "string",
"maxLength": 30,
"description": "Customer's street address"
},
"address_2": {
"type": "string",
"maxLength": 30,
"description": "Apt, Unit, etc."
},
"city": {
"type": "string",
"maxLength": 20,
"description": "Customer's city"
},
"state_id": {
"type": "string",
"enum": ["AL","AK","AZ","AR","CA","CO","CT","DC","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"],
"maxLength": 2,
"description": "Customer's 2 letter state of residence code, all caps - required to offer coverage based on state restrictions."
}
"zip": {
"type": "string",
"minLength": 5,
"maxLength": 5,
"description": "Customer's 5 digit zip code",
"example": "02184"
}
}
Subscription Price/Personalized Link Request Response
Response Parameters
Key/Type | Required | Description |
---|---|---|
error string |
No | A clear-text description of the error that has occurred. |
request_uuid string |
No | Our UID for this request. |
vendor_customer_id string |
No | Our UID for this request. |
vin string |
No | The VIN for this vehicle. If no VIN was submitted, we will return a masked VIN with asterisks in positions 9 and 11-17. |
promo string |
No | The promo code for this particular pricing offer. This code can be entered manually in our webisite in leiu of the customer's vehicle year , make , and model . Also passed in personalized_url . |
mileage integer |
No | Current mileage on this vehicle. |
state_id string |
No | Customer's 2 letter state of residence code, all caps. |
personalized_url string |
No | Direct link to your whitelabel website that provides pricing for this customer/vehicle. |
offers array |
No | Array comprised of available plans for this vehicle. |
year string |
No | Vehicle year. |
make string |
No | Vehicle make. |
model string |
No | Vehicle model. |
series string |
No | Extended vehicle model information. |
no_plans_available boolean |
No | true = no coverage available for this vehicle.false = coverage is available for this vehicle. |
vehicle_match boolean |
No | true = an exact match was found in our database for this vin or year/make/model. false = we were not able to perfectly match this vehicle with an entry in our database-we are returning the best possible match |
precise_mileage boolean |
No | true = mileage was passed in the request and pricing was based on that mileage. false = mileage was not passed, current mileage was estimated based on vehicle age. |
estimated_pricing boolean |
No | true = pricing for this vehicle is estimated due to precise_mileage = false or vehicle_match = false .false = pricing for this vehicle is not estimated |
lowest_price number |
No | Lowest monthly subscription price returned in the offers array. |
lowest_price_plan_hash string |
No | 64 character alphanumeric id for the lowest price service contract/deductible combination returned in the offers array. |
expires integer |
No | UNIX/Epoch time stamp representing the time this personalized link expires. |
first_name string |
No | Customer's first name. |
last_name string |
No | Customer's last name. |
email string |
No | Customer's email address. |
phone string |
No | Customer's 10 digit phone number, digits only. |
address string |
No | Customer's street address. |
address_2 string |
No | Apt, Unit, etc. |
city string |
No | Customer's city. |
zip string |
No | Customer's 5 digit zip code. |
covered_parts_url string |
No | URL to obtain the coverage details for the lowest price plan offered. |
offers
Parameters
Key/Type | Required | Description |
---|---|---|
productRateIdHash string |
Yes | 64 character alphanumeric id for this specific service contract/deductible combination. |
monthlySubscription number |
Yes | Subscription amount paid monthly starting no sooner than 30 days from the purchase date. |
registrationFee number |
Yes | Amount due at the time of purchase. |
plan string |
Yes | The trade name for this service contract. |
deductible number |
Yes | Deductible amount per repair the purchaser is responsible for paying out of pocket. |
personalized_url string |
Yes | Direct link to this particular plan/deductible (bypasses animation and opens whitelabel page with this plan selected). |
Sample JSON Response
{
"request_uuid": "749f36e2-3e51-4e1c-91aa-b2606d2616ed",
"vendor_customer_id": "ABC12345",
"vin": "JTMRFREV1JJ192877",
"promo": "RYRWKKJ1O",
"mileage": 36001,
"state_id": "WV",
"personalized_url": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=RYRWKKJ1O&signature=713fd62663543ecf85d1c0f76ba78fffdf3d361a",
"offers": [
{
"productRateIdHash": "931a088e4cf84bb200ad9f70227ece271258c6a1a7dcd44a03b4fd51ef4df848",
"monthlySubscription": 19.99,
"registrationFee": 49.99,
"plan": "Superb Coverage",
"deductible": 2000,
"personalized_url": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=OYRWKWJ0O&signature=d093feca069a5f60b3146d1ccb3e94cd88b05453&deductible=2000"
},
{
"productRateIdHash": "6cecea8ef57f361d75bb92c1922b2e8901fba249130a7097c192c4e361c608c6",
"monthlySubscription": 23.99,
"registrationFee": 49.99,
"plan": "Superb Coverage",
"deductible": 1000,
"personalized_url": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=OYRWKWJ0O&signature=d093feca069a5f60b3146d1ccb3e94cd88b05453&deductible=1000"
},
{
"productRateIdHash": "91c04051ef408d01f129e51783c99be8e4e36964443c711b6b1d6ae1224be53a",
"monthlySubscription": 28.99,
"registrationFee": 49.99,
"plan": "Superb Coverage",
"deductible": 500,
"personalized_url": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=OYRWKWJ0O&signature=d093feca069a5f60b3146d1ccb3e94cd88b05453&deductible=500"
},
{
"productRateIdHash": "563d8d8c18ee481adfa5d2f29140be663492e938d52339734957c9184d8016d3",
"monthlySubscription": 37.99,
"registrationFee": 49.99,
"plan": "Superb Coverage",
"deductible": 100,
"personalized_url": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=OYRWKWJ0O&signature=d093feca069a5f60b3146d1ccb3e94cd88b05453&deductible=100"
}
],
"year": 2018,
"make": "TOYOTA",
"model": "RAV4",
"series": "RAV4 ADVENTURE/XLE AWD",
"no_plans_available": false,
"vehicle_match": true,
"precise_mileage": true,
"estimated_pricing": false,
"lowest_price": 19.99,
"lowest_price_plan_hash": "931a088e4cf84bb200ad7f70227ece271258c6a1a7dcd44a03b1fd51ef4df848",
"expires": 1690911501,
"first_name": "Buddy",
"last_name": "DuBuque",
"email": "info@cuvrd.com",
"phone": "8889991212",
"address": "123 Any Street",
"address_2": null,
"city": "Norwichville",
"zip": "01234",
"covered_parts_url": "https://api.demo.cuvrd.com/api/vendor/get-covered-parts/931a088e4cf84bb200ad7f70227ece271258c6a1a7dcd44a03b4fd51ef4df848?apiKey=CV.KbHvHnUrPUs1UcPuep.OFwBG24zLxRudK61Sy"
}
Price Request Response Schema
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"title": "Cuvrd Single Vehicle Subscription Vendor API - Price response",
"description": "Subscription contract price response schema.",
"properties": {
"error": {
"type": "string",
"description": "A clear-text description of the error that has occurred.",
"example": "Provided API key is invalid"
},
"request_uuid": {
"type": "string",
"description": "Our UID for this request",
"example": "749f36e2-3e51-4e1c-91aa-b2606d2616ed"
},
"vendor_customer_id": {
"type": "string",
"description": "Your UID for this customer. Also passed in personalized_url for analytics purposes.",
"example": "vendor_customer_id"
},
"vin": {
"type": "string",
"minLength": 17,
"maxLength": 17,
"description": "The VIN for this vehicle. If no VIN was submitted, we will return a masked VIN with asterisks in positions 9 and 11-17.",
"example": "JTMRFREV1JJ192877"
},
"promo": {
"type": "string",
"minLength": 10,
"maxLength": 10,
"description": "The promo code for this particular pricing offer. This code can be entered manually in our webisite in leiu of the customer's vehicle year, make, and model. Also passed in personalized_url",
"example": "RYRWKKJ1O"
},
"mileage": {
"type": "integer",
"description": "Current mileage on this vehicle",
"example": 36001
},
"state_id": {
"type": "string",
"enum": ["AL","AK","AZ","AR","CA","CO","CT","DC","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"],
"maxLength": 2,
"description": "Customer's 2 letter state of residence code, all caps - required to offer coverage based on state restrictions."
},
"personalized_url": {
"type": "string",
"description": "Direct link to your whitelabel website that provides pricing for this customer/vehicle",
"example": "https://api-testing-website.demo.cuvrd.com/personalized-offer?promo=RYRWKKJ1O&customerId=ABC12345&signature=713fd62663543ecf85d1c0f76ba78fffdf3d361a"
},
"offers": {
"type": "array",
"description": "Array comprised of available plans for this vehicle",
"additionalItems": true,
"items": {
"type": "object",
"description": "Available list of subscription service contracts",
"required": [
"productRateIdHash",
"monthlySubscription",
"registrationFee",
"plan",
"deductible"
],
"properties": {
"productRateIdHash": {
"type": "string",
"minLength": 64,
"maxLength": 64,
"description": "64 character alphanumeric id for this specific service contract/deductible combination.",
"example": "931a088e4cf84bb200ad9f70227ece271258c6a1a7dcd44a03b4fd51ef4df848"
},
"monthlySubscription": {
"type": "number",
"description": "Subscription amount paid monthly starting no sooner than 30 days from the purchase date.",
"example": 19.99
},
"registrationFee": {
"type": "number",
"description": "Amount due at the time of purchase.",
"example": 49.99
},
"plan": {
"type": "string",
"description": "The trade name for this service contract",
"example": "Cuvrd Superb Coverage"
},
"deductible": {
"type": "number",
"description": "Deductible amount per repair the purchaser is responsible for paying out of pocket.",
"example": 100
}
},
"additionalProperties": true
}
},
"year": {
"type": "string",
"minLength": 4,
"maxLength": 4,
"description": "Vehicle year decoded from VIN",
"example": "2018"
},
"make": {
"type": "string",
"description": "Vehicle make decoded from VIN",
"example": "TOYOTA"
},
"model": {
"type": "string",
"description": "Vehicle model decoded from VIN",
"example": "CAMRY"
},
"series": {
"type": "string",
"description": "Extended vehicle model information decoded from VIN",
"example": "CAMRY XLE"
},
"no_plans_available": {
"type": "boolean",
"description": "true = no coverage available for this vehicle",
},
"vehicle_match": {
"type": "boolean",
"description": "true = an exact match was found in our database for this vin or year/make/model. false = we were not able to perfectly match this vehicle with an entry in our database-we are returning the best possible match",
},
"precise_mileage": {
"type": "boolean",
"description": "true = mileage was passed in the request and pricing was based on that mileage. false = mileage was not passed, current mileage was estimated based on vehicle age.",
},
"estimated_pricing": {
"type": "boolean",
"description": "true = pricing for this vehicle is estimated due to precise_mileage = false or vehicle_match = false.",
},
"lowest_price": {
"type": "number",
"description": "lowest monthly subscription price returned in the offers array.",
"example": 19.99
},
"lowest_price_plan_hash": {
"type": "string",
"minLength": 64,
"maxLength": 64,
"description": "64 character alphanumeric id for the lowest price service contract/deductible combination returned in the offers array.",
"example": "931a088e4cf84bb200ad9f70227ece271258c6a1a7dcd44a03b4fd51ef4df848"
},
"expires": {
"type": "integer",
"description": "UNIX/Epoch time stamp representing the time this personalized link expires.",
"example": 1690911501
},
"first_name": {
"type": "string",
"maxLength": 20,
"description": "Customer's last name"
},
"last_name": {
"type": "string",
"maxLength": 20,
"description": "Customer's last name"
},
"email": {
"type": "string",
"maxLength": 30,
"description": "Customer's email address"
},
"phone": {
"type": "string",
"minLength": 10,
"maxLength": 10,
"description": "Customer's 10 digit phone number - digits only",
"example": "3125551212"
},
"address": {
"type": "string",
"maxLength": 30,
"description": "Customer's street address"
},
"address_2": {
"type": "string",
"maxLength": 30,
"description": "Apt, Unit, etc."
},
"city": {
"type": "string",
"maxLength": 20,
"description": "Customer's city"
},
"zip": {
"type": "string",
"minLength": 5,
"maxLength": 5,
"description": "Customer's 5 digit zip code",
"example": "02184"
}
},
"additionalProperties": true
}
Errors
Response Parameters
Key/Type | Required | Description |
---|---|---|
error string |
No | A clear-text description of the error that has occurred. |
Sample JSON Response
{
"error": "Provided API key is invalid"
}