Plaid Processor Tokens

Getting Plaid Sandbox Processor Token

In order to create a plaid processor token you will need to follow 6 steps.

  1. Create a plaid sandbox text user.
  2. Get your plaid credentials.
  3. Create a public link token.
  4. Exchange the public link token for an access token.
  5. Retrieve account id's associated with the access token.
  6. 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.

💡

These endpoints are also available in the Bloom Enablement Services Postman collection.

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

⚠️

This step is only for sandbox testing. In production, users will go through the real Plaid Link flow with live financial data.

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.

You may need to shift the transaction dates to the present.

  1. For a set of recurring payments to be eligible, the following requirements must be met:
    1. One payment within the last 90 days.
    2. At least 3 payments.
    3. For example: in the JSON provided below, the 'Rent payment' transaction group is eligible (at the time of writing). It has 3 payments, at least one of which occurred in the last 90 days.
  2. You may need to adjust the dates. One easy way to adjust this payload is to prompt you 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",
            "transactions": [
                {
                    "date_transacted": "2025-07-04",
                    "date_posted": "2025-07-04",
                    "amount": 1350,
                    "description": "Rent payment",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-04",
                    "date_posted": "2025-06-04",
                    "amount": 1350,
                    "description": "Rent payment",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-04",
                    "date_posted": "2025-05-04",
                    "amount": 1350,
                    "description": "Rent payment",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-29",
                    "date_posted": "2025-06-29",
                    "amount": 248,
                    "description": "EVERGY MO WEST",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-29",
                    "date_posted": "2025-05-29",
                    "amount": 221,
                    "description": "EVERGY MO WEST",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-04-29",
                    "date_posted": "2025-04-29",
                    "amount": 212,
                    "description": "EVERGY MO WEST",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-07-01",
                    "date_posted": "2025-07-01",
                    "amount": 115,
                    "description": "Verizon Wireless Bill Pay",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-01",
                    "date_posted": "2025-06-01",
                    "amount": 115,
                    "description": "Verizon Wireless Bill Pay",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-01",
                    "date_posted": "2025-05-01",
                    "amount": 115,
                    "description": "Verizon Wireless Bill Pay",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-27",
                    "date_posted": "2025-06-27",
                    "amount": 17.99,
                    "description": "Netflix Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-27",
                    "date_posted": "2025-05-27",
                    "amount": 17.99,
                    "description": "Netflix Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-04-27",
                    "date_posted": "2025-04-27",
                    "amount": 17.99,
                    "description": "Netflix Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-07-06",
                    "date_posted": "2025-07-06",
                    "amount": 120,
                    "description": "HelloFresh Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-06",
                    "date_posted": "2025-06-06",
                    "amount": 120,
                    "description": "HelloFresh Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-06",
                    "date_posted": "2025-05-06",
                    "amount": 120,
                    "description": "HelloFresh Subscription",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-06-25",
                    "date_posted": "2025-06-25",
                    "amount": 25,
                    "description": "Water Company Water Bill",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-05-25",
                    "date_posted": "2025-05-25",
                    "amount": 21,
                    "description": "Water Company Water Bill",
                    "currency": "USD"
                },
                {
                    "date_transacted": "2025-04-25",
                    "date_posted": "2025-04-25",
                    "amount": 23,
                    "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": "[email protected]"
                    }
                ],
                "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 page 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).

📘

In production, users connect their accounts through the Plaid Link interface. In the sandbox environment, you can simulate this flow by generating a public token directly using the Plaid API.

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"]

These are required by Bloom in order for the processor token to contain the correct data.

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"
  }
}'

The institution_id ins_109508 simulates a typical non-OAuth U.S. bank. You can explore other sandbox institutions in Plaid's documentation.
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"
}'

Save the access_token returned in the response.

Note: According to Plaid’s documentation, access tokens do not expire.

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"
}'

In the response, locate the account_id field(s). You'll need to pass each of these into the /processor/token/create endpoint individually in Step 6.

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.

⚠️

In production, Bloom Enablement Services only supports importing Plaid processor tokens.

This step shows how to generate processor tokens in the sandbox using test users and test data. In production, you’ll follow the same steps using real user credentials and live Plaid environments.

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 the identity and transactions products.

Repeat this step for each account you want to import. You’ll pass all processor tokens into the importConnections mutation in a single request to Bloom