Skip to main content

Cards

Create Cardโ€‹

POST {{baseUrl}}/zoqq/api/v1/card

Description

This API creates a card โ€” virtual or physical โ€” for a cardholder, based on the card_type specified in the request payload. It also allows configuration of card-level details such as:

  • Spend controls โ€” e.g., transaction limits, allowed transaction count.
  • Usage type โ€” single-use or multi-use.

For more details, refer to the Cards Guide.

Note:

  • For the Cards program, this API supports only virtual card creation. To issue a physical card, use the separate Assign Card API instead.
  • For Cards under Banking, this API supports both virtual and physical card creation directly.
  • Virtual cards are activated automatically upon creation, while physical cards require activation via the Activate Card API after they are received.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

card_issuance_action string required

Card issuance type. Allowed values: NEW, REPLACEMENT

card_type string required

Type of card. Allowed values: PHYSICAL, VIRTUAL

card_holder_id string required

The ID of the cardholder to associate this card with.

created_by string required

Full legal name of user requesting new card

request_id string required

Unique request ID used for idempotency

program object required

Program details for card issuance.

purpose string required

Purpose of the card. Allowed value: COMMERCIAL.

authorization_controls object required

Transaction control configurations.

allowed_transaction_count string required

Specifies whether this card is a Single or Multiple Use card. Possible values are SINGLE, MULTIPLE. Single Use means that the card can only be used for 1 successful debit transaction.

transaction_limits object required

Configuration for transaction limits.

currency string required

Currency for transaction limits (3-letter ISO-4217 code)

limits array required

Transaction limits are based on interval and amount

amount double required

Transaction limit amount. Must be greater than 0.

interval string required

Limit interval: PER_TRANSACTION, DAILY, WEEKLY, MONTHLY, ALL_TIME.

postal_address object conditional

Delivery detail of the card. Only available for physical cards

city string required

City name.

country string required

Country code (2-letter ISO 3166-2 code).

line1 string required

Street address line 1.

state string required

State or province.

postcode string required

Postal or ZIP code.

is_personalized boolean required

Indicates whether the card is assigned to a single individual or to the business with multiple authorized users. Only personalized cards can be physical and added to digital wallets.

Request Example

curl --location --request POST \
--url '{{baseUrl}}/zoqq/api/v1/card' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}' \
--data '{
"card_issuance_action": "NEW",
"card_type": "PHYSICAL",
"card_holder_id": "{{CardholderID}}",
"created_by": "Postman Test",
"request_id": "{{IdempotencyKey}}",
"program": {
"purpose": "COMMERCIAL"
},
"authorization_controls": {
"allowed_transaction_count": "MULTIPLE",
"transaction_limits": {
"currency": "SGD",
"limits": [
{
"amount": 10000,
"interval": "PER_TRANSACTION"
}
]
}
},
"postal_address": {
"city": "Singapore",
"country": "SG",
"line1": "21 Pasir Ris Street 72",
"state": "Singapore",
"postcode": "518764"
},
"is_personalized": true
}'

Response Example

{
"code": 200,
"status": "success",
"message": "Card created successfully.",
"data": {
"id": "card-id"
}
}

Assign Cardโ€‹

This API assigns a physical card to a cardholder.

POST {{baseUrl}}/zoqq/api/v1/card/assign

Description

This API is used to assign a pre-issued physical card to an existing cardholder. The physical card is identified using its card number and is then linked to the specified cardholder, making it available for use.

Note: This API is applicable only to the Cards program. For Cards under Banking, physical cards can be created directly via the Create Card API.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

cardholder_id string required

Unique identifier for the cardholder.

card_number string required

The physical card number to be assigned to the cardholder.

card_currency string required

The currency of the card being assigned (3-letter ISO-4217 code).

card_mode string required

Allowed value: SINGLE.
SINGLE indicates a prepaid card, which must be loaded with funds before it can be used.

createdBy string required

