UPP Docs
Card

Top up a card

POST
/cards/{cardId}/top-up

Tops up a card from the merchant's available balance. On acceptance the amount plus fee is held (status: pending) and the request goes to the card issuer in the background; it is settled on success and returned to the available balance on failure. The result is sent with the card_funding.status_changed webhook and can be read with GET /card-fundings/{fundingId}.

  • Only active cards can be topped up; rejected when the product's features.top_up is false.
  • The amount must be within limits.top_up from GET /card-products; otherwise 422.
  • The fee is pricing.top_up_fee_rate (percent) plus top_up_fee_fixed from GET /card-products, rounded down to the currency's precision.
  • order_no must be unique across the merchant's top-ups and withdrawals.
  • Some issuers require at least 10 per top-up.

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

Path Parameters

cardId*string

Request Body

application/json
  1. body
amount*|

Amount in the card currency, greater than 0, with no more decimals than the currency allows

order_no*string

Your order number, unique across the merchant's top-ups and withdrawals

Lengthlength <= 64

Response Body

Accepted

application/json
  1. response
id*string

Top-up / withdrawal ID (starts with cfd_)

card_id*string|null
type*string

top_up or withdraw

Value in"top_up""withdraw"
order_no*string

Your order number

amount*string

Amount moved into or out of the card

fee*string

Fee; charged on top of a top-up, deducted from the returned amount for a withdrawal

currency*string
status*CardFundingStatus
  • pending: accepted, being processed by the issuer
  • succeeded: succeeded and booked
  • failed: failed, see failure_reason; a held top-up amount has been released
Value in"pending""succeeded""failed"
failure_reason*string|null
created_at*string
Formatdate-time
updated_at*string
Formatdate-time
Example Request
curl -X POST 'https://sandbox.getupp.net/api/v1/cards/string/top-up' \  -H 'Content-Type: application/json' \  -d '{  "amount": "100.00",  "order_no": "TOPUP-1001"}'
Example Response
{  "id": "cfd_01m5kscprrf7w6nshh1taxd4q9",  "card_id": "card_01m5f3kfythx2pw4mpscgnsp4x",  "type": "top_up",  "order_no": "TOPUP-1001",  "amount": "100.00",  "fee": "1.50",  "currency": "USD",  "status": "pending",  "failure_reason": null,  "created_at": "2026-10-23T07:07:49.000000Z",  "updated_at": "2026-10-23T07:07:49.000000Z"}