FuelWatch API

Getting started

Make your first request and read a station's published prices.

Request a selection

GET
/v1

Product 1 is unleaded petrol. The default day is the current Perth calendar date. Each result is one station, even when several products are selected.

Note

Before 06:00 AWST, yesterday's price period is still in effect. Use day=yesterday for currently effective prices at that time. See price periods.

Read the document

The collection is data. Station fields live under attributes, and attributes.price.products maps product IDs to cents per litre. JSON object keys are strings: use products["1"], not a property named unleaded.

The following response is illustrative. Its fixed dates and prices are not a live quote.

Example response
{ "jsonapi": { "version": "1.1" }, "meta": { "source": "fuelwatch.wa.gov.au", "sourceDate": "2026-09-29", "fetchedAt": "2026-09-29T16:00:00.000+08:00", "validFrom": "2026-09-29T06:00:00.000+08:00", "validUntil": "2026-09-30T06:00:00.000+08:00", "publicationStatus": "available", "copyright": "Copyright 2025 Department of Local Government, Industry Regulation and Safety (source data); Copyright 2026 Bradley Hodges (api). All rights reserved.", "documentation": "https://docs.fuelwatch.oss.bhodges.me", "issues": "https://github.com/bradleyhodges/fuelwatch-api/issues", "product": 1, "version": "4.30.1" }, "data": [ { "type": "serviceStation", "id": "2026-09-29:238232d151f5f92bbce32951b828cb7fe4887fdc1ac868628c7ab33d4eda4e3b", "attributes": { "name": "Example Station", "tradingName": "Example Station", "brand": 5, "price": { "asAt": "2026-09-29T06:00:00.000+08:00", "products": { "1": 185.9 } }, "address": { "street": "1 Test Road", "suburb": "PERTH", "state": "WA", "postcode": null }, "is24Hours": null, "phone": null, "latitude": -31.95, "longitude": 115.86, "siteFeatures": [ 1, 4 ], "restrictions": null } } ] }

Check meta.sourceDate, validFrom, validUntil and publicationStatus before treating prices as currently effective. A successful request can have an empty data array.

Use a native HTTP client

Read and compare a product

This JavaScript example uses the built-in fetch API. It handles HTTP failures and excludes stations without the requested product before sorting locally.

Important

Brand, feature and restriction values are numeric codes by default. Use expansion if your application needs labels.

Persist the last valid snapshot and its ETag if the application must survive network outages. A failure must not turn an old quote into a newly fetched one. See conditional requests and error handling.

On this page