UPI Collections - Configurations and Status Values

An overview of the various configurations available to our merchants, the status values propagated by our system, and examples of how they are linked.

Configurations

These configurations play a vital role in ensuring that your platform is able to customize our payment flows as per your business needs.

ConfigurationsStatusDescription
Auto-RefundEnabledWith this configuration enabled, our system will automatically refund the payment to the payer's source account when we encounter the scenarios listed below (a.k.a., edge cases):

- A successful payment is received after a payment request has expired
- A successful payment is received after a failed attempt (when auto-retry is disabled)
- Multiple success payment attempts are made against the same payment request
- The amount paid by the payer is different from the requested payment amount.
Auto-RefundDisabledWith this configuration disabled, you will have full control on how to handle edge cases:

- Our system will mark such payments as HOLD
- You can then use the Release/Capture API to refund the payment or have it settled to your account.
Auto RetryEnabledThis configuration allows your customers (payer) to undertake multiple attempts to authenticate and complete the payment.
Auto RetryDisabledIf this is disabled, the customers (payer) will only have a single attempt to authenticate and complete the payment.

Payment Status Values

We understand that keeping track of your payment status is important. To provide clarity, we've outlined the different levels of payment statuses and how they relate to each other.

Payment Status Hierarchy

Our system uses a hierarchical approach to track your payments, ensuring accurate and detailed information on the payment lifecycle. This hierarchy includes:

  • Transaction Status: This represents the final status of your payment request.
  • Transaction Attempt Status: This reflects the status of individual payment attempts made by the payer.
  • Action Values: These indicate specific actions taken, on transaction attempt, by the:
    • Merchant regarding a "HOLD" attempt when Auto-Refund is Disabled.
    • Our System when Auto-Refund is Enabled.

Understanding Each Level

Transaction Status (The Big Picture)

This status provides the current status of your payment request. It answers the questions: "What is happening with my payment request and what is the final status in the end?"

Possible Transaction Statuses:

Transaction StatusDescription
REQUEST UNITIALZIEDThe payment request could not be registered due to a technical error. Please call the API again.
PENDINGThe payment request has been registered and we are awaiting an action from the payer
SUCCESSThe payer completed the payment successfully
FAILEDThe payment attempt by the payer has failed.

This value will only be possible at a Transaction Status level when auto-retry is disabled and when:

1. The payment attempt fails at source
2. A DEEMED status is updated to FAILED.
EXPIREDNo payment attempts were made by the payer and the expiry period has elapsed.
DEEMEDThe payment was processed but the final (terminal) status could not be confirmed with NPCI. Such transactions normally reach their terminal state within T+ 3 days.
DISPUTED_AMOUNTThe amount paid by the payer is not equal to the amount requested when the payment request was created.

Transaction Attempt Status (The Details)

This status tracks individual attempts to process your payment. It answers the question: "How did each attempt to process my payment go?"

📘

Relationship to Transaction Status: A single transaction can have multiple attempts mapped against it. This means a "Transaction Status" can be linked to many "Transaction Attempt Statuses" irrespective of the active configurations. This is because the status mapping is driven solely by the number of payment attempts performed against a single payment request.

Possible Transaction Attempt Statuses:

Transaction Attempt StatusDescription
SUCCESSThe payer completed the payment successfully
FAILEDThe payment attempt by the payer has failed due to lack of account balance, incorrect MPIN, or some other reason related to technical or risk failures.
DEEMEDThe payment was processed but the final (terminal) status could not be confirmed with NPCI. Such transactions normally reach their terminal state within T+ 3 days.
HOLDA status mapped when you opt to enable the Hold functionality (a.k.a. auto-refund disabled) in order to manage edge cases. This allows you to manually select if you want to retain (capture) or refund (release) the funds.

Action Values (Managing Edge Cases)

These values are populated based on the payment scenario and the Auto-Refund configuration. They indicate the specific action taken, either by your platform or by our system, for a specific transaction attempt.

Possible Action Values:

