50p 2018

India's first independent conference on payments and the payment ecosystem

Building apps and services with UPI: A technical deep dive

Submitted by Abhishek Balaji (@booleanbalaji) (proposing) on Nov 24, 2017

This is a proposal requesting for someone to speak on this topic. If you’d like to speak, leave a comment.

Section: Crisp talk Technical level: Intermediate Status: Confirmed & scheduled


UPI is one of those innovations that come along every once in a while and transform the landscape. By reducing friction in payments, it has opened up new product possibilities. To unlock those possibilities you need to know your way around and ask the right questions. This talk is a sort of techno-business map that we’ve plotted from our own journeys in the UPI universe.

We will look at how UPI is architected, the APIs it exposes, the payment experiences that it
enables and then dive deep into a couple of payment flow implementations to see how
things really work under the hood.


  1. What is UPI?
    a. UPI architecture in a nutshell b. How the money flows

  2. Possibilities that UPI creates
    a. Current: i). In-App payment ii). Collect request / Intent launch iii). Deep linking iv). Split Payments v). Dynamic VPA vi). Collect request on delivery b. Upcoming i). Recurring payments ii). Subscriptions

  3. Building a Merchant Payments solution using UPI
    a. The basic API suite i). Balance check ii). Payments flow iii). Account linking iv). Miscellaneous / Supporting (Queries, Bank list etc. )

    b. In-App payment using a UPI SDK i). UPI SDK under the hood ii). Integrating the SDK c. Collect request and UPI intent APIs i). How the Intent API works ii). The collect money flow iii). Juspay’s Euler (A unified gateway to UPI PSP) makes it easier

Speaker bio

Dilip Jain is an Engineer at Juspay. He is a FP enthusiast and likes to code in Haskell.


{{ gettext('Login to leave a comment') }}

{{ gettext('You need to be a participant to comment.') }}

{{ formTitle }}
{{ gettext('Post a comment...') }}
{{ gettext('New comment') }}

{{ errorMsg }}