Transaction lifecycle
The following diagram shows how transactions progress from order creation to final state:
Key concepts
Two critical concepts in payment flows are order expiry time and Transaction Time Limit (TTL). Understanding these concepts helps you manage your payment flows effectively.Transaction Time Limit (TTL)
Transaction Time Limit (TTL), also referred to as Transaction Completion Time (TCT), defines the maximum time allowed for a payment attempt.During this period, the transaction will reach one of the following final statuses: SUCCESS, FAILED, or USER DROPPED.
It ensures predictable transaction behaviour and helps minimise financial risk for both merchants and customers.
Order expiry time
Order expiry time specifies the duration for which an order remains valid and can be used to initiate a new payment attempt.Order expiry time vs TTL
Concept | Starts from | Definition | Behaviour |
---|---|---|---|
Order expiry time | Order creation time. | Duration within which a customer must initiate a payment attempt. | Once expired, no new payment attempts can be made. |
Transaction time limit | When the customer selects a payment method. | Maximum time allowed for the last payment attempt to reach a terminal state. | Even if the order expiry time passes, the last attempt is honoured until the TTL ends. |
Order finalisation process
The following steps describe how a payment is finalised:- Payment succeeds within TTL → Order is PAID, even if order expiry time passed.
- An order marked as EXPIRED can still move to PAID if a payment attempt was started before the expiry and completed successfully within the TTL window, even if the confirmation comes after the expiry time.
- If payment fails or the user drops → Order remains EXPIRED.
- When TTL ends, any non-terminal payments are automatically closed in a terminal state.
How order expiry time and TTL work
- Order creation time: 10:00 AM
- Order expiry time: 15 minutes
- TTL: 20 minutes
- No payment attempt: If the customer does not select any payment method → Order moves from ACTIVE to EXPIRED at 10:15 AM
- Payment attempt before expiry:
- Customer selects a payment method at 10:02 AM
- TTL starts → transaction allowed until 10:22 AM
- Even though the order expiry time is 10:15 AM, since a payment attempt is in progress, Cashfree waits until 10:22 AM
- At 10:15 AM order moved to EXPIRED status.
- If payment succeeds at 10:21 AM → Order status will change from EXPIRED to PAID.
- If payment fails or is dropped → Order remains EXPIRED.
Order TTL flowchart
The following flowchart shows how order expiry time and TTL affect an order’s final state:
Significance of TTL
TTL helps prevent financial loss and ensures a smoother customer experience in scenarios such as:- Customers initiate payment just before order expiry.
- Banks or Payment Service Providers (PSPs) take additional time to confirm transactions.
Use cases
TTL is especially critical for industries where prices fluctuate rapidly, such as stock trading platforms, airline ticket sales, commodities, and flash sales. Example: Flight fares may change every minute. With TTL, once a customer locks a price by initiating payment, Cashfree continues to wait for confirmation even if the order has technically expired, ensuring the transaction is honoured at the locked price.Configure order expiry time and TTL
Follow these steps to configure order expiry time and TTL in the Merchant Dashboard:- Log in to the Merchant Dashboard.
- Navigate to Settings > Preferences.
- Set order expiry time: Minimum 5 minutes, maximum 30 days.
- Set Transaction Time Limit (TTL): Minimum 10 minutes, maximum 24 hours.
- Click Save Changes to apply your updates.

Order states
Order State | Description |
---|---|
ACTIVE | Orders are marked as ACTIVE, when an order is created by the merchant through an API request to Cashfree Payments. |
PAID | Orders are marked PAID when the payment is verified by Cashfree Payments and the payment is successful. |
EXPIRED | Orders are marked as EXPIRED when the order has exceeded order_expiry_time specified by merchant to complete the order. |
TERMINATED | This status is returned when you request order termination through the Order Termination API. Once terminated, customers can no longer pay for this order. |
TERMINATION_REQUESTED | This status is returned after you call the Order Termination API to end an order. The termination request is acknowledged but still processing. Orders can only be terminated when all transactions have reached terminal states. If a pending transaction completes successfully while termination is processing, the status will change from TERMINATION_REQUESTED to SUCCESS. |
Payment states
Payment State | Description |
---|---|
SUCCESS | Transactions are marked as SUCCESS when we get a successful response from the bank, and we can capture the amount in our system. Once payment is marked as SUCCESS, we mark the order as PAID. |
FAILED | Transactions are marked as FAILED when we get a failed response from the bank. |
NOT_ATTEMPTED | Transactions are marked as NOT_ATTEMPTED initially when a transaction is created and an acknowledgement is awaited from the bank. |
PENDING | Transactions are marked as PENDING when we have successfully sent the request to the bank but waiting for a response from the bank. |
FLAGGED | Transactions are marked as FLAGGED if we have identified any risks associated with the transaction. |
CANCELLED | Transactions are marked as CANCELLED when there is success response post time to live. In this case, the amount will be reversed to the customer without any charge being levied to them or the merchant. |
VOID | Transactions are marked as VOID when we do not want to capture the transaction amount. This is only applicable for card-based pre-authorized transactions or to UPI one-time mandates. The amount is reversed immediately in these cases by Cashfree. |
USER_DROPPED | Transactions are marked as USER_DROPPED when customers drop out of the payment flow without completing the transaction. It will help you understand if customers attempted to pay or not. Some common scenarios where the transaction will be marked as USER_DROPPED are: Android UPI intent payments: When a user clicks on the back button in the UPI app without making any payment attempt. Card payments: When a user drops out of the payment flow by closing the OTP verification page. UPI collect transactions: When a user does not enter the UPI PIN and closes the transaction screen. |