Reverse Penny Drop/Penny Pull - Intent API

This API allows the platform to create an Intent link using Decentro's Penny pull stack.

🙌

Important Note

Please use only Staging Credentials on each API Reference page to test the APIs directly from our Documentation.

Overview

This API empowers platforms to authenticate the bank account information of their customers by leveraging Decentro's Penny Pull/Reverse Penny Drop stack capability through the intent flow where the payer doesn't have to enter a VPA (UPI ID).

Flow

Below is the flow for using the Penny pull intent link/intent flow through Decentro.

  1. The platform creates a penny pull intent link using this API.
    1. The platform can use the shortened link directly on a web/app flow or use individual deep links by passing generate_psp_uri as true.
  2. Decentro relays the status of the link creation using response keys and the Decentro transaction ID, which can be used to check the status through the Get Transaction Status API or map the same from the callback triggered by Decentro to the platform.
  3. The platform sends the shortened link directly to the end customer via SMS, WhatsApp, etc., or can embed it on its web/app.
  4. The payer clicks on the link and authenticates the payment by entering their UPI MPIN on the app of their choice.
  5. Decentro triggers the Terminal Transaction Status Callback to the client's pre-configured endpoint with the transaction status.
  6. Alternatively, the platform can check the status of the Intent link using the Get Transaction Status API, which can be done using Decentro's transaction ID, which is available as the response in this API.
  7. The payer gets a refund of their INR 1 transaction if successful within 3 working days of the transaction being completed.

Key Points

Below are the key points about the intent link workflow.

  • If the payer uses the link to land on a UPI app within the expiry time of 60 minutes, the payer should be able to complete the transaction, unless you define a custom expiry period.
  • If the payer uses the link to land on a UPI app after the expiry time, the payer will not be able to complete the transaction.
  • If the payer clicks on the link after expiry, the payer will not be redirected to any UPI app, or shown the UPI QR code. Instead the link will be marked as expired and the same will be shown to the payer on the landing page.

API Endpoints

Below are the API endpoints to be used by the platform basis the environments.

Simulation Data

Below is the test data that can be used by platforms to test out standard scenarios for this API.
The platform is expected to pass the parameters as-is to get the intended scenario.

📘

Note - Simulation Data

To test Simulation Staging data for Penny Pull - Intent API, please use the following API Endpoint: https://staging.api.decentro.tech/v3/payments/rpd/intent

Steps to use this data:

  1. In the request body, pass request values as shared below in the table, depending on the scenario to be tested.
  2. Trigger the Create Intent API with the choice(s) chosen in Step 1.
  3. Based on the values provided in Step 1 for each request parameter, the API response will confirm the creation of a short link, QR code, and PSP-specific deep links.
  4. In the API response, locate the field labeled decentro_txn_id and make a note of it. This decentro_txn_id will be utilised to retrieve the transaction status using the Get Transaction Status API, indicating whether the payer has completed the payment or not.
Request bodyRequest valueTest case
expiry_time60Successful transaction with provider callback after 1 minute
expiry_time59Failed transaction with provider callback after 1 minute
expiry_time58Failed transaction, rejected by NPCI, with provider callback after 1 minute
expiry_time31Pending transaction status in GTS. No callback will be propagated. The status will be marked as EXPIRED after 31 minutes.
expiry_time41422 Response.

Response Parameters

Below are the parameters propagated by Decentro in the response.

ParametersDescription
decentro_txn_idA unique transaction ID from Decentro for checking the transaction status, refund, etc.
api_statusStatus of the API hit. Note that this is not the status of the transaction.
messageAPI status message. Note that this is not about the status of the transaction.
response_keyResponse key documenting the status of the API hit and various errors.
response_codeResponse code documenting the status of the API hit and various errors.
validation_linkA UPI protocol-based link that the payer can use to pay using any app.
gpay_uriA Google Pay protocol-based link that the payer can use to pay using Google Pay.
phonepe_uriA PhonePe protocol-based link that the payer can use to pay using Phonepe Pay
paytm_uriA PayTm protocol-based link that the payer can use to pay using PayTm.

