ZestMoney BNPL, EMI and CIBIL APIs
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
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/issueosintExchanges 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/challengesosintSends 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}/profileosintLoads 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
- 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-capacityopenfinanceReturns 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-healthopenfinanceLoads 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-booksopenfinanceLists 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-summaryopenfinanceReturns 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-calendaropenfinanceReturns 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-creditopenfinanceReads 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-tenuresopenfinanceQuotes 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}openfinancePrices 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-balanceopenfinanceReads 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