**Last updated**: 17 April 2026 | [**Change log**](/access/products/apms/changelog/)

# Pay with ACH

Authorize an ACH payment and initiate a settlement request with one call.

Note
Reversal is only possible within the first twenty-four hours after settlement.

## Take a sale

`POST` your request to the `direct:sale` action link.

### Sale example request

`POST` `https://try.access.worldpay.com/payments/alternative/direct/sale`

#### ACH sale request body:


```json
{
    "transactionReference": "unique-transactionReference",
    "merchant": {
        "entity": "default"
    },
    "instruction": {
        "narrative": {
            "line1": "trading name"
        },
        "paymentInstrument": {
            "type": "bankAccountUS",
            "accountType": "checking|savings|corporate|corporateSavings",
            "accountNumber": "01234567890123456",
            "routingNumber": "01234567",
            "checkNumber": "012345678901234",
            "companyName": "for corporate accounts only",
            "billingAddress": {
                "firstName": "John",
                "lastName": "Johnson",
                "address1": "8500 Govenors Hill Drive",
                "address2": "Symmes Township",
                "address3": "",
                "postalCode": "45249",
                "city": "Ohio",
                "state": "OH",
                "countryCode": "US"
            }
        },
        "value": {
            "currency": "USD",
            "amount": 250
        }
    }
}
```

#### Parameter descriptions

| Parameter | Required | Description |
|  --- | --- | --- |
| `transactionReference` | ✅ | The unique transaction reference for this sale. Up to 15 characters, digits only. |
| `merchant.entity` | ✅ | Used to route the sale request in Access Worldpay, created as part of on-boarding. |
| `instruction` | ✅ | The object that contains all the payment information related to the sale request. |
| `instruction.narrative.line1` | ✅ | This field is visible in the customer's bank statement. |
| `instruction.paymentInstrument` | ✅ | An object that contains bank account details. |
| `paymentInstrument.type` | ✅ | The type of payment instrument, must be "bankAccountUS" for ACH. |
| `paymentInstrument.accountType` | ✅ | Possible values: checking, savings, corporate, corporateSavings. |
| `paymentInstrument.accountNumber` | ✅ | Account number of direct debit account. |
| `paymentInstrument.routingNumber` | ✅ | Routing number of direct debit account. |
| `paymentInstrument.checkNumber` | ❌ | Check number of the direct debit account. |
| `paymentInstrument.companyName` | ❌ | Company name if a corporate account. |
| `paymentInstrument.billingAddress` | ❌ | An object containing the billing address information. |
| `paymentInstrument.billingAddress.firstName` | ❌ | An identifier for the `firstName` being used. |
| `paymentInstrument.billingAddress.lastName` | ❌ | An identifier for the `lastName` being used. |
| `paymentInstrument.billingAddress.address1` | ❌ | An identifier for the `address1` being used.  **If included you must send** at least:`address1``city`[`countryCode`](/access/products/reference/supported-countries-currencies#iso-country-codes)`postalCode` |
| `paymentInstrument.billingAddress.address2` | ❌ | An identifier for the `address2` being used. |
| `paymentInstrument.billingAddress.address3` | ❌ | An identifier for the `address3` being used. |
| `paymentInstrument.billingAddress.postalCode` | ✅ | An identifier for the `postalCode` being used. |
| `paymentInstrument.billingAddress.city` | ✅ | An identifier for the `city` being used. |
| `paymentInstrument.billingAddress.state` | ❌ | An identifier for the `state` being used. |
| `paymentInstrument.billingAddress.countryCode` | ✅ | An identifier for the `countryCode` being used. |
| `instruction.value` | ❌ | An object that contains the value of the sale. |
| `instruction.value.currency` | ❌ | An identifier for the `currency` being used. |
| `instruction.value.amount` | ❌ | An identifier for the `amount` being used. |


### Sale response

Best practice
Access Worldpay returns a `WP-CorrelationId` in the headers of service responses. We **highly recommend** you log this. The `WP-CorrelationId` is used by us to examine individual service requests.

#### Successful payment

You receive:

* an HTTP code `201`
* an `"outcome": "sentForSettlement"`
* links to [reverse](/access/products/apms/20230601/paydirect/manage-payment#reversal) or [query](/access/products/card-payments/v6/query-a-payment) your payment


### Refused payment

You receive:

* an HTTP code `201`
* an `"outcome": "refused"`


Authorized

```json
{
    "outcome": "sentForSettlement",
    "_links": {
        "direct:events": {
            "href": "https://try.access.worldpay.com/payments/alternative/direct/events/linkData"
        },
        "direct:reversal": {
            "href": "https://try.access.worldpay.com/payments/alternative/direct/reversals/linkData"
        },
        "curies": [{
            "name": "direct",
            "href": "https://try.access.worldpay.com/rels/payments/alternative/direct/{rels}",
            "templated": true
        }]
    }
}
```

Refused

```json
{
    "outcome": "refused",
    "_links": {
        "direct:events": {
            "href": "https://try.access.worldpay.com/payments/alternative/direct/events/{linkData}"
        },
        "curies": [{
            "name": "direct",
            "href": "https://try.access.worldpay.com/rels/payments/alternative/direct/{rel}",
            "templated": true
        }]
    }
}
```

Note
In case of an error, you can get further information in our [error reference](/access/products/reference/worldpay-error-responses).

**Next steps**

[Manage your payment](/access/products/apms/20230601/paydirect/manage-payment)