The Bill Payments service is live in Mexico (MXN). You pre-fund Chipi credits in USDC; on each purchase Chipi debits your credits, fulfills with the provider in MXN, and lets you charge your own users however you want (card, transfer, in-app balance — that side is outside Chipi). You earn a configurable markup on every transaction.
At a glance
700+ services
Live SKUs across all 4 categories
170+ brands
Direct integrations with major Mexican carriers and providers
4 categories
Phone, Gift Cards, Bills, Phone Bundles
Earn a markup
Set your own per-transaction markup; we settle in USDC
What’s in the catalog
- 📱 Phone Recharges
- 🎁 Gift Cards
- 🧾 Bills & Services
- 📞 Phone Bundles
35 carriers · 379 servicesTop up prepaid phone balance for any major Mexican carrier. Your users pay in USDC, the carrier sees a normal recharge.






…and 27 more carriers (FlashMobile, OUI, RediCoppel, FRC Mobile, ABIB, Beneleit, Megamovil, and others).
Response is a paginated
Telcel

AT&T

Movistar

BAIT

Mimovil

ULTRACEL

Axios Mobile

VALOR TELECOM

See the integration code (Telcel example)
See the integration code (Telcel example)
{ data, total, page, limit, totalPages } where each entry in data is an SKU ({ id, name, chipiName, fixedAmount, currency, carrierName, ... }). Pass an id to POST /v1/sku-purchases to charge — see the Node guide.Prerequisites
Before your first bill purchase you need three things in place:- A Chipi org with an API key. Get yours from
dashboard.chipipay.com→ API Keys. Usepk_dev_...while integrating (sandboxed, see below) andpk_prod_...for live traffic. - A pre-funded credits balance. Deposit USDC to your org’s Chipi credits address (visible in the dashboard’s Billing tab). Each PROD purchase debits this balance, not an end-user wallet. DEV purchases never touch it.
- A JWKS rule registered for your API key. Every endpoint on this page (catalog reads, purchase POST, status polling) is guarded by Chipi’s
BearerTokenGuardand requires both anx-api-keyheader and a customer JWT in theAuthorization: Bearerheader. The JWT is issued by your auth provider; Chipi validates it against the JWKS URL you register (typically your auth provider’s.well-known/jwks.json, e.g.https://clerk.yourdomain.com/.well-known/jwks.json).
How it works
- Browse the catalog with
GET /v1/skus— filter bycategory+carrierNameto find what you need. - Buy with
POST /v1/sku-purchases— passskuId,skuReference(phone number, account, etc.),currencyAmount, and any non-empty string astransactionHash(it’s used as the idempotency key, not as an on-chain hash). Chipi debits your credits balance, returns aPENDINGtransaction immediately. - Track with
GET /v1/sku-purchases/:id— poll until status isSUCCESSorFAILED. Most settle in under 5 seconds.
DEV sandbox
Every API key has a DEV (pk_dev_...) and PROD (pk_prod_...) variant. DEV is a true sandbox: every purchase succeeds deterministically, no real credits are debited, and the carrier is never called. Synthetic markers identify sandbox calls:
| Field | DEV value | PROD value |
|---|---|---|
ledgerEntryId | starts with le-dev- | real LedgerEntry row id |
skuFileNumber | starts with dev-sandbox- | the carrier’s actual fulfillment receipt |
status | always SUCCESS | PENDING → SUCCESS or FAILED |
OrgBalance | never mutated | debited by currencyAmount (converted to USD) |
pk_prod_... and the same code path runs against the real carrier.
What you charge your users
How and how much you charge end users is up to you — Chipi never sees the end-user’s payment. We settle the provider in MXN and debit your Chipi credits in USDC (FX rate captured at the time of the call). The optionalorgMarkup field on the purchase body lets you record the markup you charged this end-user, which Chipi surfaces in your dashboard analytics.
✅ Verified against the live API on 2026-05-19 with a real production purchase: Virgin $20 MXN recharge to a live phone, settled SUCCESS with TET file number returned in under 5 seconds.



















