Stori Data API: credit statements, CLABE and vaults
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
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/meosintReads 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
- 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/latestopenfinanceReads 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/entriesopenbankingPages 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}openbankingHydrates 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-summaryopenfinanceBreaks 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}/movementsopenbankingPages 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/clabeopenbankingReturns 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-limitsopenbankingReads 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}/yieldopenfinanceReads 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/vaultsopenfinanceLists 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/capacityopenfinanceReads 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/balanceopenfinanceReads 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}openfinanceSplits 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