ZestMoney - Shop on easy EMIs icon

ZestMoney BNPL, EMI and CIBIL APIs

DMI Info Tech Solutions · Lending 5.0 ★

ZestMoney - Shop on easy EMIs is the Indian buy-now-pay-later and personal-loan app from DMI Info Tech Solutions (DMI Finance). Shoppers can spread purchases from Amazon, Flipkart, Myntra and other merchants over a 30-day or three-to-four-month EMI, buy branded gift cards in the app, or scan to pay at about 85,000 offline stores across roughly 16,000 postal codes. The home screen brings together cash personal-loan applications, a CIBIL checker, an EMI calendar, account statements and the Bolt revolving-credit limit, alongside UPI and Razorpay repayments, eNACH mandates and selfie KYC. Serving Indian shoppers who want instalment financing for online and in-store purchases, it competes with LazyPay, Simpl, Amazon Pay Later, Flipkart Pay Later and KreditBee; partner banks and NBFCs fund the loans. Its Google Play listing reports over 10 million installs and about 238,000 ratings, while the product description cites 11 million users.

BNPL spending headroom combines availableCL, spendAmount and creditUtilizedPercent with the current emiAmount and repaymentAmount. The CIBIL record adds creditScore, creditHealth, lastCheckedDate and isPersonalLoanEligible, tying limit utilisation to a dated view of credit health.

Merchant instalments are organised into ongoingLoans and pastLoans, with loanId, mambuId, merchantName, dueDate and amountPending connecting the loan book to statement transactions and balanceDue. Cash-loan offers use plEmiPlans and numberOfMonths; checkout quotes instead expose monthlyInstallment, downpayment and processingFee. The revolving line distinguishes approvedLimit from outstandingAmount.

Finance teams can reconcile available headroom against merchant EMI balances, while origination tools compare dated CIBIL results with cash-loan tenures. Collections calendars join repayments by date and status; authorised compliance integrations can match borrower pan and aadhaar with repayment-bank ifsc and accNum. openData Studio turns these credit, instalment and repayment fields into callable open data.

