API template library

Plaid Transfer mock API and live sandbox

A WireMock simulation of Plaid's REST API — covering transfer authorization and creation, recurring transfers, ledger operations, and sandbox simulation routes.

Vendor
Plaid
Functionality
ACH transfers and ledger events
Spec version
2020-09-14_1.688.6
Endpoints
46
Stubs
54
Protocol
REST
Validation
AI-validated Before publication, an AI agent exercised these endpoints against the real Plaid API through WireMock's recording proxy, and the recorded traffic was used to verify each stub's request and response shapes.

Live sandbox · no signup, no API key

Plaid Transfer

A running WireMock Cloud instance of this template, callable right now from a terminal, a script, or an AI agent.

Base URL
https://ze5kd.wiremockapi.cloud

POST Create - /transfer/create

curl -s -X POST 'https://ze5kd.wiremockapi.cloud/transfer/create' \
  -H 'Content-Type: application/json' \
  -d '{}'

POST List - /transfer/list

curl -s -X POST 'https://ze5kd.wiremockapi.cloud/transfer/list' \
  -H 'Content-Type: application/json' \
  -d '{}'

POST Create - /transfer/recurring/create

curl -s -X POST 'https://ze5kd.wiremockapi.cloud/transfer/recurring/create' \
  -H 'Content-Type: application/json' \
  -d '{}'
Method Path Summary
POST /sandbox/transfer/fire_webhook Manually fire a Transfer webhook
POST /sandbox/transfer/ledger/deposit/simulate Simulate a ledger deposit event in Sandbox
POST /sandbox/transfer/ledger/simulate_available Simulate converting pending balance to available balance
POST /sandbox/transfer/ledger/withdraw/simulate Simulate a ledger withdraw event in Sandbox
POST /sandbox/transfer/refund/simulate Simulate a refund event in Sandbox
POST /sandbox/transfer/repayment/simulate Trigger the creation of a repayment
POST /sandbox/transfer/simulate Simulate a transfer event in Sandbox
POST /sandbox/transfer/sweep/simulate Simulate creating a sweep
POST /sandbox/transfer/test_clock/advance Advance a test clock
POST /sandbox/transfer/test_clock/create Create a test clock
POST /sandbox/transfer/test_clock/get Get a test clock
POST /sandbox/transfer/test_clock/list List test clocks
POST /transfer/authorization/cancel Cancel a transfer authorization
POST /transfer/authorization/create Create a transfer authorization
POST /transfer/cancel Cancel a transfer
POST /transfer/capabilities/get Get RTP eligibility information of a transfer
POST /transfer/configuration/get Get transfer product configuration
POST /transfer/create Create a transfer
POST /transfer/event/list List transfer events
POST /transfer/event/sync Sync transfer events
POST /transfer/get Retrieve a transfer
POST /transfer/intent/create Create a transfer intent object to invoke the Transfer UI
POST /transfer/intent/get Retrieve more information about a transfer intent
POST /transfer/ledger/deposit Deposit funds into a Plaid Ledger balance
POST /transfer/ledger/distribute Move available balance between ledgers
POST /transfer/ledger/event/list List transfer ledger events
POST /transfer/ledger/get Retrieve Plaid Ledger balance
POST /transfer/ledger/withdraw Withdraw funds from a Plaid Ledger balance
POST /transfer/list List transfers
POST /transfer/metrics/get Get transfer product usage metrics
POST /transfer/migrate_account Migrate account into Transfers
POST /transfer/originator/funding_account/create Create a new funding account for an originator
POST /transfer/originator/get Get status of an originator's onboarding
POST /transfer/originator/list Get status of all originators' onboarding
POST /transfer/platform/originator/create Create an originator for Transfer for Platforms customers
POST /transfer/platform/person/create Create a person associated with an originator
POST /transfer/platform/requirement/submit Submit additional onboarding information on behalf of an originator
POST /transfer/recurring/cancel Cancel a recurring transfer.
POST /transfer/recurring/create Create a recurring transfer
POST /transfer/recurring/get Retrieve a recurring transfer
POST /transfer/recurring/list List recurring transfers
POST /transfer/refund/cancel Cancel a refund
POST /transfer/refund/create Create a refund
POST /transfer/refund/get Retrieve a refund
POST /transfer/sweep/get Retrieve a sweep
POST /transfer/sweep/list List sweeps

