Skip to content
Carified is in pre-launch.Join the Waitlist

Developers

Stock API

Keep a dealership’s Carified Yard in step with its DMS. Send cars as JSON when they arrive, change or leave the yard, and we take care of the rest, photos included.

JSON over HTTPSOne key per dealershipv1

Overview

The Stock API is for DMS vendors and for dealerships with their own systems. It’s the push version of a stock feed: instead of us reading a feed file on a schedule, your system tells us the moment a car changes.

  • Cars you send land in the dealership’s Yard as Getting Ready. They never go on sale on their own: the dealer adds the disclosures buyers see and publishes.
  • For cars your feed holds, we keep the price, odometer, stock number, specs and photos in step with what you send.
  • Every call is safe to repeat: sending the same car twice changes nothing.

Every path below starts with the base URL:

Base URL
https://carified.com.au/api/v1

Getting a Key

A key belongs to one dealership, and only that dealership’s owner can create one. The dealership must be verified on Carified first.

  1. The owner signs in and opens Settings → Stock Feed in the dealer dashboard.
  2. Under Push API, they create a key and name it after the system that will use it.
  3. The key is shown once. Copy it into your system straight away: we keep only a hash, so we can’t show it again.

Keys can be revoked from the same place at any time, and a revoked key stops working immediately. If you build for many dealerships, ask each one for its own key.

Authentication

Send the key as a bearer token on every request. Keys look like cfd_sk_ followed by 40 letters and digits. Keep them on your server, never in a browser or app.

Header
Authorization: Bearer cfd_sk_YOUR_API_KEY_HERE

Requests and responses are JSON. An error always comes back as an error in plain English, with the HTTP status telling you what kind it is (see Errors).

Error response
{
  "error": "Your API key isn’t valid. Create a new one in Settings → Stock Feed."
}

Endpoints

4 endpoints cover it. Most systems send single cars as they change and a full update once a day, so anything missed along the way catches up.

Add or Update a Car

PUT/api/v1/stock/{vin}

Adds the car if the yard doesn’t have it, or updates it if it does. The body is one vehicle; its vin is optional, and must match the path if you send it.

Request
curl -X PUT https://carified.com.au/api/v1/stock/JTMBFREV10D123456 \
  -H "Authorization: Bearer cfd_sk_YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"vin":"JTMBFREV10D123456","externalId":"DMS-48213","stockNumber":"S1042","year":2021,"make":"Toyota","model":"RAV4","variant":"GXL Hybrid","odometerKm":45210,"price":38990,"priceType":"drive_away","description":"One owner, full Toyota service history, 2 keys.","bodyType":"SUV","transmission":"CVT auto","fuelType":"Hybrid","driveType":"AWD","colour":"Glacier White","photoUrls":["https://cdn.example-dms.com.au/s1042/1.jpg","https://cdn.example-dms.com.au/s1042/2.jpg"]}'
Response (200)
{
  "vin": "JTMBFREV10D123456",
  "result": "added",
  "problems": []
}

result is added, updated, unchanged or skipped (the car is sold, off sale or taken down on Carified, and problems says which). problems also lists anything we couldn’t use, such as a placeholder price, while still taking the rest. A car the dealer stopped syncing comes back unchanged.

Remove a Car

DELETE/api/v1/stock/{vin}

Tells us the car has left your stock. A car on sale comes off sale; it’s never marked sold, since the dealer confirms a sale in Carified. A car still getting ready is flagged “Not in your feed” for the dealer.

Request
curl -X DELETE https://carified.com.au/api/v1/stock/JTMBFREV10D123456 \
  -H "Authorization: Bearer cfd_sk_YOUR_API_KEY_HERE"
Response (200)
{
  "vin": "JTMBFREV10D123456",
  "result": "left"
}

result is left, or not_in_feed when your feed didn’t hold that car.

Send a Full Update

PUT/api/v1/stock

Sends the whole yard at once: up to 2,000 cars and 10 MB. A car the yard holds that’s missing from 2 full updates in a row leaves, just as if you’d removed it. A car we can’t read is reported as a problem rather than failing the update.

Request
curl -X PUT https://carified.com.au/api/v1/stock \
  -H "Authorization: Bearer cfd_sk_YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"vehicles":[{"vin":"JTMBFREV10D123456","externalId":"DMS-48213","stockNumber":"S1042","year":2021,"make":"Toyota","model":"RAV4","variant":"GXL Hybrid","odometerKm":45210,"price":38990,"priceType":"drive_away","description":"One owner, full Toyota service history, 2 keys.","bodyType":"SUV","transmission":"CVT auto","fuelType":"Hybrid","driveType":"AWD","colour":"Glacier White","photoUrls":["https://cdn.example-dms.com.au/s1042/1.jpg","https://cdn.example-dms.com.au/s1042/2.jpg"]},{"vin":"MR0HA3CD100654321","stockNumber":"S1057","year":2019,"make":"Toyota","model":"HiLux","price":"$41,500"}]}'
Response (200)
{
  "carsRead": 2,
  "added": 1,
  "updated": 0,
  "unchanged": 1,
  "left": 0,
  "problems": []
}

Each problem names its line (the car’s place in vehicles, from 1), its vin when we could read one, and a message.

List Your Stock

GET/api/v1/stock

