---
title: "Create a test Item"
method: POST
path: "/sandbox/public_token/create"
tags: ["plaid"]
---

# Create a test Item

`POST /sandbox/public_token/create`

Use the `/sandbox/public_token/create` endpoint to create a valid `public_token`  for an arbitrary institution ID, initial products, and test credentials. The created `public_token` maps to a new Sandbox Item. You can then call `/item/public_token/exchange` to exchange the `public_token` for an `access_token` and perform all API actions. `/sandbox/public_token/create` can also be used with the [`user_custom` test username](https://plaid.com/docs/sandbox/user-custom) to generate a test account with custom data, or with Plaid's [pre-populated Sandbox test accounts](https://plaid.com/docs/sandbox/test-credentials/).

## Request body

- SandboxPublicTokenCreateRequest — SandboxPublicTokenCreateRequest defines the request schema for `/sandbox/public_token/create`
  - `client_id` string — Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.
  - `secret` string — Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.
  - `institution_id` string, required — The ID of the institution the Item will be associated with
  - `initial_products` Products[], required — The products to initially pull for the Item. May be any products that the specified `institution_id` supports. This array may not be empty.
  - `options` SandboxPublicTokenCreateRequestOptions — An optional set of options to be used when configuring the Item. If specified, must not be `null`.
    - `webhook` string, url — Specify a webhook to associate with the new Item.
    - `override_username` string, nullable — Test username to use for the creation of the Sandbox Item. Default value is `user_good`. You can also use a custom test user — either set this to the username of a custom user configured in the Dashboard, or set it to `user_custom` and pass the JSON-stringified custom user configuration object as `override_password` to define one entirely via API. See [Sandbox Custom Users](https://plaid.com/docs/sandbox/user-custom) for more details.
    - `override_password` string, nullable — Test password to use for the creation of the Sandbox Item. Default value is `pass_good`. You can also use a custom test user — reference one configured in the Dashboard via `override_username`, or set `override_username` to `user_custom` and pass the JSON-stringified custom user configuration object as this field to define one entirely via API. See [Sandbox Custom Users](https://plaid.com/docs/sandbox/user-custom) for more details.
    - `transactions` SandboxPublicTokenCreateRequestOptionsTransactions, nullable — An optional set of parameters corresponding to transactions options.
      - `start_date` string, date — The earliest date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD.
      - `end_date` string, date — The most recent date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD.
      - `days_requested` integer — The maximum number of days of transaction history to request for the Transactions product.
    - `statements` SandboxPublicTokenCreateRequestOptionsStatements, nullable — An optional set of parameters corresponding to statements options.
      - `start_date` string, date, required — The earliest date for which to fetch statements history. Dates should be formatted as YYYY-MM-DD.
      - `end_date` string, date, required — The most recent date for which to fetch statements history. Dates should be formatted as YYYY-MM-DD.
    - `income_verification` SandboxPublicTokenCreateRequestOptionsIncomeVerification — A set of parameters for income verification options. This field is required if `income_verification` is included in the `initial_products` array.
      - `income_source_types` IncomeVerificationSourceType[] — The types of source income data that users will be permitted to share. Options include `bank` and `payroll`. Currently you can only specify one of these options.
      - `bank_income` SandboxPublicTokenCreateRequestIncomeVerificationBankIncome — Specifies options for Bank Income. This field is required if `income_verification` is included in the `initial_products` array and `bank` is specified in `income_source_types`.
        - `days_requested` integer — The number of days of data to request for the Bank Income product
  - `user_token` string — The user token associated with the user for which data is being requested. This field is used only by customers with pre-existing integrations that already use the `user_token` field. All other customers should use the `user_id` instead. For more details, see [New User APIs](https://plaid.com/docs/api/users/user-apis).
  - `user_id` string — A unique user identifier, created by `/user/create`. Integrations that began using `/user/create` after December 10, 2025 use this field to identify a user instead of the `user_token`. For more details, see [New User APIs](https://plaid.com/docs/api/users/user-apis).

## Response `200`

success

- SandboxPublicTokenCreateResponse — SandboxPublicTokenCreateResponse defines the response schema for `/sandbox/public_token/create`
  - `public_token` string, required — A public token that can be exchanged for an access token using `/item/public_token/exchange`
  - `request_id` string, required — A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

## Other responses

- `default` — Error response.

---

[API](https://skmtc.net/plaid/apis/the-plaid-api.md) · [All operations](https://skmtc.net/plaid/apis/the-plaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/plaid/the-plaid-api/versions/64c4514ea59b/schema)
