Duxi Finanzas: Préstamo Seguro icon

Duxi Finanzas CURP, CLABE and MXN loan APIs

Duxi Finanzas · Lending 4.9 ★

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

  • Duxi Finanzas: Préstamo Seguro screenshot 1
  • Duxi Finanzas: Préstamo Seguro screenshot 2
  • Duxi Finanzas: Préstamo Seguro screenshot 3
  • Duxi Finanzas: Préstamo Seguro screenshot 4
  • Duxi Finanzas: Préstamo Seguro screenshot 5

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/requirements osint

    Returns 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
    • email
    • 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/components osint

    Persists 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
    • email
    • 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/requests openfinance

    Submits 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-line openfinance

    Loads 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/current openfinance

    Loads 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/quote openfinance

    Quotes 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/requests openfinance

    Books 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/lookup openfinance

    Loads 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/list openbanking

    Lists 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/link openbanking

    Binds 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/due openbanking

    Pages 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/sessions openbanking

    Locks 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

Get a quote