Plaid logo
Docs
ALL DOCS

Sandbox

  • Overview
  • Sandbox institutions
  • Test credentials
  • Customize test data
Plaid logo
Docs
Plaid.com
Get API keys
Open nav

Create Sandbox test data

Use Sandbox accounts to create rich test data for Plaid products

Customize Sandbox account data

In addition to the basic Sandbox credentials, 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.

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 Developer Dashboard under the Team menu. Set the username and configuration object in the Dashboard, then log into the Sandbox with that username and any non-empty password. 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.

Very large configuration objects (larger than approximately 55kb, or approximately 250 transactions) are not currently supported and may cause the Link attempt to fail.

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.

version
string
The version of the password schema to use, possible values are 1 or 2. The default value is 2. You should only specify 1 if you know it is necessary for your test suite.
seed
string
A seed, in the form of a string, that will be used to randomly generate account and transaction data, if this data is not specified using the 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.
override_accounts
[object]
An array of account overrides to configure the accounts for the Item. By default, if no override is specified, transactions and account data will be randomly generated based on the account type and subtype, and other products will have fixed or empty data.
type
string
investment: Investment account.
credit: Credit card
depository: Depository account
loan: Loan account
payroll: Payroll account
other: Non-specified account type
See the Account type schema for a full listing of account types and corresponding subtypes.


Possible values: investment, credit, depository, loan, payroll, other
subtype
string
See the Account type schema for a full listing of account types and corresponding subtypes.

Possible values: 401a, 401k, 403B, 457b, 529, brokerage, cash isa, crypto exchange, education savings account, ebt, fixed annuity, gic, health reimbursement arrangement, hsa, isa, ira, lif, life insurance, lira, lrif, lrsp, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, prif, rdsp, resp, rlif, rrif, pension, profit sharing plan, retirement, roth, roth 401k, rrsp, sep ira, simple ira, sipp, stock plan, thrift savings plan, tfsa, trust, ugma, utma, variable annuity, credit card, paypal, cd, checking, savings, money market, prepaid, auto, business, commercial, construction, consumer, home equity, loan, mortgage, overdraft, line of credit, student, cash management, keogh, mutual fund, recurring, rewards, safe deposit, sarsep, payroll, null
starting_balance
number
If provided, the account will start with this amount as the current balance.

Format: double
force_available_balance
number
If provided, the account will always have this amount as its available balance, regardless of current balance or changes in transactions over time.

Format: double
currency
string
ISO-4217 currency code. If provided, the account will be denominated in the given currency. Transactions will also be in this currency by default.
meta
object
Allows specifying the metadata of the test account
name
string
The account's name
official_name
string
The account's official name
limit
number
The account's limit

Format: double
mask
string
The account's mask. Should be a string of 2-4 alphanumeric characters. This allows you to model a mask which does not match the account number (such as with a virtual account number).

Min length: 2
Max length: 4
Pattern: ^[A-Za-z0-9]{2,4}$
numbers
object
Account and bank identifier number data used to configure the test account. All values are optional.
account
string
Will be used for the account number.
ach_routing
string
Must be a valid ACH routing number.
ach_wire_routing
string
Must be a valid wire transfer routing number.
eft_institution
string
EFT institution number. Must be specified alongside eft_branch.
eft_branch
string
EFT branch number. Must be specified alongside eft_institution.
international_bic
string
Bank identifier code (BIC). Must be specified alongside international_iban.
international_iban
string
International bank account number (IBAN). If no account number is specified via account, will also be used as the account number by default. Must be specified alongside international_bic.
bacs_sort_code
string
BACS sort code
transactions
[object]
Specify the list of transactions on the account.
date_transacted
string
The date of the transaction, in ISO 8601 (YYYY-MM-DD) format. Transactions in Sandbox will move from pending to posted once their transaction date has been reached. If a date_transacted is not provided by the institution, a transaction date may be available in the authorized_date field.

Format: date
date_posted
string
The date the transaction posted, in ISO 8601 (YYYY-MM-DD) format. Posted dates in the past or present will result in posted transactions; posted dates in the future will result in pending transactions.

