Skip to content

Paying by card ​

Card details never pass through this API. For a card, POST /payments returns a payment page address; the customer types the card on the bank's page, 3D Secure completes there, and the payment is held only on the bank's confirmation.

sh
curl -X POST https://api.example.com/partner/v1/payments \
  -H "Authorization: Bearer ugp_…" -H "Content-Type: application/json" \
  -d '{"service_request_id":"sreq_…","payment_method":"card"}'
json
{
  "escrow": { "id": "esc_…", "status": "created" },
  "payment": {
    "mode": "gateway",
    "order_number": "esc_…",
    "payment_url": "https://api.example.com/ug/payments/esc_…/pay"
  }
}

Send the customer to payment_url (browser or WebView). Follow the result with GET /payments?service_request_id=…: held means paid.

Current status

The hosted payment page is not connected to the bank yet. Until it is, an environment with real card payments answers a card POST /payments with 503 HOSTED_PAYMENT_UNAVAILABLE and opens no payment record; use bank transfer. In test environments (mode: "mock") the payment is held at once.

Grouped bookings ​

If the basket spans several trades, call POST /payments for every leg; a card charges the group's total once, through the first leg's (group_order smallest) page.