> ## Documentation Index
> Fetch the complete documentation index at: https://www.cashfree.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Controlled Subscription Payments

> Drive pre-debit notification and charge execution yourself with the controlled subscription payment APIs for UPI Autopay and card mandates.

The controlled payment flow for UPI Autopay and card mandate subscriptions gives you explicit control over when to notify your customers and when to execute the debit. This is a significant change if you need to comply with pre-debit notification rules for UPI Autopay and card mandates.

<Note>The controlled flow supports UPI Autopay and card mandates. eNACH and Physical NACH (PNACH) mandates are not supported.</Note>

## How it works

The controlled flow replaces the automatic charge trigger with a two-step process you drive:

1. **Send a pre-debit notification**: Notify your customer of the upcoming charge amount before the debit window opens.
2. **Execute the charge**: Trigger the mandate debit after the compliance window elapses. The debit amount must exactly match the notified amount; a mismatch causes the issuing bank to decline the transaction.

<Warning>
  Controlled charging is a two-step flow in which you send the pre-debit notification and trigger the debit. Cashfree does not automatically retry a failed attempt. You must trigger each attempt yourself.
</Warning>

## API endpoints

The following endpoints support the controlled notification and execution flow:

| API | Method | Description |
| - | - | - |
| [Create Controlled Notification](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/create-controlled-notification) | `POST /subscriptions/pay/controlled/notify-mandate` | Send a pre-debit notification to the customer |
| [Fetch Controlled Notification](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/fetch-controlled-notification) | `GET /subscriptions/payments/{payment_id}/controlled/notifications/{notification_id}` | Retrieve a single notification |
| [Fetch All Controlled Notifications](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/fetch-controlled-notifications) | `GET /subscriptions/payments/{payment_id}/controlled/notifications` | List all notifications for a payment |
| [Create Controlled Execution](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/create-controlled-execution) | `POST /subscriptions/pay/controlled/execute-mandate` | Trigger the mandate debit after the notification window |
| [Fetch Controlled Execution](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/fetch-controlled-execution) | `GET /subscriptions/payments/{payment_id}/controlled/executions/{execution_id}` | Retrieve a single execution |
| [Fetch All Controlled Executions](/docs/api-reference/payments/previous/v2025-01-01/subscription/payment/controlled/fetch-controlled-executions) | `GET /subscriptions/payments/{payment_id}/controlled/executions` | List all execution attempts for a payment |

For UPI Autopay mandates, NPCI enforces blackout windows during which attempts are rejected. When this happens, the error response tells you the next permitted timestamp. Use this timestamp to schedule your next attempt instead of retrying immediately.

## Webhooks

Subscribe to both events rather than polling:

* [`SUBSCRIPTION_CONTROLLED_NOTIFICATION_STATUS`](/docs/api-reference/payments/previous/v2025-01-01/subscription/webhooks#subscription_controlled_notification_status): A notification attempt reached a terminal state.
* [`SUBSCRIPTION_CONTROLLED_EXECUTION_STATUS`](/docs/api-reference/payments/previous/v2025-01-01/subscription/webhooks#subscription_controlled_execution_status): A charge attempt reached a terminal state.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.