Create Sandbox test data
Use Sandbox accounts to create rich test data for Plaid products
Customize Sandbox account data
In addition to a set of pre-populated Sandbox test users, the Sandbox environment also provides the ability to create custom user accounts, which can be used in conjunction with /sandbox/public_token/create or Plaid Link to generate custom Sandbox data, or in conjunction with Plaid Link to test Link flows in the Sandbox.
Using these accounts, you can create your own testing data for the Assets, Auth, Balance, Identity, Investments, Liabilities, and Transactions products. You can also simulate an account with regular income or one that makes regular loan payments. For Link testing, custom accounts support multi-factor authentication, reCAPTCHA, and Link error flows.
To customize testing data for Document Income, see Testing Document Income.
Configuring the custom user account
Custom user accounts can be configured and accessed in two ways. The easiest (and recommended) method is by using the Sandbox Users tool, located in the Plaid Dashboard under Developers -> Sandbox. Set the username and configuration object in the Dashboard, then go through the Link flow on Sandbox with that username and any non-empty password. You can also use /sandbox/public_token/create with options.override_username and options.override_password to create a public token for a custom user account while bypassing Link. Alternatively, you can log into Sandbox with the username user_custom and provide the configuration object as the password.
To aid in testing, Plaid maintains a GitHub repo of pre-created custom user accounts that some users have found helpful.
Limitations of the custom user account
Very large configuration objects (larger than approximately 55kb, or approximately 250 transactions) are not supported and may cause the Link attempt to fail.
Using more than ten accounts on a single custom user is not supported and will cause the Link attempt to fail.
If you are using Consumer Report by Plaid Check, to use a custom user, you must click "add new account" in the Link flow rather than using one of the existing banks. Using an existing bank in the Plaid Passport flow will skip the ability to enter a custom username.
At OAuth institutions, custom users may not work properly: certain less frequently used customized fields may be overridden by the default values after the Link flow has completed, or the login may fail. If this occurs, retry the configuration using a non-OAuth institution, such as First Gingham Credit Union or First Platypus Bank.
Configuration object schema
Custom test accounts are configured with a JSON configuration object formulated according to the schema below. All top level fields are optional. Sending an empty object as a configuration will result in an account configured with random balances and transaction history.
Properties
override_accounts argument. If no seed is specified, the randomly generated data will be different each time.Note that transactions data is generated relative to the Item's creation date. Different Items created on different dates with the same seed for transactions data will have different dates for the transactions. The number of days between each transaction and the Item creation will remain constant. For example, an Item created on December 15 might show a transaction on December 14. An Item created on December 20, using the same seed, would show that same transaction occurring on December 19.
investment: Investment account.credit: Credit carddepository: Depository accountloan: Loan accountpayroll: Payroll accountother: Non-specified account typeSee the Account type schema for a full listing of account types and corresponding subtypes.
investment, credit, depository, loan, payroll, other401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuitydouble double double ^$|^[A-Za-z0-9]{2,4}$ /transfer/capabilities/get, set this to 322271627 to force a true result.eft_branch.eft_institution.international_iban.account, will also be used as the account number by default. Must be specified alongside international_bic.date_transacted is not provided by the institution, a transaction date may be available in the authorized_date field.date date double double double double iso_currency_code or unofficial_currency_codeticker_symbol, cusip, or isin) are required.iso_currency_code or unofficial_currency_codedouble double double buy: Buying an investment
sell: Selling an investment
cash: Activity that modifies a cash position
fee: A fee on the account
transfer: Activity that modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transferiso_currency_code or unofficial_currency_codeticker_symbol, cusip, or isin) are required.iso_currency_code or unofficial_currency_codetrue, identifies the phone number as the primary number on an account.home, work, office, mobile, mobile1, othertrue, identifies the email address as the primary email on an account.primary, secondary, otherstate.
Example: "NC""564 Main Street, APT 15"zip.true, identifies the address as the primary address on an account.credit or student. Mortgages are not currently supported in the custom Sandbox.type is credit.double type is credit.double type is credit.double type is credit.double last_payment_amount field. Can only be set if type is credit.double minimum_payment_amount field. Can only be set if type is credit or student.double is_overdue fieldtype is student.date type is student.double type is student.double type is student.standard.expected_payoff_date field. Can only be set if type is student.date guarantor field. Can only be set if type is student.is_federal field. Can only be set if type is student.loan_name field. Can only be set if type is student.date cancelled, charged off, claim, consolidated, deferment, delinquent, discharged, extension, forbearance, in grace, in military, in school, not fully disbursed, other, paid in full, refunded, repayment, transferred, pending idrpayment_reference_number field. Can only be set if type is student.repayment_plan.description field. Can only be set if type is student.repayment_plan.type field. Can only be set if type is student. Possible values are: "extended graduated", "extended standard", "graduated", "income-contingent repayment", "income-based repayment", "income-sensitive repayment", "interest only", "other", "pay as you earn", "revised pay as you earn", "standard", or "saving on a valuable education".sequence_number field. Can only be set if type is student.state.
Example: "NC""564 Main Street, APT 15"zip.true, identifies the address as the primary address on an account.inflow_model allows you to model a test account that receives regular income or make regular payments on a loan. Any transactions generated by the inflow_model will appear in addition to randomly generated test data or transactions specified by override_accounts.none: No incomemonthly-income: Income occurs once per month monthly-balance-payment: Pays off the balance on a liability account at the given statement day of month.monthly-interest-only-payment: Makes an interest-only payment on a liability account at the given statement day of month.Note that account types supported by Liabilities will accrue interest in the Sandbox. The types impacted are account type
credit with subtype credit or paypal, and account type loan with subtype student or mortgage.type is monthly-income.double last meaning the last day of the month. The day of the month on which the income transaction will appear. The name of the income transaction. This field is required if type is monthly-income, monthly-balance-payment or monthly-interest-only-payment.type is monthly-income, monthly-balance-payment or monthly-interest-only-payment.last meaning the last day of the month. The day of the month on which the balance is calculated for the next payment. The name of the income transaction. This field is required if type is monthly-balance-payment or monthly-interest-only-payment."NC""564 Main Street, APT 15""NC""564 Main Street, APT 15"single or married.single, marrieddouble double double double double BONUS, COMMISSION, OVERTIME, PAID TIME OFF, REGULAR PAY, VACATION, BASIC ALLOWANCE HOUSING, BASIC ALLOWANCE SUBSISTENCE, OTHER, nulldouble double double double double double null if unofficial_currency_code is non-null.double PAY_FREQUENCY_UNKNOWN, PAY_FREQUENCY_WEEKLY, PAY_FREQUENCY_BIWEEKLY, PAY_FREQUENCY_SEMIMONTHLY, PAY_FREQUENCY_MONTHLY, null"NC""564 Main Street, APT 15""NC""564 Main Street, APT 15"single or married.single, marrieddevice, selections, or questions.If value is
device, the MFA answer is 1234.If value is
selections, the MFA answer is always the first option.If value is
questions, the MFA answer is answer_<i>_<j> for the j-th question in the i-th round, starting from 0. For example, the answer to the first question in the second round is answer_1_0.type is questions.type is questions. If value of type is selections, default value is 2.type is selections. Defaults to 1.type is selection. Defaults to 2.good or bad. A value of good will result in successful Item creation and bad will result in a RECAPTCHA_BAD error to simulate a failed reCAPTCHA. Both values require the reCAPTCHA to be manually solved within Plaid Link."INSTITUTION_NOT_RESPONDING"
"INSTITUTION_NO_LONGER_SUPPORTED"
"INVALID_CREDENTIALS"
"INVALID_MFA"
"ITEM_LOCKED"
"ITEM_LOGIN_REQUIRED"
"ITEM_NOT_SUPPORTED"
"INVALID_LINK_TOKEN"
"MFA_NOT_SUPPORTED"
"NO_ACCOUNTS"
"PLAID_ERROR"
"USER_INPUT_TIMEOUT"
"USER_SETUP_REQUIRED"{
"seed": "my-seed-string-3",
"override_accounts": [
{
"type": "depository",
"subtype": "checking",
"identity": {
"names": [
"John Doe"
],
"phone_numbers": [
{
"primary": true,
"type": "home",
"data": "4673956022"
}
],
"emails": [
{
"primary": true,
"type": "primary",
"data": "accountholder0@example.com"
}
],
"addresses": [
{
"primary": true,
"data": {
"city": "Malakoff",
"region": "NY",
"street": "2992 Cameron Road",
"postal_code": "14236",
"country": "US"
}
}
]
},
"transactions": [
{
"date_transacted": "2023-10-01",
"date_posted": "2023-10-03",
"currency": "USD",
"amount": 100,
"description": "1 year Netflix subscription"
},
{
"date_transacted": "2023-10-01",
"date_posted": "2023-10-02",
"currency": "USD",
"amount": 100,
"description": "1 year mobile subscription"
}
]
},
{
"type": "loan",
"subtype": "student",
"liability": {
"type": "student",
"origination_date": "2023-01-01",
"principal": 10000,
"nominal_apr": 6.25,
"loan_name": "Plaid Student Loan",
"repayment_model": {
"type": "standard",
"non_repayment_months": 12,
"repayment_months": 120
}
}
},
{
"type": "credit",
"subtype": "credit card",
"starting_balance": 10000,
"inflow_model": {
"type": "monthly-interest-only-payment",
"payment_day_of_month": 15,
"statement_day_of_month": 13,
"transaction_name": "Interest Payment"
},
"liability": {
"type": "credit",
"purchase_apr": 12.9,
"balance_transfer_apr": 15.24,
"cash_apr": 28.45,
"special_apr": 0,
"last_payment_amount": 500,
"minimum_payment_amount": 10
}
},
{
"type": "investment",
"subtype": "brokerage",
"investment_transactions": [
{
"date": "2023-07-01",
"name": "buy stock",
"quantity": 10,
"price": 10,
"fees": 20,
"type": "buy",
"currency": "USD",
"security": {
"ticker_symbol": "PLAID",
"currency": "USD"
}
}
],
"holdings": [
{
"institution_price": 10,
"institution_price_as_of": "2023-08-01",
"cost_basis": 10,
"quantity": 10,
"currency": "USD",
"security": {
"ticker_symbol": "PLAID",
"currency": "USD"
}
}
]
},
{
"type": "payroll",
"subtype": "payroll",
"income": {
"paystubs": [
{
"employer": {
"name": "Heartland Toy Company"
},
"employee": {
"name": "Chip Hazard",
"address": {
"city": "Burbank",
"region": "CA",
"street": "411 N Hollywood Way",
"postal_code": "91505",
"country": "US"
}
},
"income_breakdown": [
{
"type": "regular",
"rate": 20,
"hours": 40,
"total": 800
},
{
"type": "overtime",
"rate": 30,
"hours": 6.68,
"total": 200.39
}
],
"pay_period_details": {
"start_date": "2021-05-04",
"end_date": "2021-05-18",
"gross_earnings": 1000.39,
"check_amount": 499.28
}
}
]
}
}
]
}