Duxi Finanzas CURP, CLABE and MXN loan APIs
Duxi Finanzas: Préstamo Seguro is the Android client of Duxi Finanzas, the consumer brand of VERTRAUEN FINANCIERA, S.A. DE C.V., SOFOM, E.N.R., a CNBV- and CONDUSEF-supervised Mexican SOFOM based in Mexico City. Borrowers aged 18+ apply with an INE credential for unsecured peso cash of MXN 1,000–30,000 over 91–365 days at a published annual rate of 36–360% plus 16% IVA, with a claimed five-minute decision, bank-transfer disbursement onto a CLABE or debit card, and repayment over SPEI or OXXO. Sign-in is phone-number first (OTP, then a password), then a KYC wizard that OCR-reads the INE, runs face liveness, collects RFC/address/income/emergency contacts, and only then unlocks the loan-guide calculator (quincenal or monthly terms, coupons, contract signing) and a credit-growth / credit-score tab that can re-offer a higher limit. Customer service is [email protected] and +52 5599905610. Google Play lists a 4.93 rating across 270,687 reviews and 1M+ downloads. It sits in Mexico’s SOFOM cash-loan lane against DiDi Finanzas, Credmex and Kueski.
INE-OCR curp rows pin a Mexican borrower to optional rfc, fatherLastName / motherLastName and the basic-info birthday / gender pair, while the credit-growth card publishes creditLimit against availableLimit in centavos next to isReoffer. Loan-guide trials stamp loanAmount, termDays, quincenal-or-monthly installments and fixedRepayDays onto a CLABE or debit cardNumber (cardType 2 vs 1), and the bill list keys SPEI/OXXO pay-ins by loanId + installmentNo with dueStatus and a cashierUrl.
KYC desks, SOFOM collections stacks and peso disbursement reconcilers can join those fields without re-keying INE OCR or CLABE digits. openData Studio turns the same objects into callable open data for credit-line monitors, duplicate-CURP blockers and SPEI/OXXO bill bots.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Query KYC pending components
POST
/v1/onboarding/requirementsosintReturns the KYC wizard's pendingComponents (basic info, address, income, INE front/back, liveness, emergency contacts) plus any already-saved componentData.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- submissionSource
- pendingComponents
- componentData
- name
- rfc
- educationLevel
- maritalStatus
- dependentsCount
POST /v1/onboarding/requirements HTTP/1.1 Content-Type: application/json { "submissionSource": "KYC" }{ "code": 0, "data": { "pendingComponents": [ "KYC_100_BASIC_INFO", "KYC_101_ADDRESS", "KYC_102_INCOME", "KYC_103_IDENTITY_FRONT", "KYC_104_IDENTITY_BACK", "KYC_105_LIVENESS_FACE", "KYC_106_EMERGENCY_CONTACT" ], "componentData": { "KYC_100_BASIC_INFO": { "name": "MARIA LOPEZ", "email": "[email protected]", "rfc": "LOPM850101XXX", "educationLevel": "bachelor", "maritalStatus": "single", "dependentsCount": 0 } } } }Save KYC component
POST
/v1/onboarding/componentsosintPersists one KYC componentCode (basic info, address, income, INE OCR, liveness or emergency contacts) and returns submissionId plus verificationStatus.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- componentCode
- submissionSource
- componentData
- name
- fatherLastName
- motherLastName
- rfc
- educationLevel
- maritalStatus
- dependentsCount
- gender
- birthday
- submissionId
- verificationStatus
POST /v1/onboarding/components HTTP/1.1 Content-Type: application/json { "componentCode": "KYC_100_BASIC_INFO", "submissionSource": "KYC", "componentData": { "name": "MARIA LOPEZ", "fatherLastName": "LOPEZ", "motherLastName": "GARCIA", "email": "[email protected]", "rfc": "LOPM850101XXX", "educationLevel": "bachelor", "maritalStatus": "single", "dependentsCount": 0, "gender": "female", "birthday": "1985-01-01" } }{ "code": 0, "data": { "componentCode": "KYC_100_BASIC_INFO", "submissionId": "sub_7c41d9e2", "verificationStatus": 1, "message": "OK" } }Submit credit application
POST
/v1/credit/requestsopenfinanceSubmits the completed KYC pack as a credit application (submissionSource KYC) with deviceContext and returns reviewing status plus a centavo creditLimit when already decided.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- submissionSource
- deviceContext
- deviceId
- deviceFingerprint
- terminalType
- loginChannel
- status
- creditLimit
POST /v1/credit/requests HTTP/1.1 Content-Type: application/json { "submissionSource": "KYC", "deviceContext": { "deviceId": "web-1729468800", "deviceFingerprint": "fp_demo", "terminalType": "web", "loginChannel": "web" } }{ "code": 0, "data": { "status": "CREDIT_REVIEWING", "creditLimit": 1500000, "message": "OK" } }Credit-line summary
POST
/v1/accounts/credit-lineopenfinanceLoads the credit-growth card: creditLimit and availableLimit in centavos (UI divides by 100), isReoffer / reofferOrderInfo.status, and the latest recentRepaymentInfo.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- creditLimit
- availableLimit
- isReoffer
- reofferOrderInfo
- status
- recentRepaymentInfo
- loanOrderId
- repayAmount
POST /v1/accounts/credit-line HTTP/1.1 Content-Type: application/json {}{ "code": 0, "data": { "creditLimit": 3000000, "availableLimit": 1850000, "isReoffer": true, "reofferOrderInfo": { "status": "ELIGIBLE" }, "recentRepaymentInfo": { "loanOrderId": "LN20261021001", "repayAmount": 215000 } } }Loan-guide snapshot
POST
/v1/offers/currentopenfinanceLoads the loan-guide calculator: availableAmount vs min/max per draw, offerVersion, quincenal (15) or monthly (30) availableTerms, loanPurposeMap, fixedRepayDays and a recommend repaymentMethod.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- offerVersion
- isReoffer
- availableAmount
- interestRate
- annualRate
- dailyRate
- minPerLoanAmount
- maxPerLoanAmount
- defaultAmount
- defaultTermDays
- availableTerms
- loanPurposeMap
- pendingOrders
- fixedRepayDays
- repayDaysEnter
- termDays
- installments
- repaymentMethod
POST /v1/offers/current HTTP/1.1 Content-Type: application/json {}{ "code": 0, "data": { "offerVersion": "1.0", "isReoffer": false, "availableAmount": 15000, "requestedAmount": 0, "interestRate": 0.36, "rates": { "annualRate": "0.36", "dailyRate": "0.001" }, "minPerLoanAmount": 1000, "maxPerLoanAmount": 15000, "defaultAmount": 8000, "defaultTermDays": 91, "availableTerms": { "quincenal": { "15": [2, 4, 6], "30": [3, 6, 12] } }, "loanPurposeMap": { "01": "Gastos personales" }, "pendingOrders": 0, "fixedRepayDays": "1,16", "repayDaysEnter": 1, "recommend": { "termDays": 15, "installments": 6, "repaymentMethod": "SPEI" } } }Calculate loan trial
POST
/v1/offers/quoteopenfinanceQuotes a peso trial for loanAmount / termDays / installments / repaymentMethod and returns principal, totalService, discount, repayDate schedule and repayDaysDiffCount for the first period.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- trialNo
- loanAmount
- offerVersion
- termDays
- installments
- repaymentMethod
- couponId
- usedCouponId
- serviceRate
- totalAmount
- principal
- totalService
- afterDiscountService
- discount
- repayDaysDiffCount
- termSchedule
- modeOfRepayAmount
- repayDate
- availableCouponList
POST /v1/offers/quote HTTP/1.1 Content-Type: application/json { "trialNo": "trial_1729468800_abc", "loanAmount": 8000, "offerVersion": "1.0", "termDays": 15, "installments": 6, "repaymentMethod": "SPEI", "couponId": "CPN_WELCOME" }{ "code": 0, "data": { "trialNo": "trial_1729468800_abc", "common": { "usedCouponId": "CPN_WELCOME" }, "trialResults": { "termDays": 15, "installments": 6, "serviceRate": "0.36", "totalAmount": 9120, "principal": 8000, "totalService": 1120, "afterDiscountService": 980, "discount": 140, "repayDaysDiffCount": 12, "termSchedule": [ { "termDays": 15, "installments": 6, "modeOfRepayAmount": 1520, "repayDate": "2026-11-01" } ], "availableCouponList": [ { "couponId": "CPN_WELCOME" } ] } } }Submit loan application
POST
/v1/loans/requestsopenfinanceBooks a draw against the credit line: loanAmount, termDays, installments, loanPurpose, repaymentMethod, appliedCouponIds and disbursement cardId, returning loanOrderId or requiredComponents for extra KYC.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- offerVersion
- loanAmount
- termDays
- installments
- loanPurpose
- repaymentMethod
- appliedCouponIds
- cardId
- deviceContext
- networkContext
- locationContext
- loanOrderId
- loanCacheKey
- requiredComponents
POST /v1/loans/requests HTTP/1.1 Content-Type: application/json { "offerVersion": "1.0", "loanAmount": 8000, "termDays": 15, "installments": 6, "loanPurpose": "01", "repaymentMethod": "SPEI", "appliedCouponIds": ["CPN_WELCOME"], "cardId": "card_9f21", "deviceContext": { "deviceId": "web-1729468800", "deviceFingerprint": "fp_demo", "terminalType": "web", "loginChannel": "web" }, "networkContext": { "isp": "" }, "locationContext": { "latitude": "19.4326", "longitude": "-99.1332" } }{ "code": 0, "data": { "loanOrderId": "LN20261021001", "loanCacheKey": "cache_aa12", "requiredComponents": [] } }Loan order detail
POST
/v1/loans/lookupopenfinanceLoads one loanOrderId: loanStatus (PROCESSING, PENDING_REPAY, OVERDUE, SETTLED, DISBURSING), peso loanAmount, installment schedule, totalServiceAfterDiscount and the masked disbursement subCardNo.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- loanOrderId
- loanStatus
- createTime
- confirmDate
- loanAmount
- termDays
- installment
- totalService
- totalServiceAfterDiscount
- protocolTitle
- cardInfo
- bankName
- subCardNo
- repaymentSchedule
- installmentNo
- repayDate
- failureReason
POST /v1/loans/lookup HTTP/1.1 Content-Type: application/json { "loanOrderId": "LN20261021001" }{ "code": 0, "data": { "loanOrderId": "LN20261021001", "loanStatus": 2, "createTime": "2026-10-21T11:04:00-06:00", "confirmDate": "2026-10-21T11:06:12-06:00", "loanAmount": 8000, "termDays": 15, "installment": 6, "totalService": 1120, "totalServiceAfterDiscount": 980, "protocolTitle": "Contrato de crédito", "cardInfo": { "bankName": "BBVA", "subCardNo": "646180123456789012" }, "repaymentSchedule": [ { "installmentNo": 1, "repayDate": "2026-11-01", "status": 1, "amountAfterDiscount": 1520 } ] } }List disbursement cards
POST
/v1/payout-accounts/listopenbankingLists bound payout rails: cardType 2 is an 18-digit CLABE, cardType 1 a 16-digit debit card; useType 1 is the main card and status 4 is ACTIVE.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- bankCardList
- cardId
- bankName
- cardNumber
- cardType
- status
- useType
- bankLogoOss
POST /v1/payout-accounts/list HTTP/1.1 Content-Type: application/json {}{ "code": 0, "data": { "bankCardList": [ { "cardId": "card_9f21", "bankName": "BBVA", "cardNumber": "646180123456789012", "cardType": 2, "status": 4, "useType": 1, "bankLogoOss": "https://cdn.example.com/banks/bbva.png" } ] } }Bind CLABE or debit card
POST
/v1/payout-accounts/linkopenbankingBinds an 18-digit CLABE or 16-digit debit cardNumber under bankCode and KYC cardHolderName; MFA / LIVENESS_LANDING returns cardDraftId for the face check before cardId is issued.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- cardNumber
- cardHolderName
- cardType
- bankCode
- deviceContext
- networkContext
- locationContext
- status
- nextStep
- cardDraftId
- cardId
POST /v1/payout-accounts/link HTTP/1.1 Content-Type: application/json { "cardNumber": "646180123456789012", "cardHolderName": "MARIA LOPEZ", "cardType": 2, "bankCode": "BBVA", "deviceContext": { "deviceId": "web-1729468800", "deviceFingerprint": "fp_demo", "terminalType": "WEB", "loginChannel": "PWA" }, "networkContext": { "clientIp": "", "isp": "" }, "locationContext": { "latitude": "", "longitude": "", "altitude": "" } }{ "code": 0, "data": { "status": "LIVENESS_LANDING", "nextStep": "LIVENESS_LANDING", "cardDraftId": "draft_44ab", "cardId": null } }Pending repayment bills
POST
/v1/repayments/dueopenbankingPages peso bills grouped by year/month: each row is loanId + installmentNo with totalAmount, dueStatus (1 due-soon, 2 overdue), daysToDue / overdueDays and repayTime.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- page
- pageSize
- total
- accountDate
- newPendingList
- loanId
- loanOrderId
- installmentNo
- repayTime
- createdTime
- totalAmount
- dueStatus
- daysToDue
- overdueDays
POST /v1/repayments/due HTTP/1.1 Content-Type: application/json { "page": 1, "pageSize": 10 }{ "code": 0, "data": { "total": 2, "accountDate": "2026-10-21", "newPendingList": { "2026": { "10": [ { "loanId": "L-8801", "loanOrderId": "LN20261021001", "installmentNo": 1, "repayTime": "2026-11-01T00:00:00-06:00", "createdTime": "2026-10-21T11:06:12-06:00", "totalAmount": 1520, "dueStatus": "1", "daysToDue": 11, "overdueDays": 0 } ] } } } }Confirm repayment
POST
/v1/repayments/sessionsopenbankingLocks selected loanId + installmentNo rows for amount pesos and returns cashierUrl (SPEI or OXXO H5) plus an in-flight repayOrderId with remainTime seconds.
Auth: Authenticated session from phone-OTP (then password) login. JSON POST; an auth-expired code in the response envelope restarts login.
- loans
- loanId
- installmentNo
- amount
- cashierUrl
- repayOrderId
- repayAmount
- remainTime
POST /v1/repayments/sessions HTTP/1.1 Content-Type: application/json { "loans": [ { "loanId": "L-8801", "installmentNo": 1 } ], "amount": 1520 }{ "code": 0, "data": { "cashierUrl": "https://pay.example/spei/session", "repayOrderId": "RP20261021088", "repayAmount": 1520, "remainTime": 900 } }
Data categories
- kyc
- credit-limits
- loans
- bank-accounts
- repayments
Where teams use this data
MXN credit-line monitoring
A collections or CRM stack polls creditLimit against availableLimit (centavos) and isReoffer so a higher-limit campaign only fires when reofferOrderInfo.status is open, instead of blasting every settled borrower.
INE / CURP identity match
Onboarding bots join INE-OCR curp and optional rfc with fatherLastName / motherLastName and emergency-contact phones so a duplicate CURP (error 120257) is caught before a second peso line is booked.
CLABE disbursement recon
Treasury matches loan apply cardId to a CLABE cardNumber (18 digits, cardType 2) or a 16-digit debit card, using bankCode and useType=main so SPEI payouts land on the same-name account that passed liveness.
SPEI / OXXO bill collection
A pay-in bot selects loanId + installmentNo rows where dueStatus is overdue or due-soon, posts repayConfirm, and opens cashierUrl for SPEI or OXXO before remainTime on an in-flight repayOrderId expires.
Frequently asked questions
What borrower fields sit on a Duxi Finanzas credit line?
The credit-growth card exposes creditLimit and availableLimit in centavos, isReoffer plus reofferOrderInfo.status, and a recentRepaymentInfo block. The loan-guide snapshot adds availableAmount, minPerLoanAmount / maxPerLoanAmount, interestRate, availableTerms and fixedRepayDays.
How does Duxi Finanzas identify a Mexican borrower?
The KYC wizard walks KYC_100_BASIC_INFO through KYC_105_LIVENESS_FACE: INE front/back OCR yields curp, the basic-info form takes name, rfc, email, birthday, gender, educationLevel, maritalStatus and dependentsCount, then address, income and emergency contacts, and a face-liveness step before the credit application is submitted.
How are pesos paid out and collected?
Disbursement binds an 18-digit CLABE (cardType 2) or 16-digit debit card (cardType 1) under bankCode and cardHolderName, then the loan request sends that cardId. Repayment lists loanId + installmentNo rows, a repayment confirmation returns cashierUrl for SPEI or OXXO, and an in-flight repayOrderId carries remainTime.
Who operates Duxi Finanzas?
Duxi Finanzas is the consumer brand of VERTRAUEN FINANCIERA, S.A. DE C.V., SOFOM, E.N.R., a CNBV- and CONDUSEF-supervised Mexican SOFOM. Support is [email protected] and +52 5599905610.
Apps similar to Duxi Finanzas: Préstamo Seguro
- DiDi Finanzas — DiDi Finanzas is DiDi Global's Mexico finance app, with a revolving DiDi Préstamos line of MXN 200–46,800 over up to 180 days, CLABE disbursement, SPEI or OXXO repayment, plus DiDi Card and DiDi Cuenta.
- Kueski — Kueski is a Mexican SOFOM E.N.R. (Kueski S.A.P.I. de C.V.) supervised by Condusef and the CNBV whose app combines Kueski Pay — buy now and pay in quincenas online or in stores — with cash loans in the same client.
- Credmex — Credmex is a CONDUSEF-registered Mexican personal-loan app that advertises unsecured cash of MXN 2,000–50,000 over 91–180 days at a published APR of 31.03%–372.41%, with INE/IFE onboarding and SPEI or cash-store repayment.
- Baubap — Baubap is a CNBV-supervised, CONDUSEF-registered Mexican SOFOM (Baubap, S.A.P.I. de C.V., SOFOM, ENR) whose app takes an INE and offers unsecured loans of MXN 500–9,000 over 90 days to 24 months without a credit-bureau check, at a published maximum APR of 300%.
- Tala — Tala's Mexico app (Tala Mobile) advertises unsecured cash of MXN 300–22,000 over 61–120 days with no credit-bureau review, direct deposit or cash-out, and a published annual rate of 201%–432% plus IVA, and it is registered with CONDUSEF.
- Stori — Stori is a Mexican credit-and-savings app that issues Stori Green and Stori Black no-annual-fee credit cards plus Stori Cuenta+, a digital account with yield-bearing savings, debit, and bill pay.
Topics
- duxi finanzas api
- curp kyc mexico
- clabe spei loan
- sofom prestamo
- creditLimit availableLimit
- fixedRepayDays quincenal
- vertrauen financiera
- oxxo repayment
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