Identifier or name of the user creating this request.

Request Example

curl --location --request POST \
--url '{{baseUrl}}/zoqq/api/v1/card/assign' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}' \
--data '{
"cardholder_id": "cardholder-id",
"card_number": "card-number",
"card_currency": "USD",
"card_mode": "SINGLE",
"created_by": "admin_user"
}'

Response Example

{
"code": 200,
"status": "success",
"message": "Card assign successfully."
}

Get All Cardsโ€‹

GET {{baseUrl}}/zoqq/api/v1/card

Description

This endpoint returns a list of all cards (both physical and virtual) associated with the authenticated user. The response includes key card attributes such as card status, masked number, type, associated cardholder ID, and timestamps for creation and updates.
You can also filter the results using query parameters such as card ID, cardholder ID and card status to retrieve specific card records.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ” Query Parameters

cardholder_id string

Unique identifier for cardholder

id string

Unique identifier for card

status string

Card status filter. Allowed values: ACTIVE, INACTIVE

page_num integer

Page number for pagination

page_size integer

Number of items per page

Request Example

curl --location --request GET \
--url '{{baseUrl}}/zoqq/api/v1/card' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'

Response Example

{
"code": 200,
"status": "success",
"message": "Card fetched successfully",
"data": [
{
"cardHashId": "card-hash-id",
"cardStatus": "ACTIVE",
"maskedCardNumber": "************4639",
"cardholderId": "",
"createdAt": "2025-04-02T07:36:56.973+0000",
"updatedAt": "2025-04-23T05:45:12.422+0000",
"nameOnCard": "Postman Test",
"cardType": "VIRTUAL",
"currency": "USD"
},
{
"cardHashId": "card-hash-id",
"cardStatus": "INACTIVE",
"maskedCardNumber": "************6886",
"cardholderId": "",
"createdAt": "2025-03-31T08:02:20.000+0000",
"updatedAt": "2025-03-31T08:02:20.000+0000",
"nameOnCard": "demozoqq",
"cardType": "PHY",
"currency": "SGD"
}
]
}

Show Card Detailsโ€‹

GET {{baseUrl}}/zoqq/api/v1/card/detail

Description

This endpoint returns sensitive card details that are typically masked in other endpoints.

Note: For displaying sensitive card details to end users in a PCI-compliant manner, refer to the Secure Iframe Guide.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ” Query Parameters

id string required

Unique identifier for card

Request Example

curl --location --request GET \
--url '{{baseUrl}}/zoqq/api/v1/card/detail?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'

Response Example

{
"status": "success",
"message": "Card details fetched successfully.",
"code": 200,
"data": [
{
"personalized": true,
"card_id": "card-id",
"card_bin": null,
"card_scheme": "VISA",
"card_currency": "SGD",
"card_number": "************2145",
"form_factor": "PHYSICAL",
"mode_type": null,
"card_product_id": null,
"card_limit": 15000.0,
"available_balance": null,
"cardholder": {
"cardholder_id": "cardholder-id",
"email": "",
"number_of_cards": null,
"first_name": "",
"last_name": null,
"create_time": "2025-08-27T12:04:10.912+0000",
"cardholder_status": null,
"date_of_birth": null,
"country_code": "SG",
"phone_number": ""
},
"spending_controls": [
{
"amount": 15000.0,
"interval": "PER_TRANSACTION",
"remaining": 15000.0
}
],
"authorization_controls": {
"active_from": "2025-08-27T00:00:00.000+00:00",
"active_to": "2025-12-31T23:59:59.000+00:00",
"allowed_currencies": [
"USD",
"EUR",
"INR"
],
"allowed_merchant_categories": []
},
"no_pin_payment_amount": null,
"risk_controls": null,
"metadata": {},
"card_status": "INACTIVE",
"brand": "VISA",
"cardholder_id": "cardholder-id",
"created_at": null,
"created_by": "user",
"is_personalized": true,
"name_on_card": "John Doe",
"nick_name": "Testair",
"program": {
"purpose": "COMMERCIAL",
"type": "DEBIT"
},
"purpose": null,
"delivery_details": {
"delivery_mode": "MAIL",
"delivery_vendor": "DHL",
"status": "PRINTED",
"tracked": true,
"tracking_link": "tracking-link",
"tracking_number": "ABCD1234",
"updated_at": "2026-02-06T00:00:00.000+0000"
},
"postal_address": {
"city": "Singapore",
"country": "SG",
"line1": "21 Pasir Ris Street 72",
"line2": "null",
"postcode": "518764",
"state": "Singapore"
}
}
]
}

