UPP Docs
Card

Apply for a card

POST
/card-applications

Accepts a card application and submits it to the card issuer in the background. The response has status: pending; get the result from GET /card-applications/{applicationId} or the card_application.status_changed webhook.

  • Rejected when the product's features.issue is false.
  • When the product requires a cardholder (requires_cardholder), cardholder_id is required. The cardholder must be approved, registered for this product, and meet the product's current application conditions (verification usage).
  • initial_funding_amount must be within the initial_funding range returned by GET /card-products.
  • The initial funding plus the issuing fee is held on acceptance; if the merchant's available balance is too low, 422 is returned. The hold is settled when the card is issued and released if it fails or is cancelled.
  • If the product has application_fields, submit them in fields (such as the cardholder's name, email and phone for some products).
  • order_no must be unique per merchant; a duplicate returns 422.

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
card_product_id*string

Card product ID, see GET /card-products

order_no*string

Your order number, unique per merchant

Lengthlength <= 64
cardholder_id?|

Cardholder ID (starts with chd_). Required when the product requires cardholders

initial_funding_amount?||

Initial funding, up to two decimals; 0 when omitted

fields?|

Information required by the product's application_fields, field name => value; validation error keys are fields.<field name>

Response Body

Application accepted

application/json
  1. response
id*string

Application ID (starts with cap_)

order_no*|

Your order number

card_product_id*string|null
cardholder_id*string|null
initial_funding_amount*string

Initial funding, two decimals

status*CardApplicationStatus
  • pending: accepted, being processed by the issuer
  • issued: card issued, see card
  • failed: could not be issued, see failure_reason
  • cancelled: cancelled
Value in"pending""issued""failed""cancelled"
failure_reason*string|null
card*|

The issued card, present only when status is issued

created_at*string
Formatdate-time
updated_at*string
Formatdate-time
Example Request
curl -X POST 'https://sandbox.getupp.net/api/v1/card-applications' \  -H 'Content-Type: application/json' \  -d '{  "card_product_id": "cpd_01JBXA3M6N8Q2R4T6V8W0Y2Z4H",  "order_no": "ORD-1001",  "cardholder_id": "chd_01m5ergfs354xnjeazkx60hgwv",  "initial_funding_amount": "10.00"}'
Example Response
{  "id": "cap_01m5f56pqtmwzxk1dyyevwwy43",  "order_no": "ORD-1001",  "card_product_id": "cpd_01JBXA3M6N8Q2R4T6V8W0Y2Z4H",  "cardholder_id": "chd_01m5ergfs354xnjeazkx60hgwv",  "initial_funding_amount": "10.00",  "status": "pending",  "failure_reason": null,  "card": null,  "created_at": "2026-10-21T11:29:55.000000Z",  "updated_at": "2026-10-21T11:29:55.000000Z"}