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

# Get ACH transfer

> Retrieve a single ACH transfer by its ID.

Returns a single ACH transfer object.

## Path parameters

<ParamField path="ach_transfer_id" type="string" required>
  The unique identifier of the ACH transfer to retrieve.
</ParamField>

## Response

<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](/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](/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](/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](/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 raw ACH return reason code.
    </ResponseField>

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

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "ach_transfer_Lk7nQx4mVp9bRt3d",
    "account_id": "account_Rv4nBt8xKw2pMh6s",
    "external_account_id": "external_account_Bx5nTm8hKw3pVd7c",
    "amount": -150000,
    "status": "submitted",
    "statement_descriptor": "Acme payroll",
    "transaction_id": null,
    "settled_at": null,
    "submission": {
      "submitted_at": "2026-03-15T14:30:00Z",
      "expected_funds_settlement_at": "2026-03-17T14:30:00Z"
    },
    "return": null
  }
  ```

  ```json 404 theme={null}
  {
    "statusCode": 404,
    "error": "Not Found",
    "message": "ACH transfer not found"
  }
  ```
</ResponseExample>
