Skip to main content
Cleo Pay supports three payment flows:
  • Standard payment — pay a specific approved payable
  • Quick pay — ad-hoc payment without creating a payable first
  • Bulk payment — pay multiple payables in a single request
All payments use ACH transfers through linked bank accounts.

Initiate a payment

POST /api/payments/initiate Initiates an ACH payment for a specific payable. The payable must be in APPROVED status before you can initiate payment.

Request body

payableId
string
required
The ID of the approved payable to pay.
fundingSourceId
string
required
The ID of the bank account to pay from.
clearingSpeed
string
default:"standard"
ACH clearing speed. Accepted values: standard (1–3 business days), sameDay (same business day, if submitted before cutoff).
scheduledDate
string
ISO 8601 date to schedule the payment for a future date. If omitted, the payment is initiated immediately.
curl --request POST \
  --url https://api.cleo-pay.com/api/payments/initiate \
  --header "Authorization: Bearer <token>" \
  --header "Content-Type: application/json" \
  --data '{
    "payableId": "pay_ghi789",
    "fundingSourceId": "fs_xyz789",
    "clearingSpeed": "standard"
  }'

Quick pay

POST /api/payments/quick-pay Sends an ad-hoc payment to a connected business without creating a payable first. Useful for one-off transfers.

Request body

connectionId
string
required
The ID of the connection (the business to pay).
amount
number
required
Payment amount in dollars.
fundingSourceId
string
required
The ID of the bank account to pay from.
memo
string
Optional note to include with the payment.
curl --request POST \
  --url https://api.cleo-pay.com/api/payments/quick-pay \
  --header "Authorization: Bearer <token>" \
  --header "Content-Type: application/json" \
  --data '{
    "connectionId": "conn_def456",
    "amount": 750.00,
    "fundingSourceId": "fs_xyz789",
    "memo": "Reimbursement for March expenses"
  }'

Bulk initiate payments

POST /api/payments/bulk-initiate Initiates ACH payments for multiple approved payables in a single request. Each item in the array is processed independently.

Request body

payments
array
required
Array of payment objects to initiate.
curl --request POST \
  --url https://api.cleo-pay.com/api/payments/bulk-initiate \
  --header "Authorization: Bearer <token>" \
  --header "Content-Type: application/json" \
  --data '{
    "payments": [
      {
        "payableId": "pay_ghi789",
        "fundingSourceId": "fs_xyz789",
        "clearingSpeed": "standard"
      },
      {
        "payableId": "pay_jkl012",
        "fundingSourceId": "fs_xyz789",
        "clearingSpeed": "sameDay"
      }
    ]
  }'
If one payment in a bulk request fails validation, the entire request is rejected. Ensure all payables are in APPROVED status before calling bulk initiate.

Cancel a payment

POST /api/payments/{paymentId}/cancel Cancels a held or scheduled payment. You can only cancel payments that have not yet been submitted to the ACH network.

Path parameters

paymentId
string
required
The ID of the payment to cancel.
curl --request POST \
  --url https://api.cleo-pay.com/api/payments/pmt_mno345/cancel \
  --header "Authorization: Bearer <token>"
Once a payment is submitted to the ACH network, it cannot be cancelled through the API. Contact Cleo Pay support for assistance with in-flight payments.