Unauthenticated WireMock Cloud demo sandbox for Plaid — not an official Plaid sandbox, and it returns simulated example data only.

What's inside the Transfer template

Forty-six endpoints cover Plaid's money-movement product, and the core of it keeps records: POST /transfer/create mints a transfer with a new UUID, /transfer/get returns that exact transfer when asked for it, and /transfer/list includes it — while an id nobody created draws Plaid's TRANSFER_ERROR envelope with code TRANSFER_NOT_FOUND. Around that store sit an authorization route whose decision arrives approved, a ledger reporting available and pending balances, recurring-transfer creation, event feeds, and the /sandbox/transfer family of simulation controls the real product exposes for testing.

  • Authorization — /transfer/authorization/create answering approved, with the proposed transfer restated
  • Transfer store — create, get, list, and cancel operating against genuinely recorded state
  • Recurring transfers — creation of an active recurring debit with its next origination date
  • Ledger — the Default ledger's balance plus deposit, withdraw, and distribute routes
  • Event feeds — transfer event list and sync carrying a pending credit event
  • Sandbox controls — the simulate family and test clocks, mirroring Plaid's own sandbox-only routes

Example implementation using plaid-python

The statefulness shows through plaid-python: create a transfer, then fetch it by the id the mock just minted —

That create-then-read sequence is the skeleton of every origination service — persist the id, poll the status — and here it runs in two round trips with no originator onboarding, no funding account, and no cent at risk.

For the parts the shared store can't give you — a transfer that settles, a returned debit, a sweep landing — copy the template into WireMock Cloud and script the status progression with stateful scenarios, advancing on each poll the way the network would.

import plaid
from plaid.api import plaid_api
from plaid.model.transfer_create_request import TransferCreateRequest
from plaid.model.transfer_get_request import TransferGetRequest

configuration = plaid.Configuration(
    host="https://ze5kd.wiremockapi.cloud",
    # required by the client, ignored by the mock
    api_key={"clientId": "any-value", "secret": "any-value"},
)
client = plaid_api.PlaidApi(plaid.ApiClient(configuration))

created = client.transfer_create(
    TransferCreateRequest(
        access_token="access-sandbox-123",
        account_id="3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr",
        authorization_id="c9f90aa1-2949-c799-e2b6-ea05c89bb586",
        description="payment",
    )
)
print("created", created.transfer.id)

fetched = client.transfer_get(
    TransferGetRequest(transfer_id=created.transfer.id)
)
print("fetched", fetched.transfer.status)

Frequently asked questions

They persist in the shared store until the sandbox resets, and nothing partitions that store — listings can include transfers other visitors created, and yours are visible to them. Key assertions to the ids your test minted rather than to list counts, and treat anything exclusive-access as a job for your own copy.

Trust the status. The fixture populates failure_reason with an R13 example (invalid ACH routing number) even though the transfer is pending — a deliberate schema demonstration, since real responses only fill that field on failures. It hands your parser the return- code structure without requiring a failed transfer to produce it.

They acknowledge — request_id and nothing else — and the test clocks report a fixed virtual time. Wiring against the sandbox-only routes can be verified end to end, but a simulated settlement won't ripple into the event feed here the way it does in Plaid's real sandbox.

Routing and account verification. A production flow authorizes against numbers that came out of Auth, so the Auth template plays the natural first act: pull its ACH pair, then authorize and create here — two sandboxes, one continuous integration test.

Vendor names identify APIs represented by WireMock template sources. This page does not imply vendor endorsement, certification, partnership, or official integration status.