Plaid Processor Tokens
Getting Plaid Sandbox Processor Token
In order to create a plaid processor token you will need to follow 6 steps.
- Create a plaid sandbox test user.
- Get your plaid credentials.
- Create a public link token.
- Exchange the public link token for an access token.
- Retrieve account id's associated with the access token.
- Exchange the access token and account id's for processor tokens (one per account id).
Create a Plaid Sandbox Test User
Plaid provides a custom user sandbox for testing integrations with simulated account and transaction data. For more details, see the Plaid sandbox docs.
In the Plaid dashboard, go to Developers > Sandbox and create a test user.
Save the username — you’ll need it later when creating a public token.
Build Recurring Payment Patterns Configuration
The JSON config below can be used to create recurring payment patterns (such as rent or utilities) that meet eligibility rules for Bloom Credit services.
- For a set of recurring payments to be eligible, the following requirements must be met:
- One payment within the last 90 days.
- At least 3 payments.
- For example: in the JSON provided below, the 'Commonwealth Edison' transaction group is eligible. It has 3 payments, at least one of which occurred in the last 90 days.
- You may need to adjust the dates. One easy way to adjust this payload is to prompt your favorite AI code editor with
give me this JSON data but shift all dates forward X months, where X is a more recent set of months.
{
"override_accounts": [
{
"type": "depository",
"subtype": "checking",
"meta": {
"name": "Plaid Standard Checking",
"mask": "1234"
},
"numbers": {
"account": "9000091234"
},
"transactions": [
{
"date_transacted": "2026-02-03",
"date_posted": "2026-02-03",
"amount": 248,
"description": "Commonwealth Edison",
"currency": "USD"
},
{
"date_transacted": "2026-03-03",
"date_posted": "2026-03-03",
"amount": 212,
"description": "Commonwealth Edison",
"currency": "USD"
},
{
"date_transacted": "2026-04-03",
"date_posted": "2026-04-03",
"amount": 221,
"description": "Commonwealth Edison",
"currency": "USD"
},
{
"date_transacted": "2026-05-03",
"date_posted": "2026-05-03",
"amount": 221,
"description": "Commonwealth Edison",
"currency": "USD"
},
{
"date_transacted": "2026-02-02",
"date_posted": "2026-02-02",
"amount": 115,
"description": "Verizon Wireless Bill Pay",
"currency": "USD"
},
{
"date_transacted": "2026-03-02",
"date_posted": "2026-03-02",
"amount": 115,
"description": "Verizon Wireless Bill Pay",
"currency": "USD"
},
{
"date_transacted": "2026-04-02",
"date_posted": "2026-04-02",
"amount": 115,
"description": "Verizon Wireless Bill Pay",
"currency": "USD"
},
{
"date_transacted": "2026-05-02",
"date_posted": "2026-04-02",
"amount": 115,
"description": "Verizon Wireless Bill Pay",
"currency": "USD"
},
{
"date_transacted": "2026-02-02",
"date_posted": "2026-02-02",
"amount": 17.99,
"description": "Netflix Subscription",
"currency": "USD"
},
{
"date_transacted": "2026-03-02",
"date_posted": "2026-03-02",
"amount": 17.99,
"description": "Netflix Subscription",
"currency": "USD"
},
{
"date_transacted": "2026-04-02",
"date_posted": "2026-04-02",
"amount": 17.99,
"description": "Netflix Subscription",
"currency": "USD"
},
{
"date_transacted": "2026-05-02",
"date_posted": "2026-05-02",
"amount": 17.99,
"description": "Netflix Subscription",
"currency": "USD"
},
{
"date_transacted": "2026-02-01",
"date_posted": "2026-02-01",
"amount": 1350,
"description": "Apartments.com",
"currency": "USD"
},
{
"date_transacted": "2026-03-01",
"date_posted": "2026-03-01",
"amount": 1350,
"description": "Apartments.com",
"currency": "USD"
},
{
"date_transacted": "2026-04-01",
"date_posted": "2026-04-01",
"amount": 1350,
"description": "Apartments.com",
"currency": "USD"
},
{
"date_transacted": "2026-05-01",
"date_posted": "2026-05-01",
"amount": 1350,
"description": "Apartments.com",
"currency": "USD"
},
{
"date_transacted": "2026-02-01",
"date_posted": "2026-02-01",
"amount": 25,
"description": "Water Company Water Bill",
"currency": "USD"
},
{
"date_transacted": "2026-03-01",
"date_posted": "2026-03-01",
"amount": 23,
"description": "Water Company Water Bill",
"currency": "USD"
},
{
"date_transacted": "2026-04-01",
"date_posted": "2026-04-01",
"amount": 21,
"description": "Water Company Water Bill",
"currency": "USD"
},
{
"date_transacted": "2026-05-01",
"date_posted": "2026-05-01",
"amount": 21,
"description": "Water Company Water Bill",
"currency": "USD"
}
],
"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": {
"country": "US",
"city": "Malakoff",
"street": "2992 Cameron Road",
"postal_code": "14236",
"region": "NY"
}
}
]
}
}
]
}
Fetch Credentials
In your Plaid dashboard, go to Developers > Keys to retrieve your client_id and secret. You’ll use these credentials in all API requests throughout this setup process. These keys are required for both sandbox testing and production environments.
Create a public token
The next step is to Simulate Plaid Link in Sandbox (Create a Public Token).
This step sets up everything needed to simulate a user linking their account, which will later allow you to generate a processor token. To do this, you’ll need:
- Your Plaid client_id and secret.
- The sandbox institution ID
- The test username you created in Step 1. You must also specify the required products for Bloom:
"initial_products": ["identity", "transactions"]
Example cURL Request
curl --location 'https://sandbox.plaid.com/sandbox/public_token/create' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "plaid_client_id",
"secret": "plaid_client_secret",
"institution_id": "ins_109508",
"initial_products": ["identity", "transactions"],
"options": {
"override_username": "custom_username"
}
}'
This request will return a public token, which you'll exchange for an access_token in the next step.
Exchange the Public Token for an Access Token
After generating a public token in the previous step, you’ll receive a public_token. The next step is to exchange that token for a Plaid access_token. This token is required to retrieve account data and to generate processor tokens in the following steps.
Example Request:
curl --location 'https://sandbox.plaid.com/item/public_token/exchange' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "plaid_client_id",
"secret": "plaid_client_secret",
"public_token": "plaid_sandbox_token"
}'
Retrieve Account IDs
Now that you have an access token, the next step is to retrieve the list of accounts associated with the user. Each account will have an account_id, which you'll need to create a processor token in the next step.
Example Request
curl --location 'https://sandbox.plaid.com/accounts/get' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "plaid_client_id",
"secret": "plaid_client_secret",
"access_token": "plaid_access_token"
}'
Create a Processor Token (One per Account)
With your access token and account IDs in hand, you can now create a Plaid processor token for each account. This token allows Bloom Enablement Services to securely access the user's account data. An account can only be imported once (marked by a processor token being successfully imported).
You must generate one processor token per account
Example Request:
curl -X POST https://sandbox.plaid.com/processor/token/create \
-H "Content-Type: application/json" \
-d '{
"client_id": "plaid_client_id",
"secret": "plaid_client_secret",
"access_token": "plaid_access_token",
"account_id": "plaid_account_id",
"processor": "bloom_credit"
}'
Response
{
"processor_token": "processor-sandbox-abc123...",
"request_id": "abc123xyz"
}
⚠️
Reminder: The access token used here must have been created with both theidentityandtransactionsproducts.