Testing Stripe Connect
Before going live, test your Connect integration for account creation, identity verification, and payouts.
Use testing to make sure your Connect integration handles different flows correctly. You can use Sandboxes to simulate live mode while taking advantage of Stripe-provided special tokens to use in your tests. See the payments testing guide for more information on testing charges, disputes, and so on.
Testing capabilities
Sandboxes might not enforce some capabilities. In certain cases, they can allow an account to perform capability-dependent actions even when the associated capability’s status isn’t active.
Create test accounts
You can create multiple test accounts with different account types or controller properties that you want to test.
You can create test accounts using the Accounts API or in the Stripe Dashboard.
Use 000-000 as the SMS code when prompted for test accounts.
Test the OAuth flow
You can test your OAuth integration with connected accounts that use a Stripe-hosted Dashboard using your test client_id.
Your test client_id is ca_FkyHCg7X8mlvCUdMDao4mMxagUfhIwXb. You can find this in your Connect OAuth settings.
Your test client_id allows you to:
- Set your
redirect_urito a non-HTTPS URL - Set your
redirect_urito localhost - Force-skip the account form instead of having to fill out an entire account application (Stripe Dashboard accounts only)
- Get test access tokens for connected accounts
To test the OAuth flow, create a new account after clicking the OAuth link. You can also test connecting an existing Stripe account only if the email is different from your platform account.
Identity verification
After creating a test connected account, you can use tokens to test different verification statuses to make sure you’re handling different requirements and account states. You can use the following tokens to test verification with test accounts.
Test dates of birth
Use these dates of birth (DOB) for the individual.dob attribute on the Account object to trigger certain verification conditions.
| DOB | Type |
|---|---|
1901-01-01 | Successful date of birth match. Any other DOB results in a no-match. |
1902-01-01 | Successful, immediate date of birth match. The verification result is returned directly in the response, not as part of a webhook event. |
1900-01-01 | This DOB triggers an Office of Foreign Assets Control (OFAC) alert. |
Test addresses
Use these addresses for individual.address.line1 on the Account object to trigger certain verification conditions. You must pass in legitimate values for the city, state, and postal_code arguments.
| Token | Type |
|---|---|
address_full_match | Successful address match. |
address_no_match | Unsuccessful address match likely to trigger requirements in currently_due. |
address_line1_no_match | Unsuccessful address match likely to trigger requirements in currently_due |
Test personal ID numbers
Use these personal ID numbers for the individual.id_number attribute on the Account object to trigger certain verification conditions.
| Number | Type |
|---|---|
000000000 | Successful ID number match. 0000 also works for SSN last 4 verification. |
111111111 | Unsuccessful ID number match (identity mismatch) likely to trigger requirements in currently_due. |
222222222 | Successful, immediate ID number match. The verification result is returned directly in the response, not as part of a webhook event. |
Test government-issued ID documents
For testing, use test images or file tokens instead of uploading your own test IDs. For details, refer to Uploading a file.
Test document images
You can use a verified image that causes the ID number to match successfully. You can use an unverified image that causes a mismatch on the ID number, leading to currently_due requirements.
Note
Test images take precedence over test ID numbers. If you upload a verified image, the ID number matching succeeds, even if you also provide an unsuccessful test ID value. Similarly, an unverified image automatically fails ID matching regardless of the value of other test artifacts.
Test file tokens
Use these file tokens to trigger certain identity verification conditions. Document tokens simulate the review process in production, so fields might appear in pending_verification before the result is applied.
| Token | Type |
|---|---|
file_identity_document_success | Uses the verified image and marks that document requirement as satisfied. |
file_identity_document_failure | Uses the unverified image and marks that document requirement as not satisfied. |
Test relationship document tokens
Use these file tokens to trigger certain relationship document verification conditions. Document tokens simulate the review process in production, so fields might appear in pending_verification before the result is applied.
| Token | Type |
|---|---|
file_relationship_document_success | Uses the verified document and marks the relationship document requirement as satisfied. |
file_relationship_document_invalid | Uses an invalid document and marks the relationship document requirement as not satisfied. |
file_relationship_document_mismatch | Marks the relationship document requirement as not satisfied due to a name mismatch. |
file_relationship_document_invalid_signer | Marks the relationship document requirement as not satisfied due to an invalid signer. |
Test with high-risk accounts
For testing scenarios that apply only to high-risk accounts, force the business risk rating to high by appending _high_risk to the company.name.
Business information verification
Business address validation
In some countries, the business address associated with your connected account must be validated before charges, payouts, or both can be enabled on the connected account.
Test business addresses
Use these addresses for company.address.line1 to trigger certain validation conditions. You must pass in legitimate values for the city, state, and postal_code arguments.
Make sure you start with an address token that has the least permissive validation condition you want to test for. This is because you can’t use an address token that has a more restrictive validation condition than the previous token used. For example, if you provided address_full_match to have both charges and payouts enabled, you can’t disable payouts or charges afterward by changing the token to an invalid one. You can work around this by creating a new account with the relevant token.
| Token | Type |
|---|---|
address_full_match | Both charges and payouts are enabled on the account. |
address_no_match | Only charges are enabled on the account. Since validation failed on the line1 attribute, it becomes listed again in the requirements hash. |
address_line1_no_match | Neither charges nor payouts are enabled on the account. Since validation failed, the address attributes become listed again in the requirements hash. |
Test business tax IDs
Use these business tax ID numbers for company.tax_id to trigger certain verification conditions. The test behavior might change depending on the Connected Account countries and the regulations in those countries. Depending on the country’s regulation, a valid tax document can mark tax ID verified in these countries.
| Number | Type |
|---|---|
000000000 | Successful business ID number match. |
000000001 | Successful business ID number match as a non-profit. |
111111111 | Unsuccessful business ID number match (identity mismatch). |
111111112 | Unsuccessful business ID number match (tax ID not issued). |
222222222 | Successful, immediate business ID number match. The verification result is returned directly in the response, not as part of a webhook event. |
222221000 | Company not found in registry. |
222221001 | Owners not found in registry. |
222221002 | Directors not found in registry. |
222221003 | Missing owners on account compared to registry for legal entity types subject to owner verification. |
222221004 | Missing directors on account compared to registry. |
222221005 | Pending response from registry. |
Test directorship verification
Stripe performs directorship verification by comparing the list of directors on the Account object against a list retrieved from local registries. If the country requires it, you can trigger verification for an Account object by using these tokens for the first_name attribute on the associated Person and setting the relationship.director attribute on the Person to true.
| Token | Type |
|---|---|
mismatch_director | Unsuccessful match due to a mismatched name. This can trigger a verification_directors_mismatch verification error. |
missing_director | Unsuccessful match due to directors missing on the account. This can trigger a verification_missing_directors verification error. |
extraneous_director | Unsuccessful match due to too many directors on the account. This can trigger a verification_extraneous_directors verification error. |
The verification errors can trigger if multiple directors on the Account object use these magic tokens.
Test ownership verification
Stripe performs ownership verification by comparing the list of owners on the Account object against a list retrieved from local registries. If the country requires it, you can trigger verification for an Account object by using these tokens for the first_name attribute on the associated Person and setting the relationship.owner attribute on the Person to true.
| Token | Type |
|---|---|
mismatch_owner | Unsuccessful match due to a mismatched name. This can trigger a verification_missing_owners verification error. |
extraneous_owner | Unsuccessful match due to too many owners on the account. This can trigger a verification_missing_owners verification error. |
The verification errors can trigger if multiple owners on the Account object use these magic tokens.
Test company name verification
Trigger company name verification for an Account object by using this token for the company.name attribute.
| Token | Type |
|---|---|
mismatch_business_name | Successful match of business name. |
disallowed_name | Unsuccessful match due to a generic or well-known business name. |
match_name_relationships | Successful match of the business name and its relationships(if provided). |
match_name_only | Unsuccessful match due to a business name discrepancy. |
Test statement descriptor verification
Trigger statement descriptor verification for an Account object by using this token for the settings.payments.statement_descriptor attribute.
| Token | Type |
|---|---|
mismatch | Trigger an invalid_statement_descriptor_business_mismatch verification error. |
disallowed | Trigger an invalid_statement_descriptor_denylisted verification error. |
Trigger statement descriptor prefix verification for an Account object by using this token for the settings.card_payments.statement_descriptor_prefix attribute.
| Token | Type |
|---|---|
mismatch | Trigger an invalid_statement_descriptor_prefix_mismatch verification error. |
disallowed | Trigger an invalid_statement_descriptor_prefix_denylisted verification error. |
Test business URL verification
Trigger URL verification for an Account object by using this token for the business_profile.url attribute.
| Token | Type |
|---|---|
https://disallowed.stripe.com | Trigger an invalid_url_denylisted verification error. |
https://geoblocked.stripe.com | Trigger an invalid_url_website_inaccessible_geoblocked verification error. |
https://problem.stripe.com | Trigger an invalid_url_website_other verification error. |
https://missing.stripe.com | Trigger an invalid_url_website_incomplete verification error. |
https://mismatch.stripe.com | Trigger an invalid_url_website_business_information_mismatch verification error. |
https://passwordprotected.stripe.com | Trigger an invalid_url_website_inaccessible_password_protected verification error. |
https://accessible.stripe.com | Trigger a successful validation of the URL. |
https://underconstruction.stripe.com | Trigger an invalid_url_website_incomplete_under_construction verification error. |
https://inaccessible.stripe.com | Trigger an invalid_url_website_inaccessible verification error. |
Test capability disabled reasons
Trigger assignment of a specific requirements.disabled_reason to all of an Account object’s inactive Capability objects by using this token for the account’s business_profile.url attribute.
| Token | Type |
|---|---|
https://inactivity.stripe.com | Set an account as inactive and pause all verifications for it. Set the disabled reason for any inactive capabilities to paused.inactivity (rejected.other for API versions prior to 2024-06-20). |
Test Doing Business As (DBA) verification
Trigger DBA verification for an Account object by using this token for the business_profile.name attribute.
| Token | Type |
|---|---|
disallowed_dba | Trigger an invalid_business_profile_name_denylisted verification error. |
invalid_dba | Trigger an invalid_business_profile_name verification error. |
Test product description verification
Trigger product description verification for an Account object by using this token for the business_profile.product_description attribute.
| Token | Type |
|---|---|
require_url | Trigger an invalid_url_web_presence_detected verification error. |
Test phone number validation
Clear phone number validation for an Account object by using this token for the following attributes:
Clear phone number validation for a Person object by using this token for the phone attribute.
| Token | Type |
|---|---|
0000000000 | Successful validation |
Trigger or advance verification
Trigger cards
Use these card numbers to trigger various conditions when you’re testing both requirements and tiered verification. For the trigger actions to work, you must use these cards with a Connect charge by setting on_behalf_of or creating a direct charge on the connected account. The connected account must have an eventually_due requirement.
| Number | Token | Type |
|---|---|---|
| 4000000000004202 | tok_visa_triggerNextRequirements | Changes the next set of eventually due requirements to currently due. |
| 4000000000004210 | tok_visa_triggerChargeBlock | Triggers a charge block. |
| 4000000000004236 | tok_visa_triggerPayoutBlock | Triggers a payout block. |
Trigger next requirements
Live mode can require additional verification information when a connected account processes a certain amount of volume. This card sets any additional verification information to be required immediately. If no additional information is required, nothing appears.
Trigger a charge or payout block
If required information isn’t provided by the deadline, Stripe disables the connected account’s charges or payouts. These cards disable the connected account and move any currently due requirements to overdue. These cards have no effect until an account provides the initial information that’s required to enable charges and payouts.
Trigger bank account ownership verification
Connected accounts in the United States and India are subject to Bank account ownership verification. You can complete this verification by uploading supporting documents with the Connect Dashboard or with the API through the documents[bank_account_ownership_verification] hash.
While you’re testing, you can simulate the US bank account ownership verification process. Use the following test bank account numbers to trigger the verification process. One number presumes successful verification and the other prompts you to upload test images or file tokens to complete the verification process. These test accounts are only available for US accounts.
| Routing | Account | Type |
|---|---|---|
110000000 | 000999999991 | Triggers and completes the bank account ownership verification process after a short delay |
110000000 | 000999999992 | Triggers the bank account ownership verification process after a short delay and requests for document upload |
Add funds to Stripe balance
To test adding funds to your Stripe balance from a bank account in the Dashboard, create a sandbox and select the desired test bank account in the dropdown menu within the Add to balance dialog. You can simulate success or failure due to insufficient funds.
To test adding funds in the API, use the following test bank tokens as the source while you’re testing. Each token simulates a specific kind of event.
| Token | Type |
|---|---|
btok_us_verified | Successful |
btok_us_verified_noAccount | Unsuccessful with a no_account code |
btok_us_verified_accountClosed | Unsuccessful with an account_closed code |
btok_us_verified_insufficientFunds | Unsuccessful with an insufficient_funds code |
btok_us_verified_debitNotAuthorized | Unsuccessful with a debit_not_authorized code |
btok_us_verified_invalidCurrency | Unsuccessful with an invalid_currency code |
Payouts
Use the following test bank and debit card numbers to trigger certain events when testing payouts. You can only use these values while testing with test API keys.
Test payouts simulate a live payout but aren’t processed with the bank. Test accounts with Stripe Dashboard access always have payouts enabled, as long as valid external bank information and other relevant conditions are met, and never requires real identity verification.
Note
You can’t use test bank and debit card numbers in the Stripe Dashboard on a live mode connected account. If you’ve entered your bank account information on a live mode account, you can still use a sandbox, and test payouts will simulate a live payout without processing actual money.
Bank numbers
Use these test bank account numbers to test payouts. You can only use them with test API keys.
| Routing | Account | Type |
|---|---|---|
110000000 | 000123456789 | Payout succeeds. |
110000000 | 000111111116 | Payout fails with a no_account code. |
110000000 | 000111111113 | Payout fails with a account_closed code. |
110000000 | 000222222227 | Payout fails with a insufficient_funds code. |
110000000 | 000333333335 | Payout fails with a debit_not_authorized code. |
110000000 | 000444444440 | Payout fails with a invalid_currency code. |
110000000 | 000888888883 | Payout fails if method is instant. Bank account is not eligible for Instant Payouts. |
Debit card numbers
Use these test debit card numbers to test payouts to a debit card. You can only use them with test API keys.
| Number | Token | Type |
|---|---|---|
| 4000056655665556 | tok_visa_debit_us_transferSuccess | Visa debit. Payout succeeds. |
| 4000056655665572 | tok_visa_debit_us_transferFail | Visa debit. Payout fails with a could_not_process code. |
| 4000056755665555 | tok_visa_debit_us_instantPayoutUnsupported | Visa debit. Card isn’t eligible for Instant Payouts. |
| 5200828282828210 | tok_mastercard_debit_us_transferSuccess | Mastercard debit. Payout succeeds. |
| 6011981111111113 | tok_discover_debit_us_transferSuccess | Discover debit. Payout succeeds. |
Simulate regional businesses
Use predefined sets of fictitious company and individual information to simulate different verification outcomes based on regional requirements. You can:
- Simulate company name, address, and tax ID verification
- Test director and owner verification processes
- Experiment with different ownership structures and relationship types
To use a sample company, provide the corresponding company.tax_id when creating or updating a connected account in a sandbox. Stripe returns the predefined fictitious information associated with that sample for verification processes.
Singapore
Aspen PTE LTD
Use the UEN 180100002M as the company tax ID value to simulate a company from Singapore called Aspen PTE LTD. This sample ID provides the following relationship details for testing:
| Full Name | ID Number | Ownership Percentage | Positions |
|---|---|---|---|
| MOHAMMAD ALI BIN MOHAMMAD RAFI | S0000001A | 30.0 |
|
| TEO WEI MING | S0000002A | 70.0 | |
| RAJESH KUMAR | T0000003C | Director | |
| LI GUO HAO | S0290695C | Director |
