Stori - Crédito y Ahorro icon

Stori Data API: credit statements, CLABE and vaults

Stori · Banking

Stori - Crédito y Ahorro is Stori's consumer Android app for Mexico — a digital credit card plus Cuenta / Ahorro Turbo deposits under the PowerUp / Stori Card group. After phone sign-in and CURP onboarding, cardholders activate a physical or virtual card, pay the quincenal statement by SPEI CLABE or an OXXO reference, split purchases into MSI mensualidades, collect cashback, and park pesos in Stori Inversión+ fixed-term vaults. The home hub also covers card freeze, NIP, chargebacks, FATCA status and SPEI transfer limits. The product is Mexico-only and sits next to Nu México, Klar and Mercado Pago for consumers who want a revolving line and a CLABE savings account on the same phone.

Quincenal statement rows pin availableCredit against totalDebt, minPayment and dueDate, while purchase lines stamp merchantName, amount and isMsi next to authNum and the PAN tail endingFour. Cuenta Turbo deposits expose a SPEI clabe with formattedClabe and fullUserName, transfer caps in maxAmountValue / accountLevel, and yield ticks as cycleAccumulatedAmount, yesterdayAccruedAmount, grossAmount, netAmount and isrTax. Stori Inversión+ vaults list depositAlias, gatNominalString and termString; cashback ledgers split cashback from amountToRedeem; secured-card collateral splits debitUnfrozenBalance from debitFrozenBalance. KYC identity on the same session carries curp, email and phone. Lending-stack reconcilers, SPEI inbound monitors and yield dashboards consume those objects; openData Studio turns them into callable open data.

Screenshots

  • Stori - Crédito y Ahorro screenshot 1
  • Stori - Crédito y Ahorro screenshot 2
  • Stori - Crédito y Ahorro screenshot 3
  • Stori - Crédito y Ahorro screenshot 4
  • Stori - Crédito y Ahorro screenshot 5
  • Stori - Crédito y Ahorro screenshot 6
  • Stori - Crédito y Ahorro screenshot 7
  • Stori - Crédito y Ahorro screenshot 8

