payinOPERATIONS MANUAL

Latest articles

Stripe Checkout addresses: separate billing collection from shipping countries

Choose billing and shipping collection separately, configure allowed destination countries, and preserve the address chosen for each order without mistaking it for payer eligibility.

Published; sources checked:

Stripe-hosted Checkout address collection and shipping destination country configuration. Excludes email, invoice tax-location repair, shipping-rate calculation, regional account eligibility and legal advice. Documentation research only.

Choose the address by its purpose

A billing address and a parcel destination answer different operational questions. Stripe documents separate controls for collecting each in hosted Checkout.[1] Decide whether the order needs a delivery address before changing a billing setting. Requiring billing data is not the documented switch for requesting a shipping destination.[1][2]

A public developer question asks how to get a billing address into a Checkout Session after trying an address on the Customer; its code already contains billing_address_collection: 'required'.[3] This is evidence of a concrete integration problem, not a measure of search demand. The guide below resolves collection and destination choices, not customer email editing or invoice tax-location repair.

Make billing collection deliberate

The creation reference defaults billing_address_collection to auto: Checkout collects billing details when necessary. With automatic tax, that means the minimum fields needed for the calculation. Set it to required when you need Checkout always to collect a billing address.[2] Do not interpret a shorter form under automatic collection as proof that shipping information has disappeared.

Our recommendation is to document the reason for requiring billing data separately from the reason for asking where to deliver. For a digital-only order, assess whether any delivery collection is necessary. For a physical order, keep the shipping decision explicit even if the payer and recipient usually share an address. Avoid making a customer invent a delivery destination solely to satisfy an unrelated internal billing requirement.

Enable shipping with an explicit country list

To request a shipping address, supply shipping_address_collection when creating the Session. Its allowed_countries child is required and contains two-letter ISO country codes representing the shipping-location options Checkout offers.[1][4] The hosted guide illustrates US and CA; these are examples, not an instruction to offer both markets.[1]

For a hypothetical merchant delivering only within Canada, the intended setting is shipping_address_collection.allowed_countries = ['CA']. Add billing_address_collection = 'required' only if the separate billing requirement calls for it. These are configuration fragments, not a complete API request or an executed test. Build the actual destination list from the merchant's approved delivery policy and validate its entries against the current API reference.

Do not mistake shipping countries for payer restrictions

The API describes these codes as options for shipping locations, not as a billing-country or card-issuer-country filter.[4] A buyer paying from one country for a recipient in another therefore needs a destination decision, rather than an assumption that both addresses must match. Do not present this setting as proof of the customer's residence, nationality, or permission to purchase.

Recommended operational boundary: maintain carrier coverage, product restrictions, customs review, and any regional sales policy outside this simple collection setting. A country appearing in Checkout does not establish those approvals. If fulfillment depends on a postcode or a product-specific restriction, review that condition separately; a country-only list is not your complete delivery policy. This article does not establish Stripe account availability in any market.

Preserve the destination chosen for the order

The hosted address guide says the completed Session saves the collected address in shipping_details, includes it in the checkout.session.completed payload, and displays shipping information on the payment details page.[1] Treat that as the documented starting point, then verify the actual response schema for your pinned API version before wiring a production extractor.

Our recommendation is to retain an order-specific destination snapshot and its Session reference instead of silently substituting whichever Customer address is available later. If the destination is absent or inconsistent with the order's delivery rules, route the order for correction. Address collection alone should not release goods: payment readiness and fulfillment authorization remain separate checks. Do not log full customer addresses merely to diagnose which configuration flag was missing.

Check the decision, not just the form

Proposed acceptance checks: compare automatic and required billing collection; create a shipping-enabled Session with one approved country; inspect the destination choices; complete a permitted-destination scenario; and inspect the returned address under the integration's actual API version. Include different billing and shipping countries and an order requiring no delivery. These are suggested checks, not results from tests performed here.

When a shipping form is missing, inspect the server's Session creation parameters first. When a country is missing, compare the configured list with the approved delivery policy rather than broadening it indiscriminately. Sources were retrieved on 23 September 2026; unstated publication dates remain unknown. This is public-document research and editorial operating guidance, not a PayIn feature promise, live Stripe test, or legal or tax advice.

Sources and dates

Official documentation supports behavior; community questions demonstrate qualitative demand only. Retrieved 2026-09-23; retrieval is not publication. Documentation research, not live-account testing, a PayIn feature claim or financial advice. Regional availability and account eligibility must be checked separately.

More guides

All guides