Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
Start an integration
Products
Global Payouts
Capital
Issuing cards
    Overview
    How Issuing works
    Global availability
    Manage fraud
    Cards
    Choose your card type
    Virtual cards
    Issue virtual cards
    Physical cards
      Choose card bundle
      Order a custom bundle
      Create a design
      Issue cards
      Ship cards
        Address validation
        Issue and ship cards in bulk
      Get support for self-service cards
    Manage cards
    Digital wallets
    Replacement cards
    Card programs
    Program management
    Customize your card program
    Add funds to your card program
    Credit Consumer Issuing
    Controls
    Spending controls
    Advanced fraud tools
    3DS
    Fraud challenges
    Real-time authorizations
    PIN management
    Issuing Elements
    Token Management
    Funding
    Balance
    Postfund your integration with Stripe
    Postfund your integration with Dynamic Reserves
    Purchases
    Authorizations
    Transactions
    Disputes
    Testing
    Merchant categories
    ATM Usage
    Issuing with Connect
    Set up an Issuing and Connect integration
    Update terms of service acceptance
    Connect funding
    Connected accounts, cardholders, and cards
    Embed card management UI
    Credit
    Overview
    Set up connected accounts
    Manage credit terms
    Report other credit decisions and manage AANs
    Report required regulatory data for credit decisions
    Manage account obligations
    Test credit integration
    Additional information
    Choose a cardholder type
    Customer support for Issuing and Treasury
    Issuing watchlist
    Marketing guidance (Europe/UK)
    Product and marketing compliance guidance (US)
Treasury
Manage money
HomeMoney managementIssuing cardsPhysical cardsShip cards

Physical cards address validation

Enable and manage address validation features for physical cards.

Copy page

Stripe Issuing needs accurate and properly formatted shipping addresses to ensure successful delivery of physical cards to their intended recipient. Cards sent to invalid addresses get returned to Stripe, but the delivery attempt and the eventual return can take over 2 weeks to complete. Returned cards can create an operational burden, increase your overall costs, and delay your cardholders’ receipt of your physical cards.

To maximize your delivery success, Stripe’s Cards API has built-in address normalization and validation. Stripe compares the shipping address you provide to a third-party address database and identifies or fixes any issues with the address.

Address normalization

Normalization ensures that your addresses adhere to the standards of the shipment’s country while also correcting any obvious errors in your addresses.

Examples of normalization include:

Address standardization to ensure proper formatting

// Before "shipping": { "address": { "line1": "354 Oyster Point Blvd South San Francisco, CA 94080", // incorrectly formatted line1 "city": "South San Francisco", "postal_code": "94080", "state": "CA", "country": "US" } } // After "shipping": { "address": { "line1": "354 OYSTER POINT BLVD", "city": "SOUTH SAN FRANCISCO", "postal_code": "94080", "state": "CA", "country": "US" } }

Address correction to apply corrections found from matching with an existing validated address

// Before "shipping": { "address": { "line1": "354 Oyster Point", "city": "South San Francisco", "postal_code": "94080", "state": "NM", // incorrect state with an available correction "country": "US" } } // After "shipping": { "address": { "line1": "354 OYSTER POINT BLVD", // added BLVD suffix "city": "SOUTH SAN FRANCISCO", "postal_code": "94080", "state": "CA", // corrected state "country": "US" } }

The normalized address is included in the address validation hash that is returned after successfully creating a physical card or updating a card’s shipping address with address normalization enabled.

Sample address validation

