Data formats
| Kind | Format | Example |
|---|---|---|
| Money | Integer, in cents | 4599000 = $45,990.00 |
| Timestamp | ISO 8601, UTC, microseconds | 2026-10-28T16:46:09.522482+00:00 |
| Date | YYYY-MM-DD |
2026-11-01 |
| ID | UUID v4 string | 9b1d4e7a-2c3f-4a5b-8d6e-7f8091a2b3c4 |
| Distance | Kilometres | odometer: 122011 |
| Battery | kWh | useable_battery: 64 |
| Booleans | true / false |
is_sold: false |
| Pricing code | <country>_<state> or <country> |
AU_VIC, NZ |
| Currency | ISO 4217 | AUD, NZD, EUR |
| Time zone | IANA name | Australia/Sydney |
Every money value is an integer in the currency’s smallest unit (cents). That covers vehicle prices, line items, min_price, max_price, deposits, valuations and order totals. Divide by 100 to display, and round up to whole dollars for advertised prices. See Prices.
The currency comes from the pricing code: AUD in Australia, NZD in New Zealand.
Dates and times
Section titled “Dates and times”- Timestamps (
created_at,updated_at,scheduled_at…) are UTC with an offset. Parse them with any ISO 8601 parser. Keep the full string, microseconds included, if you use it as a sync cursor. - Dates (
available_from,build_date,compliance_date,registration_expiry_date) have no time or zone. Don’t convert them throughDatein JavaScript, which would shift them to UTC midnight. - To display a time, convert it to the location’s
timezone, not your server’s. - In filters you can compare against
"now()":available_from: { _lte: "now()" }. A timestamp without an offset is read as UTC.
Numbers
Section titled “Numbers”Decimal columns (odometer, production_year, min_price) are JSON numbers, but can arrive as 122011.0 rather than 122011. Round or cast them before you show or compare them. In variables their type is numeric, not Int: query ($km: numeric!) { … odometer: { _lt: $km } … }.
An unknown or wrong-case pricing code (au_nsw) returns null from pricing_config(path: …), not an error. Codes are upper case.
Text fields
Section titled “Text fields”make, model, badge, body_type, fuel_type, transmission and colour are free text as the dealer entered or imported them, so expect Electric and electric, or SUV and Wagon. Match with _ilike, and normalise before you build filter menus. vehicle_specification holds the manufacturer’s normalised specification when a vehicle has been matched to one.
| Field | Values |
|---|---|
stocked_vehicles.condition |
new, used, demo |
stocked_vehicles.listing_type |
retail, private |
stocked_vehicles.generic_colour |
black, blue, brown, green, grey, orange, pink, purple, red, silver, white, yellow |
assets.classification |
Front, Front34, Side, Rear34, Rear, Interior, Wheel, Other |
Write enum values without quotes inside a query (condition: { _eq: used }), and as plain strings in variables.
Statuses such as moments.stage, test_drives.stage and assets.placement are text, not enums. Dealers can add their own, so handle values you don’t recognise.
JSON fields
Section titled “JSON fields”Columns such as pricing_config, address, utm_data, values and opening_hours are returned as JSON objects, not strings. Pick a key with path (for example pricing_config(path: "AU_NSW")), and filter with _contains or _has_key.
A field with no value is null, not omitted. Treat null and empty strings the same for text such as alt and badge.