UPP Docs
Exchange

Confirm a quote

POST
/exchanges

The quote ID is the idempotency key: confirming the same quote again returns the same exchange, so no Idempotency-Key is needed. The available balance is checked on confirmation.

  • Pooled exchanges complete immediately: 201 with status: completed.
  • Provider exchanges hold the sell amount and submit to the provider: 202 with status: pending. The result is sent with the exchange.status_changed webhook and can be read with GET /exchanges/{exchangeId}. On completion the amounts the provider actually filled are booked; on failure the held amount is released and no fee is charged.

Authorization

merchantApiKeymerchantTimestampmerchantNoncemerchantSignature
headerX-API-KEY<token>

Merchant API key (starts with upk_, also accepts api-key); signing headers are also required

headerX-Timestamp<token>

Unix timestamp in seconds, within 300 seconds of server time

headerX-Nonce<token>

Unique per request; cannot be reused with the same credential during the timestamp validity window

headerX-Signature<token>

Hex HMAC-SHA256 signature (either letter case) of the method, full path, timestamp, nonce and body digest

Request Body

application/json
  1. body
quote_id*string

Quote ID (starts with qte_)

Response Body

Exchange completed (pooled)

application/json
  1. response
id*string

Exchange ID (starts with exc_)

quote_id*string
status*ExchangeStatus
  • pending: sell amount held, waiting for the provider's result
  • completed: completed and booked
  • failed: failed, see failure_reason; the held amount is released and no fee is charged
Value in"pending""completed""failed"
sell_amount*string
sell_currency*string
buy_amount*string

Amount the merchant receives; for provider exchanges, updated to what the provider actually filled on completion

buy_currency*string
rate*string

Same as the quote's rate

fee*string

Same as the quote's fee

fee_currency*string
failure_reason*string|null
created_at*string
Formatdate-time
completed_at*|
Formatdate-time
Example Request
curl -X POST 'https://sandbox.getupp.net/api/v1/exchanges' \  -H 'Content-Type: application/json' \  -d '{  "quote_id": "qte_01m5ksmh0rf3d8w9xgq7a4bn2t"}'
Example Response
{  "id": "string",  "quote_id": "string",  "status": "pending",  "sell_amount": "string",  "sell_currency": "string",  "buy_amount": "string",  "buy_currency": "string",  "rate": "string",  "fee": "string",  "fee_currency": "string",  "failure_reason": "string",  "created_at": "2019-08-24T14:15:22Z",  "completed_at": "2019-08-24T14:15:22Z"}