Skip to main content
POST
/
v1
/
payments
Send Payment (Legacy)
curl --request POST \
  --url https://api.example.com/v1/payments \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": 123,
  "recipient": {
    "recipient.name": "<string>",
    "recipient.account_number": "<string>",
    "recipient.routing_number": "<string>",
    "recipient.email": "<string>"
  },
  "description": "<string>",
  "idempotency_key": "<string>"
}
'
{
  "id": "<string>",
  "status": "<string>",
  "amount": 123,
  "recipient_name": "<string>",
  "created_at": "<string>",
  "estimated_arrival": {}
}
This endpoint is deprecated. Use POST /v1/pay with a bank details recipient object instead.
Initiates an outbound fiat payment from the project’s wallet to an external US bank account via Bridge.xyz off-ramp. The project balance is debited atomically before the transfer is initiated. If the transfer fails, the balance is automatically restored.
Requires a bearer token with the pay permission.

Request Body

amount
integer
required
Payment amount in cents. Must be between 1 and 100,000,000 ($1,000,000.00).
recipient
object
required
Recipient bank account details.
description
string
Payment description for record-keeping. Max 500 characters.
idempotency_key
string
Unique key to prevent duplicate payments. Alphanumeric plus _, -, :, .. Max 255 characters.

Response

id
string
required
Unique transaction identifier.
status
string
required
Transaction status: pending, processing, completed, or failed.
amount
integer
required
Payment amount in cents.
recipient_name
string
required
Name of the payment recipient.
created_at
string
required
ISO 8601 timestamp of when the payment was created.
estimated_arrival
string | null
required
Estimated delivery time (e.g., “2-3 business days”). null if no ACH transfer was initiated.

Examples

curl -X POST https://api.unwall.xyz/v1/payments \
  -H "Authorization: Bearer aw_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 250000,
    "recipient": {
      "name": "Acme Supplies Inc",
      "account_number": "9876543210",
      "routing_number": "021000021",
      "email": "billing@acme.com"
    },
    "description": "Monthly supply order #47",
    "idempotency_key": "order-47-2026-03"
  }'
Response (201 Created)
{
  "id": "tx_fiat_abc123",
  "status": "processing",
  "amount": 250000,
  "recipient_name": "Acme Supplies Inc",
  "created_at": "2026-03-11T14:30:00Z",
  "estimated_arrival": "2-3 business days"
}

Idempotency

If you provide an idempotency_key and a transaction with that key already exists for this project, the API returns the original transaction with a 200 OK status (not 201 Created). The request body is not re-evaluated.
Always include an idempotency key when sending payments from automated agents. Use a deterministic key tied to your business logic (e.g., invoice number, order ID) to guarantee at-most-once delivery.