API surface

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

  • Read cardholder profile

    GET /v1/cardholders/me osint

    Reads the signed-in cardholder row used on home — CURP, email, phone, unifiedStatus, dqInfo and the cards[] list.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • userID
    • customerID
    • name
    • lastName1
    • lastName2
    • email
    • phone
    • curp
    • birthDate
    • unifiedStatus
    • accountUUID
    • cardPinStatus
    • coreCustomerID
    • coreAccountID
    • isSecuredCard
    • dqInfo.status
    • dqInfo.dqDays
    • productInfo.productID
    • cards.cardUUID
    • cards.cardType
    GET /v1/cardholders/me HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "userID": "usr_8f21c4",
      "customerID": "cus_19a2b7",
      "name": "Ana",
      "lastName1": "García",
      "lastName2": "López",
      "email": "[email protected]",
      "phone": "5512345678",
      "curp": "GALA850101MDFRRN09",
      "birthDate": "1985-01-01",
      "unifiedStatus": "ACTIVE",
      "accountUUID": "acct-7c91e2",
      "campaignApiVersion": "v2",
      "cardPinStatus": "SET",
      "coreCustomerID": "core-cus-441",
      "coreAccountID": "core-acc-882",
      "isSecuredCard": false,
      "dqInfo": {"status": "CURRENT", "dqDays": 0},
      "productInfo": {"productID": "STORI_CARD", "subProductID": "CLASSIC"},
      "cards": [{"cardUUID": "card-aa12", "cardType": "PHYSICAL"}]
    }
  • Current credit statement

    GET /v1/credit/statements/latest openfinance

    Reads the live quincenal statement tile — availableCredit, totalDebt, minPayment and dueDate for Pay Mi Stori.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • availableCredit
    • totalDebt
    • originalBalance
    • totalPayment
    • minPayment
    • authCreditBalance
    • usedCredit
    • positiveAmount
    • overdraftAmount
    • statementDate
    • dueDate
    • currentDueDate
    • nextDueDate
    • lowQuincenaDate
    • highQuincenaDate
    • cutDate
    • lastUpdateTms
    GET /v1/credit/statements/latest HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "availableCredit": "12450.00",
      "totalDebt": "8750.40",
      "originalBalance": "9100.00",
      "totalPayment": "349.60",
      "minPayment": "440.00",
      "authCreditBalance": "21200.40",
      "usedCredit": "8750.40",
      "positiveAmount": "0.00",
      "overdraftAmount": "0.00",
      "statementDate": "2026-10-15",
      "currentStatementDt": "2026-10-15",
      "nextStatementDt": "2026-10-31",
      "dueDate": "2026-10-25",
      "currentDueDate": "2026-10-25",
      "nextDueDate": "2026-11-10",
      "expirationDay": 25,
      "lowQuincenaDate": "2026-10-01",
      "highQuincenaDate": "2026-10-15",
      "cutDate": "2026-10-15",
      "lastUpdateTms": "2026-10-19T18:40:00-06:00"
    }
  • List card transactions

    GET /v1/credit/ledger/entries openbanking

    Pages card-ledger rows shown on movements — merchantName, amount, isMsi and authNum with cursor links first/next/last.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • count
    • first
    • next
    • previous
    • last
    • result.id
    • merchantName
    • amount
    • transactionType
    • category
    • currency
    • dateTime
    • isMsi
    • isInstallmentAvailable
    • endingFour
    • authNum
    • storiVAT
    GET /v1/credit/ledger/entries HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "count": 2,
      "first": "/v1/credit/ledger/entries?page=1",
      "next": null,
      "previous": null,
      "last": "/v1/credit/ledger/entries?page=1",
      "result": [
        {
          "id": "txn_9c41",
          "displayType": "PURCHASE",
          "transactionType": "POS",
          "category": "GROCERY",
          "merchantName": "OXXO REFORMA",
          "title": "OXXO Reforma",
          "amount": "186.50",
          "storiVAT": "25.86",
          "currency": "MXN",
          "city": "CDMX",
          "country": "MX",
          "isTxnTypeChargebackAvailable": true,
          "ticketNumber": "TCK-4412",
          "endingFour": "4412",
          "dateTime": "2026-10-18T19:12:00-06:00",
          "authNum": "084421",
          "cardType": "PHYSICAL",
          "isInstallmentAvailable": true,
          "isMsi": false
        }
      ]
    }
  • Card transaction detail

    GET /v1/credit/ledger/entries/{entry_id} openbanking

    Hydrates one movement into receipt fields — authNum, endingFour, storiVAT, city/country and chargeback eligibility.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • id
    • merchantName
    • amount
    • storiVAT
    • currency
    • city
    • country
    • authNum
    • endingFour
    • category
    • ticketNumber
    • isTxnTypeChargebackAvailable
    • isMsi
    • isInstallmentAvailable
    • dateTime
    • cardType
    GET /v1/credit/ledger/entries/txn_9c41 HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "id": "txn_9c41",
      "displayType": "PURCHASE",
      "transactionType": "POS",
      "category": "GROCERY",
      "merchantName": "OXXO REFORMA",
      "title": "OXXO Reforma",
      "amount": "186.50",
      "storiVAT": "25.86",
      "currency": "MXN",
      "city": "CDMX",
      "country": "MX",
      "isTxnTypeChargebackAvailable": true,
      "ticketNumber": "TCK-4412",
      "endingFour": "4412",
      "dateTime": "2026-10-18T19:12:00-06:00",
      "authNum": "084421",
      "cardType": "PHYSICAL",
      "billerAccountId": null,
      "isInstallmentAvailable": true,
      "isMsi": false,
      "relatedTransactions": []
    }
  • Statement period summary

    GET /v1/credit/accounts/{account_id}/period-summary openfinance

    Breaks a statement period into initialBalance, purchases, payments, interests, vat and endingBalance.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • initialBalance
    • payments
    • credits
    • debits
    • purchases
    • interests
    • fees
    • cashWithdrawals
    • vat
    • endingBalance
    GET /v1/credit/accounts/acct-7c91e2/period-summary HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "initialBalance": "9100.00",
      "payments": "349.60",
      "credits": "120.00",
      "debits": "0.00",
      "purchases": "186.50",
      "interests": "41.20",
      "fees": "0.00",
      "cashWithdrawals": "0.00",
      "vat": "25.86",
      "endingBalance": "8750.40"
    }
  • Cuenta Turbo movement list

    GET /v1/deposits/accounts/{customer_id}/movements openbanking

    Pages Cuenta Turbo SPEI and yield movements — billingAmount, txnType, direction and status.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • currentPage
    • recordsPage
    • totalRecords
    • items.transactionId
    • billingAmount
    • currencyCode
    • txnType
    • bizType
    • direction
    • status
    • postDayLocal
    • postTimeLocal
    • cpAccountId
    GET /v1/deposits/accounts/usr_8f21c4/movements HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "currentPage": 1,
      "recordsPage": 20,
      "totalRecords": 1,
      "items": [
        {
          "transactionId": "dep-txn-10021",
          "billingAmount": "2500.00",
          "currencyCode": "MXN",
          "txnType": "SPEI_IN",
          "bizType": "DEPOSIT",
          "cpAccountId": "cpa-441",
          "productRequestId": "pr-77",
          "direction": "CREDIT",
          "postDayLocal": "2026-10-18",
          "postTimeLocal": "14:05:11",
          "type": "TRANSFER",
          "status": "POSTED",
          "refundReason": null
        }
      ]
    }
  • Read SPEI CLABE

    GET /v1/deposits/receive/clabe openbanking

    Returns the Cuenta Turbo inbound SPEI CLABE shown on receive — clabe, formattedClabe, provider and fullUserName.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • provider
    • channel
    • clabe
    • formattedClabe
    • status
    • fullUserName
    GET /v1/deposits/receive/clabe?user=true HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "provider": "STP",
      "channel": "CLABE",
      "clabe": "646180123456789012",
      "formattedClabe": "646 180 12345678901 2",
      "status": "ACTIVE",
      "fullUserName": "ANA GARCIA LOPEZ"
    }
  • SPEI transfer limits

    GET /v1/deposits/accounts/{customer_id}/transfer-limits openbanking

    Reads CNBV-style accountLevel caps — maxAmountValue, maxAmountDeposit and cycleType on Turbo sends.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • limitCode
    • ruleType
    • cycleType
    • maxAmountValue
    • accountLevel
    • maxAmountDeposit
    GET /v1/deposits/accounts/usr_8f21c4/transfer-limits HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "limitCode": "SPEI_OUT",
      "ruleType": "MAX_AMOUNT",
      "cycleType": "DAILY",
      "maxAmountValue": "25000.00",
      "accountLevel": "N2",
      "maxAmountDeposit": "50000.00"
    }
  • Cuenta Turbo accrued yields

    GET /v1/deposits/accounts/{customer_id}/yield openfinance

    Reads Turbo yield ticks — cycleAccumulatedAmount, yesterdayAccruedAmount, grossAmount, netAmount and ISR withholding.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • date
    • currency
    • cycleAccumulatedAmount
    • yesterdayAccruedAmount
    • grossAmount
    • netAmount
    • isrTax
    GET /v1/deposits/accounts/usr_8f21c4/yield HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "date": "2026-10-19",
      "currency": "MXN",
      "cycleAccumulatedAmount": "42.18",
      "yesterdayAccruedAmount": "1.37",
      "grossAmount": "49.10",
      "netAmount": "42.18",
      "isrTax": "6.92"
    }
  • List Inversión+ vaults

    GET /v1/savings/vaults openfinance

    Lists Stori Inversión+ vaults — depositAlias, gatNominalString, termString, totalInvestment and autorenewal flags.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • id
    • status
    • statusString
    • depositAlias
    • amountString
    • leftDays
    • endDate
    • interestString
    • termString
    • gatNominalString
    • totalInvestment
    • interestReturn
    • isAutoRenewalEnabled
    • investmentChoice
    GET /v1/savings/vaults HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "investments": [
        {
          "id": "vault-svd-00007",
          "status": "ACTIVE",
          "statusString": "Activa",
          "depositAlias": "Stori Inversión+",
          "amountString": "$10,000.00",
          "leftDays": 312,
          "endDateString": "15 sep 2027",
          "endDate": "2027-09-15",
          "createdDateString": "20 oct 2026",
          "interestString": "$1,550.00",
          "termString": "360 días",
          "gatNominalString": "15.50%",
          "totalInvestment": "10000.00",
          "interestReturn": "1550.00",
          "autorenewal": false,
          "isAutoRenewalEnabled": false,
          "autorenewalEditable": true,
          "investmentChoice": "SVDFIXTERM00007"
        }
      ]
    }
  • Inversión+ vault limits

    GET /v1/savings/vaults/capacity openfinance

    Reads cash available to open or top up an Inversión+ vault (availableBalance) plus the GAT disclaimer.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • availableBalance
    • disclaimer
    GET /v1/savings/vaults/capacity HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "availableBalance": "8500.00",
      "disclaimer": "El GAT nominal es bruto antes de ISR."
    }
  • Accumulated cashback

    GET /v1/rewards/cashback/balance openfinance

    Reads the rewards cashback balance - cashback vs amountToRedeem, cashbackLimitReached and redeemed_cashback / instant_cashback UX.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • cashback
    • cashbackLimitReached
    • userExperience
    • amountToRedeem
    GET /v1/rewards/cashback/balance HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "cashback": "320.50",
      "cashbackLimitReached": false,
      "userExperience": "redeemed_cashback",
      "amountToRedeem": "320.50"
    }
  • Secured-card collateral balance

    GET /v1/secured-card/collateral/{customer_id} openfinance

    Splits secured-card collateral into debitFrozenBalance, debitUnfrozenBalance and remainingToActivate.

    Auth: Authorization: Bearer <id-token-jwt>, the identity token issued by the app's sign-in session and sent on every call.

    • remainingToActivate
    • debitUnfrozenBalance
    • minimalDebitFrozenBalanceForConsumption
    • debitFrozenBalance
    GET /v1/secured-card/collateral/usr_8f21c4 HTTP/1.1
    Authorization: Bearer <id-token-jwt>
    Accept: application/json
    {
      "remainingToActivate": "0.00",
      "debitUnfrozenBalance": "1500.00",
      "minimalDebitFrozenBalanceForConsumption": "500.00",
      "debitFrozenBalance": "3500.00"
    }

