# ausref — Australasian government reference data No account. No API key. No signup. Pay per call with x402. Clean, cited JSON for Australasian government reference values — central-bank policy rates, VAT, minimum wages, CPI inflation, corporate & personal income tax, and public holidays across 8 countries. Every response includes the official source URL, effective date, last_confirmed date and a stale flag. ## If you sell over x402, start here Making a cross-border digital sale? Before you settle, know who accounts for the VAT: - POST https://ausref.dev/v1/vat/determine {seller_country, buyer_country, buyer_type?} → place of supply, who accounts for VAT, rate basis, registration trigger — each cited to the statute (EU / UK / South Africa). Wallet-only buyer with no tax id → treated as B2C and flagged. Out-of-scope country pairs are refused FREE (422), never guessed. $0.10/call. ## Sources & licence Every value is compiled from official government sources — central banks, finance and labour ministries, revenue authorities, statistical offices — and each response cites the exact official source URL it was verified against. Independent service, not affiliated with any government. Verify against the cited official source before legal or financial use. ## How to call a paid endpoint (x402) 1. Call the endpoint with no payment. You get HTTP 402. The payment challenge is in the base64-encoded `payment-required` RESPONSE HEADER (the body is an empty `{}`); decode it to see price, asset (USDC), network (eip155:8453 = Base) and pay-to address. 2. Sign the payment with any x402 client — @x402/fetch wraps fetch and does steps 1-3 automatically. 3. Retry with the signed X-PAYMENT header. You get HTTP 200 + the data; the settlement receipt is returned in the PAYMENT-RESPONSE header. Bad input is rejected FREE (4xx before the payment gate) — you never pay to fail. Free, no payment: https://ausref.dev/catalog · https://ausref.dev/llms.txt · https://ausref.dev/openapi.json · public holidays. ## Pricing ladder - $0.001/call — any single series value, its history, or the change feed - $0.02 — full regional snapshot (/v1/all) · VAT breakdown · working-days calculator - $0.05 — minimum-wage compliance check · income-tax computation - $0.10 — gross-to-net payroll (NG, KE) · cross-border VAT determination · webhook alerts Licensed tiers / API keys: api@3l-groupconsulting.co.za ## Machine-readable discovery - x402 resource map: https://ausref.dev/.well-known/x402.json - Agent card: https://ausref.dev/.well-known/agent.json - OpenAPI: https://ausref.dev/openapi.json - MCP server (streamable HTTP): https://ausref.dev/mcp — tools: list_series, get_public_holidays (free); get_series, get_series_history, get_snapshot (paid via x402 or api_key) ## Sub-national holiday calendars Public holidays are not national in every country. Where a region sets its own days we hold them separately, each cited to that region's own statute rather than inferred from the national list. The two endpoints expose this differently, and the difference matters: - GET https://ausref.dev/v1/{country}/public-holidays (free) returns the NATIONAL days in `value`, plus every region inline under `subdivisions`, keyed by ISO 3166-2 (the scheme is named in `subdivisions_standard`). Each region's list contains only that region's ADDITIONAL days — it is not a merged calendar, so a full regional calendar is `value` plus that region's entries. This endpoint does NOT take a `subdivision` query parameter; passing one has no effect. - POST /v1/answers/working-days DOES take `subdivision`. Give it an ISO 3166-2 code and the count is computed on (national − that region's exclusions) + that region's own days. Omit it for the national calendar. An unrecognised code is refused FREE with `available_subdivisions` listed — we never silently fall back to the national calendar, because that would quietly hand you the wrong working-day count. Regions currently held: - Australia (au): 8 regions — AU-NSW, AU-VIC, AU-QLD, AU-WA, … ## Calendar coverage, and what we refuse Holiday calendars currently span 2026–2027. Coverage is not uniform and the API tells you so rather than guessing: - A range outside a country's covered years is refused FREE (422, `calendar_coverage_exhausted`) with the exact covered period. We do not extrapolate: moving feasts, weekend-substitution days and ad-hoc proclamations are not derivable from prior years, so counting uncovered days would silently treat public holidays as working days. - For 1 calendar in this region the horizon is PERMANENT, not a backlog (`calendar_not_publishable_in_advance`, `permanent: true`). Islamic dates are confirmed by moon sighting days ahead; Hebrew and lunisolar festival dates are gazetted annually. Those responses name the specific blocking holidays and say what you can do instead — so do not queue a retry expecting the year to appear. - Some entries carry `date: null` with a `pending_window`: the holiday is statutory but the date is not yet gazetted. We publish the placeholder rather than inventing a date. - Holiday entries may carry a `note` explaining how that day behaves in that specific year (substitution, transfer, or why it was NOT moved). The `name` field is the stable holiday name and is safe to match on across years; `note` is the year-specific commentary. ## What we refuse to answer (and never charge for) Refusals are the point of this service, not a limitation of it. Every one below is FREE — validated before the payment gate, so you are never charged for a question we know we cannot answer well: - Out-of-coverage calendar ranges (above). - Unknown subdivision codes on POST /v1/answers/working-days, with the valid list returned. - Countries where no single statutory rate exists (e.g. a VAT regime mid-transition) — refused with the explanation rather than collapsed to one misleading number. - Out-of-scope country pairs on /v1/vat/determine. - Settlement dates where we hold no verified convention for the market, or where the convention was not in force on the trade date — `no_verified_convention` / `convention_not_in_force_on_trade_date`, never a guessed cycle. Some series are deliberately ABSENT for the same reason: where a rate could not be verified against its own statute we omit the series rather than estimate it, and the endpoint 404s. ## Which of our numbers we actually read (`confidence`) Every series carries a machine-readable `confidence`, and the catalog can be filtered on it. This is unusual and it is deliberate: a value's weakest point is usually not the number but how it was obtained, and that belongs in a field rather than buried in a paragraph of notes. - `primary` — no verification limitation is recorded. NOTE this is the ABSENCE of a known problem, not a fresh re-verification: it says the value was taken from the source cited and nothing since has flagged otherwise. - `secondary` — corroborated across sources, but the primary instrument was NOT read. Nearly always because the publishing host blocks automated access (several government portals 403 bots outright, or serve a JavaScript viewer with no extractable text). - `attested` — NO primary source is publicly available to anyone. The value rests on an official statement about the instrument rather than the instrument itself. Two series today: Botswana does not publish Statutory Instruments online at all, and the Central African Republic decree appears on no government site, ILO NATLEX or any gazette. - `derived` — computed from another series we hold, not read from any document. - Filter: GET https://ausref.dev/catalog?confidence=primary (free; comma-separated levels accepted) Where confidence is not `primary`, `confidence_note` gives the specific limitation in our own words. ## Point-in-time reads (?as_at=YYYY-MM-DD) Any series accepts `?as_at=` and returns the value that was IN FORCE on that date, not today's. Back-dated payroll recalculation and prior-year filings need this, and picking the right row out of a full history yourself is a derivation that fails quietly — the wrong row still looks plausible. - GET https://ausref.dev/v1/{country}/{series}?as_at=2023-06-15 The answer carries `as_at`, `point_in_time: true` and `superseded_on`, so a historical value can never be mistaken for a live one. IT REFUSES RATHER THAN FALLING BACK: ask for a date before the earliest value we hold, or one after a value lapsed with no recorded successor, and you get a FREE 422 naming the earliest date we do hold. Returning the current value for a 2023 question would be the wrong number in the right shape. Bad dates are rejected free too, before the payment gate. ## Provenance — the evidence behind every citation - GET https://ausref.dev/provenance (free) — fleet-wide snapshot coverage - GET https://ausref.dev/provenance/{country}/{series} (free) — the sources behind one endpoint Citing a source is a claim. We fetch each cited document, record a sha256 over the exact bytes, and re-check daily, so you can see WHEN we verified against it and whether it has CHANGED since. Two things surface that a last-verified date cannot: rot (the document no longer resolves) and drift (it still resolves but its bytes changed, meaning the page you would follow no longer says what we read). Failure states are distinguished honestly — `gone` (404/410) is not the same as `blocked_to_automation` (the host refuses bots; a person can still open it), and we do not claim a live source is dead. We publish the fingerprint, not the mirrored document. ## Accuracy record - https://ausref.dev/accuracy — documented cases where widely-published reference values are wrong, each traced to the governing instrument, AND every error we have found in our own served data. The second half is the point: a vendor publishing only other people's mistakes is marketing. ## Human-readable pages - https://ausref.dev/countries — every country held - https://ausref.dev/{country} — e.g. /za — all series with values, sources and freshness - https://ausref.dev/{country}/{series} — e.g. /za/vat — value, what it means, earlier values, provenance - https://ausref.dev/sitemap.xml ## Series - GET /v1/au/policy-rate — Australia: Cash Rate Target - GET /v1/au/vat — Australia: Goods and Services Tax (GST) - GET /v1/au/minimum-wage — Australia: National Minimum Wage - GET /v1/au/public-holidays — Australia: Public Holidays (free) - GET /v1/au/cpi — Australia: Consumer Price Index (annual, All groups) - GET /v1/au/corporate-tax — Australia: Company Tax Rate - GET /v1/au/income-tax — Australia: Personal Income Tax Rates (residents) - GET /v1/fj/policy-rate — Fiji: RBF Overnight Policy Rate (OPR) - GET /v1/fj/vat — Fiji: VAT standard rate - GET /v1/fj/minimum-wage — Fiji: National minimum wage (hourly) - GET /v1/fj/public-holidays — Fiji: Public holidays (free) - GET /v1/fj/cpi — Fiji: CPI inflation (year-on-year) - GET /v1/fj/corporate-tax — Fiji: Corporate income tax rate - GET /v1/fj/income-tax — Fiji: Personal income tax brackets (resident) - GET /v1/nz/policy-rate — New Zealand: Official Cash Rate (OCR) - GET /v1/nz/vat — New Zealand: Goods and Services Tax (GST) - GET /v1/nz/minimum-wage — New Zealand: Adult minimum wage - GET /v1/nz/public-holidays — New Zealand: Public holidays (free) - GET /v1/nz/cpi — New Zealand: Consumers price index — annual inflation - GET /v1/nz/corporate-tax — New Zealand: Company income tax rate - GET /v1/nz/income-tax — New Zealand: Personal income tax rates - GET /v1/pg/policy-rate — Papua New Guinea: Kina Facility Rate (KFR) - GET /v1/pg/vat — Papua New Guinea: Goods and Services Tax (GST) standard rate - GET /v1/pg/minimum-wage — Papua New Guinea: National minimum wage (hourly) - GET /v1/pg/public-holidays — Papua New Guinea: Public holidays (free) - GET /v1/pg/cpi — Papua New Guinea: CPI inflation (year-on-year) - GET /v1/pg/corporate-tax — Papua New Guinea: Corporate income tax rate - GET /v1/pg/income-tax — Papua New Guinea: Personal income tax brackets (resident individuals) - GET /v1/sb/policy-rate — Solomon Islands: CBSI Policy Rate - GET /v1/sb/vat — Solomon Islands: Sales tax — standard ad valorem rate (no VAT in force) - GET /v1/sb/minimum-wage — Solomon Islands: Minimum wage (statutory hourly rates) - GET /v1/sb/public-holidays — Solomon Islands: Public holidays (free) - GET /v1/sb/cpi — Solomon Islands: CPI inflation (headline, 3-month moving average, year-on-year) - GET /v1/sb/corporate-tax — Solomon Islands: Company income tax rate (resident) - GET /v1/sb/income-tax — Solomon Islands: Personal income tax brackets (resident individuals) - GET /v1/to/policy-rate — Tonga: NRBT policy rate (mid-rate of the Interest Rate Corridor) - GET /v1/to/vat — Tonga: Consumption Tax (CT) standard rate - GET /v1/to/minimum-wage — Tonga: National minimum wage — none in force (structural null) - GET /v1/to/public-holidays — Tonga: Public holidays (free) - GET /v1/to/cpi — Tonga: CPI inflation (year-on-year) - GET /v1/to/corporate-tax — Tonga: Corporate income tax rate - GET /v1/to/income-tax — Tonga: Personal income tax brackets - GET /v1/vu/policy-rate — Vanuatu: RBV Rate (Reserve Bank of Vanuatu policy interest rate) - GET /v1/vu/vat — Vanuatu: VAT standard rate - GET /v1/vu/minimum-wage — Vanuatu: National minimum wage rate (hourly) - GET /v1/vu/public-holidays — Vanuatu: Public holidays (free) - GET /v1/vu/cpi — Vanuatu: CPI inflation (year-on-year) - GET /v1/vu/corporate-tax — Vanuatu: Corporate income tax rate - GET /v1/vu/income-tax — Vanuatu: Personal income tax brackets - GET /v1/ws/policy-rate — Samoa: CBS Official Interest Rate (weighted average yield on Central Bank of Samoa Securities) - GET /v1/ws/vat — Samoa: VAGST standard rate (Value Added Goods and Services Tax) - GET /v1/ws/minimum-wage — Samoa: National minimum wage (hourly) - GET /v1/ws/public-holidays — Samoa: Public holidays (free) - GET /v1/ws/cpi — Samoa: CPI inflation (year-on-year) - GET /v1/ws/corporate-tax — Samoa: Company income tax rate - GET /v1/ws/income-tax — Samoa: Personal income tax rates History: GET /v1/{country}/{series}/history?from=YYYY-MM-DD&to=YYYY-MM-DD — e.g. GET /v1/au/policy-rate/history?from=2026-01-01 Changes + freshness (FREE, unmetered): GET /v1/changes?since=YYYY-MM-DD — what changed, plus how many of our 56 series were re-verified against their official source in the last 1/7/30/90 days, and which one has gone longest without a check. `since` is optional (defaults to 30 days). ## Answers (computed verdicts, POST JSON) - POST /v1/answers/wage-check {country, amount, period, schedule?} — at/above/below the statutory minimum? Pass "schedule" to be measured against a sectoral/zonal/grade floor instead of the general one (Kenya 55, South Africa 24); omit it and we say so, because "above the national floor" is not "compliant". Keys: GET /catalog ($0.05) - POST /v1/answers/vat {country, amount, mode?, band?} — net/tax/gross breakdown incl. levy components. Pass "band" for a statutory reduced/zero/super-reduced rate; we publish what each band covers in the authority's own words but do not classify supplies into bands. Keys: GET /catalog ($0.02) - POST /v1/answers/working-days {country, from, to} — working days, holidays hit, next working day ($0.02) - POST /v1/answers/income-tax {country, taxable_income} — statutory income tax + per-bracket workings ($0.05) - POST /v1/answers/settlement-date {trade_date, calendars[], business_days | market + instrument_class} — settlement/value date: T+n business days across one or more national statutory calendars intersected, with a per-day trail, each calendar's basis and source, and the market cycle cited to its primary instrument where we hold one ($0.05). Cited cycles and what we deliberately refuse to cite: GET /settlement-conventions (free) - POST /v1/vat/determine {seller_country, buyer_country, buyer_type?} — cross-border VAT treatment of a digital-services sale: place of supply, who accounts, rate basis, registration trigger, with the applied rule cited to the statute. EU, UK, South Africa; unknown buyer → B2C-default, flagged; out-of-scope pairs refused FREE (422), never guessed, never charged ($0.10)