Skip to main content
The standard card issuance flow is two calls — Create Cardholder first, then Create Card with the returned cardholder_id. One-step mode collapses the two into one call: omit cardholder_id and put the cardholder data into cardholder_required_fields. The system creates the cardholder and issues the card in the same request. Use one-step mode when you issue cards on demand — for example, right after a user signs up, or in a single-screen onboarding flow. If you manage a pool of pre-built cardholders, stay with the traditional two-call flow; passing cardholder_id works exactly as before.
For Personal Visa, follow Apply for Personal Visa to prepare the product’s required information and meet its KYC requirements, then create a card using cardholder_id. Cardholders with an eligible residence and a Red-group nationality must provide proof of address, which does not require a separate approval wait. One-step cardholder_required_fields.identity does not accept proof_of_address or identity_verification; a non-empty value for either attachment returns a parameter error.

Prerequisites

  • A UQPAY sandbox account with Card Issuance enabled
  • An API token from Access Token
  • The target card product’s card_product_id, obtained via List Products

Step 1: Check which fields the product requires

Different card products (BINs) require different cardholder data. List card products and read the required_fields array on your target product — that is the exact list of cardholder fields you must supply to the create-card call.
Response (key fields only):
Fields marked required: true must be provided; required: false fields are optional. Object-typed fields such as identity, residential_address, and kyc_verification follow a nested structure — their sub-field rules are given in the product’s fields array.

Step 2: Create the card with cardholder data inline

Put the product’s required fields into cardholder_required_fields and omit cardholder_id:
Response:
A few fields to note:
  • cardholder_id — the newly-created cardholder. Save this value if you need to manage the cardholder later.
  • card_status: PENDING + order_status: PROCESSING — the card is being provisioned asynchronously. This is not a failure; wait for the card.create.succeeded webhook before treating the card as active.
  • cardholder_created: true — the cardholder was created inline as part of this request.

Special case: Sumsub IDV

If the product’s required_fields list kyc_verification, and you ask UQPAY to run identity verification through Sumsub (method: SUMSUB_REDIRECT), the response carries an IDV URL:
Redirect the cardholder to idv_verification_url before idv_url_expires_at. Once Sumsub confirms verification, the order you already requested follows its existing execution flow, including checks for region, applicable POA, and other issuance requirements. Confirm the final result through the card webhook. Uploading POA does not request a new card or reopen a failed request. If you have already run KYC on your side and want to submit a proof directly, use method: THIRD_PARTY with a kyc_proof block; the response returns verification_status: VERIFIED without any redirect. See Enhanced KYC Card Issuance for the full details.

Waiting for async completion

For every one-step request, the initial HTTP response is only an acknowledgement. The card’s real activation (and the cardholder’s final state) happens asynchronously. Subscribe to these two webhooks before calling the endpoint:

Error handling

Two errors are specific to one-step mode. Both return HTTP 400.

cardholder_missing_info

Neither cardholder_id nor cardholder_required_fields was provided.

cardholder_incomplete_fields

cardholder_required_fields was provided but missing one or more required keys (for example, email, first_name). The response carries a missing_fields array so you can display a targeted error to your user.
Other common errors (email_duplicated, phone_number_duplicated, invalid_phone_number, etc.) are the standard cardholder_error codes. See the Create Card API reference for the full list.