Format: date
amount
number
The transaction amount. Can be negative.

Format: double
description
string
The transaction description.
currency
string
The ISO-4217 format currency code for the transaction.
holdings
object
Specify the holdings on the account.
institution_price
number
The last price given by the institution for this security

Format: double
institution_price_as_of
string
The date at which institution_price was current. Must be formatted as an ISO 8601 date.

Format: date
cost_basis
number
The average original value of the holding. Multiple cost basis values for the same security purchased at different prices are not supported.

Format: double
quantity
number
The total quantity of the asset held, as reported by the financial institution.

Format: double
currency
string
Either a valid iso_currency_code or unofficial_currency_code
security
object
Specify the security associated with the holding or investment transaction. When inputting custom security data to the Sandbox, Plaid will perform post-data-retrieval normalization and enrichment. These processes may cause the data returned by the Sandbox to be slightly different from the data you input. An ISO-4217 currency code and a security identifier (ticker_symbol, cusip, isin, or sedol) are required.
isin
string
12-character ISIN, a globally unique securities identifier. Please note that Plaid's customers must hold a license directly from CUSIP Global Services to receive CUSIP & ISIN data. This field will be null by default for new customers. For existing customers, this field will be null by default starting on Sept 15, 2023. If you would like access to this field, please contact your Plaid Account Manager or reach out to investments-vendors@plaid.com.
cusip
string
9-character CUSIP, an identifier assigned to North American securities. Please note that Plaid's customers must hold a license directly from CUSIP Global Services to receive CUSIP & ISIN data. This field will be null by default for new customers. For existing customers, this field will be null by default starting on Sept 15, 2023. If you would like access to this field, please contact your Plaid Account Manager or reach out to investments-vendors@plaid.com.
sedol
string
7-character SEDOL, an identifier assigned to securities in the UK.
name
string
A descriptive name for the security, suitable for display.
ticker_symbol
string
The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available.
currency
string
Either a valid iso_currency_code or unofficial_currency_code
investment_transactions
object
Specify the list of investments transactions on the account.
date
string
Posting date for the transaction. Must be formatted as an ISO 8601 date.

Format: date
name
string
The institution's description of the transaction.
quantity
number
The number of units of the security involved in this transaction. Must be positive if the type is a buy and negative if the type is a sell.

Format: double
price
number
The price of the security at which this transaction occurred.

Format: double
fees
number
The combined value of all fees applied to this transaction.

Format: double
type
string
The type of the investment transaction. Possible values are: 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 transfer
currency
string
Either a valid iso_currency_code or unofficial_currency_code
security
object
Specify the security associated with the holding or investment transaction. When inputting custom security data to the Sandbox, Plaid will perform post-data-retrieval normalization and enrichment. These processes may cause the data returned by the Sandbox to be slightly different from the data you input. An ISO-4217 currency code and a security identifier (ticker_symbol, cusip, isin, or sedol) are required.
isin
string
12-character ISIN, a globally unique securities identifier. Please note that Plaid's customers must hold a license directly from CUSIP Global Services to receive CUSIP & ISIN data. This field will be null by default for new customers. For existing customers, this field will be null by default starting on Sept 15, 2023. If you would like access to this field, please contact your Plaid Account Manager or reach out to investments-vendors@plaid.com.
cusip
string
9-character CUSIP, an identifier assigned to North American securities. Please note that Plaid's customers must hold a license directly from CUSIP Global Services to receive CUSIP & ISIN data. This field will be null by default for new customers. For existing customers, this field will be null by default starting on Sept 15, 2023. If you would like access to this field, please contact your Plaid Account Manager or reach out to investments-vendors@plaid.com.
sedol
string
7-character SEDOL, an identifier assigned to securities in the UK.
name
string
A descriptive name for the security, suitable for display.
ticker_symbol
string
The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available.
currency
string
Either a valid iso_currency_code or unofficial_currency_code
identity
object
Data about the owner or owners of an account. Any fields not specified will be filled in with default Sandbox information.
names
[string]
A list of names associated with the account by the financial institution. These should always be the names of individuals, even for business accounts. Note that the same name data will be used for all accounts associated with an Item.
phone_numbers
[object]
A list of phone numbers associated with the account.
data
string
The phone number.
primary
boolean
When true, identifies the phone number as the primary number on an account.
type
string
The type of phone number.

