Process Account Action State Transition (Checker)
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
idis the unique maker-checker record ID returned in theresult.idfield of the/v1/accounts/updateresponse.userIdmust be the checker's user ID and cannot match the maker'ssourceUser.reasonis an optional free-text array explaining the checker's decision.
Authorization
bearerAuth tenantId JWT Bearer token from the Authentication API
In: header
Your unique tenant identifier assigned during onboarding
In: header
Header Parameters
Your unique tenant identifier
Request Body
application/json
Unique identifier of the maker-checker record to transition. Returned as result.id in the /v1/accounts/update response.
Target status. Must be APPROVED or REJECTED.
"APPROVED" | "REJECTED"User ID of the checker. Cannot be the same as the maker's sourceUser.
Optional state code for the transition.
Optional description of the state transition decision.
Optional list of reasons for the approval or rejection.
Response Body
application/json
application/json
application/json
curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/customer/v1/accounts/state-transition" \ -H "X-TENANT-ID: ACME_CORP" \ -H "Content-Type: application/json" \ -d '{ "id": "6612f0a1b2c3d4e5f6a7b8c9", "toStatus": "APPROVED", "userId": "CHECKER001", "stateCode": "ST001", "stateDescription": "Verified all documents", "reason": [ "Customer documents verified", "Complies with closure policy" ] }'{
"result": {
"id": "6612f0a1b2c3d4e5f6a7b8c9",
"customerEntityId": "750244137320000234050825",
"accountEntityId": "750244137320000234050825-ACC01",
"actionType": "CLOSURE",
"status": "APPROVED",
"message": "Account action request approved successfully"
},
"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": "Record not found",
"status": 409,
"detail": "No account action record found for id: 6612f0a1b2c3d4e5f6a7b8c9",
"message": "error.business",
"businessCode": "PPCUST_010"
}Get Customer Usage Details (LRS Limits) POST
Retrieves the customer's transaction usage/limits consumed, aggregated by base currency and transaction type. This is critical for forex operations to track **LRS (Liberalised Remittance Scheme)** limits. ### Use Cases - Check how much of the ₹7 lakh LRS limit has been consumed - Validate load eligibility before initiating forex card load - Display usage summary in partner app ### Response Structure Returns usage broken down by: - **Base currency** (USD, INR, etc.) - **Transaction type** (LOAD, LOAD_DIY, etc.) - **Time period** (daily, monthly, yearly, overall)
Update Customer Account Status POST
Changes the customer's account status. Only valid status transitions are allowed. ### Valid Statuses | Status | Description | |--------|-------------| | `ACTIVE` | Account is fully operational | | `LOCKED` | Temporarily locked (can unlock) | | `BLOCKED` | Blocked by admin (terminal for some transitions) | | `FRAUD` | Flagged for fraud | | `INACTIVE` | Account inactive | | `CUSTOMER_BLOCKED` | Blocked at customer request | | `CREDIT_FREEZE` | Credits blocked, debits allowed | | `DEBIT_FREEZE` | Debits blocked, credits allowed | | `REFUND_ONLY` | Only refund transactions allowed | | `CLOSED` | Account permanently closed | | `EXPIRED` | Account expired | ### Invalid Transitions Attempting an invalid transition (e.g., CREDIT_FREEZE → CREDIT_FREEZE) returns error code `PPCUST_032`.
