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

# ACH lifecycle

> Every ACH transfer status and what moves it.

An ACH transfer starts in one of five non-final states:

* `pending_destination` while an information request is unanswered
* `pending_approval` while a required approver has not acted
* `in_review` during Slash review
* `scheduled` or `pending` before network submission

Cancel with `POST /v2/transfers/ach/{transferId}/cancel` while the transfer is
still pre-submission, including destination, approval, review, and scheduling
holds. If network submission wins the race, cancellation returns `409`.
Cancellation is idempotent after it succeeds.

<Frame>
  <img className="block dark:hidden" src="https://mintcdn.com/slash-9da6c7e7/5Zg1KnhscyuyjHbk/images/charts/ach-lifecycle.light.svg?fit=max&auto=format&n=5Zg1KnhscyuyjHbk&q=85&s=d513dfa5d57f424d54ecda31126197c3" alt="ACH transfer lifecycle" width="1432" height="932" data-path="images/charts/ach-lifecycle.light.svg" />

  <img className="hidden dark:block" src="https://mintcdn.com/slash-9da6c7e7/5Zg1KnhscyuyjHbk/images/charts/ach-lifecycle.dark.svg?fit=max&auto=format&n=5Zg1KnhscyuyjHbk&q=85&s=8ca0b39c2d3b2846bc72ce56c8254c98" alt="ACH transfer lifecycle" width="1432" height="932" data-path="images/charts/ach-lifecycle.dark.svg" />
</Frame>

`settled`, `canceled`, and `failed` are final for submission. A receiving bank
can still return a settled transfer later, moving it to `returned` and adding a
return Transaction id to `transactionIds`.

<Frame>
  <img className="block dark:hidden" src="https://mintcdn.com/slash-9da6c7e7/5Zg1KnhscyuyjHbk/images/charts/ach-outcomes.light.svg?fit=max&auto=format&n=5Zg1KnhscyuyjHbk&q=85&s=15596605b1bb9845e530cbbc147d416b" alt="ACH transfer after settlement" width="784" height="228" data-path="images/charts/ach-outcomes.light.svg" />

  <img className="hidden dark:block" src="https://mintcdn.com/slash-9da6c7e7/5Zg1KnhscyuyjHbk/images/charts/ach-outcomes.dark.svg?fit=max&auto=format&n=5Zg1KnhscyuyjHbk&q=85&s=5b39e39dd2e528c4a61327797578edae" alt="ACH transfer after settlement" width="784" height="228" data-path="images/charts/ach-outcomes.dark.svg" />
</Frame>

Poll `GET /v2/transfers/ach/{transferId}` or consume
`aggregated_transaction.create` and `aggregated_transaction.update` webhooks.
The webhook's `entityId` is a Transaction id. Retrieve that Transaction, read
its `transferId`, and then retrieve the current Transfer.
