Register a new customer with card and wallet
Register and activate a customer in the prepaid program. This single API call creates a customer profile, issues a card (virtual or physical), and sets up a wallet.
Field requirements are configuration-driven per tenant. Fields marked as Conditional depend on your tenant BusinessCustomFields settings including sor.model, customer.id.type, and unique.field configurations.
For new card issuance, provide cardType as V (Virtual) or P (Physical). For activating a pre-printed card, provide the kitNo instead. Do not send both cardType and kitNo together for pre-printed card activation. If neither cardType nor kitNo is provided, the API returns an error.
Idempotent on contactNo plus idNumber combination when tenant-level uniqueness check is enabled.
Always Mandatory Fields - contactNo (always validated for uniqueness), business or businessType (at least one required), entityId.
SOR Flow Dependent Fields - When SOR integration is enabled (sor.model = SOR_REG_REQUIRED or SOR_KYC_REQUIRED or SOR_KYC_OPTIONAL), firstName, lastName, gender, specialDate, emailAddress, address, city, state, pincode, kycStatus, programName, programType, and partnerCustomerId become mandatory.
ID Validation - When BusinessCustomField customer.id.type is configured, idType and idNumber become mandatory. Validation rules apply per document type (e.g. Aadhaar uses Verhoeff algorithm).
Uniqueness Validation - Configured via BusinessCustomField unique.field, controls how many registrations are allowed per contactNo or idNumber per day, month, year, or overall.
Click to Pay Auto-Enrollment - When Click to Pay (CTP) is enabled for the tenant (BUSINESSCUSTOMFIELD click.to.pay.enable = Y|ALL), successful registration automatically triggers CTP enrollment with Visa. The CTP registration happens asynchronously and the customer's CTP status can be tracked via the CTP fetchEntityDetails or fetchRequestStatus APIs.
Authorization
BearerAuth TenantHeader JWT Bearer token obtained from the /auth/login endpoint
In: header
Tenant identifier provided by M2P (e.g. ENBDTABBY)
In: header
Request Body
application/json
Unique customer identifier from the client system (alphanumeric). Always mandatory.
length <= 50Business identifier. Required if businessType is not provided. At least one of business or businessType must be present.
length <= 10Type of business. Required if business is not provided.
length <= 10Business identifier provided by M2P
length <= 50Unique mobile number with dial code (e.g. +971 for UAE, +91 for India). Always validated for uniqueness across all tenants.
length <= 15Customer first name. Conditional - required only if SOR flow is enabled for your tenant.
length <= 30Customer last name. Conditional - required only if SOR flow is enabled.
length <= 30Gender code. M for male, F for female, O for other. Conditional - required only if SOR flow is enabled.
length <= 1"M" | "F" | "O"Date of birth in YYYY-MM-DD format. Conditional - required only if SOR flow is enabled.
dateValid email address. Conditional - required only if SOR flow is enabled.
length <= 50Street address line 1. Conditional - required only if SOR flow is enabled.
length <= 30Additional address line. Always optional - never validated at any level.
length <= 30City name. Conditional - required only if SOR flow is enabled.
length <= 20State name. Conditional - required only if SOR flow is enabled.
length <= 20Country name where customer resides. Always optional.
length <= 20Postal code (6 digits for India). Conditional - required only if SOR flow is enabled.
length <= 15Country code (e.g. IN, US). Always optional.
length <= 20Country of card issuance. Always optional.
length <= 20Identity document type. Conditional - required only if BusinessCustomField customer.id.type is configured for your tenant. Valid values depend on tenant config (e.g. PAN, AADHAAR, PASSPORT, VOTER_ID, DRIVING_LICENSE, TEST_AADHAAR).
length <= 20Identity document number. Required whenever idType is provided. Validation is applied per document type.
length <= 20Identity document expiry date in YYYY-MM-DD format. Always optional - not validated.
dateKYC type. Conditional - required only if SOR flow is enabled.
length <= 20"FULL_KYC" | "MIN_KYC"Card type for new issuance. V for virtual card, P for physical card, PP for pre-printed. Required for new card issuance when kitNo is not provided. System auto-assigns a kit from inventory.
length <= 2Pre-printed card kit number for activating a pre-embossed physical card. Required only when activating a pre-printed card. Do not use for new card issuance.
length <= 20Customer title such as Mr, Ms, or Mrs. Always optional.
length <= 4Program name. Conditional - required only if SOR flow is enabled.
length <= 20Program type identifier. Conditional - required only if SOR flow is enabled.
length <= 20Partner customer ID from the issuer system. Conditional - required only if SOR flow is enabled.
length <= 50e-KYC reference number. Always optional.
length <= 100OTP for verification if required by tenant configuration. Always optional.
Array of additional identity documents for KYC. Always optional - can be null or empty.
Multi-address structure with contact details. Optional unless SOR flow is enabled.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.m2p.com/Yappay/registration-manager/v3/register" \ -H "Content-Type: application/json" \ -d '{ "entityId": "12345678", "businessType": "BUSINESS", "contactNo": "+919876543210", "firstName": "Ashish", "lastName": "Gupta", "cardType": "V" }'{
"result": {
"entityId": "12345678",
"sorCustomerId": "FTX31RE22TJW",
"kycStatus": "FULL_KYC",
"kycExpiryDate": "2031-06-18",
"kycRefNo": null,
"status": 0
},
"exception": null,
"pagination": null
}{
"result": null,
"exception": {
"detailMessage": "Mandatory field entityId is missing",
"shortMessage": "Missing mandatory field",
"errorCode": "Y105",
"languageCode": "en"
},
"pagination": null
}{
"result": null,
"exception": {
"detailMessage": "Customer Already Registered",
"shortMessage": "Customer Already Registered",
"errorCode": "Y503",
"languageCode": "en"
},
"pagination": null
}{
"result": null,
"exception": {
"detailMessage": "Product not available for this tenant",
"shortMessage": "Product not available",
"errorCode": "REG_020",
"languageCode": "en"
},
"pagination": null
}{
"result": null,
"exception": {
"detailMessage": "An unexpected error occurred",
"shortMessage": "Internal error",
"errorCode": "SYS_001",
"languageCode": "en"
},
"pagination": null
}Remove a card from Click to Pay POST
Remove a specific card/kit from the Visa Click to Pay network without removing the customer enrollment. The customer remains active on CTP with their other cards. Validations: 1. Entity CTP status must be ACTIVE 2. Kit CTP status must be ACTIVE
Update customer details POST
Update an existing customer profile. Only the fields provided in the request body will be updated. All other fields remain unchanged. The entityId field is the only mandatory field for identifying the customer. Important - Do not use this API to modify KYC details. This API is intended for updating contact information such as email, phone number, address, and name fields. The profileId field can optionally be used to update the fee or limit profile associated with the customer card.