Lists the cars your feed holds, with where each one is in Carified. Handy for checking your system and ours agree.

Request
curl -X GET https://carified.com.au/api/v1/stock \
  -H "Authorization: Bearer cfd_sk_YOUR_API_KEY_HERE"
Response (200)
{
  "vehicles": [
    {
      "vin": "JTMBFREV10D123456",
      "externalId": "DMS-48213",
      "stockNumber": "S1042",
      "status": "for_sale",
      "syncing": true
    },
    {
      "vin": "MR0HA3CD100654321",
      "externalId": "DMS-48377",
      "stockNumber": "S1057",
      "status": "getting_ready",
      "syncing": true
    }
  ]
}

status is getting_ready, for_sale, off_sale or sold. syncing is false once the dealer stops syncing a car (or once it has left your feed), after which your changes to it are left alone.

Vehicle Fields

Only vin is required. Loose text is fine: we read values like “6 sp auto”, “45,210 km” or “$38,990” the same way we read a feed file. Fields we don’t know are refused, so a typo shows up straight away.

FieldDescription
vinRequiredstringThe car’s VIN (10–17 characters). On PUT /stock/{vin} the path gives it; if the body sends one too, they must match.
externalIdstringYour system’s own id for the car.
stockNumberstringThe yard’s stock number, shown to the dealer in Carified.
yearnumber | stringBuild year, e.g. 2021.
makestringe.g. “Toyota”. Matched to Carified’s make list.
modelstringe.g. “RAV4”. Matched to Carified’s model list.
variantstringBadge or trim, e.g. “GXL Hybrid”.
odometerKmnumber | stringKilometres. “45,210 km” is read, and miles (“28091 mi”) convert.
pricenumber | stringAsking price in dollars, e.g. 38990 or “$38,990”. Under $500 reads as “call us”, so the car has no price.
priceTypestring“drive_away” or “excl_govt_charges”. Google’s vehicle_price_type values and plain text like “Drive away” are read too.
descriptionstringThe car’s write-up, as plain text.
bodyTypestringe.g. “SUV”, “Ute”, “Sedan”.
transmissionstringe.g. “Automatic” or “6 sp auto”.
fuelTypestringe.g. “Petrol”, “Diesel”, “Hybrid”.
driveTypestringe.g. “AWD”, “4x4”, “FWD”.
colourstringe.g. “Glacier White”.
batteryKwhnumber | stringElectric & plug-in hybrid: usable battery, e.g. 77.4 or “77.4 kWh”.
rangeKmnumber | stringElectric & plug-in hybrid: the maker’s range (a plug-in hybrid’s electric range), e.g. 507 or “507 km”.
dcChargeKwnumber | stringElectric & plug-in hybrid: peak DC fast charging, e.g. 235 or “235 kW”. Leave it out when there’s none.
chargePortstringElectric & plug-in hybrid: e.g. “CCS2”, “Type 2”, “CHAdeMO”.
photoUrlsstring[]Up to 100 http(s) URLs; the first is the hero. Fetched in the background, and a URL is never fetched twice.

How Syncing Works

  • Nothing goes on sale by itself. New cars wait in Getting Ready until the dealer adds disclosures and publishes them.
  • Your system owns the details it sends. For cars your feed holds, price, odometer, stock number, specs and photos follow what you send, including on cars already on sale. A dealer who wants to edit a car by hand can Stop Syncing it.
  • Leaving a field out never clears it. Send only what you know; what’s already there stays.
  • An odometer is never lowered. A lower reading comes back as a problem for the dealer to look at.
  • Photos sync in the background. The first URL is the hero. We fetch each URL once, so give a changed photo a new URL.
  • One way in per dealership. While a feed URL is connected in Settings → Stock Feed, the API answers 409. Disconnect the feed to use the API instead.

Errors

Every error has an error message that says what to fix. Retry a 409, 429 or 500 later; fix the request for anything else.

StatusWhen
400 Bad RequestBad Request. The body isn’t JSON, the VIN isn’t one, a field isn’t one Carified knows, or a full update has more than 2,000 cars.
401 UnauthorisedUnauthorised. The key is missing, isn’t valid, or was revoked.
403 ForbiddenForbidden. The key’s dealership isn’t verified.
404 Not FoundNot Found. The path doesn’t exist.
409 ConflictConflict. The dealership has a feed URL connected, or a full update is still running.
413 Payload Too LargePayload Too Large. The body is too big: over 10 MB for a full update, or 256 KB for one car.
429 Too Many RequestsToo Many Requests. Slow down: wait the Retry-After header’s seconds, then try again.
500 Server ErrorServer Error. Something went wrong on Carified’s side. Try again.

Limits

  • About 120 single-car calls a minute per key.
  • 60 stock lists a minute per key.
  • 256 KB per single car.
  • 6 full updates per 10 minutes per key, one at a time.
  • Full updates up to 2,000 cars and 10 MB.
  • Up to 100 photo URLs per car, over http or https.

Over a limit, you’ll get a 429 with a Retry-After header in seconds. Wait that long, then carry on.

Help

The OpenAPI file describes every endpoint and field, ready to load into Postman, Insomnia or a code generator.

Questions, or building for a DMS many dealers use? Sign in to your Carified account and contact us through the Support page, and we’ll help you get set up.