Screenshots

  • ZestMoney - Shop on easy EMIs screenshot 1
  • ZestMoney - Shop on easy EMIs screenshot 2
  • ZestMoney - Shop on easy EMIs screenshot 3
  • ZestMoney - Shop on easy EMIs screenshot 4
  • ZestMoney - Shop on easy EMIs screenshot 5
  • ZestMoney - Shop on easy EMIs screenshot 6
  • ZestMoney - Shop on easy EMIs screenshot 7
  • ZestMoney - Shop on easy EMIs screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Issue access token

    POST /v1/sessions/issue osint

    Exchanges grant_type and username for the access_token used as Authorization: Bearer on later customer, EMI and CIBIL calls, together with expires_in, refresh_token and token_type.

    Auth: Unauthenticated OAuth2 form body with grant_type, username, password and client_id. Returns access_token, expires_in, refresh_token and token_type.

    • grant_type
    • username
    • access_token
    • expires_in
    • refresh_token
    • token_type
    POST /v1/sessions/issue HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password&username=<phone_number>&password=<one_time_code>&client_id=<client_id>
    {
      "access_token": "<access_token>",
      "expires_in": 3600,
      "token_type": "Bearer",
      "refresh_token": "<refresh_token>"
    }
  • Request login OTP

    POST /v1/sign-in/challenges osint

    Sends a login OTP for phone and returns otpId, isLogin and userAccessState so the token grant can finish sign-in.

    Auth: Unauthenticated JSON body with phone. Returns otpId for the password-grant sign-in flow.

    • otpId
    • isLogin
    • userAccessState
    • otpRegexes
    • onboardingChannel
    • actionUrl
    • phone
    POST /v1/sign-in/challenges HTTP/1.1
    Content-Type: application/json
    
    {
      "phone": "<phone_number>"
    }
    {
      "otpId": "<otp_id>",
      "isLogin": true,
      "userAccessState": "EXISTING",
      "otpRegexes": [
        "^[0-9]{6}$"
      ],
      "onboardingChannel": "APP",
      "actionUrl": "<next_action>"
    }
  • Customer profile

    GET /v1/borrowers/{borrowerId}/profile osint

    Loads the signed-in borrower: PAN and Aadhaar (pan, aadhaar), salary (income, empType, organisation) and the mandate bank row (accNum, ifsc, bank).

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • name
    • phone
    • email
    • dob
    • pan
    • aadhaar
    • address
    • city
    • pin
    • empType
    • income
    • expense
    • organisation
    • accName
    • accNum
    • ifsc
    • accType
    • bank
    GET /v1/borrowers/borrower-demo/profile HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "name": "Example Borrower",
      "phone": "<phone_number>",
      "email": "<email_address>",
      "dob": "<date_of_birth>",
      "pan": "<masked_pan>",
      "aadhaar": "<masked_aadhaar>",
      "address": "<postal_address>",
      "city": "Bengaluru",
      "pin": "<postal_code>",
      "empType": "SALARIED",
      "income": 60000,
      "expense": 25000,
      "organisation": "Example Employer",
      "accName": "Example Borrower",
      "accNum": "<masked_account_number>",
      "ifsc": "<bank_branch_code>",
      "accType": "SAVINGS",
      "bank": "Example Bank"
    }
  • Credit-limit statuses

    GET /v1/borrowers/{borrowerId}/spending-capacity openfinance

    Returns BNPL headroom (availableCL, spendAmount, totalAmount, creditUtilizedPercent) plus the current EMI (emiAmount, tenure, repaymentAmount) that drives the home-screen limit tile.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • status
    • availableCL
    • availableCLText
    • spendAmount
    • totalAmount
    • spendPercent
    • productName
    • loanAmount
    • tenure
    • emiAmount
    • repaymentAmount
    • creditUtilizedPercent
    • isCreditScoreAvailable
    • creditScoreTitle
    • creditScoreSubtitle
    • nextStep
    GET /v1/borrowers/borrower-demo/spending-capacity HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "status": "ACTIVE",
      "availableCL": 20000.0,
      "availableCLText": "₹20,000 available",
      "spendAmount": 30000.0,
      "totalAmount": 50000.0,
      "spendPercent": 60.0,
      "productName": "BNPL",
      "loanAmount": 12000.0,
      "tenure": 3,
      "emiAmount": 4100.0,
      "repaymentAmount": 4100.0,
      "creditUtilizedPercent": 60.0,
      "isCreditScoreAvailable": true,
      "creditScoreTitle": "CIBIL score",
      "creditScoreSubtitle": "742 · Good",
      "nextStep": "SHOP"
    }
  • CIBIL credit-score screen

    GET /v1/borrowers/{borrowerId}/credit-health openfinance

    Loads the in-app CIBIL tile: creditScore, creditHealth, lastCheckedDate, currentOutstandingAmount, numberOfLoans and isPersonalLoanEligible.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • creditScore
    • creditHealth
    • creditHealthColor
    • lastCheckedDate
    • currentOutstandingAmount
    • numberOfLoans
    • totalLoanAmount
    • numberOfCards
    • totalCardAmount
    • isPersonalLoanEligible
    • creditFactors
    GET /v1/borrowers/borrower-demo/credit-health HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "creditScore": "742",
      "creditHealth": "Good",
      "creditHealthColor": 4283215696,
      "lastCheckedDate": "2026-10-12",
      "currentOutstandingAmount": "30000",
      "numberOfLoans": "4",
      "totalLoanAmount": "128000",
      "numberOfCards": "2",
      "totalCardAmount": "60000",
      "isPersonalLoanEligible": true,
      "creditFactors": []
    }
  • Customer loan books

    GET /v1/borrowers/{borrowerId}/instalment-books openfinance

    Lists ongoingLoans versus pastLoans with loanId, mambuId, merchantName, emiAmount, dueDate, amountPending and paidEmis/totalEmis, plus moratoriumStatus and restructuringStatus.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • moratoriumStatus
    • moratoriumEndDate
    • restructuringStatus
    • ongoingLoans
    • pastLoans
    • loanId
    • mambuId
    • merchantName
    • productName
    • loanAmount
    • emiAmount
    • dueDate
    • amountPaid
    • amountPending
    • paidEmis
    • totalEmis
    • emiStatus
    • latePaymentCharges
    • activationDate
    GET /v1/borrowers/borrower-demo/instalment-books HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "moratoriumStatus": "NONE",
      "moratoriumEndDate": null,
      "restructuringStatus": "NONE",
      "ongoingLoans": [
        {
          "loanId": "loan-demo-01",
          "mambuId": "ledger-demo-01",
          "merchantName": "Example Merchant",
          "productName": "EMI 3 months",
          "loanAmount": 12000.0,
          "emiAmount": 4100.0,
          "dueDate": "2026-11-05",
          "amountPaid": 4100.0,
          "amountPending": 8200.0,
          "paidEmis": 1,
          "totalEmis": 3,
          "emiStatus": "DUE",
          "latePaymentCharges": 0.0,
          "activationDate": "2026-09-05"
        }
      ],
      "pastLoans": []
    }
  • Account statement

    GET /v1/borrowers/{borrowerId}/ledger-summary openfinance

    Returns per-loan statements with loanDisplayId, balanceDue, amountPaid and a transactions list of type, amount, info and date.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • loanId
    • loanDisplayId
    • balanceDue
    • amountPaid
    • totalAmount
    • merchantName
    • productName
    • mambuId
    • activationDate
    • transactions
    • info
    • type
    • amount
    • date
    GET /v1/borrowers/borrower-demo/ledger-summary HTTP/1.1
    Authorization: Bearer <access_token>
    [
      {
        "loanId": "loan-demo-01",
        "loanDisplayId": "statement-demo-01",
        "balanceDue": 8200.0,
        "amountPaid": 4100.0,
        "totalAmount": 12300.0,
        "merchantName": "Example Merchant",
        "productName": "EMI 3 months",
        "mambuId": "ledger-demo-01",
        "activationDate": "2026-09-05",
        "transactions": [
          {
            "info": "EMI 1",
            "type": "REPAYMENT",
            "amount": 4100.0,
            "date": 1791158400000
          }
        ]
      }
    ]
  • Loan repayment schedule

    GET /v1/borrowers/{borrowerId}/payment-calendar openfinance

    Returns the EMI calendar as repayments of emiAmount, date, status and statusColor, plus lenderDetails.description for the funding NBFC.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • lenderDetails
    • repayments
    • emiAmount
    • date
    • status
    • statusColor
    • iconUrl
    • description
    • deeplink
    • actionUrl
    GET /v1/borrowers/borrower-demo/payment-calendar HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "lenderDetails": {
        "iconUrl": "<lender_icon>",
        "description": "Example Funding NBFC",
        "deeplink": "<lender_details_action>",
        "actionUrl": "<next_action>"
      },
      "repayments": [
        {
          "emiAmount": 4100.0,
          "date": "2026-10-05",
          "status": "PAID",
          "statusColor": "#2E7D32"
        },
        {
          "emiAmount": 4100.0,
          "date": "2026-11-05",
          "status": "DUE",
          "statusColor": "#C62828"
        }
      ]
    }
  • Personal-loan status

    GET /v1/borrowers/{borrowerId}/cash-credit openfinance

    Reads the cash personal-loan book: loanAmount, tenure, emiAmount, paidEmis versus totalEmis and amountPaid.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • status
    • loanAmount
    • amountPaid
    • emiAmount
    • totalEmis
    • paidEmis
    • tenure
    • deeplink
    • actionUrl
    GET /v1/borrowers/borrower-demo/cash-credit HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "status": "ACTIVE",
      "loanAmount": 50000.0,
      "amountPaid": 8750.0,
      "emiAmount": 8750.0,
      "totalEmis": 6,
      "paidEmis": 1,
      "tenure": 6,
      "deeplink": "<personal_loan_action>",
      "actionUrl": "<next_action>"
    }
  • Personal-loan EMI plans

    GET /v1/borrowers/{borrowerId}/cash-tenures openfinance

    Quotes cash-loan tenures as plEmiPlans of basketAmount with emiOptions of numberOfMonths and emiAmount.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • merchantId
    • fetchAdditionalInfo
    • plEmiPlans
    • basketAmount
    • emiOptions
    • numberOfMonths
    • emiAmount
    • isSelected
    GET /v1/borrowers/borrower-demo/cash-tenures HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "merchantId": "merchant-demo-01",
      "fetchAdditionalInfo": 1,
      "plEmiPlans": [
        {
          "basketAmount": 50000.0,
          "isSelected": true,
          "emiOptions": [
            {
              "numberOfMonths": 3,
              "emiAmount": 17350.0,
              "isSelected": false
            },
            {
              "numberOfMonths": 6,
              "emiAmount": 8750.0,
              "isSelected": true
            }
          ]
        }
      ]
    }
  • Basket EMI tenure options

    GET /v1/borrowers/{borrowerId}/checkout-quotes/{amount} openfinance

    Prices a merchant basket as EMI tenures with monthlyInstallment, downpayment, processingFee and schemeId for the selected tenure.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • basketAmount
    • tenure
    • monthlyInstallment
    • downpayment
    • processingFee
    • interestFreeMonth
    • schemeId
    • isSelected
    GET /v1/borrowers/borrower-demo/checkout-quotes/9000 HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "plans": [
        {
          "basketAmount": 9000.0,
          "tenure": 3,
          "monthlyInstallment": 3000.0,
          "downpayment": 0.0,
          "processingFee": 199.0,
          "interestFreeMonth": true,
          "schemeId": "scheme-demo-3m",
          "isSelected": true
        }
      ]
    }
  • Revolving-credit outstanding

    GET /v1/borrowers/{borrowerId}/revolving-balance openfinance

    Reads the Bolt revolving line: approvedLimit versus outstandingAmount, with loanId, externalLoanId and status.

    Auth: Authorization: Bearer <access_token> from the OAuth2 sign-in flow. The session includes expires_in, refresh_token and token_type; the borrower identifier comes from the token subject.

    • loanId
    • externalLoanId
    • approvedLimit
    • outstandingAmount
    • status
    GET /v1/borrowers/borrower-demo/revolving-balance HTTP/1.1
    Authorization: Bearer <access_token>
    {
      "loanId": "line-demo-01",
      "externalLoanId": "external-demo-01",
      "approvedLimit": 50000.0,
      "outstandingAmount": 30000.0,
      "status": "ACTIVE"
    }

