API documentation
One bearer token over 9 Australian government data sources. JSON in, JSON out. Every response is CC-BY attributed via meta.sources.
Quickstart
Three commands. Sixty seconds. No credit card.
# 1. Register
curl -X POST https://api.ausdata.io/v1/register \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
# 2. Call any composed endpoint. One call, one answer
curl https://api.ausdata.io/v1/economic-dashboard \
-H "Authorization: Bearer YOUR_KEY"Install
Pick your interface. All three talk to the same API.
pip install ausdata-sdkfrom ausdata import Client
npm i -g ausdata-cliausdata economic-dashboard
npx ausdata-mcpClaude / Cursor / Windsurf
from ausdata import Client
c = Client(api_key="ak_...")
dash = c.economic_dashboard()
print(f"Cash rate: {dash.data.cash_rate_pct}%")
print(f"CPI: {dash.data.cpi_annual_pct}%")
print(f"Real cash rate: {dash.data.cash_rate_pct - dash.data.cpi_annual_pct:.2f}pp")Authentication
Every data endpoint takes a Bearer token. Free keys give you 500 calls/month and every feature.
Authorization: Bearer YOUR_API_KEYComposed analytics
One call, one answer. Each endpoint stitches multiple sources behind a single URL.
/v1/economic-dashboardEconomic dashboard
Snapshot of the Australian economy right now. RBA cash rate, ABS CPI, unemployment, wage growth, household spending. One call, five sources.
curl https://api.ausdata.io/v1/economic-dashboard \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"as_of": "2026-Q1",
"cash_rate_pct": 4.35,
"cpi_annual_pct": 3.50,
"unemployment_rate_pct": 4.26,
"wage_growth_annual_pct": 3.20,
"consumer_spending_yoy_pct": 6.10
}
}/v1/real-cash-rateReal cash rate
Is the inflation-adjusted cash rate positive? Cash rate minus annual CPI, with direction.
curl https://api.ausdata.io/v1/real-cash-rate \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"as_of": "2026-05-15",
"cash_rate_pct": 4.35,
"cpi_annual_pct": 3.50,
"real_cash_rate_pct": 0.85,
"direction": "positive"
}
}/v1/real-wagesReal wages
Quarterly WPI vs CPI annual change with computed real-wages gap and direction.
Parameters
start / endstring- YYYY or YYYY-Q[1-4].
seasonal_adjustmentstring- original | trend | seasonally_adjusted. Default trend.
curl "https://api.ausdata.io/v1/real-wages?start=2024-Q1" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [{
"period": "2026-Q1",
"wpi_annual_change_pct": 3.30,
"cpi_annual_change_pct": 4.00,
"real_wages_gap_pct": -0.70,
"real_wages_direction": "shrinking"
}]
}/v1/cost-of-livingCost of living
Annual CPI change by expenditure group (food, housing, transport, health, recreation, etc.). Answers which category is driving inflation.
curl https://api.ausdata.io/v1/cost-of-living \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [
{ "group": "housing", "annual_change_pct": 5.60, "period": "2025-09" },
{ "group": "food", "annual_change_pct": 3.10, "period": "2025-09" },
{ "group": "transport", "annual_change_pct": 2.30, "period": "2025-09" }
// 12 expenditure groups total
]
}/v1/youth-unemploymentYouth unemployment
15-24 unemployment vs all-ages, with the youth premium in percentage points.
curl https://api.ausdata.io/v1/youth-unemployment \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"youth_unemployment_pct": 10.15,
"all_ages_unemployment_pct": 4.26,
"youth_premium_pp": 5.89,
"period": "2026-03"
}
}/v1/trade-balanceTrade balance
Australia's monthly trade balance plus top goods export and import categories.
curl https://api.ausdata.io/v1/trade-balance \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [
{ "data_item": "balance_on_goods", "value_aud_million": -1841, "period": "2026-03" },
{ "data_item": "total_goods_exports", "value_aud_million": 43929, "period": "2026-03" }
]
}/v1/housing-affordabilityHousing affordability
Years of median income required to buy a typical dwelling.
curl https://api.ausdata.io/v1/housing-affordability \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"mean_price_to_median_income_ratio": 20.24,
"median_price_to_median_income_ratio": null,
"mean_dwelling_value_aud": 1074700,
"median_income_aud": 53091,
"dwelling_period": "2025-Q4",
"income_period": "2022-23"
}
}/v1/gender-pay-contextGender pay context
WGEA gender pay gap for an industry, compared against the national baseline.
Parameters
industryrequiredstring- e.g. Mining, Finance, Education.
curl "https://api.ausdata.io/v1/gender-pay-context?industry=Mining" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"industry": "Mining",
"period": "2024-25",
"headline_gap_pct": 11.42,
"all_employers_baseline_pct": 21.66,
"relative_to_baseline": "narrower than national"
}
}/v1/energy-snapshotEnergy snapshot
Live NEM spot prices by region (NSW1, VIC1, QLD1, SA1, TAS1).
Parameters
regionrequiredstring- NEM region code.
curl "https://api.ausdata.io/v1/energy-snapshot?region=VIC1" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [{
"region": "VIC1",
"latest_price_aud_mwh": 111.98,
"latest_period": "2026-05-18T19:50:00+10:00"
}]
}Discovery
Find datasets and schedule jobs around upcoming releases.
/v1/search-datasetsSearch datasets
Plain-English search across all 9 sources. Returns dataset IDs you can pass to /v1/data.
Parameters
qrequiredstring- e.g. "unemployment rate NSW".
sourcestring- Filter to one of: abs, rba, ato, apra, aihw, asic, aemo, au_weather, wgea.
limitinteger- Default 10, max 50.
curl "https://api.ausdata.io/v1/search-datasets?q=gender+pay+gap&limit=5" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [{
"dataset_id": "wgea.WORKFORCE_COMPOSITION",
"source": "WGEA",
"name": "WGEA Workforce Composition",
"is_curated": true
}],
"meta": { "row_count": 5 }
}/v1/datasets/{source}List datasets
Every curated dataset for one source.
curl https://api.ausdata.io/v1/datasets/rba \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [
{ "dataset_id": "F1.1", "name": "Cash rate target" },
{ "dataset_id": "F11", "name": "Exchange rates" }
]
}/v1/describe/{source}/{dataset_id}Describe dataset
Schema and valid filter values for a dataset. Use this before calling /v1/data. Required for the location-based au_weather source.
curl https://api.ausdata.io/v1/describe/abs/CPI \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": {
"dataset_id": "CPI",
"dimensions": ["measure", "region", "adjustment"],
"valid_values": { "region": ["australia", "sydney", "melbourne", "..."] }
}
}/v1/releasesUpcoming releases
Scheduled ABS and RBA publications. Use it to wake your dashboard the moment CPI drops.
Parameters
days_aheadinteger- Default 14.
dataset_idstring- Filter, e.g. CPI.
curl "https://api.ausdata.io/v1/releases?days_ahead=30&dataset_id=CPI" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [{
"release_at": "2026-05-27T11:30:00+10:00",
"title": "Consumer Price Index, Australia",
"event_type": "data_release"
}]
}Raw data
Fetch rows from any curated dataset.
/v1/data/{source}/{dataset_id}Raw data passthrough
Fetch rows from any dataset. Filter by dimension (e.g. region=NSW) via query params. Reserved params: start, end, limit, format. Works for abs, rba, ato, apra, aihw, asic, aemo, wgea. For au_weather, use /v1/describe/au_weather/{location}. That source is location-based, not dataset-based.
Parameters
sourcerequiredstring- Source code.
dataset_idrequiredstring- From /v1/search-datasets or /v1/datasets/{source}.
start / endstring- YYYY-Q1, YYYY-MM, or YYYY.
limitinteger- Default 100, max 1000.
formatstring- json or csv.
…otherstring- Forwarded as dimension filters.
curl "https://api.ausdata.io/v1/data/abs/LF?region=australia&measure=unemployment_rate&start=2024-01&limit=12" \
-H "Authorization: Bearer ak_YOUR_KEY"{
"data": [{
"period": "2026-03",
"value": 3.93,
"dimensions": { "measure": "Unemployment rate", "region": "Australia" },
"unit": "Percent"
}],
"meta": { "row_count": 12, "tier": "free", "truncated_at": null }
}Webhooks
Subscribe to dataset releases. The server POSTs your URL when a new value publishes. Signed with HMAC-SHA256 so you can verify it really came from us. Available on every tier, no extra cost.
Subscribe
curl -X POST https://api.ausdata.io/v1/webhooks \
-H "Authorization: Bearer ak_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://your.app/cpi-alert","datasets":["CPI"]}'
# → { "id": "sub_...", "secret": "whsec_...", "url": "...", "datasets": ["CPI"] }Verify the signature (Node)
import crypto from "node:crypto";
// Headers you'll receive:
// X-Ausdata-Signature: sha256=<hex>
// X-Ausdata-Event: release.published
export function verify(rawBody: string, signatureHeader: string, secret: string) {
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signatureHeader),
Buffer.from(expected),
);
}Manage subscriptions
# List your subscriptions
curl https://api.ausdata.io/v1/webhooks \
-H "Authorization: Bearer ak_YOUR_KEY"
# Remove one
curl -X DELETE https://api.ausdata.io/v1/webhooks/sub_... \
-H "Authorization: Bearer ak_YOUR_KEY"Meta
Auth, identity, and service health.
/v1/registerno authRegister
Get a free API key. No auth required. 500 calls/month, no credit card.
curl -X POST https://api.ausdata.io/v1/register \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'{
"api_key": "ak_...",
"key": "ak_...",
"tier": "free",
"monthly_limit": 500,
"usage_example": "curl -H 'Authorization: Bearer ak_...' https://api.ausdata.io/v1/whoami"
}/v1/whoamiWho am I
Your tier, monthly limit, and usage so far.
curl https://api.ausdata.io/v1/whoami \
-H "Authorization: Bearer ak_YOUR_KEY"{ "tier": "free", "monthly_limit": 500, "usage_this_month": 42 }/v1/statusno authStatus
Per-source health and 30-day uptime. No auth required.
curl https://api.ausdata.io/v1/status{
"uptime_30d": 0.999,
"sources": [{ "id": "abs", "status": "ok" }],
"server_version": "0.6.x"
}Errors
All errors return JSON with error, message, and hint.
| Code | Error | When / how to fix |
|---|---|---|
| 400 | bad_request | Unknown or malformed parameter. Check spelling and allowed values. |
| 401 | unauthorized | Missing or invalid API key. Use Authorization: Bearer ak_… |
| 402 | quota_exceeded | Monthly tier limit reached. Upgrade or wait until reset. |
| 422 | validation_error | Value out of range or wrong format. Check the message field. |
| 429 | rate_limited | Too many requests. Back off and retry after Retry-After seconds. |
| 503 | upstream_unavailable | An upstream source is temporarily down. Retry with backoff. |
{
"error": "validation_error",
"message": "Parameter 'start' must be YYYY, YYYY-MM, or YYYY-Q[1-4].",
"hint": "Try start=2024-Q1."
}Known limitations
- Cold-call latency. First query of the day on an uncommon dataset can take 5-20s while we warm the cache. Subsequent calls are sub-second.
- One dataset temporarily blocked.
ato.ACNC_AIS_FINANCIALS(the 853k-row charity register). Cold-parse exceeds our 8s upstream timeout, so it returns a clean 503 directing you to alternative ATO datasets. - au_weather is location-based. Use
/v1/describe/au_weather/{location}rather than/v1/data/au_weather/*. - Quarterly CPI is SA only. The quarterly series exposes Seasonally Adjusted. For Original (NSA) values use the Monthly CPI Indicator (
abs/CPI_MONTHLY), which carries Original, SA, and Trend.
Reference
Tier limits
Every tier gets every endpoint, webhooks, and full historical data. Tiers differ only in call volume and rate limits.
| Tier | Price | Calls / month | Rate |
|---|---|---|---|
| Free | $0 | 500 | 10/min |
| Analyst | $29 AUD/mo | 10,000 | 60/min |
| Embed | $99 AUD/mo | 100,000 | 300/min |
| Enterprise | Contact us | Unlimited | Custom |
Response headers
X-Quota-Limit: 500
X-Quota-Used: 21
X-Quota-Remaining: 479
X-Response-Time-ms: 172Attribution
Every response carries a meta.sources array with CC-BY attribution per source.
Versioning
All endpoints are v1 and stable. Breaking changes ship as v2 with ≥6 months of parallel support.