Base URL
https://uat-cards.netpay247.com/api/v1
Sandbox and production share the same shapes; you're issued separate keys for each.
Authentication
Every request carries both headers. Keys are issued per distributor and can be rotated on request.
X-Api-Key: dk_live_xxxxxxxx
X-Access-Key: <your-access-key>
Flow
- 01
Create cardholder
POST /cardholders → get a holderId.
- 02
Wait for ACTIVE
Poll GET /cardholders/:id/status until the status is ACTIVE.
- 03
Issue the card
POST /cards to issue the virtual card.
Endpoints
Create the end user + cardholder. The body is multipart/form-data so KYC documents upload directly.
| Field | Type | Required | Notes |
|---|
email | Text | Yes | Unique per user |
firstName | Text | Yes | — |
lastName | Text | Yes | — |
country | Text | Yes | ISO-2 code, e.g. IN |
mobile | Text | Yes | Digits only |
kycDocType | Text | Yes | passport / id_card / drivers_license |
kycIdNumber | Text | Yes | Document number |
docFront | File | Yes | ID front image |
docBack | File | No | ID back image |
selfie | File | No | Selfie / portrait |
kycDob / kycIssueDate / kycExpiryDate | Text | No | YYYY-MM-DD |
gender / areaCode / town | Text | No | Optional details |
Response 201 Created
{
"success": true,
"userId": "6a2a5427d6bd69d062555175",
"holderId": "183633",
"holderStatus": "IN_REVIEW"
}
GET/api/v1/cardholders/:holderId/statusPoll the verification status. Issue a card only once it is ACTIVE.
Response 200 OK
{
"success": true,
"holderId": "183633",
"status": "ACTIVE", // IN_REVIEW | ACTIVE | REJECTED
"canIssueCard": true
}
Issue a VIRTUAL card against an ACTIVE holder. loadAmount is debited from your prepaid wallet.
Request body (JSON)
{
"holderId": "183633",
"cardType": "virtual",
"card_product_id": "111031",
"currency": "USD",
"loadAmount": 20
}
Response 201 Created
{
"success": true,
"cardId": "6a2b...",
"uqpayCardId": "98765",
"holderId": "183633",
"status": "pending",
"loadAmount": 20,
"loadedBalance": 20
}
GET/api/v1/cards/:cardId/revealReveal full card details (number, CVV, expiry). :cardId is the uqpayCardId returned when the card was created.
Response 200 OK
{
"success": true,
"cardDetails": {
"card_id": "98765",
"card_number": "4111111111111234",
"cvv": "123",
"expiry_date": "12/28"
}
}
Errors
- 401Invalid API credentials
- 402Insufficient wallet balance
- 404Card / cardholder not found
- 409Cardholder still under verification
- 422Validation error or cardholder rejected