Activate Cardโ€‹

POST {{baseUrl}}/zoqq/api/v1/card/activate

Description

This API is used to activate a physical card for card payment authorizations.

For cards assigned via the Assign Physical Card API, the request body must include:

{
"activation_code": "111222333",
"pin": "123456"
}

activation_code: The activation code received via email at the time of assigning the physical card.
pin: The 6-digit PIN to be set for the card.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

activation_code string conditional

Activation code received via email when the physical card was assigned.

pin string conditional

6-digit PIN to be set for the card.

๐Ÿ” Query Parameters

id string required

Unique identifier for card to activate

Request Example

curl --location --request POST \
--url '{{baseUrl}}/zoqq/api/v1/card/activate?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'

Response Example

{
"code": 200,
"status": "success",
"message": "card activated successfully"
}

Reset PINโ€‹

This API resets the PIN for a assigned physical card.

POST {{baseUrl}}/zoqq/api/v1/card/pin

Description

This API is program specific and used to reset the PIN for a card assigned via the Assign Physical Card API.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

pin string required

6-digit PIN to be set for the card.

๐Ÿ” Query Parameters

id string required

Unique identifier for card to reset PIN

Request Example

curl --location --request POST \
--url '{{baseUrl}}/zoqq/api/v1/card/pin?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}' \
--data '{
"pin": "123456"
}'

Response Example

{
"code": 200,
"status": "success",
"message": "Pin reset successfully."
}

Update Cardโ€‹

This API updates card details including authorization controls and status.

PATCH {{baseUrl}}/zoqq/api/v1/card

Description

This endpoint updates card details by setting the values of the included parameters. Parameters that are not included will be left unchanged.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

card_status string

Card status. Allowed values: ACTIVE, INACTIVE, CLOSED.

currency string

Currency for transaction limits (3-letter ISO-4217 code).

transaction_limits array

Array of transaction limits.

type string required

Type of limit. Allowed values: PER_TRANSACTION, DAILY, WEEKLY, MONTHLY, ALL_TIME.

value double required

Numerical value of the transaction limit.

authorization_controls object

Controls for restricting card authorization.

active_from string

Start date-time from which card is active (ISO 8601 format: YYYY-MM-DDTHH:mm:ssZ).

active_to string

End date-time until which card remains active. (ISO 8601 format: YYYY-MM-DDTHH:mm:ssZ).

allowed_currencies array of string

Allowed currencies for card transactions following 3-letter ISO-4217 currency code.
(e.g.: ["USD", "EUR"]).

allowed_merchant_categories array of string

Allowed merchant category codes (4-digit MCCs).

updated_by string required

User updating the details

๐Ÿ” Query Parameters

id string required

Unique identifier for card to update

Request Example

curl --location --request PATCH \
--url '{{baseUrl}}/zoqq/api/v1/card?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}' \
--data '{
"card_status": "ACTIVE",
"currency": "USD",
"transaction_limits": [
{
"type": "DAILY",
"value": 1
}
],
"authorization_controls": {
"active_from": "2025-05-01T00:00:00Z",
"active_to": "2025-12-31T23:59:59Z",
"allowed_currencies": ["USD", "EUR", "INR"],
"allowed_merchant_categories": ["5411", "5732", "5999"]
},
"updated_by": "test"
}'

Response Example

{
"code": 200,
"status": "success",
"message": "card updated successfully"
}

Load Cardโ€‹

Recharge / Load Funds to Card

POST {{baseUrl}}/zoqq/api/v1/card/recharge

Description

Adds funds to a specific card associated with the authenticated user. This API performs a card recharge (load) operation and credits the specified amount to the card balance. The card to be recharged is identified using the id query parameter.

Note: This API is supported only for specific programs where card recharge/load functionality has been enabled and configured. Please contact Zoqq to confirm whether this feature is available for your program.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ“ฆ Request Body Parameters

amount double required

Amount to be funded to the card. Must be greater than 0.

๐Ÿ” Query Parameters

id string required

Unique identifier for card

Request Example

curl --location --request POST \
--url '{{baseUrl}}/zoqq/api/v1/card/recharge?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}' \
--data '{
"amount": 100.0
}'

Response Example

{
"code": 200,
"status": "success",
"message": "Card recharge successfully."
}

Get Card Transactionsโ€‹

GET {{baseUrl}}/zoqq/api/v1/card/transaction

Description

This endpoint returns a paginated list of transactions for a specific card, including detailed merchant information, transaction amounts, and status.

๐Ÿ“ฉ Request Headers

x-api-key string required

Shared X-API key by Zoqq

x-product-id string required

Shared Product ID by Zoqq

x-request-id string required

Idempotency key for request tracking

x-user-id string required

User identification key

Content-Type string required

Must be application/json

Authorization string required

Bearer access token

๐Ÿ” Query Parameters

id string required

Unique identifier for card

page_num integer

Page number for pagination

page_size integer

Number of items per page

from_created_at string conditional

Start date to filter records created on or after this date. (ISO 8601 date format: YYYY-MM-DD). Must be provided together with to_created_at.

to_created_at string conditional

End date to filter records created on or before this date. (ISO 8601 date format: YYYY-MM-DD). Must be provided together with from_created_at.

Request Example

curl --location --request GET \
--url '{{baseUrl}}/zoqq/api/v1/card/transaction?id={{CardID}}' \
--header 'x-api-key: {{Shared X-API key By Zoqq}}' \
--header 'x-product-id: {{Shared ProductID By Zoqq}}' \
--header 'x-request-id: {{IdempotencyKey}}' \
--header 'x-user-id: {{UserID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{AccessToken}}'

Response Example

{
"code": 200,
"status": "success",
"message": "Card transaction fetched successfully.",
"data": {
"has_more": true,
"items": [
{
"acquiring_institution_identifier": "123456",
"auth_code": "000001",
"billing_amount": 100,
"billing_currency": "USD",
"card_id": "",
"card_nickname": "string",
"client_data": "Some client data",
"digital_wallet_token_id": "",
"failure_reason": "INSUFFICIENT_FUNDS",
"lifecycle_id": "",
"masked_card_number": "************4242",
"matched_authorizations": [
"6c2dc266-09ad-4235-b61a-767c7cd6d6ea"
],
"merchant": {
"category_code": "4829",
"city": "San Francisco",
"country": "USA",
"identifier": "012345678910123",
"name": "Merchant A",
"postcode": "94111",
"state": "CA"
},
"network_transaction_id": "3951729271768745",
"posted_date": "2018-03-22T16:08:02+00:00",
"retrieval_ref": "909916088001",
"risk_details": {
"risk_actions_performed": [
"TRANSACTION_BLOCKED"
],
"risk_factors": [
"Suspicious transaction velocity"
],
"three_dsecure_outcome": "AUTHENTICATED"
},
"status": "APPROVED",
"transaction_amount": 100,
"transaction_currency": "USD",
"transaction_date": "2018-03-21T16:08:02+00:00",
"transaction_id": "transactionid",
"transaction_type": "REFUND"
}
]
}
}