.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}"));