"shipping": { // address supplied during card creation "address": { "line1": "354 Oyster Point Blvd South San Francisco, TX 94080", "city": "South San Francisco", "postal_code": "94080", "state": "TX", "country": "US" }, // address validation hash "address_validation": { // the normalized address "normalized_address": { "line1": "354 OYSTER POINT BLVD", "city": "SOUTH SAN FRANCISCO", "state": "CA", "postal_code": "94080", "country": "US" }, "mode": "validation_and_normalization", "result": "likely_deliverable" } }

Address validation

Validation determines whether your address is deliverable by attempting to match to an existing, validated address and is done after applying normalization.

The result of this validation is included in the address validation hash. Depending on the address validation mode used this might result in an API error.

ResultDescription
likely_deliverableIf a partially matching or fully matching address is found in our third party database, your address is considered likely deliverable.
likely_undeliverableIf no matching or partially matching address is found in our third party database, your address is considered likely undeliverable.
indeterminateThe deliverability of the address couldn’t be determined.

For example, the previous example showed the validation result of likely_deliverable.

"address_validation": { // the normalized address "normalized_address": { "line1": "354 OYSTER POINT BLVD", "city": "SOUTH SAN FRANCISCO", "state": "CA", "postal_code": "94080", "country": "US" }, "mode": "validation_and_normalization", // the result showing that address was validated to be likely deliverable "result": "likely_deliverable" }

Managing address validation features with address validation modes

The Cards API supports three address validation modes, which can optionally be specified in the address_validation parameter when creating a physical card or updating a card’s shipment.

ModeDescription
validation_and_normalizationValidates and normalizes your card’s shipping address before submitting it for fulfillment. Stripe attempts to automatically apply any appropriate corrections and formatting to your address before determining deliverability. If the card’s shipping address is likely undeliverable, you get an API request error.
normalization_onlyNormalizes your card’s shipping address before submitting it for fulfillment, and applies any appropriate corrections and formatting to your address. Address deliverability isn’t enforced, and you don’t get an API request error.
disabledShips your card using the address provided as-is, without applying any normalization or validating its deliverability. This is only recommended when an address is known to be correct or otherwise validated.

Use validation_and_normalization for the address validation mode. We also provide alternate modes depending on your scenario:

  • disabled: If you believe a card is incorrectly blocked.
  • normalization only: If you want to minimize API errors but still gain the benefits of normalization. The default is normalization_only if not specified.

Validation and normalization

Your card is shipped with the validated, normalized address. Address deliverability is enforced, and the API errors if the address is likely undeliverable. Stripe strongly recommends using this mode to ensure deliverability for the address.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \ -d type=physical \ -d currency=usd \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="1234 Fake St" \ -d "shipping[address][city]"="Fake City" \ -d "shipping[address][state]"=NY \ -d "shipping[address][country]"=US \ -d "shipping[address][postal_code]"=94111 \ -d "shipping[address_validation][mode]"=validation_and_normalization
"error": { "message": { "The address is undeliverable based on given inputs. Please ensure that the address was inputted correctly and can be delivered to." } }

Normalization only

Your card will be shipped with the normalized address. Address deliverability isn’t enforced, and you don’t get an API request error if the address is likely undeliverable.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \ -d type=physical \ -d currency=usd \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="1234 Fake St" \ -d "shipping[address][city]"="Fake City" \ -d "shipping[address][state]"=NY \ -d "shipping[address][country]"=US \ -d "shipping[address][postal_code]"=94111 \ -d "shipping[address_validation][mode]"=normalization_only
# Example response { "id": "ic_test1CDR9auHsQKan42gGK34", "object": "issuing.card", "shipping": { // address supplied during card creation "address": { "line1": "1234 Fake Street", "city": "Fake city", "postal_code": "94111", "state": "NY", "country": "US" }, // address validation information "address_validation": { // the card will be shipped with this address "normalized_address": { "line1": "1234 FAKE ST", "city": "FAKE CITY", "state": "NY", "postal_code": "94111", "country": "US" }, "mode": "normalization_only", "result": "likely_undeliverable" }, // other fields... }, // other fields... }

Disabled

This mode ships your card using the address provided as-is, without applying normalization or validating its deliverability. A normalized address and validation result will not be returned. This is recommended only when an address is known to be correct or otherwise validated.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \ -d type=physical \ -d currency=usd \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="1234 Fake St" \ -d "shipping[address][city]"="Fake City" \ -d "shipping[address][state]"=NY \ -d "shipping[address][country]"=US \ -d "shipping[address][postal_code]"=94111 \ -d "shipping[address_validation][mode]"=disabled
// Example response { "id": "ic_test1CDR9auHsQKan42gGK34", "object": "issuing.card", "shipping": { // address supplied during card creation "address": { "line1": "1234 Fake Street", "city": "Fake city", "postal_code": "94111", "state": "NY", "country": "US" }, // address validation information "address_validation": { "mode": "disabled" }, // other fields... }, // other fields... }

Integrating address validation into your card creation flow

We provide several examples on how to integrate your flow with address validation features below. These examples are not exhaustive, and are only meant to serve as ideas to help you with your integration.

Strict address validation

The best way to increase deliverability is to never bypass address validation, requiring your customers to always submit deliverable addresses.

Address suggestions

Prompting a user to select between a suggested address and the one they provided is a common flow that you can build yourself using our address validation features.

Relaxed address validation

You can gracefully handle undeliverable address errors by requiring the user to confirm the address they submitted. By leveraging the disabled address validation mode, you can make sure that your customers are able to order cards without much friction if their address is known to be correct.

Testing address validation

You can supply a magic value for line1 to trigger certain validation conditions in testing environments. You must pass in legitimate values for the city, state, and postal_code arguments.

ValueType
address_validSend a request using a test deliverable shipping address.
address_invalidSend a request using an test undeliverable shipping address.
Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d cardholder=ich_1Cm3pZIyNTgGDVfzI83rasFP \ -d type=physical \ -d currency=usd \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"=address_invalid \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"=CA \ -d "shipping[address][country]"=US \ -d "shipping[address][postal_code]"=94111 \ -d "shipping[address_validation][mode]"=validation_and_normalization
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc