Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Payments and Funding
  • Auth
  • Balance
  • Identity
  • Signal
  • Transfer
  • Investments Move
  • Payment Initiation
  • Virtual Accounts
Financial Insights
  • Transactions
  • Investments
  • Liabilities
  • Enrich
KYC/AML and anti-fraud
  • Look up Dashboard users
  • Identity Verification
  • Protect
  • Monitor
  • Beacon (beta)
Instant Onboarding
  • Layer
Credit and Underwriting
  • Consumer Report (by Plaid Check)
  • Assets
  • Statements
  • Income
Fundamentals
  • Items
  • Accounts
  • Institutions
  • Sandbox
  • Link
  • Users
  • Consent
  • Network
  • OAuth
Partnerships
  • Processor tokens
  • Processor partners
  • Reseller partners
Plaid logo
Docs
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
    Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
    Plaid.com
    Log in
    Get API Keys
    Open nav

    Plaid Ledger

    API reference for Plaid Ledger

    For how-to guidance, see the Ledger documentation.

    Plaid Ledger
    /transfer/ledger/depositDeposit funds into a ledger balance held with Plaid
    /transfer/ledger/distributeMove available balance between platform and its originator
    /transfer/ledger/getRetrieve information about the ledger balance held with Plaid
    /transfer/ledger/withdrawWithdraw funds from a ledger balance held with Plaid
    =*=*=*=

    /transfer/ledger/deposit

    Deposit funds into a Plaid Ledger balance

    Use the /transfer/ledger/deposit endpoint to deposit funds into Plaid Ledger.

    transfer/ledger/deposit

    Request fields

    client_id
    stringstring
    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
    stringstring
    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.
    originator_client_id
    stringstring
    Client ID of the customer that owns the Ledger balance. This is so Plaid knows which of your customers to payout or collect funds. Only applicable for Platform customers. Do not include if you’re paying out to yourself.
    funding_account_id
    stringstring
    Specify which funding account to use. Customers can find a list of funding_account_ids in the Accounts page of the Plaid Dashboard, under the "Account ID" column. If this field is left blank, the funding account associated with the specified Ledger will be used. If an originator_client_id is specified, the funding_account_id must belong to the specified originator.
    ledger_id
    stringstring
    Specify which ledger balance to deposit to. Customers can find a list of ledger_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance.
    amount
    requiredstringrequired, string
    A positive amount of how much will be deposited into ledger (decimal string with two digits of precision e.g. "5.50").
    description
    stringstring
    The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement.

    Max length: 10
    idempotency_key
    requiredstringrequired, string
    A unique key provided by the client, per unique ledger deposit. Maximum of 50 characters.
    The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger deposit fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single deposit is created.


    Max length: 50
    network
    requiredstringrequired, string
    The ACH networks used for the funds flow.
    For requests submitted as either ach or same-day-ach the cutoff for Same Day ACH is 3:30 PM Eastern Time and the cutoff for Standard ACH transfers is 8:30 PM Eastern Time. It is recommended to submit a request at least 15 minutes before the cutoff time in order to ensure that it will be processed before the cutoff. Any request that is indicated as same-day-ach and that misses the Same Day ACH cutoff, but is submitted in time for the Standard ACH cutoff, will be sent over Standard ACH rails and will not incur same-day charges.


    Possible values: ach, same-day-ach
    Select Language
    1const request: TransferLedgerDepositRequest = {
    2 amount: '12.34',
    3 network: 'ach',
    4 idempotency_key: 'test_deposit_abc',
    5 description: 'deposit',
    6};
    7try {
    8 const response = await client.transferLedgerDeposit(request);
    9 const sweep = response.data.sweep;
    10} catch (error) {
    11 // handle error
    12}
    transfer/ledger/deposit

    Response fields and example

    sweep
    objectobject
    Describes a sweep of funds to / from the sweep account.
    A sweep is associated with many sweep events (events of type swept or return_swept) which can be retrieved by invoking the /transfer/event/list endpoint with the corresponding sweep_id.
    swept events occur when the transfer amount is credited or debited from your sweep account, depending on the type of the transfer. return_swept events occur when a transfer is returned and Plaid undoes the credit or debit.
    The total sum of the swept and return_swept events is equal to the amount of the sweep Plaid creates and matches the amount of the entry on your sweep account ledger.
    id
    stringstring
    Identifier of the sweep.
    funding_account_id
    stringstring
    The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited.
    ledger_id
    nullablestringnullable, string
    Plaid’s unique identifier for a Plaid Ledger Balance.
    created
    stringstring
    The datetime when the sweep occurred, in RFC 3339 format.

    Format: date-time
    amount
    stringstring
    Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00")
    If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced.
    iso_currency_code
    stringstring
    The currency of the sweep, e.g. "USD".
    settled
    nullablestringnullable, string
    The date when the sweep settled, in the YYYY-MM-DD format.

    Format: date
    expected_funds_available_date
    nullablestringnullable, string
    The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD.

    Format: date
    status
    nullablestringnullable, string
    The status of a sweep transfer
    "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep.


    Possible values: pending, posted, settled, funds_available, returned, failed, null
    trigger
    nullablestringnullable, string
    The trigger of the sweep
    "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance_threshold" - The sweep is created by balance threshold setting "automatic_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance.


    Possible values: manual, incoming, balance_threshold, automatic_aggregate
    description
    stringstring
    The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement.
    network_trace_id
    nullablestringnullable, string
    The trace identifier for the transfer based on its network. This will only be set after the transfer has posted.
    For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number.
    failure_reason
    nullableobjectnullable, object
    The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise.
    failure_code
    nullablestringnullable, string
    The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes.
    description
    nullablestringnullable, string
    A human-readable description of the reason for the failure or reversal.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "sweep": {
    3 "id": "8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee",
    4 "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460",
    5 "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a",
    6 "created": "2020-08-06T17:27:15Z",
    7 "amount": "-12.34",
    8 "iso_currency_code": "USD",
    9 "settled": null,
    10 "status": "pending",
    11 "trigger": "manual",
    12 "description": "deposit",
    13 "network_trace_id": null
    14 },
    15 "request_id": "saKrIBuEB9qJZno"
    16}
    Was this helpful?
    =*=*=*=

    /transfer/ledger/distribute

    Move available balance between the ledgers of the platform and one of its originators

    Use the /transfer/ledger/distribute endpoint to move available balance between the ledgers of the platform and one of its originators.

    transfer/ledger/distribute

    Request fields

    client_id
    stringstring
    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
    stringstring
    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.
    from_ledger_id
    requiredstringrequired, string
    The Ledger to pull money from.
    to_ledger_id
    requiredstringrequired, string
    The Ledger to credit money to.
    amount
    requiredstringrequired, string
    The amount to move (decimal string with two digits of precision e.g. "10.00"). Amount must be positive.
    idempotency_key
    requiredstringrequired, string
    A unique key provided by the client, per unique ledger distribute. Maximum of 50 characters.
    The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger distribute fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single distribute is created.


    Max length: 50
    description
    stringstring
    An optional description for the ledger distribute operation.
    Select Language
    1const request: TransferLedgerDistributeRequest = {
    2 from_client_id: '6a65dh3d1h0d1027121ak184',
    3 to_client_id: '415ab64b87ec47401d000002'
    4 amount: '12.34',
    5 idempotency_key: 'test_distribute_abc',
    6 description: 'distribute',
    7};
    8try {
    9 const response = await client.transferLedgerDistribute(request);
    10} catch (error) {
    11 // handle error
    12}
    transfer/ledger/distribute

    Response fields and example

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "request_id": "saKrIBuEB9qJZno"
    3}
    Was this helpful?
    =*=*=*=

    /transfer/ledger/get

    Retrieve Plaid Ledger balance

    Use the /transfer/ledger/get endpoint to view a balance on the ledger held with Plaid.

    transfer/ledger/get

    Request fields

    client_id
    stringstring
    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
    stringstring
    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.
    ledger_id
    stringstring
    Specify which ledger balance to get. Customers can find a list of ledger_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance.
    originator_client_id
    stringstring
    Client ID of the end customer.
    Select Language
    1try {
    2 const response = await client.transferLedgerGet({}});
    3 const available_balance = response.data.balance.available;
    4 const pending_balance = response.data.balance.pending;
    5} catch (error) {
    6 // handle error
    7}
    transfer/ledger/get

    Response fields and example

    ledger_id
    stringstring
    The unique identifier of the Ledger that was returned.
    balance
    objectobject
    Information about the balance of the ledger held with Plaid.
    available
    stringstring
    The amount of this balance available for use (decimal string with two digits of precision e.g. "10.00").
    pending
    stringstring
    The amount of pending funds that are in processing (decimal string with two digits of precision e.g. "10.00").
    name
    stringstring
    The name of the Ledger
    is_default
    booleanboolean
    Whether this Ledger is the client's default ledger.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a",
    3 "name": "Default",
    4 "is_default": true,
    5 "balance": {
    6 "available": "1721.70",
    7 "pending": "123.45"
    8 },
    9 "request_id": "saKrIBuEB9qJZno"
    10}
    Was this helpful?
    =*=*=*=

    /transfer/ledger/withdraw

    Withdraw funds from a Plaid Ledger balance

    Use the /transfer/ledger/withdraw endpoint to withdraw funds from a Plaid Ledger balance.

    transfer/ledger/withdraw

    Request fields

    client_id
    stringstring
    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
    stringstring
    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.
    originator_client_id
    stringstring
    Client ID of the customer that owns the Ledger balance. This is so Plaid knows which of your customers to payout or collect funds. Only applicable for Platform customers. Do not include if you’re paying out to yourself.
    funding_account_id
    stringstring
    Specify which funding account to use. Customers can find a list of funding_account_ids in the Accounts page of the Plaid Dashboard, under the "Account ID" column. If this field is left blank, the funding account associated with the specified Ledger will be used. If an originator_client_id is specified, the funding_account_id must belong to the specified originator.
    ledger_id
    stringstring
    Specify which ledger balance to withdraw from. Customers can find a list of ledger_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance.
    amount
    requiredstringrequired, string
    A positive amount of how much will be withdrawn from the ledger balance (decimal string with two digits of precision e.g. "5.50").
    description
    stringstring
    The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement.

    Max length: 10
    idempotency_key
    requiredstringrequired, string
    A unique key provided by the client, per unique ledger withdraw. Maximum of 50 characters.
    The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger withdraw fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single withdraw is created.


    Max length: 50
    network
    requiredstringrequired, string
    The network or rails used for the transfer.
    For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time.
    For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail.
    For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create.
    Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 4:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail.


    Possible values: ach, same-day-ach, rtp, wire
    Select Language
    1const request: TransferLedgerWithdrawRequest = {
    2 amount: '12.34',
    3 network: 'ach',
    4 idempotency_key: 'test_deposit_abc',
    5 description: 'withdraw',
    6};
    7try {
    8 const response = await client.transferLedgerWithdraw(request);
    9 const sweep = response.data.sweep;
    10} catch (error) {
    11 // handle error
    12}
    transfer/ledger/withdraw

    Response fields and example

    sweep
    objectobject
    Describes a sweep of funds to / from the sweep account.
    A sweep is associated with many sweep events (events of type swept or return_swept) which can be retrieved by invoking the /transfer/event/list endpoint with the corresponding sweep_id.
    swept events occur when the transfer amount is credited or debited from your sweep account, depending on the type of the transfer. return_swept events occur when a transfer is returned and Plaid undoes the credit or debit.
    The total sum of the swept and return_swept events is equal to the amount of the sweep Plaid creates and matches the amount of the entry on your sweep account ledger.
    id
    stringstring
    Identifier of the sweep.
    funding_account_id
    stringstring
    The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited.
    ledger_id
    nullablestringnullable, string
    Plaid’s unique identifier for a Plaid Ledger Balance.
    created
    stringstring
    The datetime when the sweep occurred, in RFC 3339 format.

    Format: date-time
    amount
    stringstring
    Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00")
    If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced.
    iso_currency_code
    stringstring
    The currency of the sweep, e.g. "USD".
    settled
    nullablestringnullable, string
    The date when the sweep settled, in the YYYY-MM-DD format.

    Format: date
    expected_funds_available_date
    nullablestringnullable, string
    The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD.

    Format: date
    status
    nullablestringnullable, string
    The status of a sweep transfer
    "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep.


    Possible values: pending, posted, settled, funds_available, returned, failed, null
    trigger
    nullablestringnullable, string
    The trigger of the sweep
    "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance_threshold" - The sweep is created by balance threshold setting "automatic_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance.


    Possible values: manual, incoming, balance_threshold, automatic_aggregate
    description
    stringstring
    The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement.
    network_trace_id
    nullablestringnullable, string
    The trace identifier for the transfer based on its network. This will only be set after the transfer has posted.
    For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number.
    failure_reason
    nullableobjectnullable, object
    The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise.
    failure_code
    nullablestringnullable, string
    The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes.
    description
    nullablestringnullable, string
    A human-readable description of the reason for the failure or reversal.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "sweep": {
    3 "id": "8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee",
    4 "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460",
    5 "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a",
    6 "created": "2020-08-06T17:27:15Z",
    7 "amount": "12.34",
    8 "iso_currency_code": "USD",
    9 "settled": null,
    10 "status": "pending",
    11 "trigger": "manual",
    12 "description": "withdraw",
    13 "network_trace_id": null
    14 },
    15 "request_id": "saKrIBuEB9qJZno"
    16}
    Was this helpful?
    Developer community
    GitHub
    GitHub
    Stack Overflow
    Stack Overflow
    YouTube
    YouTube
    Discord
    Discord