m2pfintech
API LibraryIssuance

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

SingleBulk
issuanceType"Single""Bulk"
beneficiaries array1 item2 – N items
Immediate responseFull card detailsCREATED status only
Per-beneficiary rejectNot applicablereject-beneficiaries endpoint
Bulk CSV uploadNot applicablefile/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 creation
  • ntbApplication: 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.

POST
/v1/corporate-issuances/

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

Query Parameters

proofOfIdentity?unknown

Identity proof document (PDF/JPG/PNG, max 5MB)

proofOfAddress?unknown

Address proof document (PDF/JPG/PNG, max 5MB)

Header Parameters

X-TENANT-ID*string

Your unique tenant identifier

Request Body

application/json

applicationNumber*string

Required. Unique application number

Length1 <= length
issuanceType?string
Value in"Single" | "Bulk"
ntbApplication?boolean

true for new customers, false for existing

customer?

Customer details for card issuance

beneficiaries*

Required. List of card beneficiaries

Items1 <= items
summary?

Issuance 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 → use feeDetails.LOAD_FEE or feeDetails.REGISTRATION_FEE
  • issuanceFee → use feeDetails.REGISTRATION_FEE.feeAmount
  • issuanceTax → use feeDetails.REGISTRATION_FEE.taxAmount
issuer*

Issuer hierarchy details

loadDescription?object
mobile?
otp?string

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.