> ## 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.

# Move money externally

> Send money to a saved external account.

Creates a transfer from a Lemma account to a [saved recipient](/api-reference/saved-recipients) — an external bank account registered in Lemma. External transfers are sent via ACH and typically settle within 1-2 business days.

<Info>
  Transfers over \$100,000 are held for manual review by the Lemma team as a
  security measure to protect your accounts in the event of a compromised API
  key. Need higher limits? [Contact us](mailto:contact@getlemma.com).
</Info>

## Headers

<ParamField header="Idempotency-Key" type="string" required>
  A key that lets you safely retry the request without sending the same ACH
  transfer more than once. See [Idempotency](/api-reference/idempotency).
</ParamField>

## Request body

<ParamField body="source_account_id" type="string" required>
  The ID of the Lemma account to send money from.
</ParamField>

<ParamField body="destination_account_id" type="string" required>
  The ID of a [saved recipient](/api-reference/saved-recipients). You cannot
  send money to an arbitrary bank account — it must be a pre-registered
  recipient belonging to your provider.
</ParamField>

<ParamField body="amount" type="integer" required>
  The amount to transfer in cents. Must be greater than zero.
</ParamField>

<ParamField body="description" type="string">
  A description for the transfer. Appears on the sender's transaction history.
</ParamField>

## Response

Returns the created 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](/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
  }
  ```
</ResponseExample>
