The standard card issuance flow is two calls — Create Cardholder first, then Create Card with the returnedDocumentation Index
Fetch the complete documentation index at: https://developers-sandbox.uqpaytech.com/llms.txt
Use this file to discover all available pages before exploring further.
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.
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 therequired_fields array on your target product — that is the exact list of cardholder fields you must supply to the create-card call.
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 intocardholder_required_fields and omit cardholder_id:
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 thecard.create.succeededwebhook 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’srequired_fields list kyc_verification, and you ask UQPAY to run identity verification through Sumsub (method: SUMSUB_REDIRECT), the response carries an IDV URL:
idv_verification_url before idv_url_expires_at. Once Sumsub confirms the verification, UQPAY activates the card automatically and notifies you by webhook.
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:- Cardholder KYC Status Changed — cardholder KYC review completed
- Card Created — card activated or creation failed
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.
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.

