# Use ship-from addresses

Calculate tax based on the location where goods ship from.

If your business ships goods from locations other than your head office, you can provide a ship-from address to Stripe Tax so it can determine the correct tax origin for each transaction. This is common for businesses with multiple warehouses, fulfillment centers, or third-party logistics providers.

## Ship-from compared to other addresses

Stripe Tax uses several addresses to calculate tax. Understanding the distinction between them is important:

- **Head office address** (also called origin address or legal entity address): Your business’s main office location, configured in your [Tax settings](https://docs.stripe.com/tax/set-up.md). Stripe uses this as the default origin for all transactions.
- **Ship-from address**: The physical location where goods are shipped from for a specific transaction. You provide this per-transaction using the `ship_from_details` parameter. When provided, Stripe Tax might use it instead of your head office address as the transaction origin, depending on jurisdiction rules.
- **Customer address** (also called shipping address or destination): The customer’s location. This is the transaction destination, not the origin. Don’t confuse this with the ship-from address.

## Supported integrations

You can use ship-from addresses only with the [Stripe Tax API](https://docs.stripe.com/tax/standalone-tax-api.md) (also known as the standalone Tax API). Ship-from addresses aren’t available with Payment Links, Checkout, Billing, or Invoicing integrations.

### Request to join the preview for ship-from addresses with other Stripe integrations.

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/tax/ship-from-address" \
  -d '{"email": "EMAIL", "preview": "tax_ship_from_native_integrations_preview"}'
```

## Add a ship-from address

To add a ship-from address, include the `ship_from_details` object when you [create a tax calculation](https://docs.stripe.com/api/tax/calculations/create.md). The `ship_from_details.address` object requires a `country` field. For US addresses, you must also include `postal_code`.

```bash
curl https://api.stripe.com/v1/tax/calculations \
  -u "{{SECRET_KEY}}:" \
  -d "currency=usd" \
  -d "line_items[0][amount]=10000" \
  -d "line_items[0][reference]=L1" \
  -d "customer_details[address][line1]=920 5th Ave" \
  -d "customer_details[address][city]=Seattle" \
  -d "customer_details[address][state]=WA" \
  -d "customer_details[address][postal_code]=98104" \
  -d "customer_details[address][country]=US" \
  -d "customer_details[address_source]=shipping" \
  -d "ship_from_details[address][line1]=123 Warehouse Blvd" \
  -d "ship_from_details[address][city]=Austin" \
  -d "ship_from_details[address][state]=TX" \
  -d "ship_from_details[address][postal_code]=78701" \
  -d "ship_from_details[address][country]=US"
```

### Ship-from address fields

| Field | Required | Description |
| --- | --- | --- |
| `country` | Yes | Two-letter ISO country code |
| `state` | No | State or province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix (for example, `TX` or `NY`) |
| `city` | No | City, district, suburb, town, or village |
| `line1` | No | Street address or company name |
| `line2` | No | Apartment, suite, unit, or building details |
| `postal_code` | Required for US | ZIP or postal code |

If you provide an unrecognized ship-from address, Stripe returns a `shipping_address_invalid` error.

## How ship-from affects tax calculation

Stripe Tax can designate only one address as the origin of a transaction. When you provide a ship-from address, Stripe Tax uses jurisdiction-specific rules to determine whether the ship-from address or your head office address serves as the transaction origin.

If you don’t provide a ship-from address, Stripe Tax uses your head office address as the origin.

### United States

For transactions where the head office, ship-from location, and customer are all in the US, Stripe Tax applies the following rules in order:

1. **Same-state rule**: If the head office, ship-from location, and customer are all in the same state, and that state requires ship-from sourcing in this scenario, Stripe Tax uses the ship-from address. This currently applies to Texas.
2. **Intrastate rule**: The intrastate rule applies if the following are true:

- The ship-from state differs from the head office state
- The ship-from state matches the customer’s state
- The ship-from state requires ship-from sourcing for intrastate sales

If all of these are true, then the intrastate rule applies and Stripe Tax uses the ship-from address. This currently applies to Arizona, Missouri, Ohio, Tennessee, Utah, and Virginia. 3. **Default**: If neither rule applies, Stripe Tax uses the head office address.

### European Union and rest of world

For transactions where all parties are outside the US, the ship-from address always takes priority over the head office address.

This is relevant for EU businesses using the [Import One-Stop Shop (IOSS)](https://docs.stripe.com/tax/supported-countries/european-union.md#outside-eu-businesses-ioss) scheme. If you have an EU origin address and ship goods from outside the EU to EU customers, you must use the ship-from address to indicate where goods ship from so that correct IOSS rules apply.

### International transactions

For cross-border transactions involving both US and non-US locations, the rules are:

1. **US head office, international ship-from, US customer**: Stripe Tax uses the head office address (not the ship-from address).
2. **Non-US head office, US ship-from, US customer in certain states**: If the customer is in Arizona, Missouri, Ohio, Tennessee, Utah, or Virginia, and the ship-from location is in the same state, Stripe Tax uses the customer’s address (destination) as the origin. This is because those states are destination-sourcing states for interstate sales.
3. **Default**: For all other combinations, Stripe Tax uses the ship-from address.

## Limitations

- Stripe Tax designates only one address as the transaction origin, even though some jurisdictions determine origin differently by product type. If you sell a combination of products that require different origin locations, split the transaction.
- Ship-from addresses are available only through the [Stripe Tax API](https://docs.stripe.com/tax/standalone-tax-api.md). They aren’t available with Payment Links, Checkout, Billing, or Invoicing.

[Calculate tax using APIs](https://docs.stripe.com/tax/standalone-tax-api.md): Use Stripe Tax APIs to calculate and collect tax in your custom integration.

[Tax for physical goods](https://docs.stripe.com/tax/physical-goods.md): Set up Stripe Tax for your e-commerce business selling physical goods.

[Supported countries](https://docs.stripe.com/tax/supported-countries.md): Learn how to use Stripe to calculate, collect, and report tax in different countries.
