> For the complete documentation index, see [llms.txt](https://docs.zumrails.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zumrails.com/payments/bank-payments/ach.md).

# ACH

Introduction to Automated Clearing House (ACH) transactions. Available only to US customers.

## Overview

The ACH (Automated Clearing House) network facilitates transfer of funds between banks in the US. Transactions can take between 24-48 hours for transactions to complete.

Zūm Rails offers support for **Standard ACH** and **Same-day ACH**. Using either payment method, customers can send and receive funds.

## Benefits of using ACH

* **Low-Cost**: ACH payments usually have lower fees than wire transfers or credit cards.
* **Speed**: ACH payments are processed quickly, often within 1-2 business days. Same-day ACH payments are settle on the originated date if submitted before deadline (FedACH cut-off \~4:45 p.m. ET).
* **Security**: Highly secure with encryption and reduced risk of fraud compared to checks or cash.
* **Convenience**: Easy to set up for recurring payments like payroll, bills, and subscriptions.
* **Wide Usage**: Commonly accepted by businesses and financial institutions, both domestic and international.

## **Transaction Types**

Using ACH, you can fund or withdraw Zūm Wallet, or send or receive funds from your users. Zum Rails supports the following transaction types for ACH:

* FundZumWallet
* WithdrawZumWallet
* AccountsPayable
* AccountsReceivable

{% hint style="info" %}
Each transaction type is subject to its own set of limits, as outlined in the **Transaction Limits** section.
{% endhint %}

## Transaction Events

Zūm Rails offers comprehensive transaction event tracking, detailing each step in a transaction's lifecycle. These events are also available as webhooks for real-time updates.

{% tabs %}
{% tab title="Standard ACH" %}

<table><thead><tr><th width="313">Event</th><th>Description</th></tr></thead><tbody><tr><td>AchTransactionAccepted</td><td>When transaction is accepted</td></tr><tr><td>AchFailedTransactionExpired</td><td>When transaction has expired</td></tr><tr><td>AchFailedReturnedOrClosedAccount</td><td>When transaction is returned due to a closed account or any other return reason</td></tr><tr><td>AchFailedRejectedWithReason</td><td>When transaction is rejected for a reason</td></tr><tr><td>AchFailedGeneralError</td><td>When transaction has failed due to general error</td></tr><tr><td>AchFailedHighRiskOrPotentialFraud</td><td>When transaction is rejected as high-risk or potential fraud</td></tr><tr><td>AchFailedDueToMerchantSetup</td><td>When transaction failed because of invalid or inactive merchant id</td></tr><tr><td>AchFailedInvalidValueForField</td><td>When transaction failed due to invalid value for field</td></tr><tr><td>AchFailedAuthorizationRevoked</td><td>When transaction failed because authorization was revoked</td></tr><tr><td>AchFailedDuplicateTransaction</td><td>When transaction failed due to duplicated transaction</td></tr><tr><td>AchFailedDueToProcessorTimeout</td><td>When transaction is not successfully processed due to processor timeout</td></tr><tr><td>AchFailedTransactionNotAllowed</td><td>When transaction is not allowed by provider</td></tr><tr><td>AchBankAccountVerificationFailed</td><td>When transaction fails because the bank account verification failed</td></tr><tr><td>AchDebitResponseReceived</td><td>When response is received for a debit transaction</td></tr><tr><td>AchCreditResponseReceived</td><td>When response is received for a credit transaction</td></tr><tr><td>AchTransactionReturned</td><td>When transaction returned from bank and will be resubmitted in the next banking cycle. Note that this does not mean the transaction failed.</td></tr><tr><td>AchTransactionResubmitted</td><td>When transaction is resubmitted for processing again</td></tr><tr><td>AchCancellationFailed</td><td>When request to cancel transaction failed</td></tr><tr><td>AchCancellationFailedDueToMerchantSetup</td><td>When request to cancel transaction failed due to merchant setup</td></tr><tr><td>AchCancellationFailedRefundGreaterThanTransactionAmount</td><td>When request to cancel transaction failed as refund amount is bigger than transaction amount</td></tr><tr><td>AchCancellationFailedTransactionAlreadyCancelled</td><td>When request to cancel transaction failed because transaction is already cancelled</td></tr><tr><td>AchFailedDueToNegativeData</td><td>When transaction failed due to negative user data</td></tr><tr><td>AchFailedIneligibleBankAccount</td><td>When transaction failed because bank account is not on ACH network</td></tr><tr><td>AchFailedPaymentDeclinedByUser</td><td>When transaction is declined by user</td></tr><tr><td>AchBankAccountVerificationPending</td><td>When the bank account's verification is still pending</td></tr><tr><td>AchWaitingFundSettlement</td><td>When transaction is waiting for funds to settle</td></tr><tr><td>AchSettledIntoWallet</td><td>When funds have settled into the Zūm Wallet</td></tr><tr><td>AchNotificationOfChange</td><td>Recorded in the transaction's history when a notification of change (NOC) is received; see the NACHA Notification of Change section below for the webhook this actually triggers</td></tr></tbody></table>
{% endtab %}

{% tab title="Same-day ACH" %}

<table><thead><tr><th width="353">Event</th><th>Description</th></tr></thead><tbody><tr><td>SameDayAchFailedGeneralError</td><td>When transaction has failed due to general error</td></tr><tr><td>SameDayAchFailedHighRiskOrPotentialFraud</td><td>When transaction is rejected as high-risk or potential fraud</td></tr><tr><td>SameDayAchFailedDueToNegativeData</td><td>When transaction failed due to negative user data</td></tr><tr><td>SameDayAchFailedDueToMerchantSetup</td><td>When request to cancel transaction failed due to merchant setup</td></tr><tr><td>SameDayAchFailedDueToProcessorTimeout</td><td>When transaction is not successfully processed due to processor timeout</td></tr><tr><td>SameDayAchFailedTransactionExpired</td><td>When transaction has expired</td></tr><tr><td>SameDayAchFailedPaymentDeclinedByUser</td><td>When transaction is declined by user</td></tr><tr><td>SameDayAchFailedTransactionNotAllowed</td><td>When transaction is not allowed by provider</td></tr><tr><td>SameDayAchFailedInvalidValueForField</td><td>When transaction failed due to invalid value for field</td></tr><tr><td>SameDayAchFailedAuthorizationRevoked</td><td>When transaction failed because authorization was revoked</td></tr><tr><td>SameDayAchFailedDuplicateTransaction</td><td>When transaction failed due to duplicated transaction</td></tr><tr><td>SameDayAchBankAccountVerificationFailed</td><td>When transaction failed because the bank account verification failed</td></tr><tr><td>SameDayAchFailedRejectedWithReason</td><td>When transaction is rejected for a reason</td></tr><tr><td>SameDayAchFailedReturnedOrClosedAccount</td><td>When transaction is returned due to a closed account or any other return reaso</td></tr><tr><td>SameDayAchTransactionAccepted</td><td>When transaction is accepted</td></tr><tr><td>SameDayAchTransactionResubmitted</td><td>When transaction is resubmitted for processing again</td></tr><tr><td>SameDayAchTransactionReturned</td><td>When transaction returned from bank and will be resubmitted in the next banking cycle. Note that this does not mean the transaction failed.</td></tr><tr><td>SameDayAchCancellationFailed</td><td>When request to cancel transaction failed</td></tr><tr><td>SameDayAchCancellationFailedDueToMerchantSetup</td><td>When request to cancel transaction failed due to merchant setup</td></tr><tr><td>SameDayAchCancellationFailedRefundGreaterThanTransactionAmount</td><td>When request to cancel transaction failed as refund amount is bigger than transaction amount</td></tr><tr><td>SameDayAchCancellationFailedTransactionAlreadyCancelled</td><td>When request to cancel transaction failed because transaction is already cancelled</td></tr><tr><td>SameDayAchDebitResponseReceived</td><td>When response is received for a debit transaction</td></tr><tr><td>SameDayAchCreditResponseReceived</td><td>When response is received for a credit transaction</td></tr><tr><td>SameDayAchFailedIneligibleBankAccount</td><td>When transaction failed because bank account is not on ACH network</td></tr><tr><td>SameDayAchBankAccountVerificationPending</td><td>When the bank account's verification is still pending</td></tr><tr><td>SameDayAchWaitingFundSettlement</td><td>When transaction is waiting for funds to settle</td></tr><tr><td>SameDayAchSettledIntoWallet</td><td>When funds have settled into the Zūm Wallet</td></tr><tr><td>SameDayAchNotificationOfChange</td><td>Recorded in the transaction's history when a notification of change (NOC) is received; see the NACHA Notification of Change section below for the webhook this actually triggers</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

{% hint style="success" %}
For detailed instructions on initiating ACH transactions, please consult the API Reference.
{% endhint %}

## NACHA Return Codes

When a bank rejects or returns an ACH entry, it reports back a standard NACHA return code (e.g. `R01`). Zūm Rails surfaces the underlying return code inside the transaction's event description, and classifies it into one of the `TransactionEvent` values listed above so you can branch on it programmatically. A handful of return codes get their own dedicated event; all other codes are reported as a generic rejection event, with the specific code and its description still included in the transaction's event description text.

{% hint style="info" %}
This table applies to both **Standard ACH** and **Same-day ACH**. The resulting event name differs only by its `Ach`/`SameDayAch` prefix (e.g. `R02` resolves to `AchFailedReturnedOrClosedAccount` on Standard ACH and `SameDayAchFailedReturnedOrClosedAccount` on Same-day ACH).
{% endhint %}

<details>

<summary>Full NACHA return code table (click to expand)</summary>

| Code | Description                                                                  | Resulting Event (Standard ACH)   |
| ---- | ---------------------------------------------------------------------------- | -------------------------------- |
| R01  | Insufficient Funds                                                           | AchFailedRejectedWithReason      |
| R02  | Account closed                                                               | AchFailedReturnedOrClosedAccount |
| R03  | No account or unable to locate account                                       | AchFailedRejectedWithReason      |
| R04  | Invalid account number                                                       | AchFailedRejectedWithReason      |
| R05  | Unauthorized debit to consumer account                                       | AchFailedRejectedWithReason      |
| R06  | Returned per ODFI's request                                                  | AchFailedRejectedWithReason      |
| R07  | Authorization revoked by customer                                            | AchFailedRejectedWithReason      |
| R08  | Payment stopped or stop payment on item                                      | AchFailedRejectedWithReason      |
| R09  | Uncollected funds                                                            | AchFailedRejectedWithReason      |
| R10  | Customer advises not authorized                                              | AchFailedRejectedWithReason      |
| R11  | Customer advises entry not in accordance with the terms of the authorization | AchFailedRejectedWithReason      |
| R12  | Branch sold to another DFI                                                   | AchFailedRejectedWithReason      |
| R13  | Invalid ACH routing number                                                   | AchFailedRejectedWithReason      |
| R14  | Representative payee deceased or unable to continue in that capacity         | AchFailedRejectedWithReason      |
| R15  | Beneficiary of account holder deceased                                       | AchFailedRejectedWithReason      |
| R16  | Account frozen                                                               | AchFailedRejectedWithReason      |
| R17  | File record edit criteria                                                    | AchFailedRejectedWithReason      |
| R18  | Improper effective entry date                                                | AchFailedRejectedWithReason      |
| R19  | Amount field error                                                           | AchFailedInvalidValueForField    |
| R20  | Non-transaction account                                                      | AchFailedRejectedWithReason      |
| R21  | Invalid company identification                                               | AchFailedInvalidValueForField    |
| R22  | Invalid individual ID number                                                 | AchFailedInvalidValueForField    |
| R23  | Credit entry refused by receiver                                             | AchFailedRejectedWithReason      |
| R24  | Duplicate entry                                                              | AchFailedDuplicateTransaction    |
| R25  | Addenda error                                                                | AchFailedRejectedWithReason      |
| R26  | Mandatory field error                                                        | AchFailedInvalidValueForField    |
| R27  | Trace number error                                                           | AchFailedRejectedWithReason      |
| R28  | Routing number or check digit error                                          | AchFailedInvalidValueForField    |
| R29  | Corporate customer advises not authorized                                    | AchFailedRejectedWithReason      |
| R30  | RDFI not participant in check truncation program                             | AchFailedRejectedWithReason      |
| R31  | Permissible return entry                                                     | AchFailedRejectedWithReason      |
| R32  | RDFI nonsettlement                                                           | AchFailedRejectedWithReason      |
| R33  | Return of XCK entry                                                          | AchFailedRejectedWithReason      |
| R34  | Limited participation DFI                                                    | AchFailedRejectedWithReason      |
| R35  | Return of improper debit entry                                               | AchFailedRejectedWithReason      |
| R36  | Return of improper credit entry                                              | AchFailedRejectedWithReason      |
| R37  | Source document presented for payment                                        | AchFailedRejectedWithReason      |
| R38  | Stop payment on source document                                              | AchFailedRejectedWithReason      |
| R39  | Improper source document                                                     | AchFailedRejectedWithReason      |
| R40  | Return of ENR                                                                | AchFailedRejectedWithReason      |
| R41  | Invalid transaction code                                                     | AchFailedInvalidValueForField    |
| R42  | Routing number / check digit error                                           | AchFailedRejectedWithReason      |
| R43  | Invalid DFI account number                                                   | AchFailedInvalidValueForField    |
| R44  | Invalid individual ID number                                                 | AchFailedInvalidValueForField    |
| R45  | Invalid individual / company name                                            | AchFailedInvalidValueForField    |
| R46  | Invalid representative payee indicator                                       | AchFailedInvalidValueForField    |
| R47  | Duplicate enrollment                                                         | AchFailedDuplicateTransaction    |
| R50  | State law affecting RCK acceptance                                           | AchFailedRejectedWithReason      |
| R51  | Ineligible / improper item related to RCK                                    | AchFailedRejectedWithReason      |
| R52  | Stop payment on item related to RCK                                          | AchFailedRejectedWithReason      |
| R53  | Item and RCK presented for payment                                           | AchFailedRejectedWithReason      |
| R61  | Misrouted return                                                             | AchFailedRejectedWithReason      |
| R62  | Return of erroneous or reversing debit                                       | AchFailedRejectedWithReason      |
| R63  | Incorrect dollar amount                                                      | AchFailedInvalidValueForField    |
| R64  | Incorrect individual identification                                          | AchFailedInvalidValueForField    |
| R65  | Incorrect transaction code                                                   | AchFailedInvalidValueForField    |
| R66  | Incorrect company identification                                             | AchFailedInvalidValueForField    |
| R67  | Duplicate return                                                             | AchFailedRejectedWithReason      |
| R68  | Untimely return                                                              | AchFailedRejectedWithReason      |
| R69  | Multiple errors                                                              | AchFailedRejectedWithReason      |
| R70  | Permissible return entry not accepted                                        | AchFailedRejectedWithReason      |
| R71  | Misrouted dishonored return                                                  | AchFailedRejectedWithReason      |
| R72  | Untimely dishonored return                                                   | AchFailedRejectedWithReason      |
| R73  | Timely original return                                                       | AchFailedRejectedWithReason      |
| R74  | Corrected return                                                             | AchFailedRejectedWithReason      |
| R75  | Return not duplicate                                                         | AchFailedRejectedWithReason      |
| R76  | No errors found                                                              | AchFailedGeneralError            |
| R77  | Non-acceptance of R62                                                        | AchFailedRejectedWithReason      |
| R80  | IAT coding error                                                             | AchFailedRejectedWithReason      |
| R81  | Non-participant in IAT program                                               | AchFailedRejectedWithReason      |
| R82  | Invalid foreign RDFI identification                                          | AchFailedRejectedWithReason      |
| R83  | Foreign RDFI unable to settle                                                | AchFailedRejectedWithReason      |
| R84  | Not processed by gateway                                                     | AchFailedRejectedWithReason      |
| R85  | Incorrectly coded outbound international payment                             | AchFailedRejectedWithReason      |

</details>

{% hint style="warning" %}
Return codes `R02, R03, R04, R07, R08, R10, R14, R15, R16, R20, R29` additionally add the receiving bank account to a banned list for that customer. Any future ACH or Same-Day ACH transaction attempted against the same bank account is immediately failed at creation time with the `AchFailedTransactionNotAllowed` event — it never reaches the bank. If you need a bank account removed from the banned list, please contact the Zūm Rails support team.
{% endhint %}

## NACHA Notification of Change (NOC) Codes

A Notification of Change (NOC) means the transaction was **not** rejected — the receiving bank processed it but flagged that some piece of account or routing information needs correcting before the next submission.

{% hint style="warning" %}
A NOC is **not** delivered as a transaction webhook. Zūm Rails records an `AchNotificationOfChange` (`SameDayAchNotificationOfChange` on Same-day ACH) entry in the transaction's internal history, but the webhook actually sent to your endpoint is on the **payment instrument** (bank account) — `Type: PaymentInstrument`, `Event: NotificationOfChange` — carrying the change code and correction details. A notification email is also sent to the customer if configured.
{% endhint %}

```json
{
  "Type": "PaymentInstrument",
  "Event": "NotificationOfChange",
  "Data": {
    "Id": "5ab2c4ba-...",
    "UserId": "974411c2-...",
    "PaymentMethodType": "BankAccount",
    "Verified": true,
    "VerifyAccountStatus": "Verified",
    "NachaChangeCode": "C01",
    "NocCorrectionInfo": "Incorrect DFI Account Number"
  }
}
```

| Code | Description                                                                            |
| ---- | -------------------------------------------------------------------------------------- |
| C01  | Incorrect DFI Account Number                                                           |
| C02  | Incorrect Routing Number                                                               |
| C03  | Incorrect Routing Number and Incorrect DFI Number                                      |
| C04  | Incorrect Individual Name/Receiving Company Name                                       |
| C05  | Incorrect Transaction Code                                                             |
| C06  | Incorrect DFI Account Number and Incorrect Transaction Code                            |
| C07  | Incorrect Routing Number, Incorrect DFI Account Number, and Incorrect Transaction Code |
| C08  | Incorrect Receiving DFI Identification (IAT only)                                      |
| C09  | Incorrect Identification Number                                                        |
| C13  | Addenda Format Error                                                                   |
| C14  | Incorrect SEC Code for Outbound International Payment                                  |

## Testing

### Users & Bank Accounts

In sandbox, to add a bank account for a User, use any valid routing-number. The account-number can be any 5-17 digit number.

Some valid routing numbers that will work on the sandbox environment are:

* 122000661
* 026009593
* 063100277

To simulate verification statuses (for bank accounts) in sandbox, use the following routing and account numbers.

| Routing Number | Account Number | Verification Status            |
| -------------- | -------------- | ------------------------------ |
| 122105278      | 999999999      | :red\_circle: Failed / Invalid |
| 122000661      | 0000000016     | :orange\_circle: Unknown       |
| 122105278      | 0000000049     | :green\_circle: Verified       |

### Transactions

To simulate an ACH failure, include an event name from the list above in the COMMENT field when creating a transaction. If you don't mention an event in the COMMENT, the transaction will change its status to "Completed" in the sandbox environment.

{% tabs %}
{% tab title="Simulating Success" %}

```json
{
  "ZumRailsType": "AccountPayable",
  "TransactionMethod": "Ach",
  "Amount": 123.45,
  "Memo": "This transaction will succeed",
  "Comment": "This transaction will succeed because there's no keyword",
  "UserId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% endtab %}

{% tab title="Simulating Failure" %}

```json
{
  "ZumRailsType": "AccountPayable",
  "TransactionMethod": "Ach",
  "Amount": 123.45,
  "Memo": "This transaction will fail with event AchFailedRejectedWithReason",
  "Comment": "AchFailedGeneralError",   // Include event name in comment
  "UserId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
To simulate a late failure, mention any of the following events in the COMMENT field:

* `AchFailedRejectedWithReason`
* `AchFailedReturnedOrClosedAccount`
* `SameDayAchFailedRejectedWithReason`
* `SameDayAchFailedReturnedOrClosedAccount`

This only works if the transaction would otherwise be allowed to proceed — if the funding source's bank account is not verified (see the verification status table below) or is on the banned-account list, the transaction fails for that reason first and the COMMENT value is never read. Use a bank account with `Verified` status (e.g. `122105278` / `0000000049` from the table below) that hasn't previously been banned by an earlier simulated return.
{% endhint %}

#### Simulating a Specific NACHA Return Code

Instead of simulating a generic event, you can simulate a specific NACHA return code so you can test your handling of each code's description and resulting event from the table above. Set the transaction's `Comment` field to:

```
AchSimulate:Return:<CODE>
```

For example, `AchSimulate:Return:R01` simulates an `R01 - Insufficient Funds` return, which resolves to the `AchFailedRejectedWithReason` event with the code and description included in the transaction's event history.

```json
{
  "ZumRailsType": "AccountPayable",
  "TransactionMethod": "Ach",
  "Amount": 123.45,
  "Memo": "This transaction will be returned with code R01",
  "Comment": "AchSimulate:Return:R01",
  "UserId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% hint style="info" %}

* `<CODE>` must be one of the codes listed in the table above (case-insensitive); an unrecognized code is rejected when the transaction is created.
* This directive is only available in the sandbox environment, for `TransactionMethod` of `Ach` or `SameDayAch`.
  {% endhint %}

#### Simulating a Notification of Change (NOC)

To simulate a Notification of Change instead of a return, set the transaction's `Comment` field to:

```
AchSimulate:NOC_<CODE>
```

Note the underscore (`NOC_`), not a colon, before the code. For example, `AchSimulate:NOC_C01` simulates a `C01 - Incorrect DFI Account Number` notification of change. This records an `AchNotificationOfChange` (`SameDayAchNotificationOfChange` on Same-Day ACH) entry in the transaction's history, and delivers a **PaymentInstrument** webhook (`Event: NotificationOfChange`) with the change code and correction details, as shown above.

```json
{
  "ZumRailsType": "AccountPayable",
  "TransactionMethod": "Ach",
  "Amount": 123.45,
  "Memo": "This transaction will receive a notification of change with code C01",
  "Comment": "AchSimulate:NOC_C01",
  "UserId": "1d431e8b-...85452adb4eee",
  "WalletId": "8ebd932b-...b92633e14297"
}
```

{% hint style="info" %}

* `<CODE>` must be one of the codes listed in the Notification of Change table above (case-insensitive); an unrecognized code is rejected when the transaction is created.
* This directive is only available in the sandbox environment, for `TransactionMethod` of `Ach` or `SameDayAch`.
* Unlike a return, a NOC does not fail the transaction — it keeps processing normally alongside the recorded notification.
* Watch for the webhook on the **payment instrument**, not the transaction — the `AchNotificationOfChange`/`SameDayAchNotificationOfChange` event name only appears in the transaction's history, it does not trigger its own transaction webhook.
  {% endhint %}

## Additional features

* **Account Verification** - Zūm Rails provides Account Verification services, allowing connection to a user's financial institution to retrieve account and routing numbers. This information is useful for tasks such as money transfers and account setup. Zūm Rails ensures account validation according to NACHA WEB debit rules.
* #### Pending verification

  Some bank accounts are verified via a $0.00 prenote sent to the receiving institution rather than an instant check. While this is outstanding, the account's verification status is `Pending`. Verification normally resolves within 3 banking days; if no correction is returned in that window, the account is automatically marked `Verified`.

  Any funded transaction submitted against a `Pending` account will fail fast rather than wait — retry once the status changes.
* **Balance Checks** - Balance Checks allow retrieving the available balance for an end user’s financial accounts. This service provides balance details without retrieving transaction data.
* **Owner identification** - Owner Identification retrieves information about the owner of an account, such as their name, address, and contact information. This information is crucial for verifying the identity of an end user.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.zumrails.com/payments/bank-payments/ach.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
