Australian GST Validation API: ABN and ABR Lookup

By Remco from Avatcado

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:

  1. Subtract 1 from the first digit
  2. Multiply each of the 11 digits by the weights [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
  3. Sum all products
  4. 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, and abn51824753556 all work
  • ABN 51 824 753 556 with 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 for 25 days

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_format error immediately, catching typos without a network round-trip.
  • ABN exists but no GST: The response includes valid: false with company.name and company.address populated. The business exists but is not GST-registered.
  • ABN not found: The response includes valid: false with company: null. The ABN does not exist in the ABR.
  • ABR is down: Avatcado serves a cached result with meta.stale: true if one exists. Otherwise, a 503 upstream_unavailable error 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 for all Australian businesses. GST registration is separate and only required for businesses with annual turnover above AUD 75,000. A business can have a valid ABN without being registered for GST.

Is the ABR Lookup API free?

Yes. The ABR provides a free lookup service. You need to register for a GUID (API key) to access it, but there are no per-request charges.

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). Avatcado returns valid: false with the company name included when a business has an ABN but no GST registration.

What format should I use when validating an Australian business number?

Use the AU prefix followed by 11 digits (e.g., AU51824753556). You can also pass the ABN prefix (e.g., ABN51824753556) and Avatcado normalizes it automatically. Spaces and dots are stripped.

How do I validate an ABN in my checkout flow?

Pass the ABN with an AU prefix to the Avatcado validate endpoint. If data.valid is true, the business has an active GST registration. If false, the ABN exists but has no GST registration. Handle the 422 error for invalid checksum to catch typos before the API call.

Can I validate multiple ABNs at once?

Yes. The batch endpoint accepts up to 50 VAT/GST numbers per request, including Australian ABNs. Each item returns independently, so one failed ABN does not block the others. Batch validation is available on Pro and Business plans.

What happens if the ABR is down?

Avatcado serves a cached result with meta.stale: true if one exists. If no cached result is available, a 503 upstream_unavailable error is returned. Implement retry logic with exponential backoff for transient failures.

Sources