m2pfintech
API LibraryCustomer Management

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.

POST
/Yappay/registration-manager/v3/register

Authorization

BearerAuth TenantHeader
AuthorizationBearer <token>

JWT Bearer token obtained from the /auth/login endpoint

In: header

TENANT<token>

Tenant identifier provided by M2P (e.g. ENBDTABBY)

In: header

Request Body

application/json

entityId*string

Unique customer identifier from the client system (alphanumeric). Always mandatory.

Lengthlength <= 50
business?string

Business identifier. Required if businessType is not provided. At least one of business or businessType must be present.

Lengthlength <= 10
businessType?string

Type of business. Required if business is not provided.

Lengthlength <= 10
businessId?string

Business identifier provided by M2P

Lengthlength <= 50
contactNo*string

Unique mobile number with dial code (e.g. +971 for UAE, +91 for India). Always validated for uniqueness across all tenants.

Lengthlength <= 15
firstName?string

Customer first name. Conditional - required only if SOR flow is enabled for your tenant.

Lengthlength <= 30
lastName?string

Customer last name. Conditional - required only if SOR flow is enabled.

Lengthlength <= 30
gender?string

Gender code. M for male, F for female, O for other. Conditional - required only if SOR flow is enabled.

Lengthlength <= 1
Value in"M" | "F" | "O"
specialDate?string

Date of birth in YYYY-MM-DD format. Conditional - required only if SOR flow is enabled.

Formatdate
emailAddress?string

Valid email address. Conditional - required only if SOR flow is enabled.

Lengthlength <= 50
address1?string

Street address line 1. Conditional - required only if SOR flow is enabled.

Lengthlength <= 30
address2?string

Additional address line. Always optional - never validated at any level.

Lengthlength <= 30
city?string

City name. Conditional - required only if SOR flow is enabled.

Lengthlength <= 20
state?string

State name. Conditional - required only if SOR flow is enabled.

Lengthlength <= 20
country?string

Country name where customer resides. Always optional.

Lengthlength <= 20
pincode?string

Postal code (6 digits for India). Conditional - required only if SOR flow is enabled.

Lengthlength <= 15
countryCode?string

Country code (e.g. IN, US). Always optional.

Lengthlength <= 20
countryofIssue?string

Country of card issuance. Always optional.

Lengthlength <= 20
idType?string

Identity 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).

Lengthlength <= 20
idNumber?string

Identity document number. Required whenever idType is provided. Validation is applied per document type.

Lengthlength <= 20
idExpiry?string

Identity document expiry date in YYYY-MM-DD format. Always optional - not validated.

Formatdate
kycStatus?string

KYC type. Conditional - required only if SOR flow is enabled.

Lengthlength <= 20
Value in"FULL_KYC" | "MIN_KYC"
cardType?string

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.

Lengthlength <= 2
kitNo?string

Pre-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.

Lengthlength <= 20
title?string

Customer title such as Mr, Ms, or Mrs. Always optional.

Lengthlength <= 4
programName?string

Program name. Conditional - required only if SOR flow is enabled.

Lengthlength <= 20
programType?string

Program type identifier. Conditional - required only if SOR flow is enabled.

Lengthlength <= 20
partnerCustomerId?string

Partner customer ID from the issuer system. Conditional - required only if SOR flow is enabled.

Lengthlength <= 50
eKycRefNo?string

e-KYC reference number. Always optional.

Lengthlength <= 100
otp?string

OTP for verification if required by tenant configuration. Always optional.

documents?|null

Array of additional identity documents for KYC. Always optional - can be null or empty.

addressDto?|null

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
}