Possible values: home, work, office, mobile, mobile1, other
emails
[object]
A list of email addresses associated with the account.
data
string
The email address.
primary
boolean
When true, identifies the email address as the primary email on an account.
type
string
The type of email account as described by the financial institution.

Possible values: primary, secondary, other
addresses
[object]
Data about the various addresses associated with the account.
data
object
Data about the components comprising an address.
city
string
The full city name
region
string
The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC"
street
string
The full street address Example: "564 Main Street, APT 15"
postal_code
string
The postal code. In API versions 2018-05-22 and earlier, this field is called zip.
country
string
The ISO 3166-1 alpha-2 country code
primary
boolean
When true, identifies the address as the primary address on an account.
liability
object
Used to configure Sandbox test data for the Liabilities product
type
string
The type of the liability object, either credit or student. Mortgages are not currently supported in the custom Sandbox.
purchase_apr
number
The purchase APR percentage value. For simplicity, this is the only interest rate used to calculate interest charges. Can only be set if type is credit.

Format: double
cash_apr
number
The cash APR percentage value. Can only be set if type is credit.

Format: double
balance_transfer_apr
number
The balance transfer APR percentage value. Can only be set if type is credit.

Format: double
special_apr
number
The special APR percentage value. Can only be set if type is credit.

Format: double
last_payment_amount
number
Override the last_payment_amount field. Can only be set if type is credit.

Format: double
minimum_payment_amount
number
Override the minimum_payment_amount field. Can only be set if type is credit or student.

Format: double
is_overdue
boolean
Override the is_overdue field
origination_date
string
The date on which the loan was initially lent, in ISO 8601 (YYYY-MM-DD) format. Can only be set if type is student.

Format: date
principal
number
The original loan principal. Can only be set if type is student.

Format: double
nominal_apr
number
The interest rate on the loan as a percentage. Can only be set if type is student.

Format: double
interest_capitalization_grace_period_months
number
If set, interest capitalization begins at the given number of months after loan origination. By default interest is never capitalized. Can only be set if type is student.
repayment_model
object
Student loan repayment information used to configure Sandbox test data for the Liabilities product
type
string
The only currently supported value for this field is standard.
non_repayment_months
number
Configures the number of months before repayment starts.
repayment_months
number
Configures the number of months of repayments before the loan is paid off.
expected_payoff_date
string
Override the expected_payoff_date field. Can only be set if type is student.

Format: date
guarantor
string
Override the guarantor field. Can only be set if type is student.
is_federal
boolean
Override the is_federal field. Can only be set if type is student.
loan_name
string
Override the loan_name field. Can only be set if type is student.
loan_status
object
An object representing the status of the student loan
end_date
string
The date until which the loan will be in its current status. Dates are returned in an ISO 8601 format (YYYY-MM-DD).

Format: date
type
string
The status type of the student loan

Possible values: 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
payment_reference_number
string
Override the payment_reference_number field. Can only be set if type is student.
pslf_status
object
Information about the student's eligibility in the Public Service Loan Forgiveness program. This is only returned if the institution is FedLoan (ins_116527).
estimated_eligibility_date
string
The estimated date borrower will have completed 120 qualifying monthly payments. Returned in ISO 8601 format (YYYY-MM-DD).

Format: date
payments_made
number
The number of qualifying payments that have been made.
payments_remaining
number
The number of qualifying payments remaining.
repayment_plan_description
string
Override the repayment_plan.description field. Can only be set if type is student.
repayment_plan_type
string
Override the 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", "interest only", "other", "pay as you earn", "revised pay as you earn", or "standard".
sequence_number
string
Override the sequence_number field. Can only be set if type is student.
servicer_address
object
A physical mailing address.
data
object
Data about the components comprising an address.
city
string
The full city name
region
string
The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC"
street
string
The full street address Example: "564 Main Street, APT 15"
postal_code
string
The postal code. In API versions 2018-05-22 and earlier, this field is called zip.
country
string
The ISO 3166-1 alpha-2 country code
primary
boolean
When true, identifies the address as the primary address on an account.
inflow_model
object
The 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.
type
string
Inflow model. One of the following:
none: No income
monthly-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.
income_amount
number
Amount of income per month. This value is required if type is monthly-income.