Action ValuesDescription
CapturedAn action performed by the merchant to retain any transaction, that is placed on Hold, for settlement.
ReleasedAn action performed by the merchant to refund any transaction that is placed on Hold.
Auto-refundedWhen a successful payment is received after a payment request has expired or duplicate payments attempts are received, merchants can opt to configure the Auto-Refund functionality. With this configuration enabled, the funds are automatically refunded to the payer's source account.

How They Work Together

You want to collect a UPI payment from your customer (payer) . You initiate one of our collection APIs and receive the payment link in the response, which you then share with the customer.

  • The "Transaction Status" starts as "PENDING."

  • The first payment attempt might fail due to a technical issue or because the user entered the wrong MPIN.

    • We will mark this "Transaction Attempt" as "FAILED"
  • If Auto-Retry is

    • Disabled, we mark the "Transaction Status" as "FAILED" and send the Transaction Status Callback to your platform.
    • Enabled, the payer can initiate another payment via the same shortlink and the "Transaction Status" remains as "PENDING"
  • The second "Transaction Attempt" is successfully completed by the customer!

    • We will mark this "Transaction Attempt" as "SUCCESS".
    • Finally, the "Transaction Status" will be updated to "SUCCESS" and we will send the Transaction Status Callback to your platform.
  • However, if a payment comes in after the payment link had expired and:

    • Auto-refund is _disabled _for your account, the "Transaction Attempt " will be marked as "HOLD"
      • Our system will alert you by sending a Transaction Status Callback where the transaction_attempt_status value will be "HOLD"
      • You can then choose to "Release" or "Capture" the funds.
      • Based on the action you choose, the action value will be "RELEASED" or "CAPTURED"
    • Auto-refund is _enabled _for your account, the "Transaction Attempt " will be marked as "SUCCESS"
      • Our system will update the action value to "AUTO_REFUNDED"
  • As the final step, our system will send another Transaction Status Callback with the updated and terminal (final) values for the following parameters:

    • transaction_status
    • transaction_attempt_status
    • action

    Payment Scenarios

    This section explains how the payment status is updated, covering various scenarios you might encounter.

Common Scenarios

Payment ScenarioDescriptionTransaction Attempt Status Transaction Attempt Action Transaction Status
Successful PaymentThis is the most common scenario where the payer is able to complete the payment successfully within the stipulated expiry period.SUCCESSNot ApplicableSUCCESS
Failed PaymentIn this scenario where the payer is unable to complete the payment successfully.

Please Note:

- This value will be mapped as the 'Transaction Status' when 'Auto-Retry' is disabled.
- When 'Auto-Retry' is enabled, this value will only be mapped to the 'Transaction Attempt Status'.
FAILEDNot ApplicableFAILED
*Only when Auto-retry is disabled
Or
EXPIRED
*Only when Auto-retry is enabled
Payment Link ExpiredIn this scenario, the payer is unable to complete the payment successfully within the stipulated expiry period.Not Applicable
Or
Multiple "FAILED" attempts
*Only when Auto-retry is enabled
Not ApplicableEXPIRED

DEEMED and DISPUTED Transactions

Payment ScenarioDescriptionTransaction Attempt StatusTransaction Attempt ActionTransaction Status
DeemedIn this rare scenario, the status of the payment is unconfirmed.

Please note: Once a transaction attempt is marked as DEEMED, we will not allow any further payments via the related shortlink.
Initial Status: DEEMED

Terminal Status(Based on reconciliation): SUCCESS or FAILED
Not ApplicableInitial Status: DEEMED

Terminal Status:

- If Auto-Retry is Enabled and the attempt is updated to success: SUCCESS

- If Auto-Retry is Enabled and and the attempt is updated to failure: EXPIRED

- If Auto-Retry is Disabled and the attempt is updated to failure: FAILED
Disputed AmountIn this extremely rare scenario, the paid amount is different from the requested amount.Initial Status:

- If Auto-Refund is Disabled: HOLD Terminal Status

- If Auto-Refund is Enabled: SUCCESS

