---
page_source: https://docs.juspay.io/upi-inapp/flutter/mandate-callbacks-and-flow/p2m-mandate
page_title: P2M Mandate
---


## P2M Mandate (Both customer and merchant are on our stack)



Customer initiates the mandate from sdk. Callback: **Outgoing Create Mandate From Customer** . Refer [Callbacks](../backend-apis/callbacks).

1. **Recurring** 
   
   * **If the Mandate creation was successful** , we will go for execution (1st debit)Based on the execution of Mandate , we will give back two Callback:
     
     1. **Mandate status** If execution successful then state changes from **CREATED -> ACTIVE** ,and we send mandate status callback with event_name = **MANDATE_ACTIVATED** . If execution unsuccessful then state changes from **CREATE -> FAILURE** , and we send mandate status callback with event_name = **MANDATE_FAILED**
     2. **Transaction status** If execution successful then transaction status will change to **CHARGED**  and we will send Transaction status callback with event_name = **ORDER_SUCCEEDED** . If execution not successful then transaction status will change to failure state ( AUTHENTICATION_FAILED / AUTHORIZATION_FAILED etc ) and we will send Transaction status callback with event_name = **ORDER_FAILED**
   * **If the Mandate creation was not successful** the status of Mandate will change from **CREATED -> FAILURE** , and also the status of transaction will change.Callback :
     
     1. **Mandate status** (event_name = **MANDATE_FAILED** )
     2. **Transaction status** (event_name = **ORDER_FAILED** )
     3.
2. **ONE TIME** 
   
   1. **Mandate Status** 
      
      * If successful then state changes from **CREATED -> ACTIVE** , and we send mandate status callback with event_name = **MANDATE_ACTIVATED**
      * If unsuccessful then state changes from **CREATE -> FAILURE** , and we send mandate status callback with event_name = **MANDATE_FAILED**
   2. **Transaction Status** 
      
      * If successful then transaction status will change to**CHARGED** and we will send Transaction status callback with event_name = **ORDER_SUCCEEDED**
      * If Not successful then transaction status will change to failure state ( AUTHENTICATION_FAILED / AUTHORIZATION_FAILED etc ) and we will send Transaction status callback with event_name = **ORDER_FAILED**
      *
   
   * **Merchant Goes for execution** Callbacks:
     
     1. **Transaction status** (This will be for the new order id )
        
        * If successful then transaction status will change to**CHARGED** and we will send Transaction status callback with event_name = **ORDER_SUCCEEDED**
        * If Not successful then transaction status will change to failure state ( AUTHENTICATION_FAILED / AUTHORIZATION_FAILED etc ) and we will send Transaction status callback with event_name = **ORDER_FAILED**
     2. If blockFund = false
     3. **Incoming Pre Payment Notification Mandate For Customer**
     4. Amount greater than > 5000 rupees then callback:**Incoming Collect Request to Customer**
     5. **MERCHANT_CUSTOMER_DEBITED_FOR_MERCHANT_VIA_COLLECT**
     6. If blockFund = true
     7. **MERCHANT_CUSTOMER_DEBITED_FOR_MERCHANT_VIA_COLLECT**
3. **Update** 
   
   * **RECURRING OR ONE TIME MANDATE with blockFund = false** Since customer has initiated the Mandate, so only customer can update and not the Merchant. No approval needed for the same.Callbacks:
     
     1. **Outgoing Update Mandate From Customer**
     2. Mandate status callback with event_name = **MANDATE_UPATED**
   * **ONE TIME MANDATE with blockFund = true** Please note this is not IPO Mandate case, for IPO mandate creation will be done by exchange and not the customer. Neither customer nor the merchant can update.
4. **Revoke** 
   
   * **RECURRING OR ONE TIME MANDATE with blockFund = false** 
     
     * Customer goes for revoke. Callback:
       
       1. **Outgoing Update Mandate From Customer**
       2. Mandate status callback with event_name = **MANDATE_REVOKED**
     * Merchant goes for revoke. Callback:
       
       1. **Incoming Update Mandate For Customer**
       2. mandate status callback with event_name =**MANDATE_REVOKED**
   * **ONE TIME MANDATE with blockFund = true** 
     
     * Since the funds are blocked, customer cannot revoke. Merchant goes for revoke. Callback:
       
       1. **Incoming Update Mandate For Customer**
5. **Pause / Unpause** 
   
   * **RECURRING OR ONE TIME MANDATE with blockFund = false** Only the customer can pause / unpause the mandate. No approval needed for the same. Callbacks:
     
     1. **Outgoing Pause Mandate From Customer**  (mandate_type as PAUSE or UNPAUSE)
     2. Mandate status callback with event_name = **MANDATE_PAUSED** (Mandate_type as PAUSE or UNPAUSE)
     3. or
     4. mandate status callback with event_name = **MANDATE_ACTIVE**  (if unpause)
   
   * **RECURRING OR ONE TIME MANDATE with blockFund = false** Neither customer nor the merchant can pause.