Developer documentation

Distributor Card API

A simple REST API to onboard cardholders (with KYC) and issue virtual cards programmatically — sandbox first, production when you're ready.

Developers integrating the NetPay card API

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

  1. 01

    Create cardholder

    POST /cardholders → get a holderId.

  2. 02

    Wait for ACTIVE

    Poll GET /cardholders/:id/status until the status is ACTIVE.

  3. 03

    Issue the card

    POST /cards to issue the virtual card.

Endpoints

POST/api/v1/cardholders

Create the end user + cardholder. The body is multipart/form-data so KYC documents upload directly.

FieldTypeRequiredNotes
emailTextYesUnique per user
firstNameTextYes—
lastNameTextYes—
countryTextYesISO-2 code, e.g. IN
mobileTextYesDigits only
kycDocTypeTextYespassport / id_card / drivers_license
kycIdNumberTextYesDocument number
docFrontFileYesID front image
docBackFileNoID back image
selfieFileNoSelfie / portrait
kycDob / kycIssueDate / kycExpiryDateTextNoYYYY-MM-DD
gender / areaCode / townTextNoOptional details

Response 201 Created

{
  "success": true,
  "userId": "6a2a5427d6bd69d062555175",
  "holderId": "183633",
  "holderStatus": "IN_REVIEW"
}
GET/api/v1/cardholders/:holderId/status

Poll 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
}
POST/api/v1/cards

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/reveal

Reveal 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

Start in the sandbox

Tell us what you're building and we'll issue keys so your team can create test cards today.