Loading...
Sign in to see the examples with your own API key.

.NET SDK

.NET SDK for autocomplete, full address look-up and usage. Targets .NET Standard 2.0 and .NET 8.

Install

dotnet add package getAddress.Au.Sdk

Dependency Injection

services.AddSingleton(new GetAddressAu.ApiKeys("{your-api-key}", "{your-admin-key}"));
services.AddHttpClient<GetAddressAu.Api>();

The admin key is only needed for usage. Keep both keys on your server — browser code uses a domain token.

Autocomplete

Autocomplete and get address.

public async Task Autocomplete(GetAddressAu.Api api)
{
    var autocompleteResult = await api.Autocomplete("200 george st");

    if (autocompleteResult.IsSuccess)
    {
        foreach (var suggestion in autocompleteResult.Success.Suggestions)
        {
            var getResult = await api.Get(suggestion);

            if (getResult.IsSuccess)
            {
                var address = getResult.Success;
                var label = address.AddressLabel;
                var suburb = address.LocalityName;
                var state = address.State;
                var postcode = address.Postcode;
                //....
            }
        }
    }
    else
    {
        var errorMessage = autocompleteResult.Failed.Message;
    }
}

Autocomplete is free and rate limited. Each successful Get counts one look-up against your plan; a 404 costs nothing. A suggestion's Id is the address's G-NAF address_detail_pid, so it is safe to store and pass to api.Get(id) later.

Filter

var result = await api.Autocomplete("george st", new GetAddressAu.AutocompleteOptions
{
    Filter = new GetAddressAu.AutocompleteFilter { State = "NSW", Postcode = "2000" }
});

Locations

Suburbs, states and postcodes — see the Location API.

var locations = await api.Locations("northb");          // free, rate limited
var place = await api.GetLocation(locations.Success.Suggestions[0]);   // one look-up
var centre = place.Success.Coordinates;

var nearest = await api.NearestLocations(-33.8612, 151.2107, top: 3);   // one look-up
var metres = nearest.Success.Suggestions[0].Distance;

Typeahead

Completes a suburb, postcode, street or state — see the Typeahead API. Free.

var suburbs = await api.Typeahead("bon");        // BONDI JUNCTION, BONDI BEACH, BONDI …

var streets = await api.Typeahead("pi", new GetAddressAu.TypeaheadOptions
{
    Search = new() { GetAddressAu.TypeaheadOptions.Fields.Street },
    Filter = new GetAddressAu.TypeaheadFilter { Locality = "SYDNEY" }
});                                              // PIER, PITT

Validate

Confirms a one-line address — see the Validate API. One look-up only when found.

var result = await api.Validate("12 Acland St, St Kilda VIC 3182");

if (result.Success.Status == GetAddressAu.ValidateStatus.Found)
{
    var address = result.Success.Address;        // as Get returns it
}
else if (result.Success.Status == GetAddressAu.ValidateStatus.Ambiguous)
{
    var ids = result.Success.Candidates;         // Get(id) each
}

Distance

Straight-line metres between two addresses or two points — see the Distance API. Free.

var between = await api.Distance("GANSW721316793", "GAVIC419664638");
var points = await api.Distance(-33.8612, 151.2107, -33.8605, 151.2073);
var metres = between.Success.Metres;

Failures

Errors the API reports are results, not exceptions. Failed.Status is the HTTP status (0 when no response arrived), Failed.Message says what went wrong, and a 429 carries Failed.RetryAfterSeconds.

if (!result.IsSuccess && result.Failed.IsRateLimited)
{
    await Task.Delay(TimeSpan.FromSeconds(result.Failed.RetryAfterSeconds ?? 60));
}

Usage

var today = await api.Usage();
var oneDay = await api.Usage(1, 9, 2026);
var range = await api.Usage(new DateTime(2026, 9, 1), new DateTime(2026, 9, 14));

Without Dependency Injection

var api = new GetAddressAu.Api(new HttpClient(), new GetAddressAu.ApiKeys("{your-api-key}"));
Top