Australian GST Validation API: ABN and ABR Lookup
Australian GST validation is based on the Australian Business Number (ABN), an 11-digit identifier issued by the Australian Business Register (ABR). This guide covers how ABNs and GST registration work, and how Avatcado validates them for you.
What is an ABN?
An ABN (Australian Business Number) is an 11-digit unique identifier for businesses operating in Australia. It is issued by the Australian Business Register and is required for tax and business transactions. In Avatcado, Australian ABNs use the AU country prefix. Example: AU51824753556.
AU- country prefix (Avatcado convention)- 11 digits - the ABN itself (first two are check digits)
You can also pass the ABN prefix (e.g., ABN51824753556) and Avatcado normalizes it to AU51824753556 automatically. For the full format reference with a free checker, see the Australian ABN format page.
ABN vs GST registration
Having an ABN does not automatically mean the business is registered for GST (Goods and Services Tax). Businesses must register for GST separately once their annual turnover reaches AUD 75,000 (AUD 150,000 for non-profit organizations).
Avatcado checks both: valid: true means the ABN exists and the business has an active GST registration. If the ABN exists but has no GST registration, you get valid: false with the company name and address still included.
The ABR Lookup service
The Australian Business Register provides a public API for looking up ABN details. Key characteristics:
- Protocol: JSONP (callback wrapper that needs to be stripped)
- Authentication: requires a GUID (API key) obtained by registration
- Returns: business name, ABN status, GST registration date, address (state + postcode)
- Free to use
The ABR API returns GST registration as a date field. If the field contains a date, the business is currently GST-registered. If it is empty, the business is not GST-registered.
Why wrapping the ABR matters
The ABR API has several characteristics that make direct integration painful:
- JSONP response format requires stripping the callback wrapper before parsing
- Errors come back as a plain Message string
- No documented rate limits or caching guidance
- Authentication requires registering for a GUID
Avatcado wraps the ABR in the same REST API, JSON format, caching layer, and error handling you already use for EU, UK, and other validations. No additional integration work required.
ABN checksum validation
ABNs include a checksum for detecting data entry errors. The algorithm works differently from MOD11 used by Swiss and Norwegian numbers:
- Subtract 1 from the first digit
- Multiply each of the 11 digits by the weights
[10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19] - Sum all products
- The ABN is valid if the sum is divisible by 89
Avatcado validates this checksum before calling the ABR upstream. Invalid checksums return a 422 invalid_vat_format error immediately, saving you an unnecessary API call.
Validating with Avatcado
Pass any Australian ABN to the same endpoint you use for EU, UK, Swiss, and Norwegian numbers:
curl "https://api.avatcado.com/v1/validate?vat_number=AU51824753556" \
-H "Authorization: Bearer avat_live_YOUR_KEY"Response:
{
"data": {
"valid": true,
"vat_number": "AU51824753556",
"country_code": "AU",
"company": {
"name": "AUSTRALIAN TAXATION OFFICE",
"address": "NSW 2640"
},
"requested_at": "2026-03-26T12:00:00.000Z"
},
"meta": {
"request_id": "req_abc123"
}
}Avatcado normalizes all input formats:
AU51824753556,ABN51824753556, andabn51824753556all workABN 51 824 753 556with spaces is also accepted; spaces and dots are stripped automatically- The ABN prefix is converted to AU automatically, and lowercase input is uppercased
- Checksum is validated before making the upstream call
- Results are cached, so repeat lookups skip the upstream call
Using ABN validation in a checkout flow
For B2B transactions in Australia, collecting and verifying a customer's ABN at checkout is standard practice. Check data.valid in the response. If true, the business has an active GST registration and you can apply the appropriate tax treatment. If false, the ABN exists but the business is not GST-registered, and you should not zero-rate the transaction.
Handling edge cases
- Invalid ABN checksum: Avatcado validates the checksum before hitting the ABR. If it fails, you get a
422 invalid_vat_formaterror immediately, catching typos without a network round-trip. - ABN exists but no GST: The response includes
valid: falsewithcompany.nameandcompany.addresspopulated. The business exists but is not GST-registered. - ABN not found: The response includes
valid: falsewithcompany: null. The ABN does not exist in the ABR. - ABR is down: Avatcado serves a cached result with
meta.stale: trueif one exists. Otherwise, a503 upstream_unavailableerror is returned. Implement retry logic with exponential backoff for transient failures.
Batch validation for vendor onboarding
When onboarding multiple Australian vendors, use the batch endpoint to validate up to 50 ABNs in a single request (Pro and Business plans):
curl -X POST "https://api.avatcado.com/v1/validate/batch" \
-H "Authorization: Bearer avat_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"vat_numbers": [
"AU51824753556",
"AU53004085616",
"AU33102417032"
]
}'Each item in the response has its own data and meta block, so you can see which ABNs are valid and which failed independently of the others.
SDK integration
The @avatcado/node SDK covers single and batch validation:
import Avatcado from "@avatcado/node";
const avatcado = new Avatcado("avat_live_YOUR_KEY");
const { data, error } = await avatcado.vat.validate({
vatNumber: "AU51824753556",
});
if (error) {
console.error(error.code, error.message);
} else {
console.log(data.data.valid, data.data.company?.name);
}
const batch = await avatcado.vat.validateBatch({
vatNumbers: ["AU51824753556", "AU53004085616"],
});The avatcado Python package provides the same functionality with typed exceptions:
from avatcado import Avatcado
avatcado = Avatcado("avat_live_YOUR_KEY")
result = avatcado.vat.validate("AU51824753556")
if result.data.valid:
print(result.data.company.name)
batch = avatcado.vat.validate_batch(["AU51824753556", "AU53004085616"])Australian GST rates
Australia has a flat 10% GST rate with no reduced rates. GST-free items (fresh food, health, education) are zero-rated. Note that the /v1/rates endpoint also returns the current Australian GST rate alongside the other supported countries.
Test mode
Use a avat_test_ API key with any valid ABN checksum. For example:
AU51824753556- returns valid with test company data
Any ABN that passes the checksum validation will return a test response in test mode. Test mode never hits the ABR, so your integration tests are fast and deterministic.
Get your API key and start validating Australian ABNs in under 2 minutes.
Frequently asked questions
What is the difference between an ABN and a GST number?
An ABN (Australian Business Number) is an 11-digit identifier issued by the Australian Business Register for businesses operating in Australia; it is required for tax and business transactions generally, not just GST. GST registration is a separate step that becomes mandatory once annual turnover reaches AUD 75,000 (AUD 150,000 for non-profit organizations), so a business can hold a perfectly valid ABN without being registered for GST, and many small businesses do. Australia has no separately formatted 'GST number': the ABN is the identifier, and GST registration is a status attached to it, which the ABR exposes as a date field (a date present means currently registered, an empty field means not). For tax treatment decisions you need both facts, which is why Avatcado checks both: valid: true means the ABN exists and carries an active GST registration, while an ABN without GST registration returns valid: false with the company details still included.
Is the ABR Lookup API free?
Yes. The ABR provides a free lookup service with no per-request charges; the only gate is registering for a GUID, which acts as your API key. What the price tag does not cover is integration friction. The API responds in JSONP, so you have to strip a callback wrapper before you can parse the payload, errors come back as a plain Message string rather than structured codes, and there are no documented rate limits or caching guidance to design around. GST status arrives as a date field you have to interpret yourself: a populated date means currently registered, an empty field means not. None of this is hard individually, but it adds up to a second bespoke integration next to whatever you built for VIES or HMRC. Avatcado wraps the ABR in the same REST endpoint, JSON envelope, caching layer, and error handling used for every other supported country, so Australian coverage costs no additional integration work.
Can a business have an ABN but not be registered for GST?
Yes. All Australian businesses need an ABN for tax and government purposes, but GST registration is only mandatory when taxable turnover exceeds AUD 75,000 (AUD 150,000 for non-profits), so the register holds plenty of valid ABNs with no GST registration behind them. This is the single most important nuance in Australian validation, because 'the ABN exists' and 'the business is GST-registered' lead to different tax treatment. Avatcado resolves it in one response with a three-way distinction: valid: true means an active GST registration; valid: false with company.name and company.address still populated means the ABN is real but carries no GST registration; and valid: false with company: null means the ABN does not exist in the ABR at all. That lets your checkout say the right thing to the customer, since 'we found your business but it has no GST registration' is a very different message from 'this ABN does not exist', without needing a second lookup.
What format should I use when validating an Australian business number?
Use the AU prefix followed by the 11 digits, for example AU51824753556; that is Avatcado's convention for Australian numbers so they fit the same vat_number parameter as every other country. You do not need to sanitize customer input first. ABN51824753556 and lowercase abn51824753556 are converted to the AU form automatically, and 'ABN 51 824 753 556' with spaces also works, since spaces and dots are stripped during normalization. Whatever shape goes in, the response echoes the normalized form (AU51824753556) in the vat_number field, so store that canonical value rather than the raw input. Before any upstream call, Avatcado also verifies the ABN checksum (subtract 1 from the first digit, weight all eleven digits, and require the sum to divide evenly by 89); a string that fails it returns a 422 invalid_vat_format error immediately, so obvious typos never reach the ABR or consume a network round trip.
How do I validate an ABN in my checkout flow?
Pass the ABN with an AU prefix to the Avatcado validate endpoint (GET /v1/validate?vat_number=AU51824753556) and branch on the response. If data.valid is true, the business has an active GST registration and you can apply the appropriate B2B tax treatment. If data.valid is false but company details are present, the ABN exists without a GST registration, so do not zero-rate. If company is null, the ABN does not exist in the ABR at all, which usually means a typo or a made-up number. Handle the 422 invalid_vat_format error to catch checksum failures before any upstream call happens, giving the customer instant feedback on transposed digits. Handle a 503 upstream_unavailable (returned only when the ABR is down and no cached result exists) by letting the customer proceed and revalidating later. In test mode any ABN with a valid checksum returns deterministic test data, so the whole flow is testable in CI.
Can I validate multiple ABNs at once?
Yes. The batch endpoint (POST /v1/validate/batch) accepts up to 50 VAT or GST numbers per request, and you can mix Australian ABNs freely with EU, UK, Swiss, and Norwegian numbers in the same call. Each item in the response carries its own data and meta block and succeeds or fails independently, so one mistyped ABN does not block the other 49; you see per-item results and can report exactly which vendors failed and why. Batch validation is available on Pro and Business plans and is the right tool for vendor onboarding, where you might receive a spreadsheet of supplier ABNs and want them verified in one round trip instead of a request loop. For backlogs larger than 50 at a time, page through your records and submit successive batches. The @avatcado/node SDK exposes this as avatcado.vat.validateBatch, and the Python package mirrors it with validate_batch.
What happens if the ABR is down?
Avatcado degrades in two stages. If the ABN has been validated before, the cached result is served, and if the entry is older than the cache window it is still served during the outage, marked with meta.stale: true so you know it is a fallback rather than a fresh lookup. Only when no cached result exists at all does the API return a 503 with the code upstream_unavailable, because guessing about a number it has never seen would be worse than an honest failure. Build for both cases: treat stale results as acceptable for routine flows, optionally flagging them for revalidation once the ABR recovers, and implement retry logic with exponential backoff for the 503 path, since ABR outages are typically transient. In a checkout, prefer letting the customer proceed with conservative tax treatment over blocking the sale. Test mode never hits the ABR, so upstream outages cannot affect your CI runs either.
Sources
- ABN format and checksum Australian Business Register, accessed August 13, 2026
- ABN Lookup web services Australian Business Register, accessed August 13, 2026
- Registering for GST (AUD 75,000 / 150,000 thresholds) Australian Taxation Office, accessed August 13, 2026
- GST-free sales Australian Taxation Office, accessed August 13, 2026
Related guides
Swiss VAT Number Validation API: CHE Format
How to validate Swiss and Liechtenstein VAT numbers using the BFS UID Register. Covers the CHE format, MWST/TVA/IVA suffixes, and the MOD11 checksum.
Norwegian VAT Number Validation API: MVA Format
How to validate Norwegian VAT numbers (MVA) using the Bronnoysund Register Centre API. Covers the number format, MOD11 checksum, and SDK integration.
HMRC VAT Check API: OAuth, Examples & Error Handling
Integrate HMRC's Check a UK VAT Number API with OAuth client credentials, Node.js examples, verified lookups, and structured error handling.
Validate EU VAT Numbers via API: Developer Guide
Learn how to validate EU VAT numbers, plus UK, Swiss, Norwegian, and Australian VAT/GST, via REST API. Covers VIES, HMRC, TypeScript, Python, and test mode.