Format: double
payment_day_of_month
number
Number between 1 and 28, or 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.
transaction_name
string
The name of the income transaction. This field is required if type is monthly-income, monthly-balance-payment or monthly-interest-only-payment.
statement_day_of_month
string
Number between 1 and 28, or 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.
income
object
Specify payroll data on the account.
paystubs
[object]
A list of paystubs associated with the account.
employer
object
The employer on the paystub.
name
string
The name of the employer.
employee
object
The employee on the paystub.
name
string
The name of the employee.
address
object
The address of the employee.
city
string
The full city name.
region
string
The region or state Example: "NC"
street
string
The full street address Example: "564 Main Street, APT 15"
postal_code
string
5 digit postal code.
country
string
The country of the address.
income_breakdown
[object]
type
string
The type of income. Possible values include: "regular": regular income "overtime": overtime income "bonus": bonus income

Possible values: bonus, overtime, regular, null
rate
number
The hourly rate at which the income is paid.

Format: double
hours
number
The number of hours logged for this income for this pay period.
total
number
The total pay for this pay period.

Format: double
pay_period_details
object
Details about the pay period.
check_amount
number
The amount of the paycheck.

Format: double
distribution_breakdown
[object]
account_name
string
Name of the account for the given distribution.
bank_name
string
The name of the bank that the payment is being deposited to.
current_amount
number
The amount distributed to this account.

Format: double
iso_currency_code
string
The ISO-4217 currency code of the net pay. Always null if unofficial_currency_code is non-null.
mask
string
The last 2-4 alphanumeric characters of an account's official account number.
type
string
Type of the account that the paystub was sent to (e.g. 'checking').
unofficial_currency_code
string
The unofficial currency code associated with the net pay. Always null if iso_currency_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries.
See the currency code schema for a full listing of supported iso_currency_codes.
current_pay
deprecatedobject
An object representing a monetary amount.
amount
number
A numerical amount of a specific currency.

Format: double
currency
string
Currency code, e.g. USD
end_date
string
The pay period end date, in ISO 8601 format: "yyyy-mm-dd".

Format: date
gross_earnings
number
Total earnings before tax/deductions.

Format: double
pay_date
string
The date on which the paystub was issued, in ISO 8601 format ("yyyy-mm-dd").

Format: date
pay_frequency
string
The frequency at which an individual is paid.

Possible values: PAY_FREQUENCY_UNKNOWN, PAY_FREQUENCY_WEEKLY, PAY_FREQUENCY_BIWEEKLY, PAY_FREQUENCY_SEMIMONTHLY, PAY_FREQUENCY_MONTHLY, null
pay_day
deprecatedstring
The date on which the paystub was issued, in ISO 8601 format ("yyyy-mm-dd").

Format: date
start_date
string
The pay period start date, in ISO 8601 format: "yyyy-mm-dd".

Format: date
mfa
object
Specifies the multi-factor authentication settings to use with this test account
type
string
Possible values are device, 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.
question_rounds
number
Number of rounds of questions. Required if value of type is questions.
questions_per_round
number
Number of questions per round. Required if value of type is questions. If value of type is selections, default value is 2.
selection_rounds
number
Number of rounds of selections, used if type is selections. Defaults to 1.
selections_per_question
number
Number of available answers per question, used if type is selection. Defaults to 2.
recaptcha
string
You may trigger a reCAPTCHA in Plaid Link in the Sandbox environment by using the recaptcha field. Possible values are 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.
force_error
string
An error code to force on Item creation. Possible values are:
"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"
Copy
1{
2 "seed": "my-seed-string-3",
3 "override_accounts": [
4 {
5 "type": "depository",
6 "subtype": "checking",
7 "identity": {
8 "names": [
9 "John Doe"
10 ],
11 "phone_numbers": [
12 {
13 "primary": true,
14 "type": "home",
15 "data": "4673956022"
16 }
17 ],
18 "emails": [
19 {
20 "primary": true,
21 "type": "primary",
22 "data": "accountholder0@example.com"
23 }
24 ],
25 "addresses": [
26 {
27 "primary": true,
28 "data": {
29 "city": "Malakoff",
30 "region": "NY",
31 "street": "2992 Cameron Road",
32 "postal_code": "14236",
33 "country": "US"
34 }
35 }
36 ]
37 },
38 "transactions": [
39 {
40 "date_transacted": "2019-10-01",
41 "date_posted": "2019-10-03",
42 "currency": "USD",
43 "amount": 100,
44 "description": "1 year Netflix subscription"
45 },
46 {
47 "date_transacted": "2019-10-01",
48 "date_posted": "2019-10-02",
49 "currency": "USD",
50 "amount": 100,
51 "description": "1 year mobile subscription"
52 }
53 ]
54 },
55 {
56 "type": "loan",
57 "subtype": "student",
58 "liability": {
59 "type": "student",
60 "origination_date": "2020-01-01",
61 "principal": 10000,
62 "nominal_apr": 6.25,
63 "loan_name": "Plaid Student Loan",
64 "repayment_model": {
65 "type": "standard",
66 "non_repayment_months": 12,
67 "repayment_months": 120
68 }
69 }
70 },
71 {
72 "type": "credit",
73 "subtype": "credit card",
74 "starting_balance": 10000,
75 "inflow_model": {
76 "type": "monthly-interest-only-payment",
77 "payment_day_of_month": 15,
78 "statement_day_of_month": 13,
79 "transaction_name": "Interest Payment"
80 },
81 "liability": {
82 "type": "credit",
83 "purchase_apr": 12.9,
84 "balance_transfer_apr": 15.24,
85 "cash_apr": 28.45,
86 "special_apr": 0,
87 "last_payment_amount": 500,
88 "minimum_payment_amount": 10
89 }
90 },
91 {
92 "type": "investment",
93 "subtype": "brokerage",
94 "investment_transactions": [
95 {
96 "date": "2021-07-01",
97 "name": "buy stock",
98 "quantity": 10,
99 "price": 10,
100 "fees": 20,
101 "type": "buy",
102 "currency": "USD",
103 "security": {
104 "ticker_symbol": "PLAID",
105 "currency": "USD"
106 }
107 }
108 ],
109 "holdings": [
110 {
111 "institution_price": 10,
112 "institution_price_as_of": "2021-08-01",
113 "cost_basis": 10,
114 "quantity": 10,
115 "currency": "USD",
116 "security": {
117 "ticker_symbol": "PLAID",
118 "currency": "USD"
119 }
120 }
121 ]
122 },
123 {
124 "type": "payroll",
125 "subtype": "payroll",
126 "income": {
127 "paystubs": [
128 {
129 "employer": {
130 "name": "Heartland Toy Company"
131 },
132 "employee": {
133 "name": "Chip Hazard",
134 "address": {
135 "city": "Burbank",
136 "region": "CA",
137 "street": "411 N Hollywood Way",
138 "postal_code": "91505",
139 "country": "US"
140 }
141 },
142 "income_breakdown": [
143 {
144 "type": "regular",
145 "rate": 20,
146 "hours": 40,
147 "total": 800
148 },
149 {
150 "type": "overtime",
151 "rate": 30,
152 "hours": 6.68,
153 "total": 200.39
154 }
155 ],
156 "pay_period_details": {
157 "start_date": "2021-05-04",
158 "end_date": "2021-05-18",
159 "gross_earnings": 1000.39,
160 "check_amount": 499.28
161 }
162 }
163 ]
164 }
165 }
166 ]
167}
Was this helpful?
Was this helpful?
Developer community
GitHub
GitHub
Stack Overflow
Stack Overflow
YouTube
YouTube
Twitter
Twitter
Discord
Discord