234 Matching Annotations
  1. Nov 2023
    1. You can filter UpiAccounts for bank accounts related to each orderID or Whitelisted accounts. You need to select which bank accounts the users can use for payments, and we will provide a list of linked bank accounts. When users first sign up, you should display them the approved bank accounts that they can use for transactions. Users need to choose one from the provided list.

      Not able to understand this @kshetra. This isn't easily consummable

    2. You can choose to maintain a whitelisted account per customer using S2S Customers API on your end.

      Need more details on this @kshetra. This looks incomplete and definitely not self serve.

    3. If the user changes their mobile number during onboarding, you should store the updated number and pass it to the Turbo SDK.

      Why have we added this? Let's not add details like these please @kshetra

  2. Oct 2023
    1. The AARs on the main branch are for the UAT environment, the ones on the prod branch are for the production environment, and the mock branch is for the mock environment.

      We shouldn't mention other environment here no?

  3. Sep 2023
  4. razorpay.com razorpay.com
    1. UPI terminals

      Instant Refunds are not on UPI terminals. Just say that if I am using instant refunds instead.

      And answer should be that - Yes, if you are using Razorpay's instant refunds functionality, same will be automatically applied for Turbo UPI. And ask them to raise a request to know. Give the link to support section @kshetra

    2. We have built Turbo UPI in a way that it can be deployed across any Razorpay checkout - Standard, Custom or S2S. The integration efforts on each of these will differ depending on whether or not you wish to control the user-experience journey. On our Standard Checkout offering, you can be up and running in 1-2 days.

      Add link to integration variants here @kshetra

    3. No, a business does not become a TPAP when integrating with the Turbo UPI solution. According to the (OC 154 Circular); the licensed party remains the bank's SDK, while Razorpay steps in to play the front-end role of a TPAP like GPay / PhonePe. For this reason, the business does not have to undergo any lengthy certification process with NPCI and experiences a faster go-to-market. For all other purposes, businesses become a UPI app (for P2M transactions only) without undergoing the red tape associated with becoming a TPAP.

      This needs better structuring. Please check with Vaidehee

    4. outing rule to direct 100% of traffic towards Razorpay instead of other PGs. Only then will end-users be able to benefit from Turbo

      Give the link to Turbo UPI <> Optimizer link @kshetra

    5. 2. What happens in case of pending transactions due to issues in the UPI ecosystem? Is the user returned to the original checkout with pending status or remains on the PIN screen to retry?

      Don't need this IMO

    6. 1. We already have payment success / fail screens at our end. Do we have the option to remove it from this flow to avoid duplicity?

      Don't need this IMO

    7. The device binding process is a one-time effort. It must be repeated if the user uninstalls the app or clears their storage only.

      Explain Device Binding is to verify phone number is present with the user by an outgoing SMS from the user's device. This is required only for the first time. Please add that it is not required every time new account linking is happening.

      Then in Watch out section, say that it will be repeated if user uninstalls the app or clears their storage.

    8. Razorpay will trigger a webhook when the payment is successful or failed. Refer to the payment payloads.

      We need to add more details here please. Make it verbose

    9. 6. What is the process for refunds on UPI transactions via Turbo UPI? Refunds on Turbo UPI will be processed in 3-4 business days, which is the normal TAT for refunds. The complete amount will be refunded to you.

      We can remove this question @kshetra

    10. Immediately after you set a new PIN or reset an old UPI PIN, the bank sets a cooling-off period on the user's bank account to ensure security. The actual duration of this period may vary from bank to bank.

      Remove this point please

    11. e there any sp

      Add one more question - How do I nudge users to complete onboarding? Ans - Clearly mention the value proposition of 1 Step Payment experience, Fastest Payment experience Additionally, we recommend that you run offers initially to generate user interest to nudge them to try the 1 step payment experience

    12. An @axisbank VPA is created at the backend only if the user is not already an Axis VPA user.

      This isn't helping. Instead here we should say that existing @axl @okaxis handle won't be reused. Only @axisbank handle will be reused @kshetra

    13. If the user does not have an @axisbank UPI ID, we will create it during the one-time device binding process.

      This doesn't seem to be answering the question directly. Please add something like "We use @axisbank handle for supporting Turbo UPI handles. If there is existing @axisbank handle for your customer, it will be automatically fetched and user can directly proceed with it.

      Then add this line that it will create @axisbank UPI ID in backend only if user doesn't have existing UPI ID present"

      Do rephrase to make it merchant friendly.

    14. Turbo UPI logo i

      I think it would be better to give the link to Turbo UPI only. Can we have a link to Turbo UPI logo itself? A separate page with image would do. @kshetra

    1. These are the important files in the sample app repo: app/src/turboHeadless: sample app code for headless SDK app/libs: all libraries (bank, NPCI and Turbo) common f

      These should come after point 4 right?

    1. Get your

      Can we phrase this better please.

      Better to list the steps together in one go. Also, mark it that it is required for testing. No need to add the TAT.

    2. In this repository, you will find the AAR files (libraries for Turbo) and the sample app source code to help you do the entire integration. The AARs on the main branch are for the UAT environment, and the ones on the prod branch are for the production environment. These are the important files in the sample app repo:

      Improve phrasing please. This is not very external facing @vinita

  5. Jul 2023
    1. You can directly interact with the exposed methods of the Turbo framework to perform the non-transactional flow listed below.

      This isn't correct. Can you check with Vivek on this?

  6. May 2023
  7. betasite.razorpay.com betasite.razorpay.com
    1. This creates a new VPA and links it to your app.

      Let's not talk about VPA. We should say that this adds the bank account of the customer and onboarding is complete

    2. Handy TipsIn case the customer has multiple SIMs in their device, they should choose the SIM linked to their bank account.

      Not true. Can skip this handy tips

    3. They select UPI as the payment method and are

      This would be the first step. It should begin with - "As user lands on Checkout, and selects Turbo UPI", they are guided to add their bank account

    4. They are guided to select a bank account, create a VPA and link it with your app.

      Instead of this, just add - These are the steps of Onboarding Flow on Turbo UPI

    5. Watch Out!You can ignore the following steps if you already have an existing VPA with our Partner Bank. In this flow, the customer will not have an existing VPA set with the partner bank.

      We don't need any of this Watch out section or customers will not have an existing VPA

    6. Transactional Flow is the process a user makes a payment for a product/service usin

      This looks too complicated and seems incorrect sentence. Please rephrase this - Transactional flow is the user journey of making the payment.

    7. 2. Onboarding Flow

      I think this is too much detail in my opinion, specially for an overview page.

      Would suggest to only show user journey for 2.2 - show the relevant screens.

      And then, in watch out / handy tips, mention about 1st case that if user already has an @axis VPA, Steps X,Y,Z won't be there

      And if user hasn't setup UPI PIN ever, then there would be two additional standard steps of entering the card details and setting up UPI PIN. This would make the document concise and easier to read. What do you think? @kshetra?

    8. Higher success rate.

      This doesn't read very nice, like higher success rate than what?

      We should phrase this something like - "Get higher success rate for UPI payments made via UPI Turbo v/s traditional UPI payment via Third Party UPI Apps" , Feel free to modify that looks best according to you. @kshetra

  8. Apr 2023
  9. betasite.razorpay.com betasite.razorpay.com
    1. make

      +1 to vinita's point. Do bring out the TPV angle and say reduce the TPV failure rates completely with this UPI turbo product. TPV is the biggest pain point and we will reduce the TPV failures completely

    2. They can get all the information from your app.

      I think let's not say like this as it would put merchant on the backfoot. In my opinion, say that customer will not be handling multiple parties to resolve dispute and will have single point of dispute resolution

  10. Feb 2023
    1. Returns a list of banks. This list is fetched from Razorpay backend.

      Not clear description. Better to write like - Returns the list of 8 top banks @kshetra

    2. break; case SELECT_SIM:

      Add cases - If customer has single SIM , then this won't be called and directly next function be called. Secondly, even in case of dual sim, we will internally check the number passed by merchant and the number from the network provider. If they match, then also, we will skip this function call. @vinita

  11. Jan 2023
    1. The customer needs to give permission to complete SMS verification to validate the phone number with the bank.

      Write it as a secondary step. Say if not already provided, then customers will allow permissions

    2. your customers need to complete device binding and link their VPA to your app.

      The sentence doesn't sound good. It sounds daunting that customers have to do this. Instead write in the way that Razorpay will take care of this step

    1. After the customer has completed the onboarding, the transaction flow for subsequent payments is simplified to a 2-step process.

      Doesn't sound very good. Please rephrase

    2. In this flow, as the customer does not have an existing VPA and no PIN set up. They are guided to select a bank account, create a VPA, set up a PIN and link it with your app.

      Please rephrase as per our discussion

    3. In this flow, as the customer does not have an existing VPA. They are guided to select a bank account, create a VPA and link it with your app.

      Needs rephrasing. User will have VPA set but not with partner bank

    4. Flow 1: Customer has an existing VPA Flow 2: Customer does not have an existing VPA but has set UPI PIN Flow 3: Customer neither has a VPA nor a UPI PIN

      Please rephrase this as per our discussion

    5. Reduce timeouts and improve visibility on UPI: With customers never leaving your app, reduce timeout issues significantly, and get more visibility on payment failures.

      Second part is repetitive. And overall could be better

    6. Get end-to-end control over transactions and a faster time-to-market.

      Add complete in-app flow without redirection. This gives merchant full control over user journey

    7. During payments, customers can select the linked UPI and get redirected to the preferred UPI app to complete the payment.

      This is wrong. This is what we are cutting out with our solution

  12. Nov 2022
    1. Request Parameters🔗 addresses The address of the stakeholder. residential The residential address information. street optional string The street in the address. city optional string The name of the city in your address. state optional string The name of the state in your address. postal_code optional string The postal code. country optional string The name of the country. kyc Your KYC information.

      Can you check this? Doesn't look correct to me @palu

    2. string The name of the stakeholder. addresses The address of the stakeholder. residential The residential address information. street optional string The street in the address. city optional string The name of the city in your address. state optional string The name of the state in your address. postal_code optional string The postal code. country optional string The name of the country. kyc Your KYC information.

      Missing parameters.

    3. contact_name":"Gaurav Kumar", "contact_info":{ "chargeback":{ "email":null, "phone":null, "policy_url":null }, "refund":{ "email":null, "phone":null, "policy_url":null }, "support":{ "email":null, "phone":null, "policy_url":null } } }

      This isn't correct response. @palu. Can you check it for real and then update it here?

    4. "field_reference":"settlements.beneficiary_name", "resolution_url":"/accounts/acc_HQVlm3bnPmccC0/products/acc_prd_HEgNpywUFctQ9e", "reason_code":"field_missing", "status":"required"

      Add one example for kyc failed case also @palu

    5. "account_permissions":{ "dashboard":true, "refunds":false }, "notifications":{ "whatsapp":false, "sms":false, "email":[ "gaurav.kumar@example.com", "acd@example.com"

      These two objects won't be there @palu

  13. Sep 2022
    1. 5. What happens if I send a duplicate transfer request with the Idempotency Key?🔗 You will receive the same response as the first transfer that was processed. In case a different request is sent with the same idempotency key, it will fail with a Bad Request Error.

      Mixing multiple answers with a different question

  14. Aug 2022
  15. betasite.razorpay.com betasite.razorpay.com
    1. For example, if a transfer is created with on_hold_until timestamp defined as 1583991784, the settlement will be held off until the specified time period. The amount will be settled to the linked account only on the next day.

      Same as above

    2. For example, if the settlement schedule is T+10 days, a transfer made with on_hold set to 1 will not be settled even after 10 days, as it is on hold. If the hold is disabled on T+15 day, the amount will be settled to the linked account by the next working day.

      Do we need this here? Let's add it separately in a watch out or note section @palu

    3. A new reversal entity is created internally and linked for every reversal defined by the transfer_id. The following endpoint creates refunds on a particular payment_id.

      Not crystal clear. Anyone who has no context would be lost here. @palu

    4. curl -X GET https://api.razorpay.com/v1/payments \ -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \ -H 'X-Razorpay-Account: acc_IRQWUleX4BqvYn' \

      Your API response isn't correct @palu. Method should be transfer only but its showing netbanking as method. Use postman to get the actual API response here.

    5. The following endpoint fetches details of settlements made to linked accounts. /transfers?expand[]=recipient_settlementYou should append ?expand[]=recipient_settlement as the query parameter to the fetch transfer request. This would return a settlement entity and the transfer entity.

      Do we need this separate section? Shouldn't this be a part of fetch settlement API section itself?

    6. settlement obtained from the settlement.processed webhook event.

      Webhook isn't the only method to get the settlement ID right? Let's not portray it that way. Moreover, of a settlement isn't sufficient enough. @palu

    7. The following endpoint retrieves the collection of all transfers made for a particular recipient_settlement_id. /transfers?recipient_settlement_id Curl Java PHP Node.JS Python Ruby Go ResponseCopycurl -X GET https://api.razorpay.com/v1/transfers?recipient_settlement_id=setl_HYIIk3H0J4PYdX \ -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \ CopyRazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]"); JSONObject params = new JSONObject(); params.put("recipient_settlement_id","setl_HYIIk3H0J4PYdX"); List<Transfer> transfers = razorpay.transfers.fetchAll(params); Copy$api = new Api($key_id, $secret); $api->transfer->all(array('recipient_settlement_id'=> $recipientSettlementId)); Copyvar instance = new Razorpay({ key_id: 'YOUR_KEY_ID', key_secret: 'YOUR_SECRET' }) instance.transfers.all({ recipient_settlement_id : recipientSettlementId }) Copyclient = razorpay.Client(auth=("YOUR_ID", "YOUR_SECRET")) client.transfer.all({ "recipient_settlement_id":"recipientSettlementId" }) Copyrequire "razorpay" Razorpay.setup('YOUR_KEY_ID', 'YOUR_SECRET') recipientSettlementId = "setl_HYIIk3H0J4PYdX" Razorpay::Transfer.all({ "recipient_settlement_id": recipientSettlementId }) Copyimport ( razorpay "github.com/razorpay/razorpay-go" ) client := razorpay.NewClient("YOUR_KEY_ID", "YOUR_SECRET") data:= map[string]interface{}{ "recipient_settlement_id": "<recipientSettlementId>", } body, err := client.Transfer.All(data, nil) Copy

      @palu: Let's add more than 1 transfer in the response please

    8. Check the response parameters descriptions in the Transfer entity parameters table.

      Wow. Why this @palu? We have given it for order transfers? Is this correct?

    9. string The currency used in the transaction. We support only INR for Route transactions. notes optional json object Set of key-value pairs that can be associated with an entity. These pairs can be useful for storing additional information about the entity. A maximum of 15 key-value pairs, each of 256 characters (maximum), are supported.

      On hold / hold_until ? @palu

    10. curl -X POST https://api.razorpay.com/v1/transfers \ -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \ -H 'content-type: application/json' \ -d '{ "account": "acc_CPRsN1LkFccllA", "amount": 100, "currency": "INR" }' CopyRazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]"); JSONObject transferRequest = new JSONObject(); transferRequest.put("amount",50000); transferRequest.put("currency","INR"); transferRequest.put("account","acc_CPRsN1LkFccllA"); Transfer transfer = razorpay.transfers.create(transferRequest); Copy$api = new Api($key_id, $secret); $api->transfer->create(array('account' => $accountId, 'amount' => 500, 'currency' => 'INR')); Copyvar instance = new Razorpay({ key_id: 'YOUR_KEY_ID', key_secret: 'YOUR_SECRET' }) instance.transfers.create({ "amount": 500, "currency": "INR" }) Copyclient = razorpay.Client(auth=("YOUR_ID", "YOUR_SECRET")) client.transfer.create({ "amount":500, "currency":"INR" }) Copyrequire "razorpay" Razorpay.setup('YOUR_KEY_ID', 'YOUR_SECRET') para_attr = { "account": accountId, "amount": 500, "currency": "INR" } Razorpay::Transfer.create(para_attr) Copyimport ( razorpay "github.com/razorpay/razorpay-go" ) client := razorpay.NewClient("YOUR_KEY_ID", "YOUR_SECRET") data:= map[string]interface{}{ "account": "<accountId>", "amount": 100, "currency": "INR", } body, err := client.Transfer.Create(data, nil) Copy{ "id":"trf_E9utgtfGTcpcmm", "entity":"transfer", "transfer_status":"pending", "settlement_status":null, "source":"acc_CJoeHMNpi0nC7k", "recipient":"acc_CPRsN1LkFccllA", "amount":100, "currency":"INR", "amount_reversed":0, "notes":[ ], "fees":1, "tax":0, "on_hold":false, "on_hold_until":null, "recipient_settlement_id":null, "created_at":1580219046, "linked_account_notes":[ ], "processed_at":null, "error":{ "code":null, "description":null, "field":null, "source":null, "step":null, "reason":null } }

      @palu : Let's highlight that only 1 transfer request can be created in one API call

    11. This API creates a direct transfer of funds from your account to a linked account and responds with the created transfer entity on successful creation. Watch Out! Direct Transfers is an on-demand feature. Please raise a request with our Support team to get this feature activated on your Razorpay account. Apart from transferring payments received from customers, you can also transfer funds to your linked accounts directly from your account balance using the Direct Transfers API. You can transfer funds directly from your account using the following endpoint.

      Looks like same sentence is being repeated multiple times @palu

    12. The payments transferred to the linked accounts are settled in their respective bank accounts per the pre-defined

      Not very clear. Let's rephrase it better.

    13. The following endpoint transfers a captured payment to one or more linked accounts using account_id. A response is generated on a successful transfer with a collection of transfer entities created for the payment.

      Suddenly change of context. I don't think it's correct @palu

    14. transfer API call.

      Transfer via Payments or direct transfer right? Also, it can be done dashboard as well right? Let's re-work this. Not coming across clearly

    15. error Provides error details that may occur during transfers. code string Type of the error.

      @palu: Same comments as I made in the transfer entity comments