m2pfintech
API LibraryTransaction

Credit/Debit Prepaid Card

Loads (credits) or debits a GPR (General Purpose Reloadable) card holder's wallet. This is the primary API for managing card balances for GPR, Gift, and NCMC products.

Supported Operations

  • CREDIT: Add funds to the cardholder's wallet
  • DEBIT: Remove funds from the cardholder's wallet (partial or full)

Debit Types

For debit operations, specify debitTransactionType:

  • PARTIAL_DEBIT — Withdraw a specific amount
  • FULL_DEBIT — Withdraw entire balance
  • FULL_DEBIT_WITH_CLOSURE — Withdraw entire balance and close the account

Maker-Checker

This API creates a load request that may go through maker-checker approval. The currentStatus in the response indicates the processing state:

  • CREATED → Pending approval
  • APPROVED → Processed successfully

Key Fields

  • hierarchyId: The branch/corporate ID initiating the load
  • kitNo: The card kit number to be loaded
  • wallet.accountId: The specific wallet to credit
  • product.productType: GPR, Gift, or GPR+NCMC
POST
/v1/card-holder-loads/

Authorization

bearerAuth tenantId
AuthorizationBearer <token>

JWT Bearer token from the Authentication API

In: header

X-TENANT-ID<token>

Your unique tenant identifier assigned during onboarding

In: header

Header Parameters

X-TENANT-ID*string

Your unique tenant identifier

Request Body

application/json

hierarchyId*string

Required. Branch/corporate hierarchy ID

Length1 <= length
cardTypeEnum?string

Single for individual load, Bulk for batch processing

Value in"Single" | "Bulk"
transactionType?string

Overall transaction type

Value in"CREDIT" | "DEBIT"
cardHolderLoadDetails?

Array of individual card load details

bulkUpload?

Required when feeWaiver = ALLOWED. Upload the approval document using the file upload API and pass the returned fileName and filePath here. The platform validates the document exists before processing the transaction. Ignored when feeWaiver = NOTALLOWED.

customAttributes?

Custom attributes for additional metadata

id?string
issuerTenant?string
tenant?string
totalInvalidRows?integer
Formatint32
totalValidRows?integer
Formatint32
validFile?boolean

Response Body

application/json

application/json

application/json

curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/customer/v1/card-holder-loads/" \  -H "X-TENANT-ID: ACME_CORP" \  -H "Content-Type: application/json" \  -d '{    "hierarchyId": "90009",    "cardTypeEnum": "Single",    "transactionType": "CREDIT",    "cardHolderLoadDetails": [      {        "mobile": {          "value": "9876543210",          "countryCode": 91        },        "entityId": "476843769320000001160925",        "kitNo": "320000001",        "amount": 10000,        "description": "Monthly salary load",        "product": {          "productId": "PROD001",          "productType": "GPR"        },        "wallet": {          "accountId": "17556437212850072"        },        "transactionType": "CREDIT"      }    ]  }'
{
  "result": {
    "id": "QED4hfJBh2",
    "currentStatus": "CREATED",
    "cardHolderLoadDetails": [
      {
        "entityId": "476843769320000001160925",
        "kitNo": "320000001",
        "amount": 10000,
        "status": "CREATED",
        "txnStatus": "SUCCESS"
      }
    ]
  },
  "pagination": null
}
{
  "type": "https://www.m2pfintech.com/problem/problem-with-message",
  "title": "Bad Request",
  "status": 400,
  "detail": "Unable to convert http message",
  "message": "error.http.400"
}

{
  "type": "https://www.m2pfintech.com/problem/problem-with-message",
  "title": "Hierarchy does not exist for the given Id",
  "status": 409,
  "detail": "Hierarchy does not exist for the given Id",
  "message": "error.business",
  "businessCode": "PP_CORP_002"
}