Considerations for platforms using Connect
A guide for platforms considering using Stripe Connect to power payments for their sellers.
Before you design and create your ideal user experience, it’s important to make sure you know what type of platform you want to build. There are different considerations for how your sellers get set up, how much control you have over when payouts are sent, who is responsible for refunds or disputes, and more.
We’ve outlined some of the main points of differentiation between using standalone and managed accounts (and the different forms of creating charges) below, but if you have any additional questions about which one works best for your business, we’d be happy to help.
Some terminology we’ll be using:
- Platform: A type of business that offers services to other businesses.
- Connected account: A business that gives a platform permissions to: make charges on its behalf, or provide extra functionality using its data.
- There are two types of connected accounts:
- Standalone: This seller has a Stripe account, can access their Stripe dashboard, and has a relationship with Stripe (to manage support, disputes, etc.).
- Managed: This seller does not have a direct connection to Stripe, and the platform fully controls their user experience.
Present a small button in your sign up process to send your sellers to Stripe. They’ll either connect their existing account, or create a new one before being sent back to your platform. In this case, Stripe handles the following for your sellers:
- Sign up process and collecting the required identity verification documents.
- Sending sellers automatic payouts of their earnings.
- Issuing 1099-K forms when necessary.
- Presenting a Dashboard to users of their earnings, which includes reporting, analytics, refund and dispute management.
- Support for any payment-related inquiries.
This allows you to build a fully customized signup experience. While the process can be more complicated, Stripe gets out of the way of your relationship with sellers. Setting up managed accounts, including international accounts, ID verification, and 1099-Ks, costs just 0.5% of funds paid out. With managed accounts, you’ll have to manage the following:
- Collect the appropriate account information from individuals or businesses you’d like to send money to. (Stripe will provide information on what to collect.)
- Communicate the status of accounts with your users.
- Handle payouts schedules.
- Manage customer support for payment-related questions.
- Send sellers 1099-MISC forms as needed.
- Platforms in all our supported countries can set up standalone accounts for their sellers in any of 23 countries to accept funds. As Stripe continues to expand internationally, you’ll instantly be able to enable payments for sellers in those countries as well.
- Only platforms in the U.S., the U.K., Canada, Ireland, Japan, Spain, Norway, Sweden, Finland, Denmark, and Australia can use managed accounts, though sellers can be located in any of the countries in which Stripe is available. We’re also testing out a limited beta in a few other countries. Get in touch if you’d like to participate.
|Brand experience||Seller sees Stripe branding||Fully customized|
|User communication / support||Stripe||Platform|
|Liability for payments||Seller||Platform|
|International availability||23 countries||U.S., U.K., Canada, Ireland, Japan, Norway, Sweden, Finland, Denmark, Australia, and a few betas|
You can create charges directly on connected accounts or at the platform level (and specify a recipient). There’s a few considerations around user experience and handling refunds:
- User experience: You’ll get access via OAuth when sellers connect their Stripe account. When collecting customer payments, you’ll create charges on your sellers' accounts using their respective API keys, and all payouts are automatically handled by Stripe. You’ll have the option to charge your users a transaction fee on top of Stripe’s fees which will be deposited into your own bank account. We handle all the accounting so that the right people get paid at the right time.
- Refunds and disputes: The responsibility for refunds or disputes ultimately lies with your sellers and not with the platform. However, you have the power to take refund and dispute actions on behalf of your user via the API.
Alternatively, you can create charges at the platform level and specify who should ultimately receive those funds.
- User experience: In this case, your sellers will likely never have to interact with Stripe: they’ll submit their account details to your platform, and you’ll handle all communications with them. This also means you’ll have fine-grained control over the payout schedules for your sellers.
- Refunds and disputes: If you’re charging at the platform level, your platform will also handle (and is ultimately responsible for) all refunds, disputes and customer support. Stripe provides you with the flexibility to set a custom statement descriptor to either the platform or your user’s business name, which will appear on customers' credit card statements.
Stripe Connect platform owners can make use of additional payment methods supported with Sources. How you approach the use of additional payment methods is dependent on whether your platform uses standalone or managed accounts. To learn more about using different payment methods with Connect, refer to our Sources documentation.
The currencies Stripe supports depends on where you’re based. There’s a full list here.
Some platforms offer their sellers the ability to select a currency and present all their products in that one currency. If your platform has sellers in many international countries, we recommend making the option to select their currency very clear. You can also recommend a default currency based on the seller’s location.
If you have customers from international countries purchasing from your sellers, you may want to consider providing more flexibility with the presentment currency, which would help maximize conversion. This can be done in a few ways:
- Allow the customer to select the currency they would like to pay in
- Dynamically set the currency to the customer’s local currency.
As with any charge on Stripe, if you’d like to charge international customers in their local currency, we will automatically convert those funds using wholesale rates from our banking partners. We charge a conversion fee atop market exchange rates for this service, and how we charge this fee depends on how your platform makes the charge: If you make charges directly on the connected account, the responsibility for this conversion fee lies with your users; if you make charges on the platform’s account (and set a recipient), we’ll charge your platform the conversion fee on top of each charge.
|Create charges on connected account||Create charges on platform|
|Fees and foreign exchange||Seller||Platform|
|Cost of disputes and liability||Seller||Platform|
|Reporting||Individual sellers||Aggregated, platform level|
Regardless of your choice on how the charge is created, the minimum amount of information required to make a charge is the customers' credit card number and expiration date.
We recommend that you send us more information to help us prevent fraud. If we are sure a charge is fraudulent, we may block it for you. In other cases, we’ll send an email letting you know to examine a charge more carefully. Send the following to Stripe when creating a charge:
- Customers' name and email. Many platforms use the charge description field for customer emails.
- Zip code
- Billing address
- Shipping address (which is especially relevant for platforms helping sellers with e-commerce)
- Any metadata that might be helpful to store alongside the charge details, such as a product SKU
Unlike most OAuth implementations (such as Facebook Connect or Sign In with Twitter), we’ve incorporated the process of creating a Stripe account right into our authorization flow so you won’t have to worry about whether or not your users have Stripe accounts already. From a UI standpoint, all you have to do is place a “Connect to Stripe” button on your website. Once your user fills out the Stripe account application and activates their account (or logs in to connect their existing Stripe account), the user is up and running and ready to accept payments instantly.
When using managed accounts, your platform will be responsible for collecting your sellers' information and sending it to Stripe. You should be reasonably confident that the person or business that funds are paid out to is who they say they are, and that you’re sending Stripe their correct, full legal name. As background, Stripe needs this info for KYC regulations.
While you can get a seller started with just an email address and their country, we’ll also tell you what information is required. There’s more details in our docs, but generally, we’ll need:
- Information about the business and legal entity: default currency, business / legal entity type, business name and address, product description, URL, and phone number.
- Information about the business representative: full name, personal address, and date of birth. We’ve listed out why we need this info here.
We recommend that you create a simple, easy to understand application form to get your sellers set up. Because this is sensitive information, you should be sure to host this form over SSL and send these details directly to Stripe via Stripe.js to avoid sensitive user data hitting your servers. Here’s an example form.
Note that Stripe requires that all managed accounts accept the Stripe Connected Account Agreement. You’re required to ensure that the seller has accepted this agreement before any payouts are made to them. You can find more information, and an example here.
- Standalone accounts: If you’re using standalone accounts, we will contact the owner of the standalone account directly to handle identity verification if needed. You can see the status of the account via the API.
- Managed accounts: Once your seller’s information is sent to Stripe, we will send you a webhook with the status of the account. If verification fails, you’ll receive a description of the reason and can follow up with the seller for additional information. (For example, Stripe may need identity verification documents.) The easiest way to keep track of identity verification requests is to watch for the
account.updatedwebhook, which will be sent whenever the verification list changes.
The best way to handle fraud is to avoid it: We’ve created a whole guide discussing best practices.
Since you will be the first point of contact for setting up and collecting information about your users, it is important that you avoid onboarding businesses that are prohibited from using Stripe.
Most prohibited business categories are imposed by card network rules or the requirements of our banking providers or processors. The types of businesses listed are representative, but not exhaustive. If you are uncertain as to whether the business is prohibited, or have questions about how these requirements apply to you or your sellers, contact us.
We recommend creating a support or help page on your website that can help identify the most common questions your sellers might face around accepting payments. If you’d like to include some information about Stripe, we’ve created some sample FAQs.
We recommend that you provide your sellers with the necessary information for them to keep track of their payment history and status. This may be in the form of a user dashboard, reports that can be downloaded from your site, or proactive emails. A dashboard or reporting will also make it easy for sellers to retrieve the data necessary for accounting and reconciliation.
Whether you’re using standalone or managed accounts, our API and webhooks will allow you to build the ideal user experience on your site and show data to your users in real-time:
- APIs: You can use our APIs to pull and expose payment data to your users. For example, the balance API allows you to retrieve a list of your user’s charges, refunds, and payouts—all information that has contributed to their account balance. The only sensitive data that you want to avoid handling is your customers' credit card number and CVC. As a good rule, you can store anything returned by our API. In particular, you would not have any issues if you stored the last four digits of the customer’s card number or the expiration date for easy reference.
- Webhooks: You can also use webhooks to be notified about events that happen in a Stripe account. All changes (including the important verification hash changes for managed accounts) will be delivered via webhooks as an
account.updatedevent. Establish a webhook URL in your Connect application to watch for these.
For platforms, we’ve learned that proactively emailing users about the following is helpful:
- Confirmation that you have received their application
- Account status, and whether you need additional information from them
- Confirmation that their account is active and ready to accept payments
- Timing of payouts
- Confirmation when they receive their first payment, and a note on when they’ll receive their first payout
If you’re using managed accounts, we additionally recommend having a user support or customer service team at your company that can respond to user enquiries that might arise.
Disputes are a frustrating part of the payments process, but you can help sellers on your platform understand the process with the following references:
For standalone accounts, we notify the account holder directly about any disputes, and they will be able to use their Stripe dashboard to respond with evidence. Your platform can also collect the evidence from them and use the Stripe API to submit that information on their behalf.
For managed accounts, you must collect and submit this information on behalf of the connected account, as they don’t have the option of submitting evidence through the Stripe dashboard.
You can help guide your users through the dispute evidence submission process, and even send us evidence on their behalf through our API.
We send payouts on a rolling basis. Since the timing can vary between countries, the seller can find their schedule in their Dashboard. There’s more info here. There’s also info on why payouts might fail here.
These docs will walk you through the steps needed to integrate Stripe Connect into your platform:
If you already have existing integrations, there’s a few options to consider:
- Switching from standalone to managed accounts: If you’re already using Connect (thanks!), there’s no change required. Your existing integration is the standalone accounts flow described above. However, if you prefer to have more control over the seller experience, you can choose to use managed accounts. The technical integration is more complex, and you’ll need to start handling refunds, disputes, and customer support. The integration process is described here.
- Switching from the Transfers API: We won’t break any existing integrations as we deprecate the
recipientobject in favor of the new
accountsobjects. If you’d like to take advantage of improved identity verification, better tax reporting, and support for international sellers, we’ve created a guide to help with migrating to accounts.
- Switching from another payment provider: You can migrate your customer data in most cases. Please get in touch with us and we can walk you through the process. Our strong preference with these migrations is to receive the customer data directly from your previous payments provider so as to take the burden off you and to keep everything PCI compliant. (PayPal and Wave Accounting are unfortunate exceptions — they don’t enable you to access your card data.) We also recommend that you discuss with your payment provider to delete or purge all of the previous data.
We’re here to help if you have any questions about Stripe! We can be reached at email@example.com.
If you’re using managed accounts and run into a question you can’t figure out from your sellers, your customer support team can also contact us. We recommend formatting the enquiry as:
- Issue Summary, including any relevant information from your communication with the seller and relevant URLs.
- Customer Name: Johnny Example
- Customer Email: firstname.lastname@example.org
- Charge ID: xxx [if issue is relevant to a specific charge]