# Additional Properties

Use this guide to choose additional address properties, request multiple values, and handle access, missing data, and credit costs.

Use `additionalProperties` on geocoding, reverse geocoding, address lookups, and parcel or property searches to retrieve related data in the same request. MailPoint can add these attributes when a postal match is linked to a physical address with geometry.

## Request multiple properties

Send one comma-separated query value. Names are case-sensitive. Omit the parameter for base attributes only.

Set `GEOSCAPE_API_KEY` to your application's Consumer Key before running this example. See [Authentication](/guides/authentication) for setup.

```shell
curl --fail-with-body --get \
  "https://api.psma.com.au/v2/addresses/address/GAACT717940975" \
  -H "Authorization: $GEOSCAPE_API_KEY" \
  -H "Accept: application/geo+json" \
  --data-urlencode "additionalProperties=asgsMain,asgsRemoteness"
```

Use your application's Consumer Key with Addresses API access. Premium properties also require paid-plan access.

## Choose properties

Attributes appear inside a feature's `properties` object. Choose values from the table below. Follow the schema links for field definitions and measurement units.

| Request value | Response field and shape | Contains |
| --- | --- | --- |
| [`asgsMain`](/reference/~schemas#addressesv2-asgsmain-v2) | `asgsMain`: array | ASGS mesh blocks and statistical areas by census year |
| [`asgsRemoteness`](/reference/~schemas#addressesv2-asgsremoteness-v2) | `asgsRemoteness`: array | ASGS remoteness classifications by census year |
| [`buildings`](/reference/~schemas#addressesv2-relatedbuildingids-v2) | `relatedBuildingIds`: array of strings | Linked building IDs. Requires paid-plan access. |
| [`commonwealthElectorate`](/reference/~schemas#addressesv2-commonwealthelectorate-v2) | `commonwealthElectorate`: object | Commonwealth electorate identifiers and name |
| [`localGovernmentArea`](/reference/~schemas#addressesv2-localgovernmentarea-v2) | `localGovernmentArea`: object | Local government area identifiers and names |
| [`parcelBundle`](/reference/~schemas#addressesv2-parcelbundle-v2) | `parcelBundle`: array | Related parcels. Requires an address-level match and paid-plan access. Adds credit costs. |
| [`propertyBundle`](/reference/~schemas#addressesv2-propertybundle-v2) | `propertyBundle`: array | Related properties. Requires an address-level match and paid-plan access. Adds credit costs. |
| [`seifa`](/reference/~schemas#addressesv2-seifa-v2) | `seifa`: array | Socio-Economic Indexes for Areas by census year |
| [`stateElectorate`](/reference/~schemas#addressesv2-stateelectorate-v2) | `stateElectorate`: object | Current effective state electorate |
| [`stateElectorateBundle`](/reference/~schemas#addressesv2-stateelectoratebundle-v2) | `stateElectorateBundle`: array | Gazetted, effective, and retired state electorates |
| [`solarPanelBundle`](/reference/~schemas#addressesv2-solarpanelbundle-v2) | `solarPanelBundle`: object | Solar panel attributes. Requires an address-level match and paid-plan access. Adds credit costs. |

### Census and statistical data

These datasets return arrays covering multiple census years. Select records by `censusYear` rather than assuming an array position.

ASGS Main supports 2011, 2016, 2021, and 2026 where available. The 2026 layer has no dwelling or population counts. Remoteness supports 2011, 2016, and 2021, with no 2026 layer.

SEIFA puts newer census years first. Identifiers vary by year: use the [2021](/reference/~schemas#addressesv2-seifa-v2), [2016](/reference/~schemas#addressesv2-seifa2016-v2), or [2011](/reference/~schemas#addressesv2-seifa2011-v2) schema. Index and population values are strings.

### Administrative geography

Choose the geography you need:

- `stateElectorate` for the current effective state electorate.
- `stateElectorateBundle` for state electorate records that also include gazetted or retired boundaries. Inspect each record's status.
- `commonwealthElectorate` for Commonwealth electorates.
- `localGovernmentArea` for council geography. ACT addresses do not return an LGA.

### Linked buildings, parcels, and properties

`buildings` returns IDs in `relatedBuildingIds` for subsequent building lookups. `parcelBundle` and `propertyBundle` return related records and require an address-level match. All three require paid-plan access. Parcel and property bundles add credit costs.

These relationships can contain multiple records. Check field presence and array contents before following a link or assuming one parcel, property, or building per address.

## Interpret solar data

Request `solarPanelBundle` for photovoltaic solar panel attributes. It requires an address-level match, linked solar data, and paid-plan access.

| Result | Meaning |
| --- | --- |
| Bundle with `solarFlag: true` | The record classifies the address as having photovoltaic solar panels. |
| Bundle with `solarFlag: false` | The record classifies the address as not having photovoltaic solar panels. |
| Bundle without `solarFlag` | A record is available but no classification is supplied. |
| No bundle | Solar data could not be returned. Read `messages`. This is not a negative classification. |

When using the bundle:

- Read `captureSource` and the record's dates to assess the source and currency.
- Check for classification, area, estimated power, and review date before using them. These fields are optional. Do not infer their availability from the imagery source or substitute zero or false for missing values.
- Treat the bundle as a record of classification, rather than evidence of current operating output or detection guarantees for obscured roofs.

`solarArea` is measured in square metres (m²). `solarEstimatedPower` is estimated daily solar energy output in kilowatt-hours (kWh).

See the [Solar Panel Bundle schema](/reference/~schemas#addressesv2-solarpanelbundle-v2) for the fields and [credit costs](#understand-credit-costs) below for charges.

## Handle unavailable data

An unavailable property does not turn a successful match into an HTTP error. Check for the field before using it, then read the feature's `messages` array. For a single-feature lookup, `messages` is at the top level.

Messages can include:

```json
{
  "messages": [
    "parcelBundle not available for locality or street level match",
    "parcelBundle data not available at this address."
  ]
}
```

The two messages can occur together. Missing linkage, coverage, or suitable geometry can also prevent an attribute from being returned. For solar data, the service can report `solarPanelBundle data not available at this address.`

An unknown property name returns `400`. Correct the name before retrying. A premium-property access refusal returns `403`. Resolve access or remove the premium value. See [Error Handling](/guides/errors).

<span id="understand-transaction-costs"></span>

## Understand credit costs

These credits are added to the endpoint's base cost:

| Returned property | Additional credits per feature |
| --- | --- |
| `solarPanelBundle` | 3 |
| Non-empty `parcelBundle` | 2 per bundle, rather than per parcel |
| Non-empty `propertyBundle` | 2 per bundle, rather than per property |
| Other additional properties | 0 (`buildings` still requires paid-plan access) |

When calculating surcharges:

- Apply a surcharge when the property is returned, rather than merely requested.
- Include solar bundles with `solarFlag: false`. They still incur the solar surcharge.
- Add surcharges across returned features. A larger `maxResults` or `limit` can increase credit usage.

Base costs are `1` credit for the address search and lookup endpoints, and `2` credits for MailPoint. Where provided, `x-attr-basicTransaction` reports the calculated credit cost for the response. Request-rate limits are separate from credit usage. See [Rate Limiting](/guides/rate-limiting).

## Next steps

- [Use additional properties in the Addresses Quickstart](/guides/addresses/quickstart)
- [Inspect the response schemas](/reference/~schemas)
