| [ Web Proxy ] |
| Viewing: https://docs.stripe.com/connect/migrate-to-controller-properties | [Back] [Original] |
You can configure connected accounts using account controller properties instead of defining accounts as Standard, Express, or Custom. These controller properties let you specify discrete account behaviors, such as access to a Stripe-hosted Dashboard and whether Stripe collects fees from the account or the platform. This modularity allows for more flexible configuration options.
Using account controller properties doesnt require you to update your API version. Migrating your integration to use controller properties is optional. If you only use one type of connected account and arent interested in using a new configuration, you dont need to update your integration.
We recommend you update your integration to take advantage of the increased modularity and new configurations available. The new properties are fully backwards compatible, so you can migrate your integration incrementally while continuing to work with account types.
Each account type maps to a set of controller properties. We automatically set those properties on your existing connected accounts and on any accounts that you create with account types going forward. When you update your integration to work with controller properties, you dont have to update any of your connected accounts.
You can start using features such as embedded components without making any of the changes in this guide.
Updating your integration involves:
type. Specifying type is no longer required.You can specify values for the controller properties when you create a connected account using the Accounts API. Any property that you dont specify is set to a default value that has the least complex integration requirements.
If youre building a new integration, you can get a configuration recommendation by completing Connect platform onboarding.
| Property | Default value | Description |
|---|---|---|
| controller.losses.payments | stripe | Possible values:
|
| Possible values:
When you create an account, you can only specify
For a comprehensive description of Stripe fee payment models, see the fee behavior documentation. | |
| Possible values:
A value of | |
| controller.stripe_dashboard.type | full | Possible values:
|
See the description | Possible values:
Specifying |
Each of the three account types maps to values in the controller hash of v1/accounts that match the behavior of that type.
You cant change the controller.stripe_dashboard.type of an existing connected account. To change a connected accounts dashboard, you must create a new Account object.
If you create an account without specifying any controller properties, the default values match the behavior of a Standard account. You can also create the equivalent of a Standard account by specifying the values that map to Standard account behavior.
These values map to a Standard accounts behavior:
losses.payments: stripefees.payer: accountrequirement_collection: stripestripe_dashboard.type: fullRequest (using default values for all properties):
Response:
{ controller: { type: "application", is_controller: true, losses: { payments: "stripe" }, requirement_collection: "stripe", fees: { payer: "account", }, stripe_dashboard: { type: "full" } }, type: "standard" }
These values map to an Express accounts behavior:
losses.payments: applicationfees.payer: application (see note)requirement_collection: stripestripe_dashboard.type: expressCreating an Express account using type, sets the controller.fees.payer property to application_express instead of application. This difference denotes a variation in Stripe fee billing behavior when your platform is using Direct charges.
Request:
curl https://api.stripe.com/v1/accounts \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -d "controller[stripe_dashboard][type]=express" \ -d "controller[fees][payer]=application" \ -d "controller[losses][payments]=application"
Response:
{ controller: { type: "application", is_controller: true, losses: { payments: "application" }, requirement_collection: "stripe", fees: { payer: "application", }, stripe_dashboard: { type: "express" } }, type: "none" }
These values map to a Custom accounts behavior:
losses.payments: applicationfees.payer: application (see note)requirement_collection: applicationstripe_dashboard.type: noneYou must also specify the account country when creating a Custom account, and request the card_payments and transfers capabilities.
Creating a Custom account using type, sets the controller.fees.payer property to application_custom instead of application. This difference denotes a variation in Stripe fee billing behavior when your platform is using Direct charges.
Request:
curl https://api.stripe.com/v1/accounts \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -d "controller[stripe_dashboard][type]=none" \ -d "controller[fees][payer]=application" \ -d "controller[losses][payments]=application" \ -d "controller[requirement_collection]=application" \ -d "capabilities[transfers][requested]=true" \ -d country=US
Response:
{ controller: { type: "application", is_controller: true, losses: { payments: "application" }, requirement_collection: "application", fees: { payer: "application", }, stripe_dashboard: { type: "none" } }, type: "none" }
In addition to updating your account creation process to use controller properties, update your integration by reviewing your code and looking for references to account types.
For each reference to an account type, determine which controller property or properties are relevant and update the code accordingly.
For example, say that your code includes a conditional statement that applies to Express and Custom accounts because it relates to your platform being responsible for negative balances. Update that logic from if type == express or if type == custom to if controller.losses.payments == application.
If you create connected accounts that dont match an account type, consider their controller properties as well when updating your code. The logic for handling those accounts can differ from your existing logic thats based on account types.
You can use this table to identify the controller properties associated with each account type:
| Account Type | losses.payments | fees.payer | requirement_collection | stripe_dashboard.type |
|---|---|---|---|---|
| Custom | application | application_custom | application | none |
| Express | application | application_express | stripe | express |
| Standard | stripe | account | stripe | full |
Remember that Express and Custom accounts have a different value for fees.payer than equivalent accounts created using controller properties. When updating code related to collecting fees, you must take into account the difference in behavior.
When creating accounts with controller properties, the following combinations arent supported:
controller.requirement_collection = application isnt compatible with any of the following values:
controller.losses.payments = stripecontroller.fees.payer = accountcontroller.stripe_dashboard.type = expresscontroller.stripe_dashboard.type = fullcontroller.stripe_dashboard.type = express isnt compatible with the following value:
controller.requirement_collection = applicationcontroller.stripe_dashboard.type = full isnt compatible with any of the following values:
controller.losses.payments = applicationcontroller.fees.payer = applicationcontroller.requirement_collection = applicationcontroller.stripe_dashboard.type = none isnt supported when both of the following values are set (its supported when only one of them is set):
controller.requirement_collection = stripecontroller.losses.payments = application| Web Proxy Viewer | New URL | Original Page |