Data categories

  • identity
  • credit statements
  • card transactions
  • SPEI CLABE
  • deposit yields
  • investment vaults
  • cashback

Where teams use this data

  • Quincenal credit-line reconciliation

    Nightly jobs pull availableCredit, totalDebt and minPayment against purchases/payments/endingBalance so a collections or ERP stack can flag missed dueDate windows without scraping Pay Mi Stori.

  • SPEI inbound matching

    Treasury bots bind the published clabe / formattedClabe to Turbo SPEI_IN rows (transactionId, billingAmount, direction) and enforce maxAmountValue / accountLevel caps on outbound sends.

  • Yield and Inversión+ ops

    Wealth dashboards chart cycleAccumulatedAmount and isrTax on Cuenta Turbo, then list vaults by gatNominalString, termString and autorenewal for GAT-disclosed fixed-term inventory.

  • KYC and cashback overlays

    Support desks join curp, email and phone on the cardholder row with cashback / amountToRedeem and secured-card debitFrozenBalance when a dispute or collateral top-up lands.

Frequently asked questions

Which Stori fields describe the live credit line?

The current-statement object carries availableCredit, totalDebt, usedCredit, minPayment and dueDate, with a period summary of initialBalance, purchases, payments, vat and endingBalance.

How is the Cuenta Turbo SPEI account represented?

