Represent customers using Account objectsPublic preview
Manage your customers using the Accounts v2 API instead of the Customers API.
The Accounts v2 API uses configurations to enable functionality for Account objects. When using the v2 API, you can represent a customer using an Account object instead of a Customer object by assigning the customer configuration to the Account. When making a request that accepts a Customer ID as the argument to the customer parameter, instead provide the Account ID as the argument to the customer_ parameter.
The following example creates an Account with the customer configuration and requests the common automatic_ capability, which is part of the customer configuration. Requesting the capability is optional; you can simply add the configuration by specifying configuration..
curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer" \ -H "Stripe-Version: 2025-11-17.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "identity": { "country": "us", "individual": { "given_name": "Jenny Rosen" } }, "configuration": { "customer": { "capabilities": { "automatic_indirect_tax": { "requested": true } } } }, "include": [ "configuration.customer", "identity" ] }'sk_test_Hrs6SAopgFPF0bZXSN3f6ELN
When you enable the Accounts v2 API, your Stripe-hosted integrations, such as Checkout, create Accounts with the customer configuration instead of Customer objects. If your code references Customer objects, we recommend that you update it to reference customer-configured Account objects instead.
| Purpose | v1 reference | v2 reference |
|---|---|---|
| Customer reference | customer | customer_ |
| Customer identification | cus_ | acct_ |
| Set billing address | address |
|
| Set shipping address | shipping | configuration.customer.shipping |
Provide an Account as the customer
API requests such as Subscriptions and SetupIntents require you to specify a customer. These requests accept either the customer or customer_ parameter. The following example creates a subscription and specifies the customer by passing an Account ID as the customer_.
Reference Accounts in Customers v1 integrations
A request that specifies customer_ returns both customer and customer_ properties, with correspondingly formatted values. This maintains compatibility with existing Billing and Payments integrations.
{ "id": "sub_1Mow234", . . . "customer": "cus_xxxxx", "customer_account": "acct_xxxxx" }
You can also retrieve or update customer-configured Accounts using the /v1/customers endpoint.
Accounts v2 webhooks
Webhooks for Accounts v2 send thin events.
| Action | v1 event | v2 event |
|---|---|---|
| Customer created | customer. | Accounts v2 sends separate events indicating the account creation and the customer configuration:
|
| Billing address updated | customer. | v2. |
| Subscription actions | customer. | None; use the v1 event |
| Customer deleted | customer. | v2. |
Customer invoice properties
| Data value | Customers v1 property | Accounts v2 property |
|---|---|---|
| Customer stored credit | invoice_ | None; see Reference an Accounts v2 ID in a /v1/customers path |
| Customer invoice prefix | invoice_ | configuration.customer.billing.invoice.prefix |
| Custom settings | invoice_ | configuration.customer.billing.invoice.custom_fields |
| Default payment method | invoice_ | configuration.customer.billing.default_payment_method |
| Invoice footer | invoice_ | configuration.customer.billing.invoice.footer |
| Invoice rendering options | invoice_ | configuration.customer.billing.invoice.rendering.template |
Reference an Account ID with a Customers endpoint
The Accounts v2 API doesn’t have endpoints for every customer function. To perform the following actions for an Account object, use the v1/customers endpoint and pass the Account ID (acct_) as the path parameter.
| Use case | v1 endpoint with account ID |
|---|---|
| Manage cash balances |
|
| Manage cash balance transactions |
|
Manage invoice credit balance For |
|
Customer-Account object property map
The following table describes how properties of Customer objects correspond to properties of customer-configured Account objects. Except where noted, Stripe copies the mapped values when generating an Account corresponding to an existing Customer.
Mapped values remain synchronized. For example, if you set identity. on an Account, then when you pass that Account ID as the customer_ to a v1 endpoint, the returned country contains the same value.
| Customers v1 property | Accounts v2 property | Notes | |
|---|---|---|---|
address | {all properties} | identity. or identity. | When Stripe associates a v1 Customer with a v2 Account, address is only included if it passes validation. address. (string in v1 and enum in v2) is only included if it matches either a valid enum or country name, ignoring case and any special characters. |
country | identity. | When Stripe associates a v1 Customer with a v2 Account, address. (string) only copies to identity. (enum) if it matches either a valid enum or country name, ignoring case and any special characters. | |
business_ | identity. | ||
created | {not mapped} | When Stripe associates a v1 Customer with a v2 Account, the Account’s created property reflects the timestamp when the Account was created, not the original Customer. | |
currency | {not mapped} | The v2 Account’s defaults. property doesn’t apply to the customer configuration. | |
customer_ | id | When Stripe associates a v1 Customer with a v2 Account, the Customer’s customer_ property contains the ID of that Account. The ID of the Customer isn’t available on the Account. Users who create v2 Accounts representing customers don’t need to use a v1 Customer ID. | |
description | {not mapped} | The v1 Customer description isn’t available on the v2 Account. However, it appears (read-only) on the customer details page in the Dashboard. | |
email | contact_ | ||
id | {not mapped} | The ID of the v1 Customer isn’t available on the v2 Account. Users who create v2 Accounts representing customers don’t need to use a v1 Customer ID. | |
individual_ | display_ | When Stripe associates a v1 Customer with a v2 Account, it only copies individual_ if the Customer’s name is null. | |
invoice_ | configuration. | ||
invoice_ | custom_ | configuration. | The Account array is limited to 4 elements. |
default_ | configuration. | ||
footer | configuration. | ||
rendering_ | configuration. | When Stripe associates a v1 Customer with a v2 Account, invoice_ (string) only copies to configuration. (enum) if it matches an enum value (include_ or exclude_). | |
livemode | livemode | ||
metadata | metadata | ||
name | display_ | When Stripe associates a v1 Customer with a v2 Account, if name is null, the Customer’s individual_ copies to display_. | |
next_ | configuration. | ||
phone | identity. | ||
preferred_ | defaults. | The Customer property preferred_ is a nullable array of strings, and the Account property defaults. is a nullable array of enums. When Stripe associates a v1 Customer with a v2 Account, a given preferred_ string is only included if it matches a defaults. enum value, ignoring case and any special characters. | |
shipping | configuration. | ||
subscriptions | {not mapped} | The v2 Account object doesn’t include an array of subscriptions. To retrieve a customer’s subscriptions, use the Subscriptions API and filter by customer or customer_. | |
tax | automatic_ | configuration. {value not synchronized} | The Account property is only available after requesting the Automatic Indirect Tax capability. Also, it doesn’t have an equivalent to the Customer property’s not_ value. It only indicates the status of the capability. |
ip_ | configuration. | ||
location | configuration. {value not synchronized} | When Stripe associates a v1 Customer with a v2 Account, tax. isn’t automatically included. You must request the Automatic Indirect Tax capability to set configuration.. | |
provider | {not mapped} | If a Customer is associated with a third-party tax provider, Stripe doesn’t automatically associate that Customer with an Account. | |
tax_ | configuration. | ||
tax_ | {not mapped} | The v2 Account object doesn’t include an array of tax IDs. To retrieve a customer’s tax IDs, use the Tax IDs API and filter by owner. or owner.. | |
test_ | configuration. |