Stripe-related support information for Connect Standalone platforms This document is intended for your support team or internal use only. We ask that it not be distributed externally or shared with customers or connected accounts.
We’re excited to be working with you. We know it’s important to provide accurate and timely information to your customers—especially when dealing with payments and financial matters. Stripe provides your developers with an amazing API to power your business’s payments. We also want to provide the best information and tools for your users and support team to address questions or issues as they arise. We’ve put together some information and helpful messaging so you can focus on making the Stripe experience for you and your users as smooth as possible. If you have any questions or ways we can further improve this process and information, we’d love to hear from you! This guide is broken into ten sections:
- Stripe Basics
- Payments, Declines, and Refunds
- Dashboard Account Settings
- Navigating the Dashboard
- Contact Us
Each section includes a broad summary of the topic along with additional context and messaging for your users, where appropriate.
1// Stripe Basics
Stripe provides a unified API (Application Program Interface) that allows your company’s application or software to provide payment functionality to your users. Stripe’s API does this by letting your application send predictable, straightforward instructions that will then be acted upon from Stripe’s end. Stripe then passes along the resulting request to the appropriate payment network (ie., credit card, ACH, AliPay). Information between your application and Stripe travels over the same channels and protocols as web traffic, so it is standardized, predictable, robust, and safe. If you’re reading this, it’s because your application or marketplace uses Stripe Connect. To ensure this guide is as informative as possible, it’s good to have an understanding of what Connect is, and how it can affect your users’ experience. The basic idea of Connect is that your users have Stripe accounts of their own, which are then centrally “connected” to your platform’s Stripe account. Your platform then sends action requests to Stripe on their behalf. In practical terms, this means your platform can charge an end user’s card, issue refunds, or manage transfers on behalf of a connected user’s account.
2// Payments, Declines, and Refunds
The basic payment flow begins when your application collects payment information from a customer. This may include details for a credit card, ACH (direct debit) account, or AliPay credentials. For most Stripe applications, credit card payments are still the dominant payment instrument, so initially we will focus on card payments and how they are accepted. Some of the information below may not apply to your platform’s payment flow, so check with your developers to be sure, or get in touch with us and we’ll be happy to walk through everything with you. One of the first steps is card tokenization using Elements or Stripe Checkout. When a customer provides their information through Checkout or a Elements powered form, those details are first sent to Stripe’s servers, where the card information is securely stored and exchanged for a “token”. This token will begin with “tok_” followed by a long string of random characters. This token, along with any other submitted information is then sent to your application’s server, just like any other webform. Assuming the details passed some basic checks, your application’s server now has a token representing the customer’s card, and any other information collected from them. This token can then be sent back to Stripe to create a customer profile for future use, including recurring charges, or it can be used to make a one-off charge to the customer’s card without saving any information for future use. A complete record of payment activity will always exist within the Stripe account creating the charge, whether the information is stored or just used once.
We highly recommend reading our overview on declines: https://stripe.com/docs/declines Charges might fail for two reasons:
1// Bank declined
On the individual charge page we will specify that a charge was declined by the bank. In some cases, banks also provide helpful explanations such as the card number or expiration date being incorrect, or that the customer does not have enough funds available to make the payment. The bank may provide one of these more specific reasons to Stripe through the use of a decline code. (https://stripe.com/docs/declines#decline-codes) Unfortunately, most declines are categorized as “generic” (code generic_decline or do_not_honor), and so it’s not always possible to know exactly why a payment was declined. If all of the card information seems correct, it is best to have your customer contact their bank and ask for more information about why the specific charge or authorization was declined. For privacy and security, banks and card issuers can only discuss the specifics of a declined payment with their cardholders–they cannot discuss this with the merchant. Here is the list of decline codes that Stripe will provide and the actions recommended for them: https://stripe.com/docs/declines#decline-codes
2// Blocked payments
Blocked charges are considered high risk. They have either been blocked by Stripe’s machine learning fraud tooling or by rules that you have put in place (eg block if CVC or AVS fail).
Issuing a refund
Your user can issue a refund directly through their own Stripe dashboard. However, you [ as platform] can also do this for them as well. First, log in to your own Dashboard, navigate to a connected account, and click the “View Dashboard As” button. This will take you to the connected account’s dashboard where you can issue a refund by finding the appropriate charge and pressing the “Refund Payment” button. In all cases, a refund request is immediately processed by Stripe, meaning that once the request is received, there is no way to “void” or “cancel” the refund. The only way to reclaim an incorrectly refunded payment is to create an entirely new charge for the proper amount on the customer’s saved card. Refunds can be issued for any amount less than or equal to the original payment amount.
Appearing on cardholder’s statement
While the request is processed immediately, the timing of the request relative to the original charge can influence how the payment and refund appear on the cardholder’s statement. A refund that is received and submitted to the cardholder’s bank before the original payment has been finalized will effectively nullify the original payment. The “pending” payment will simply drop off the cardholder’s statement. This type of refund is referred to as a “reversal”. Alternatively, if the original payment is finalized, and no longer “pending”, the refund will appear as a separate “credit” line item on the cardholder’s statement. Refunds that are “credits” rather than “reversals” will also have an associated refund reference number that we will gladly provide upon request, if available.
Stripe processes refunds immediately on the user creating one, but how long it takes to actually get to an end customer’s account is unfortunately up to the customer’s bank. It’s safe to say it’ll probably take their bank 5-10 business days to process. Some refunds may appear in the form of a reversal. In the case of a reversal, the original payment will drop off of your customer’s bank statement, and a separate credit is not issued. These will usually have a faster timeline and potentially may be in a day or 2. https://support.stripe.com/questions/how-long-do-refunds-take-to-reach-my-customer
Time limit for refunds
We recommend that you make best efforts to refund within 60 days, and that you acknowledge that refunds processed after that time may not be capable of being processed due to bank limitations.
A dispute occurs when a cardholder questions a charge with their bank or credit card company. Disputes can be extremely frustrating for everyone involved, so it is important to understand the foundation of the process when discussing it with your users:
- The best prevention and defense for disputes is to collect, save, and provide as much information as possible. The more information you allow your users to collect, and in turn, provide them access to, the better they can identify and prevent disputes. This is such an important consideration, we have an entire page dedicated to it:
- The card-issuing bank has ultimate authority to decide the outcome of a dispute. Stripe does not influence or make this decision.
- Stripe’s role is to assist the responsible party with collecting, organizing, and submitting information to the card-issuing bank for review.
- Stripe is obligated to return the disputed funds to the cardholder if requested by the bank.
Banks usually ask cardholders to provide a reason for the dispute. The bank will then do one of the following:
- Initiate an Inquiry or Retrieval: This notifies Stripe of a possible dispute and requests more information. The bank does not return any funds to the cardholder at this time.
- Initiate a full dispute: This withdraws the funds from your or your user’s account and immediately returns them to the cardholder while the dispute is investigated.
Responding to Disputes
Depending on the reason, the Stripe dashboard will guide the user through submitting the best kind of evidence for each reason. https://stripe.com/docs/disputes/evidence Stripe allows you to handles chargebacks/disputes either programmatically through the API or manually via the dashboard. https://stripe.com/docs/disputes/evidence#using-the-dashboard When a dispute comes in, we get information about it from the bank and display one of eight reasons to our users. Once you submit it to Stripe, Stripe submits your evidence to the banks/card networks on your behalf, so you do not have to deal with them directly. https://stripe.com/help/dispute-types https://stripe.com/docs/disputes Additionally helpful resources: https://support.stripe.com/questions/how-does-stripe-handle-chargebacks https://support.stripe.com/questions/avoiding-fraud-and-disputes https://stripe.com/docs/disputes/faq Once this first step in the process is completed, the responsible Stripe account owner will have the option to respond with proof showing the payment was authorized and completed by the true cardholder, and the product or service was delivered as agreed. You have 15 days to respond to dispute. After responding to a dispute, it can take up to 60 days (from the date the bank gave as the due date for evidence submission) for the cardholder’s bank to finalize their decision. In general, Stripe receives no additional information during this time. If the original notice was an inquiry or retrieval, submitted evidence will be reviewed and then the bank will decide to either escalate the issue to a full dispute, or drop the case altogether.
If your platform wants to be notified when there is a dispute on your connected account, you will want to ask your engineer will want to listen to the charge.dispute.created webhook notifications (https://stripe.com/docs/api#event_types-charge.dispute.created) to keep track through every step of the dispute process. For the individual user / connected account, they can select email notifications for disputes via their dashboard: https://dashboard.stripe.com/account/emails (“Email me for: Disputes” is selected)
We want to ensure your users are receiving their funds predictably and consistently. The number one issue with transfers is a user claiming the money hasn’t arrived when they believe it should have.
Once a user has made its first charges with Stripe, the user’s first transfer will be initiated and should post within 7 days. Note: this is 7 days after a user’s first charge and not 7 days after a user create its account. Subsequent transfers schedules are listed by country here (important to reference): https://support.stripe.com/questions/bank-account-and-transfers#automatic-transfers For connected accounts in: Australia, United States are on a:
- 2 Day Rolling Transfers are made daily and are composed of the payments that were processed two business days prior.
- Example: August 1st charges are deposited by August 3rd, and August 2nd charges are deposited by August 4th (assuming no holidays or weekends).
For connected accounts in: Austria, Belgium, Canada, Denmark, Hong Kong, Finland, France, Germany, Italy, Ireland, Luxembourg, Mexico, Netherlands, Norway, Portugal, Singapore, Spain, Sweden, Switzerland, United Kingdom are on a:
- 7 Day Rolling Transfers are made daily and are composed of the charges that were processed seven days prior.*
- Example: August 1st charges are deposited by August 8th, and August 2nd charges are deposited by August 9th.
Please note successful ACH payments will be reflected in your Stripe available balance after 7 business days, at which point the funds are available for automatic or manual transfer to your bank account.
- Transfer time for ACH payments: https://stripe.com/docs/ach#ach-payments-workflow
- Additional FAQ on ACH processes (including refunds and disputes): https://support.stripe.com/questions/accepting-ach-payments-with-stripe
If a user claims a scheduled transfer hasn’t been received in their bank account, you’ll want to verify a few pieces of information before escalating to us:
- This is not the user’s first transfer. The first transfer created by a platform or to a standalone account will always take 7 days to arrive. This is to provide Stripe protection against the inherent risks associated with accepting credit card payments.
- The transfer is actually scheduled to arrive that day, and the scheduled date doesn’t fall on a weekend or bank holiday (US bank holidays can also affect transfers to the UK and Canada, as these transfers are initiated by our US-based banking partners.)
- The transfer was not returned by the recipient’s bank. As soon as we know if a transfer is returned, we will immediately update the status in the Dashboard and include the reason it wasn’t successful.
- The user hasn’t accidentally switched to manual transfers in their account settings
- There is no additional information needed from the user
- For standalone accounts, we send the account owner an email whenever additional information is needed, so have the user double-check their email for a message from Stripe.
If these two steps don’t provide any clarity about why a user may not be seeing the funds in the account as expected, feel free to contact our support team for more information. When doing so, please provide the following details:
- Documentation, such as a photo of a bank statement or voided check, which includes the account and routing number(s) of the account they think should have the funds
- The Stripe account in question (either the user’s email address or the account token which begins with “acct_”)
- The transfer token for the transfer in question (begins with “tr_”), which can be found in the dashboard or through the API
a// How can I see what transactions are within an individual transfer?
b// How can I see what transactions are within multiple transfers?
If you want to look across multiple transfers or customize the data you want to see (eg only look at ones for a specific date, or only look at charges and not refunds), you can utilize your Balance report in your Dashboard. You can retrieve a CSV of your Balance report here: https://dashboard.stripe.com/balance -> Hit “Export” You can see this the Balance report lists the Stripe transfer ID for each charge ID (as well as refunds and chargebacks). Here is an example Balance report with dummy data: https://www.dropbox.com/s/meg2qnxd1ie9dd7/Balance%20History.csv?dl=0
c// How can I make sure that Stripe deposited what it was supposed to?
If you are trying to reconcile with what you see in your bank account, we’d recommend looking at the aggregate “amount” of the transfer total and the “date” of the transfer. (Please note, the transfer IDs we provide are internal to Stripe only. They are not the transfer IDs used by the bank. )
We’d highly recommend reading this overview of our reports and the functionality within them: https://stripe.com/docs/reporting
Stripe provides the following reports: https://www.dropbox.com/sh/6xoy7xkz1g73ibi/AAAYUWawBp3GB3uIb1QcDynma?dl=0 a// Monthly Report: Aggregate monthly summary of your account’s activity (including charges, refunds, fees, and any disputes) In your dashboard: https://dashboard.stripe.com/account/data Sample export: https://www.dropbox.com/s/ssaxt69fly942s1/Monthly%20Statement.csv?dl=0 b// Transfers Summary In your dashboard: https://dashboard.stripe.com/transfers Sample export: https://www.dropbox.com/s/j8az1s2vvmn9hv9/Transfers-Aggregate.csv?dl=0 3// Transfers Individual In your dashboard: https://dashboard.stripe.com/transfers/tr_19Rv4IEjpZxjIdBmnACKnsKi [replace with transfer ID] Sample export: https://www.dropbox.com/s/v2nndigy7h83j88/Transfers-IndividualTransactions.csv?dl=0 4// Balance In your dashboard: https://dashboard.stripe.com/balance Sample export: https://www.dropbox.com/s/meg2qnxd1ie9dd7/Balance%20History.csv?dl=0 5// Payments In your dashboard: https://dashboard.stripe.com/payments Sample export: https://www.dropbox.com/s/n0o556fvgfybgco/Payments.csv?dl=0 6// Customers In your dashboard: https://dashboard.stripe.com/customers Sample export: https://www.dropbox.com/s/j5hpe0botw9or48/Customers.csv?dl=0 7// Disputes In your dashboard: https://dashboard.stripe.com/disputes/overview Sample export: https://www.dropbox.com/s/f8hhedk77vjxr7c/Disputes.csv?dl=0
In order to generate custom reports, you can always utilize the ‘Filter’ functionality (e.g. by date range or payment success) , and then the “export” functionality will only export what has been filtered. Beyond that, custom reports require a developer to generate them through API calls to Stripe. If you find that your users are consistently requesting a certain kind of custom report, we would recommend working with your developers to build this report for them utilizing this technical recipe: https://stripe.com/docs/recipes/generating-custom-reports
6// Stripe Status
Accepting money is the lifeblood of any business and so we take the reliability of our service for our users very seriously. In case it’s helpful, you always have full visibility into our uptime for the past 90 days on our Stripe status. https://status.stripe.com/
New users migrating to Stripe and existing monthly volume < $80K
For new users with <$80K in processing volume, Stripe’s sticker rate is listed by country here: https://stripe.com/us/pricing If you scroll the bottom there is an arrow, and you can change the country there.
New users migrating to Stripe and existing monthly volume > $80K
Stripe offers volume discounts to businesses processing more than $80K per month. Stripe would be happy to see what we can do for your user on rates if they are be able to send over last 2-3 months of card processing statements (including full statements from your current gateway, merchant bank and American Express where applicable). Please have your user write into: https://stripe.com/contact/sales.
Existing user already on Stripe and existing monthly volume > $80K
Our pricing is based on our underlying costs from card networks, and takes into consideration a user’s underlying card mix (visa v. Amex, debit v. credit, consumer v. debit, rewards cards, etc). Existing users qualify for pricing discounts once they have exceed $80K per month in volume. Because some card mixes are more expensive than others, we can’t guarantee that a discount will be offered, although we will be happy to review your account and see what we can do. To request a pricing re-evaluation after they have exceeded $80K per month, please have your user log into their Stripe account and request one: https://support.stripe.com/email.
Where the presentment currency (the currency paid by the customer) is different than the settlement currency (the currency paid to the Company) an additional foreign exchange fee of 2% of the gross sales will be applied to the transaction. https://support.stripe.com/questions/how-does-stripe-handle-currency-conversion
8// Dashboard Account Settings
We believe it should be easy to maximize the safety, security, and ease of using a Stripe account. The best way to do this is by understanding the options and functionality provided in the account settings and Dashboard. Managing account settings is one of the few dashboard-only elements to using Stripe. The information below applies for both your platform’s account, and for standalone, connected accounts. The account settings available are different depending on the permission level of the logged-in user, but for an account owner or admin, they will allow access to every user-controlled setting. Here a few of the most important aspects of the Stripe Dashboard and Account Settings for platforms:
- Team members and permissions
- Initially, each Stripe account has a single user, the account owner, whose information was used when activating the account. From there, the owner can add additional team members who have their own login and permissions.
- Two-factor authentication
- It’s extremely important to ensure the security of your Stripe account and API keys. Beyond making sure to never share any sensitive information (bank account and API keys), the single best step you can take is to enable two-factor authentication for each and every user with any level of access to your account. This is quick and easy, and can be done directly from the General account settings tab.
- Any configurable settings regarding transfers can be found in the Account Settings, Transfers tab. This includes the destination bank account, whether transfers are automatic or manual, and if set to automatic, the schedule and frequency of when transfers are sent.
- The Dashboard has a very powerful search mechanism that can accept both basic and advanced queries. Whether you’re trying to identify all charges for a card by using the fingerprint, or looking up all of the customers using American Express cards, you’ll find the below page is your best resource for mastering Dashboard searches.
- Account Activity
- Sometimes it can be hard to know which team member took what action within your Stripe account. To help keep track of what’s happened when, we provide an account activity log, and track who, and where each request came from. You’ll find more details and a couple of examples in our blog post about this.
To make troubleshooting for your users easier, you can access a limited view of a connected account’s Dashboard by logging in to your own Dashboard, navigating to a connected account, and clicking the “View Dashboard As” button. All team members on your Stripe account have access to this functionality within the limits of the permissions they’ve been granted. (Team members with read-only permissions for your platform account will only have read-only access to your platform’s connected accounts.) You can learn more about permissions and how it relates to your application here: https://support.stripe.com/questions/what-permissions-do-platforms-get-when-i-connect-my-stripe-account
9// Navigating the Dashboard
- Using the search bar to find the connected account
- Clicking into the connected accounts to find details on that account
- Using “View Dashboard As” to see their Stripe Dashboard
Using the Dashboard: Payments In the Payments tab you can:
- Export Payment data and filter fields to search
- For example: refunds, disputes, failed payments, etc
- Click in to see the details of each payment
- See customer detail
- See fraud check detail
- Generate refund
- Update description (for your own bookkeeping)
- See Disputes tab
- List of all disputes and submit any evidence (email customer, respond to dispute)
- See Balance tab
- Generate Balance exports for granular reconciliation
- Edit Payments settings
- Accepted Payment methods
Transfers In the Transfers tab you can:
- See all your transfer activity
- Previous transfers
- Future transfers
- Delayed transfers
- Click in to transfers for more detail
- Edit transfer settings
- Bank account
- Transfer timing
Business Settings In the Business Settings you can:
- Change internal and customer-facing details about your Stripe account
- Invite new users to your team from the Team tab
- Export data from the Data tab
- Edit receipts generated from the Receipts tab
- View Security History
Common User Requests: Disputes
- Found in the Payments tab. Each dispute requires a response
- Fees are displayed in the charge detail page. This can be seen by clicking into any payment, and hovering over the “i” next to Fees
- Tabulating fees
- These can be tabulated by exporting the “Payments” export.
- It will also be included in the Monthly Report, available in the Data tab of Business Settings
- The relevant settings for each subject is available in the relevant tab.
- For example, Transfer settings (transfer timing, bank details, etc) are available as a subsection in the Transfers tab
- Business and account level settings can be changed through the “Business Settings” tab
- Most often, transfer delays are due to:
- Incorrect bank account information, which can be changed in the Transfers tab
- Bank delays (holidays, weekends), which will most often be raised as a notice in the Transfers tab
- Occasionally, holds when new information is needed, which will be surfaced as a banner in the Dashboard and over email.
- This is particularly the case when a new account begins processing large volumes very quickly – additional information may be requested to verify the user’s identity.
- Declines reasons may be seen in the charge detail page, by clicking into the payment in the Dashboard.
- Most often, we don’t have much more information other than the bank giving a ‘generic decline’ – this can be addressed by having the account holder’s client reach out to their bank to allow the transaction
10// Contact Us
We’re here to help! Please contact your Stripe team by being logged into your Stripe account and submitting a request here: https://support.stripe.com/email. Being logged in ensures that we know you are an authenticated user of the account, and can know the exact account for which you are asking questions about. We recommend formatting the enquiry as:
- Issue Summary, including any relevant information from your communication with the seller and relevant URLs.
- Account ID or Email (for both the platform and connected account): looks like `acct_***`
- Customer Name: Johnny Example
- Customer Email: firstname.lastname@example.org
- Any other relevant Stripe ID’s: Charges begin `ch_***` or `py_***`, Transfers begin `tr_***`, etc.
- If it’s regarding a specific card, please include as much information about the card as possible, such as the expiration date, last 4 digits of the card number, and the card brand. Please never share or send a full card number or CVC.
We look forward to working with you to make sure your users get the best Stripe experience possible. The Stripe Support Team