Data categories

  • credit-limits
  • cibil-scores
  • emi-schedules
  • personal-loans
  • kyc-profile
  • repayments

Where teams use this data

  • BNPL headroom reconciliation

    Nightly jobs pull availableCL, spendAmount and creditUtilizedPercent and match them to merchant EMI amountPending so finance teams see when a shopper can take another basket.

  • CIBIL eligibility bots

    Origination desks watch creditScore, lastCheckedDate and isPersonalLoanEligible before pushing a cash-loan quote with loanAmount and tenure.

  • EMI collections calendar

    Collectors join repayments.date / emiAmount / status with account-statement balanceDue and mambuId to schedule UPI or eNACH retries.

  • KYC-bank mandate audit

    Compliance stacks keep pan, aadhaar, ifsc and accNum next to the funding lenderDetails.description for partner-NBFC reporting.

Frequently asked questions

Which borrower details accompany ZestMoney credit records?

The customer profile contains name, phone, email and dob alongside pan and aadhaar. Employment fields include empType, income, expense and organisation; the mandate-bank row contains accName, accNum, ifsc, accType and bank. Identity and banking values in the examples are placeholders.

How does the data describe CIBIL health and eligibility?

creditScore and creditHealth are dated by lastCheckedDate. currentOutstandingAmount, numberOfLoans, totalLoanAmount, numberOfCards and totalCardAmount describe credit exposure, while isPersonalLoanEligible records the cash-loan eligibility indicator.

