# Addresses and deliverability (/addresses)
Every recipient address is validated and standardized before the mailpiece is
produced. Understanding what validation does to your data — and which fields it
writes back — avoids the two most common surprises: recipients silently marked
undeliverable, and fields you set being overwritten.
## Two ways to supply an address [#two-ways-to-supply-an-address]
Either works. The address requirement is satisfied by **either** the component fields
or a single line.
**Component fields** (preferred), under `address`:
```json
{
"address": {
"address1": "1600 Pennsylvania Ave NW",
"address2": "Suite 300",
"city": "Washington",
"state": "DC",
"zipCode": "20500"
}
}
```
**A single unparsed line**, as `metadata.fullAddress`:
```json
{ "metadata": { "fullAddress": "1600 Pennsylvania Ave NW, Washington, DC 20500" } }
```
`fullAddress` is a genuine fallback, not a convenience alias: when the component
fields are incomplete, supplying `fullAddress` is what stops the recipient being
rejected for a missing address. If you have structured data, send the component
fields — parsing is more reliable when you have already done it.
`metadata.fullAddress` and `metadata.text`, `metadata.text2` are declared
non-nullable. Send an empty string rather than `null` for any you are not using.
## What you send versus what validation writes [#what-you-send-versus-what-validation-writes]
| Field | Who sets it |
| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `address1`, `address2`, `city`, `state`, `zipCode` | You. Validation may standardize the values. |
| `zip4` | **Validation.** Sending it has no effect on delivery. |
| `zip2` | **Validation.** The delivery-point code; sending it has no effect. |
| `country` | You. US spellings and US territory names are canonicalized; anything else passes through unchanged. Omit for US addresses. |
| `metadata.dpvConfirmationCode` | **Validation.** Read-only; ignored on input. |
| `metadata.deliveryStatus` | **Carrier tracking.** Read-only; ignored on input. |
`state` accepts either the two-letter abbreviation or the full state name — a full
name is converted for you.
## Reading the deliverability result [#reading-the-deliverability-result]
`dpvConfirmationCode` is the USPS Delivery Point Validation result, passed through as
the postal standard defines it:
| Code | Meaning |
| ----- | ------------------------------------------------------------ |
| `Y` | Confirmed — a valid delivery point. |
| `N` | Not confirmed — could not be validated. |
| `S` | Confirmed after dropping the unit or suite information. |
| `D` | Confirmed to the building only; unit information is missing. |
| empty | Not yet validated. |
`S` and `D` are deliverable but imprecise: mail reaches the building, and a unit
number you supplied may have been dropped or was never matched. If unit-level
accuracy matters to your campaign, treat them as warnings.
Do not confuse this with DPV **footnotes**, a longer code set in which the same
letters carry different meanings. This field is the confirmation code only.
## Undeliverable recipients [#undeliverable-recipients]
Recipients that fail validation are **not** silently dropped: the add-recipients
response separates them out, so read its payload rather than assuming everything you
sent was accepted. Compare the count you sent against the count accepted on every
call, and log the undeliverable set — that is your data-quality signal, and it is
cheaper to fix at the source than to discover in a delivery report.
Recipients are also checked against your suppression lists and de-duplicated within
the batch during the same step, so the accepted count can legitimately be lower than
what you sent for reasons other than a bad address.
## Delivery status after mailing [#delivery-status-after-mailing]
Once a piece mails, `deliveryStatus` tracks it through: `Waiting on USPS Info`,
`Mailed`, `In Transit`, `At Local Facility`, `Delivered`, or `Undeliverable`.
Before the first tracking update arrives you will see `No Tracking Available`. That
is the normal pending state, **not** an error and not a delivery failure — do not
alert on it.