Response Keys

Below are the response keys propagated by Decentro in the responseKey parameter, which cover all the scenarios a platform can encounter.

Please note that the below keys don't include transaction-related response keys since the transaction status is relayed only after the payer authorizes payment.

ScenarioResponse KeyResponse Message
Success Scenariosuccess_validation_link_createdValidation Link created Successfully.
Consumer/Company is disablederror_account_disabledYour account has been disabled. Please reach out to support
Malformed Requesterror_malformed_requestMalformed request detected.
Empty Requesterror_empty_requestThe request body is empty. Kindly check the payload and retry.
Invalid HTTP methoderror_invalid_methodThe method is not allowed for the requested URL.
Unsanitized values are passederror_unsanitized_valuesUnsanitized values detected for key(s): <KEY NAME(s)>. Kindly sanitise the corresponding values by removing unicode, non-ascii, and special characters such as . @ # $ % ^ & * ! ; : ' " ~ ` ? = + ) ( and retry.
Invalid Client IDerror_invalid_client_idAuthentication failed. Please use a valid Client ID.
Empty Client IDerror_empty_client_idClient ID cannot be empty. Hint: client_id (string)
Client ID is passed in an invalid formaterror_invalid_format_client_idClient ID is not of type string. Hint: client_id (string)
Invalid Client Secreterror_invalid_client_secretAuthentication failed. Please use a valid Client Secret.
Empty Client Secreterror_empty_client_secretClient Secret cannot be empty. Hint: client_secret (string)
Client secret is passed in an invalid formaterror_invalid_format_client_secretClient Secret is not of type string. Hint: client_secret (string)
Invalid JWT tokenerror_invalid_jwtAuthentication failed. Token either expired or invalid.
Empty JWT tokenerror_empty_jwtJWT cannot be empty. Hint: JWT (JSON)
JWT Token is passed in an invalid formaterror_invalid_format_jwtJWT is not of type JSON. Hint: JWT (JSON)
Consumer URN is not validerror_invalid_consumer_urnConsumer URN passed is not valid.
Consumer URN is emptyerror_empty_consumer_urnConsumer URN cannot be empty. Hint: consumer_urn (string)
Consumer URN is not in the correct formaterror_invalid_format_consumer_urnConsumer URN is not of type string. Hint: consumer_urn (string)
Reference ID is not validerror_invalid_reference_idReference ID is not valid.
Reference ID is emptyerror_empty_reference_idReference ID cannot be empty. Hint: reference_id (string)
Reference ID is not in the correct formaterror_invalid_format_reference_idReference ID is not of type string. Hint: reference_id (string)
Duplicate Reference IDerror_duplicate_reference_idDuplicate Reference ID. Please pass an unique value.
Reference ID value length is incorrecterror_incorrect_length_reference_idReference ID needs to be between 5 and 50 characters
Expiry Time is not validerror_invalid_expiry_timeExpiry Time needs to be strictly greater than 0. Hint: expiry_time (int)
Expiry Time is emptyerror_empty_expiry_timeexpiry_time cannot be empty. Hint: expiry_time (int)
Expiry Time is not in the correct formaterror_invalid_format_expiry_timeExpiry Time should be of type integer. Hint: expiry_time (int)
Expiry Time is below or above the max/min limiterror_incorrect_length_expiry_timeExpiry Time cannot exceed minutes.
Incorrect value passed for the generate_qr flagerror_invalid_generate_qr_valueInvalid value entered for Generate QR field. Generate QR can be either true or false.Hint : generate_qr (boolean)
Invalid value entered for Generate PSP URI flagerror_invalid_generate_psp_uri_valueInvalid value entered for Generate PSP URI field. Generate PSP URI can be either true or false. Hint : generate_psp_uri (boolean)
Both generate_qr and generate_psp_uri are passed as 'true'error_output_type_conflictOnly one of generate_psp_uri or generate_qr can be true for request
Provider API throws an errorerror_provider_errorWe faced an unexpected  error when logging the request with the service provider. Please try again.
Language
Click Try It! to start a request and see the response here!