Issue Prepaid Single/Bulk Card
Creates a corporate card issuance for one or more beneficiaries under a single
applicationNumber. The same endpoint handles both Single and Bulk
issuances — the difference is the issuanceType field and the number of objects
in the beneficiaries array.
Single vs Bulk
Single | Bulk | |
|---|---|---|
issuanceType | "Single" | "Bulk" |
beneficiaries array | 1 item | 2 – N items |
| Immediate response | Full card details | CREATED status only |
| Per-beneficiary reject | Not applicable | reject-beneficiaries endpoint |
| Bulk CSV upload | Not applicable | file/upload/beneficiary/bulk-upload/{appNo} |
Bulk Issuance Flow
POST /v1/corporate-issuances/ (issuanceType: Bulk, N beneficiaries)
↓ status = CREATED
POST /v1/corporate-issuances/state-transition (MAKER → PENDING_APPROVAL / checker → APPROVED)
↓ status = APPROVED → cards provisioned async
GET /v1/corporate-issuances/fetch-by-status/SUCCESS (poll for completion)
For very large batches (hundreds of records), use the CSV bulk upload endpoint
POST /v1/corporate-issuances/file/upload/beneficiary/bulk-upload/{applicationNumber}
instead of embedding all beneficiaries in JSON.
Key Features
- Single or bulk beneficiary issuance
- Physical (Perso/Non-Perso) or Virtual cards
- Maker-checker workflow support
- Auto-generated customer IDs and entity IDs
- KYC document upload (proofOfIdentity, proofOfAddress)
- Initial card load with fee breakdown
NTB vs ETB
ntbApplication: true→ New customer, full profile creationntbApplication: false→ Existing customer with prior accounts
Documents
Upload identity and address proofs as multipart files via query parameters.
Server
Use the corporate server URLs for this endpoint.
Authorization
bearerAuth tenantId JWT Bearer token from the Authentication API
In: header
Your unique tenant identifier assigned during onboarding
In: header
Query Parameters
Identity proof document (PDF/JPG/PNG, max 5MB)
Address proof document (PDF/JPG/PNG, max 5MB)
Header Parameters
Your unique tenant identifier
Request Body
application/json
Required. Unique application number
1 <= length"Single" | "Bulk"true for new customers, false for existing
Customer details for card issuance
Required. List of card beneficiaries
1 <= itemsIssuance fee and tax breakdown. All values must be obtained from the issuance fee summary API and echoed back — do not compute these fields independently.
Deprecated Fields (do not use for new integrations)
fees→ usefeeDetails.LOAD_FEEorfeeDetails.REGISTRATION_FEEissuanceFee→ usefeeDetails.REGISTRATION_FEE.feeAmountissuanceTax→ usefeeDetails.REGISTRATION_FEE.taxAmount
Issuer hierarchy details
Response Body
application/json
application/json
application/json
curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/middleware/v1/corporate-issuances/" \ -H "X-TENANT-ID: ACME_CORP" \ -H "Content-Type: application/json" \ -d '{ "applicationNumber": "gpr020", "issuanceType": "Single", "ntbApplication": true, "customer": { "firstName": "Willie", "lastName": "King", "gender": "Male", "dob": "1/1/1982", "email": "test.rxvi@gmail.com", "pan": "VBDPS9755U", "customerId": "901592180", "customerType": "ETB", "mobile": { "value": "7246637227", "countryCode": 91 }, "address": { "address1": "ROOM NO 06 ASHTVINAYAK", "address2": "RELIANCE GATE", "city": "ASHTA", "state": "MADHYA PRADESH", "pin": "466116", "country": "India" }, "account": { "accountNo": "50100114472139", "branch": "CITY MEMARI", "ifsc": "HDFC0002373", "bank": "HDFC BANK" }, "notification": { "emailAddress": "test.rxvi@gmail.com", "mobileNumber": "7246637227" }, "kyc": { "kycType": "Full KYC" } }, "beneficiaries": [ { "mobile": { "value": "9946637281", "countryCode": 91 }, "firstName": "Willie", "lastName": "King", "dob": "1/1/1982", "email": "test.rxvi@gmail.com", "product": { "name": "PINMAILERGPR001", "productId": "ZSU7tUPD5k", "productType": "GPR", "binRangeName": "BRNEWPINMAILER" }, "embosseType": "Non-Perso", "kit": "160000012", "cardType": "Physical", "amount": 20, "plasticCode": { "code": "2341234232", "description": "FIRSTPC" }, "cardDeliveryType": "Deliver To Corporate" } ], "summary": { "value": 20, "fees": 2, "tax": 0.36, "total": 22.36 }, "issuer": { "hierarchyId": "qappv272jez0owws", "issuerTenant": "qappv2" } }'{
"result": {
"currentStatus": "CREATED",
"applicationNumber": "gpr020",
"issuanceType": "Single",
"customer": {
"firstName": "Willie",
"lastName": "King",
"pan": "VBDPS9755U",
"customerId": "901592180",
"customerType": "ETB"
},
"beneficiaries": [
{
"product": {
"productId": "ZSU7tUPD5k",
"name": "PINMAILERGPR001",
"productType": "GPR"
},
"embosseType": "Non-Perso",
"firstName": "Willie",
"lastName": "King",
"kit": "160000012",
"cardNumber": "861530XXXXXX0105",
"cardType": "Physical",
"expDate": "2027-10-31",
"amount": 20
}
],
"summary": {
"value": 20,
"fees": 2,
"tax": 0.36,
"total": 22.36
},
"issuer": {
"hierarchyId": "qappv272jez0owws",
"issuerTenant": "qappv2",
"typeOfSOR": "M2P",
"typeOfFRM": "M2P"
}
},
"pagination": null
}{
"type": "https://www.m2pfintech.com/problem/constraint-violation",
"title": "Method argument not valid",
"status": 400,
"message": "error.validation",
"fieldErrors": [
{
"field": "applicationNumber",
"message": "must not be null"
},
{
"field": "beneficiaries[0].mobile",
"message": "Invalid contact"
}
]
}{
"type": "https://www.m2pfintech.com/problem/problem-with-message",
"title": "Corporate issuance already exist for application number: gpr020",
"status": 409,
"detail": "Corporate issuance already exist for application number: gpr020",
"message": "error.business",
"businessCode": "PP_CORP_004"
}Approve/Reject Prepaid Issuance POST
Approves or rejects a pending corporate card issuance as part of the maker-checker compliance workflow. Required for both **Single** and **Bulk** issuances before cards are provisioned. ### Transitions | From Status | To Status | Description | |-------------|-----------|-------------| | `CREATED` | `APPROVED` | Checker approves | | `CREATED` | `REJECTED` | Checker rejects | | `PENDING_APPROVAL` | `APPROVED` | Checker approves | | `PENDING_APPROVAL` | `REJECTED` | Checker rejects | ### Bulk Issuance Note For bulk issuances, approving via this endpoint approvesall beneficiaries that have not been explicitly rejected via `reject-beneficiaries`. Use `reject-beneficiaries` **before** calling this endpoint to exclude specific individuals from the batch. ### Server Use the **corporate** server URLs for this endpoint.
Issue Forex Card POST
Creates a new forex card issuance with multi-currency wallet allocations, customer details, travel information, and supporting documents. ### Key Features - Multi-currency wallets (USD, EUR, GBP, SGD, etc.) - Automatic TCS calculation based on LRS limits - Support for primary + backup cards - Comprehensive fee breakdown (issuance fee, forex margin, GST, TCS) - Document upload (passport, visa, air ticket, A2 form, purpose proof) ### Required Fields - `applicationNumber`: Unique per issuance - `customer`: Full customer profile with travel details - `product`: Valid forex product - `plasticCode`: Card design/BIN configuration - `walletAmount`: Currency allocation with conversion rates - `issuer`: Hierarchy details ### Issuance Modes | Mode | Description | |------|-------------| | `Online` | Self-service digital channel | | `Branch` | Branch-initiated with teller ID | | `Partner API` | Partner integration | ### Documents (Query Parameters) Upload supporting documents as binary files via query parameters: - `passport`, `visa`, `airTicket`, `applicationForm` - `purposeProof`, `educationalLoanLetter`, `a2Form` - `feeWaiverApproval`, `relationshipProof`, `discountProof` ### Server Use the **corporate** server URLs for this endpoint.
