> ## Documentation Index
> Fetch the complete documentation index at: https://getlemma.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List outbound ACH transfers

> Retrieve a paginated list of outbound ACH transfers, optionally filtered by account.

Returns outbound ACH transfers, the ones initiated inside Lemma, ordered by most recent first. Results are [paginated](/docs/api-reference/pagination). For ACHs that arrive from outside, see [list inbound ACH transfers](/docs/api-reference/list-inbound-ach-transfers).

## Query parameters

<ParamField query="account_id" type="string">
  Filter ACH transfers to a specific bank account, prefixed with `account_`. You
  can find account IDs using the [List bank
  accounts](/docs/api-reference/list-bank-accounts) endpoint. Omit to list ACH
  transfers across every account you can access.
</ParamField>

<ParamField query="limit" type="integer" default="10">
  The number of ACH transfers to return. Maximum is 100.
</ParamField>

<ParamField query="cursor" type="string">
  Cursor from the previous response. Omit to fetch from the beginning.
</ParamField>

## Response

<ResponseField name="data" type="object[]">
  The list of ACH transfer objects for the requested page.

  <Expandable title="ACH transfer object">
    <ResponseField name="id" type="string">
      Unique identifier for the ACH transfer.
    </ResponseField>

    <ResponseField name="account_id" type="string">
      The Lemma account the transfer moves money from or to.
    </ResponseField>

    <ResponseField name="external_account_id" type="string | null">
      The [external account](/docs/api-reference/saved-recipients) on the other side of
      the transfer.
    </ResponseField>

    <ResponseField name="amount" type="integer">
      The transfer amount in cents. A positive amount indicates a credit transfer
      pushing funds to the receiving account. A negative amount indicates a debit
      transfer pulling funds from the receiving account (an ACH pull).
    </ResponseField>

    <ResponseField name="status" type="string">
      Current status of the ACH transfer.

      <Expandable title="possible values">
        * `pending` — in flight.

        * `submitted` — sent to the ACH network. When the Federal Reserve settles the transfer, the status stays `submitted` and `settled_at` is populated.

        * `canceled` — we canceled the transfer after holding it for manual review.

        * `rejected` — the ACH network rejected the transfer.

        * `returned` — the transfer was returned.
      </Expandable>
    </ResponseField>

    <ResponseField name="statement_descriptor" type="string">
      The statement descriptor shown to the counterparty.
    </ResponseField>

    <ResponseField name="transaction_id" type="string | null">
      The settled transaction, once the transfer posts.
    </ResponseField>

    <ResponseField name="settled_at" type="string | null">
      [ISO 8601](/docs/api-reference/timestamps) timestamp of when the transfer settled.
    </ResponseField>

    <ResponseField name="submission" type="object | null">
      Submission details, once the transfer reaches the ACH network.

      <Expandable title="Submission object">
        <ResponseField name="submitted_at" type="string">
          [ISO 8601](/docs/api-reference/timestamps) timestamp of when the transfer was
          submitted to the ACH network.
        </ResponseField>

        <ResponseField name="expected_funds_settlement_at" type="string | null">
          [ISO 8601](/docs/api-reference/timestamps) timestamp of when the funds are
          expected to settle.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="return" type="object | null">
      Return details, if the transfer was returned.

      <Expandable title="Return object">
        <ResponseField name="raw_return_reason_code" type="string">
          The three-character ACH return reason code.

          <Expandable title="ACH return reason codes">
            | Code | Description |
            | - | - |
            | `R01` | Insufficient Funds |
            | `R02` | Account Closed |
            | `R03` | No Account on File |
            | `R04` | Invalid Account Number Structure |
            | `R05` | Unauthorized Debit to Consumer Account Using Corporate SEC Code |
            | `R06` | Returned per ODFI's Request |
            | `R07` | Authorization Revoked by Customer |
            | `R08` | Payment Stopped |
            | `R09` | Uncollected Funds |
            | `R10` | Customer Advises Unauthorized, Improper, Ineligible, or Incomplete |
            | `R11` | Customer Advises Entry Not in Accordance with Terms of Authorization |
            | `R12` | Account Sold to Another DFI |
            | `R13` | Invalid ACH Routing Number |
            | `R14` | Representative Payee Deceased or Unable to Continue in That Capacity |
            | `R15` | Beneficiary or Account Holder Deceased |
            | `R16` | Account Frozen or Entry Returned per OFAC Instruction |
            | `R17` | File Record Edit Criteria |
            | `R18` | Improper Effective Entry Date |
            | `R19` | Amount Field Error |
            | `R20` | Non-Transaction Account |
            | `R21` | Invalid Company Identification |
            | `R22` | Invalid Individual Identification Number |
            | `R23` | Credit Entry Refused by Receiver |
            | `R24` | Duplicate Entry |
            | `R25` | Addenda Error |
            | `R26` | Mandatory Field Error |
            | `R27` | Trace Number Error |
            | `R28` | Routing Number Check Digit Error |
            | `R29` | Corporate Customer Advises Not Authorized |
            | `R30` | RDFI Not Participant in Check Truncation Program |
            | `R31` | Permissible Return Entry |
            | `R32` | RDFI Non-Settlement |
            | `R33` | Return of XCK Entry |
            | `R34` | Limited Participation DFI |
            | `R35` | Return of Improper Debit Entry |
            | `R36` | Return of Improper Credit Entry |
            | `R37` | Source Document Presented for Payment |
            | `R38` | Stop Payment on Source Document |
            | `R39` | Improper Source Document or Source Document Presented |
            | `R40` | Return of ENR Entry |
            | `R41` | Invalid Transaction Code |
            | `R42` | Routing Number / Account Number Mismatch |
            | `R43` | Invalid DFI Account Number |
            | `R44` | Invalid Individual Identifier |
            | `R45` | Invalid Individual Name |
            | `R46` | Invalid Representative Payee Indicator |
            | `R47` | Duplicate Enrollment |
            | `R50` | State Law Affecting RCK Acceptance |
            | `R51` | Item is Ineligible, Notice Not Provided |
            | `R52` | Stop Payment on Item |
            | `R53` | Item and ACH Entry Presented for Payment |
            | `R61` | Misrouted Return |
            | `R62` | Incorrect Trace Number |
            | `R63` | Incorrect Dollar Amount |
            | `R64` | Incorrect Individual Identification |
            | `R65` | Incorrect Transaction Code |
            | `R66` | Incorrect Company Identification |
            | `R67` | Duplicate Return |
            | `R68` | Untimely Return |
            | `R69` | Multiple Errors |
            | `R70` | Permissible Return Entry Not Accepted / Notice Not Provided |
            | `R71` | Misrouted Dishonored Return |
            | `R72` | Untimely Dishonored Return |
            | `R73` | Timely Original Return |
            | `R74` | Corrected Return |
            | `R75` | Return Not a Duplicate |
            | `R76` | No Errors Found |
            | `R77` | Non-Acceptance of R62 Dishonored Return |
            | `R78` | Non-Acceptance of R68 Dishonored Return |
            | `R79` | Incorrect Data in Return Entry |
            | `R80` | IAT Entry |
            | `R81` | Non-Participant in IAT Program |
            | `R82` | Invalid Foreign Receiving DFI Identification |
            | `R83` | Foreign Receiving DFI Unable to Settle |
            | `R84` | Entry Not Processed by Gateway |
            | `R85` | Incorrectly Coded Outbound International Payment |
          </Expandable>
        </ResponseField>

        <ResponseField name="return_transaction_id" type="string | null">
          The transaction created when the transfer was returned.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_next" type="boolean">
  Whether more ACH transfers exist after this page.
