m2pfintech
API LibraryCustomer

Update Customer Account Status

Changes the customer's account status. Only valid status transitions are allowed.

Valid Statuses

StatusDescription
ACTIVEAccount is fully operational
LOCKEDTemporarily locked (can unlock)
BLOCKEDBlocked by admin (terminal for some transitions)
FRAUDFlagged for fraud
INACTIVEAccount inactive
CUSTOMER_BLOCKEDBlocked at customer request
CREDIT_FREEZECredits blocked, debits allowed
DEBIT_FREEZEDebits blocked, credits allowed
REFUND_ONLYOnly refund transactions allowed
CLOSEDAccount permanently closed
EXPIREDAccount expired

Invalid Transitions

Attempting an invalid transition (e.g., CREDIT_FREEZE → CREDIT_FREEZE) returns error code PPCUST_032.

POST
/v1/customers/update/status

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

entityId*string

Required. Customer entity ID

Length1 <= length
status*string

Required. Target status

Value in"ACTIVE" | "LOCKED" | "BLOCKED" | "FRAUD" | "INACTIVE" | "CUSTOMER_BLOCKED" | "CREDIT_FREEZE" | "DEBIT_FREEZE" | "REFUND_ONLY" | "CLOSED" | "EXPIRED"

Response Body

application/json

application/json

application/json

curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/customer/v1/customers/update/status" \  -H "X-TENANT-ID: ACME_CORP" \  -H "Content-Type: application/json" \  -d '{    "entityId": "750244137320000234050825",    "status": "CREDIT_FREEZE"  }'
{
  "result": {
    "entityId": "750244137320000234050825",
    "status": "CREDIT_FREEZE"
  },
  "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": "Invalid Status Transition from : CREDIT_FREEZE to CREDIT_FREEZE",
  "status": 409,
  "detail": "Invalid Status Transition from : CREDIT_FREEZE to CREDIT_FREEZE",
  "message": "error.business",
  "businessCode": "PPCUST_032"
}

Process Account Action State Transition (Checker) POST

Approves or rejects a **pending** account action request as the **checker** step of the maker-checker workflow. The checker must be a different user than the one who created the original request (maker). ### State Machine ``` PENDING ──(APPROVED)──▶ APPROVED PENDING ──(REJECTED)──▶ REJECTED ``` Any other transition (e.g. trying to approve an already-approved request) returns a 409 `invalidStateTransitionError`. ### Notes - `id` is the unique maker-checker record ID returned in the `result.id` field of the `/v1/accounts/update` response. - `userId` must be the checker's user ID and **cannot** match the maker's `sourceUser`. - `reason` is an optional free-text array explaining the checker's decision.

Update Customer Profile POST

Updates customer profile details including personal information, address, communication preferences, and identity documents. ### Updatable Fields - **Personal**: firstName, lastName, gender, DOB, email - **Address**: permanentAddress, communicationAddress - **Identity**: PAN, nationalIdentity documents - **Banking**: cbsAccountNumber, CIF, customerId - **Risk**: riskRating, customerOccupation, politicallyExposed - **Custom**: customerAdditionalDetails (key-value metadata) ### Important Notes - `entityId` is required and identifies which customer to update - Only provided fields are updated — omitted fields remain unchanged - Status changes should use the dedicated Update Status endpoint