How do merchant EMIs differ from cash personal-loan plans?

Merchant books separate ongoingLoans from pastLoans and include merchantName, emiAmount, dueDate, amountPending and mambuId. Cash-loan records track loanAmount, tenure, paidEmis and totalEmis, with plEmiPlans offering numberOfMonths and emiAmount. Checkout quotes add monthlyInstallment, downpayment and processingFee.

Where are repayments and the Bolt revolving balance represented?

The repayment calendar lists emiAmount, date, status and statusColor with lenderDetails. Statements pair balanceDue with dated transactions. The Bolt revolving-credit record compares approvedLimit with outstandingAmount and includes loanId, externalLoanId and status.

Apps similar to ZestMoney - Shop on easy EMIs

  • Snapmint — Snapmint is an Indian EMI shopping service that lets customers pay for mobiles, electronics and home goods over 3, 6, 9 or 12 months without a credit card.
  • axio — axio (CapFloat Financial Services) is an RBI-registered Indian NBFC that offers Buy Now Pay Later, EMI financing and personal loans, including products for Amazon Pay Later and Xiaomi users.
  • LazyPay — PayU Finance, the RBI-registered Indian NBFC behind LazyPay, offers checkout EMI of 3–12 months and transactional credit with billing cycles of up to 30 days.
  • Bajaj Finance Insta EMI Card — Bajaj Finance's Insta EMI Card is a card loan of up to ₹6 lakh for shopping now and paying later, accepted at over 1.5 lakh partner outlets across 4,000+ Indian cities.
  • KreditBee — KreditBee is an Indian digital-lending app that arranges unsecured personal loans of ₹3,000 to ₹10 lakh over 3–60 months from RBI-registered banks and NBFCs.
  • Kissht: Instant Personal Loans — Kissht is an Indian digital-lending app from OnEMI Technology Solutions that offers unsecured personal and business loans of up to ₹5 lakh with tenures of 6–60 months.
  • Fibe — Fibe (EarlySalary Services) is an Indian lending app for unsecured personal loans of up to ₹10 lakh over 6–36 months, plus purpose-driven BNPL EMIs for education, healthcare, travel and e-commerce.
  • MoneyTap -Credit Loan Payments — MoneyTap (now Freo Credit) is an Indian credit-line app that lets users draw from a limit of up to ₹5 lakh and repay over 3–36 months, paying interest only on the amount used.

Topics

  • zestmoney api
  • zestmoney bnpl credit data
  • dmi finance emi
  • zestmoney cibil credit health
  • india instalment repayment data
  • zestmoney personal loan tenures
  • zestmoney revolving credit

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote