# 

## Prerequisites

* A valid API key — see [Obtain API credentials](/docs/how-tos/setup/obtain-credentials)
* A processor integration configured for ACH (Vericheck)


## Step 1: Build the request

Set `type` to `payout` and include the recipient's bank account details.

| Field | Required | Description |
|  --- | --- | --- |
| `type` | Yes | `payout` |
| `amount` | Yes | Amount in cents |
| `payment_method.type` | Yes | `bank_account` |
| `payment_method.account_number` | Yes | Recipient's bank account number |
| `payment_method.routing_number` | Yes | 9-digit ABA routing number |
| `payment_method.account_type` | Yes | `checking` or `savings` |
| `payment_method.name` | Yes | Account holder name |
| `payment_method.email` | Yes | Account holder email |


## Step 2: Send the request

curl
```shell
curl -X POST \
  https://api.dev.paradisegateway.net/v1/transactions \
  -H "Content-Type: application/json" \
  -H "APIKEY: YOUR-API-KEY" \
  -d '{
    "type": "bank_account_payout",
    "amount": 35000,
    "payment_method": {
      "type": "bank_account",
      "account_number": "1122334455",
      "routing_number": "071000013",
      "account_type": "savings",
      "name": "Leonard McCoy",
      "email": "bones@example.com"
    },
    "recurring": false,
    "purchase_description": "Medical supplies"
  }'
```

Python
```python
import requests

resp = requests.post(
    "https://api.dev.paradisegateway.net/v1/transactions",
    headers={"Content-Type": "application/json", "APIKEY": "YOUR-API-KEY"},
    json={
        "type": "bank_account_payout",
        "amount": 35000,
        "payment_method": {
            "type": "bank_account",
            "account_number": "1122334455",
            "routing_number": "071000013",
            "account_type": "savings",
            "name": "Leonard McCoy",
            "email": "bones@example.com",
        },
        "recurring": False,
        "purchase_description": "Medical supplies",
    },
)
print(resp.json())
```

JavaScript
```javascript
const resp = await fetch(
  "https://api.dev.paradisegateway.net/v1/transactions",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "APIKEY": "YOUR-API-KEY",
    },
    body: JSON.stringify({
      type: "bank_account_payout",
      amount: 35000,
      payment_method: {
        type: "bank_account",
        account_number: "1122334455",
        routing_number: "071000013",
        account_type: "savings",
        name: "Leonard McCoy",
        email: "bones@example.com",
      },
      recurring: false,
      purchase_description: "Medical supplies",
    }),
  }
);
console.log(await resp.json());
```

C#
```csharp
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("APIKEY", "YOUR-API-KEY");

var payload = new
{
    type = "bank_account_payout", amount = 35000,
    payment_method = new
    {
        type = "bank_account", account_number = "1122334455",
        routing_number = "071000013", account_type = "savings",
        name = "Leonard McCoy", email = "bones@example.com"
    },
    recurring = false, purchase_description = "Medical supplies"
};
var resp = await client.PostAsJsonAsync(
    "https://api.dev.paradisegateway.net/v1/transactions", payload);
Console.WriteLine(await resp.Content.ReadAsStringAsync());
```

Java
```java
HttpClient client = HttpClient.newHttpClient();
String body = """
    {
      "type": "bank_account_payout", "amount": 35000,
      "payment_method": {
        "type": "bank_account", "account_number": "1122334455",
        "routing_number": "071000013", "account_type": "savings",
        "name": "Leonard McCoy", "email": "bones@example.com"
      },
      "recurring": false, "purchase_description": "Medical supplies"
    }
    """;
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.dev.paradisegateway.net/v1/transactions"))
    .header("Content-Type", "application/json")
    .header("APIKEY", "YOUR-API-KEY")
    .POST(HttpRequest.BodyPublishers.ofString(body)).build();
HttpResponse<String> resp = client.send(request,
    HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
```

Go
```go
payload := strings.NewReader(`{
  "type": "bank_account_payout", "amount": 35000,
  "payment_method": {
    "type": "bank_account", "account_number": "1122334455",
    "routing_number": "071000013", "account_type": "savings",
    "name": "Leonard McCoy", "email": "bones@example.com"
  },
  "recurring": false, "purchase_description": "Medical supplies"
}`)
req, _ := http.NewRequest("POST",
    "https://api.dev.paradisegateway.net/v1/transactions", payload)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("APIKEY", "YOUR-API-KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
```

PHP
```php
$ch = curl_init("https://api.dev.paradisegateway.net/v1/transactions");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["Content-Type: application/json", "APIKEY: YOUR-API-KEY"],
    CURLOPT_POSTFIELDS => json_encode([
        "type" => "bank_account_payout", "amount" => 35000,
        "payment_method" => [
            "type" => "bank_account", "account_number" => "1122334455",
            "routing_number" => "071000013", "account_type" => "savings",
            "name" => "Leonard McCoy", "email" => "bones@example.com",
        ],
        "recurring" => false, "purchase_description" => "Medical supplies",
    ]),
]);
echo curl_exec($ch); curl_close($ch);
```

Ruby
```ruby
require "net/http"; require "json"
uri = URI("https://api.dev.paradisegateway.net/v1/transactions")
req = Net::HTTP::Post.new(uri, {
  "Content-Type" => "application/json", "APIKEY" => "YOUR-API-KEY",
})
req.body = {
  type: "bank_account_payout", amount: 35000,
  payment_method: {
    type: "bank_account", account_number: "1122334455",
    routing_number: "071000013", account_type: "savings",
    name: "Leonard McCoy", email: "bones@example.com",
  },
  recurring: false, purchase_description: "Medical supplies",
}.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts resp.body
```

## Step 3: Handle the response

```json
{
  "id": "TRANSACTION-04MQMCC0Y0AYR6NW1J5Z7X9B2",
  "object": "transaction",
  "type": "bank_account_payout",
  "transaction_state": "authorized",
  "response_status": "Approved",
  "response_code": "00",
  "response_message": "The API request is approved.",
  "amount_requested": 35000,
  "amount_authorized": 35000,
  "amount": 35000,
  "correlation_id": "d4e5f6a7-b8c9-0123-def0-123456789abc"
}
```

The payout follows the same ACH timeline as payments: settlement in 2–3 business days with a return window of up to 60 days.

## Canceling a payout

Cancel a payout before settlement with `POST /v1/transactions/{id}/cancel`.

```json
{
  "type": "bank_account_payout_cancel",
  "amount": 35000
}
```

## Payments vs. payouts

|  | Payment (debit) | Payout (credit) |
|  --- | --- | --- |
| Direction | Person's bank → merchant | Merchant → person's bank |
| Transaction type | `bank_account_payment` | `bank_account_payout` |
| Cancel type | `bank_account_payment_cancel` | `bank_account_payout_cancel` |
| Use case | Collect payment | Disburse funds |


## Next steps

* [Process an ACH payment](/docs/how-tos/process-payments/process-ach-payment) — collect funds from a bank account
* [Process a payment with a stored token](/docs/how-tos/process-payments/process-payment-with-token) — use a tokenized bank account
* [About ACH/bank account payments](/docs/concepts/transactions/ach-accounts)