Inbound receive publishes clabe, formattedClabe, provider and fullUserName. Movements then stamp transactionId, billingAmount, txnType, direction and status; caps sit on maxAmountValue, maxAmountDeposit, accountLevel and cycleType.

What identifies a Stori cardholder?

The profile row keys userID and customerID and carries curp, email, phone, unifiedStatus, dqInfo and the cards[] list (cardUUID, cardType).

Apps similar to Stori - Crédito y Ahorro

  • Nu — Nu is Nubank's Mexico app, which entered the market in 2019 with a no-annual-fee Mastercard credit card and a fee-free digital account, and later applied through Nu México for a local banking license.
  • Klar — Klar is a CNBV-regulated Mexican SOFIPO whose app issues a no-annual-fee credit card, a Cuenta Klar debit account and fixed-term Inversión deposits.
  • Mercado Pago — Mercado Pago in Mexico issues a no-annual-fee Visa credit card with meses sin intereses and a digital account that pays yield on available balance and Apartados savings.
  • Ualá — Ualá in Mexico offers a no-annual-fee credit card, a Mastercard debit card and a yield-bearing cuenta with Reserva a plazo term deposits.
  • Plata — Plata (Banco Plata) is a Mexican digital bank whose app issues Plata Crédito — a Mastercard with category cashback and meses sin intereses — plus Plata Cuenta deposits.
  • Hey Banco — Hey Banco is a Mexican digital bank whose app opens a cuenta, issues credit cards with no lifetime annual fee, and offers Ahorro Hey savings and Inversión Hey deposits.
  • albo — albo is a CNBV-authorized Mexican IFPE whose app opens a personal cuenta with physical and virtual Mastercard debit cards and cash-in at retail chains.

Topics

  • Stori API
  • Stori Mexico credit card
  • availableCredit
  • SPEI clabe
  • gatNominalString
  • Cuenta Turbo yields
  • Stori Inversión+
  • curp cardholder

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