- If Auto-Refund is Disabled and the Transaction Attempt is Released/Captured: SUCCESS
- If Auto-Refund is Enabled: AUTO REFUNDED

- If Auto-Refund is Disabled: RELEASED or CAPTURED
Initial Status: DISPUTED AMOUNT

Terminal Status:

- If Auto-Refund is Enabled: SUCCESS
- If Auto-Refund is Disabled and the Transaction Attempt is Released/Captured: SUCCESS

Edge Cases

Payment ScenarioDescriptionTransaction Attempt StatusTransaction Attempt ActionTransaction Status
Success After ExpiryIn this scenario, the payer is able to perform the successful payment after the expiry period has elapsed. This can happen based on certain validation at the providers end or when the payer is on the MPIN entry page, on a TPAP, before the expiry threshold is breached.Initial Status:

- If Auto-Refund is Disabled: HOLD Terminal Status

- If Auto-Refund is Disabled and the Transaction Attempt is Released/Captured: SUCCESS

- If Auto-Refund is Enabled: SUCCESS
- If Auto-Refund is Disabled: RELEASED or CAPTURED

- If Auto-Refund is Enabled: AUTO REFUNDED
Initial Status:

- If Auto-Refund is Disabled: EXPIRED Terminal Status

- If Auto-Refund is Disabled and when the Transaction Attempt is Released/Captured: SUCCESS

- If Auto-Refund is Enabled: SUCCESS
Multiple Successful PaymentsIn this extremely rare scenario, the payer performs multiple successful payment.Initial Status:

- First Successful Attempt: SUCCESS

- Second Successful Attempt:
-- If Auto-Refund is Disabled: HOLD Terminal Status

- For the second successful attempt, if Auto-Refund is Disabled and the Transaction Attempt is Released/Captured: SUCCESS

- For the second successful attempt, if Auto-Refund is enabled: SUCCESS
- If Auto-Refund is Disabled: RELEASED or CAPTURED

- If Auto-Refund is Enabled: AUTO REFUNDED
"Initial Status: SUCCESS (Due to the first successful attempt)

Terminal Status: SUCCESS"

Refund Status Values

This status provides the current status of a refund request. It answers the question: "What is happening with my refund request?"

Refund StatusDescription
REFUND_INITIATEDThe refund request has been registered and is being processed.
REFUND_FAILEDThe refund could not be completed.
REFUNDEDThe funds were successfully refunded to the source account.

📘

Please Note

  • A refund request can be initiated at a Transaction or a Transaction Attempt level via the Issue Refund API.
  • Refunds can only be initiated when the status value, for a given Transactions or Transaction Attempt, is "SUCCESS".
  • We refer to the successful payment, by the end customer, as the 'Credit Transaction'. The refund is referred to as the 'Debit Transaction'.
  • We do not update the status of the payment request (credit transaction) when the refund is requested.
  • You may query the status of the refund via the Get Transaction Status (Basic and Advance) API.
    • If you initiate the GTS Advance) API with the details of the credit transaction, the API response will contain the details of the associated refund (debit) transactions.
  • If a Transaction Attempt was "AUTO REFUNDED" or "RELEASED" (corresponding action value), the Issue Refund API will throw an error if the merchant tries to initiate a refund.

Key Takeaways

  • Clarity and Transparency: This hierarchical system provides a clear and detailed view of your payment journey.
  • Many-to-One Relationship: Multiple "Transaction Attempt Statuses" can contribute to a single "Transaction Status".
  • HOLD and Actions: "Action Values" are only relevant when managing edge cases and will vary depending on the level of control you want to maintain.
  • Separation of Credit and Debit Transaction Status: We do not update the status of the payment request (credit transaction) when the refund is requested. The refunds (debits) are mapped against each successful (credit) transaction attempt.
  • If the funds against a transaction attempt (and subsequently a transaction request) are settled or refunded, the terminal status will always be "SUCCESS".
    • This applies for all transaction attempts which are "RELEASED" or "AUTO_REFUNDED" (action values) as well.

What’s Next

Please review our API Documentation or learn more about the different ways you can collect UPI payments.