Address Validation
Address Field Format
The Shippo API uses v1 field names for address components in most endpoints (including CreateShipment). Always use:
Note: CreateAddress and ValidateAddress take the v2 field names (address_line_1, city_locality, state_province, postal_code), but when passing addresses inline to CreateShipment, you must use the v1 names above.
Validate a Structured Address
- Collect at minimum:
street1,city,state,zip,country(ISO 3166-1 alpha-2). - Call
CreateAddresswith the address fields. This creates the address and returns an object ID. - Call
ValidateAddresswith the address fields to get validation results. Note: this endpoint takes address fields as query parameters, not an object ID. - Check
analysis.validation_result.valuein the response. Values:"valid","invalid", or"partially_valid"(address found with corrections applied). Checkanalysis.validation_result.reasonsfor details. - Report the standardized address back. Highlight any corrected fields (listed in
changed_attributes). Noteanalysis.address_type("residential","commercial", or"unknown") -- residential classification affects carrier surcharges. - If invalid: relay the reason descriptions. If the API returns a
recommended_address, present it to the user. - If
partially_valid: show what was corrected and ask the user to confirm the corrections are acceptable.
Parse a Freeform Address
- Call
ParseAddresswith the raw string (e.g., "123 Main St, Springfield IL 62704"). - Review the structured output for completeness. The parse response uses v2 field names:
address_line_1,city_locality,state_province,postal_code. - Note: the parse response does not include
country. You must ask the user for the country or infer it, then add it before proceeding. - Validate the parsed result by passing the fields to
CreateAddressthenValidateAddress(follow the structured address workflow above from step 2).
International Addresses
- Always require the
countryfield. Do not guess. - Pass non-Latin characters as-is; the API handles encoding.
- Validation depth varies by country. US, CA, GB, AU, and major EU countries have deep validation. Others may only confirm structural completeness. Inform the user of this limitation.
Bulk Address Validation
There is no batch validation endpoint. Call CreateAddress per address. Track results (row number, valid/invalid, corrections, errors, residential classification) and report a summary when done. For 50+ addresses, set expectations about processing time and provide progress updates.
Re-validate an Existing Address
Call ValidateAddress with the address fields. This endpoint validates by address fields, not by object ID.
Duplicate Addresses
If CreateAddress returns a "Duplicate address" error, the address already exists in the account. Retrieve it via ListAddresses or proceed directly to validation.
Quick Reference
Validate an address:
CreateAddress (saves address) + ValidateAddress (validates with same fields)
Parse then validate:
ParseAddress -> add country -> CreateAddress + ValidateAddress