</ResponseField>

<ResponseField name="cursor" type="string | null">
  Pass this value as `cursor` on the next request to fetch the following page.
  `null` when this is the last page.
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "id": "ach_transfer_Lk7nQx4mVp9bRt3d",
        "account_id": "account_Rv4nBt8xKw2pMh6s",
        "external_account_id": "external_account_Bx5nTm8hKw3pVd7c",
        "amount": 150000,
        "status": "submitted",
        "statement_descriptor": "Acme payroll",
        "transaction_id": "transaction_Fh3mPq7xRv2nKt8d",
        "settled_at": "2026-03-17T14:30:00Z",
        "submission": {
          "submitted_at": "2026-03-15T14:30:00Z",
          "expected_funds_settlement_at": "2026-03-17T14:30:00Z"
        },
        "return": null
      },
      {
        "id": "ach_transfer_Qd8mKv2pRt5nBh9c",
        "account_id": "account_Rv4nBt8xKw2pMh6s",
        "external_account_id": "external_account_Tm6bXn9hRw3pFk7c",
        "amount": 120000,
        "status": "returned",
        "statement_descriptor": "Lab services",
        "transaction_id": "transaction_Gt4nRs8yWq3pLm6d",
        "settled_at": "2026-03-11T14:30:00Z",
        "submission": {
          "submitted_at": "2026-03-09T14:30:00Z",
          "expected_funds_settlement_at": "2026-03-11T14:30:00Z"
        },
        "return": {
          "raw_return_reason_code": "R02",
          "return_transaction_id": "transaction_Wm9nVx4tRp6bKd2c"
        }
      }
    ],
    "has_next": false,
    "cursor": null
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.