m2pfintech

Update Wallet Status

Updates the status of a specific wallet associated with a cardholder. This is used for controlling what transactions are allowed on the wallet. Common scenarios include:

Use Cases

  • Temporary Freeze: Lock a wallet when suspicious activity is detected. The cardholder can't transact but you can unlock it later without losing any data.
  • Permanent Block: Block a wallet for compliance violations or confirmed fraud. Requires support intervention to unblock.
  • Fraud Prevention: Mark a wallet as FRAUD to suspend all operations pending investigation.
  • Customer Self-Service: Allow cardholders to block their own wallet via your app (CUSTOMER_BLOCKED status).
  • Credit Freeze: Prevent new loads while allowing the cardholder to spend existing balance.
  • Debit Freeze: Allow loads/credits but prevent spending (e.g., during dispute investigation).
  • Refund Only: After card closure, allow only refund credits to process.
  • Reactivation: Change status back to ACTIVE to restore full transaction capabilities.

Status Transition Rules

Not all status transitions are allowed. Key constraints:

  • CLOSED → Cannot transition to any other status (permanent)
  • EXPIRED → Cannot transition to any other status (permanent)
  • FRAUD → Can only be changed by authorized support roles
  • BLOCKED → Can only be unblocked by authorized support roles
  • LOCKED → Can be changed to ACTIVE (unlock) by the partner
  • ACTIVE → Can transition to LOCKED, BLOCKED, CREDIT_FREEZE, DEBIT_FREEZE, etc.
POST
/v1/wallets/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 assigned during partner onboarding

Request Body

application/json

Wallet identification and target status

accountId*string

Required. Unique identifier for the wallet/account. Each wallet within a card has a distinct account ID. For multi-currency cards, each currency wallet has its own account ID. Obtained from the issuance response or Fetch All Cards API.

Length1 <= length
entityId*string

Required. Unique entity identifier for the cardholder. Used together with accountId to verify ownership of the wallet.

Length1 <= length
status*string

Required. Target status for the wallet. See the Wallet Status Lifecycle table in the API overview for allowed transitions.

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/wallets/update/status" \  -H "X-TENANT-ID: ACME_CORP" \  -H "Content-Type: application/json" \  -d '{    "accountId": "17556437212850072",    "entityId": "798782647420001622070825",    "status": "LOCKED"  }'

{
  "result": {
    "accountId": "17556437212850072",
    "entityId": "798782647420001622070825",
    "status": "LOCKED",
    "message": "Wallet status updated successfully"
  },
  "pagination": null
}

{
  "type": "https://www.m2pfintech.com/problem/problem-with-message",
  "title": "Bad Request",
  "status": 400,
  "detail": "accountId: must not be empty",
  "message": "error.http.400"
}

{
  "type": "https://www.m2pfintech.com/problem/problem-with-message",
  "title": "Customer does not exist",
  "status": 409,
  "detail": "Customer does not exist for id: 798782647420001622070825",
  "message": "error.business",
  "businessCode": "PPCUST_002"
}