Flip data API: unique codes, bank inquiry and pulsa
Flip: Transfer & Cashback is the consumer remittance app from PT Fliptech Lentera Inspirasi Pertiwi, an Indonesian fintech that lets people send money across local banks without paying the usual interbank fee. Users log in with email, look up a destination account, pick a sender bank, and complete the transfer by depositing a unique amount; the same login also tops up pulsa, tracks cashback, and handles refunds when a transfer cannot land. The Play listing shows 10M+ installs, a 4.66 rating across 733,658 reviews, and an Indonesia-only audience that otherwise reaches for bank apps, DANA, or OVO for the same domestic send.
Unique-code deposits stamp every Indonesian interbank send: a mint call returns kode_unik for the chosen bank and nominal, and the booked row comes back as id_transaksi, biaya and timestamp. Destination inquiry fills nama and kota from rekening plus bank before the form will post noRekTujuan, namaTujuan, bankPengirim and bankPenerima.
The signed-in ledger is the KYC profile itself: saldo, limit_transfer, kyc, no_identitas and lifetime menghemat sit on the same user record as no_hp and jumlah_transaksi. History rows then add no_rek_tujuan, time_served and bukti_shortlink; refunds keep ref_sumber and alasan; pulsa SKUs ship as id_produk_flip, nama_produk and harga grouped by operator.
Disbursement and payroll stacks use the inquiry name-match plus unique-code recon to close payouts; catalog aggregators refresh airtime prices from the same product list. openData Studio turns those objects 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.
Email login
POST
/v1/sessions/emailosintExchanges email credentials for a session jwt that the client keeps for the session and attaches as a Bearer token on every later call.
Auth: Unauthenticated; form body email + password, query via=email plus platform and version. The returned jwt is kept by the client and sent as Authorization Bearer, together with the static api-key header, on later calls.
- password
- via
- platform
- version
- jwt
POST /v1/sessions/email?via=email&platform=android&version=61 HTTP/1.1 Content-Type: application/x-www-form-urlencoded api-key: <app-key> email=ada%40contoh.id&password=********{ "jwt": "<session-jwt>", "errors": [] }Current user profile
GET
/v1/members/meopenfinanceLoads the signed-in member profile, KYC identity bag, remaining saldo, lifetime savings (menghemat) and the current transfer limit.
Auth: Authorization Bearer jwt plus api-key header
- id
- username
- nama
- no_identitas
- jenis_identitas
- tgl_lahir
- foto_identitas
- prof_pic
- no_hp
- no_hp_verified
- saldo
- kyc
- kyc_baru
- kota
- menghemat
- alamat
- limit_transfer
- tempat_lahir
- jumlah_transaksi
- chat_token
GET /v1/members/me HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "id": "184221", "username": "ada", "email": "[email protected]", "nama": "Ada Putri", "no_identitas": "3171xxxxxxxxxxxx", "jenis_identitas": "ktp", "tgl_lahir": "1994-02-11", "foto_identitas": "https://files.example.com/identity/184221.jpg", "prof_pic": "https://files.example.com/avatars/184221.jpg", "no_hp": "081234567890", "no_hp_verified": "1", "saldo": "125000", "kyc": "1", "kyc_baru": "1", "kota": "jakarta-selatan", "menghemat": "340000", "alamat": "Jl. Melawai 12", "limit_transfer": 10000000, "tempat_lahir": "Jakarta", "jumlah_transaksi": "42", "chat_token": "ct-9f21" }Destination account inquiry
POST
/v1/accounts/lookupopenbankingResolves an Indonesian bank account number to the registered holder name, city and optional email before an interbank transfer is created.
Auth: Authorization Bearer jwt plus api-key header
- rekening
- bank
- kota
- nama
POST /v1/accounts/lookup HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: Bearer <jwt> api-key: <app-key> rekening=1234567890&bank=bca{ "rekening": "1234567890", "bank": "bca", "kota": "jakarta", "nama": "BUDI SANTOSO", "email": "[email protected]" }Allocate unique deposit code
POST
/v1/deposit-codesopenbankingMints the three-digit kode_unik that the sender adds to the transfer amount so the incoming bank deposit can be matched.
Auth: Authorization Bearer jwt plus api-key header
- bank
- nominal
- kode_unik
POST /v1/deposit-codes HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: Bearer <jwt> api-key: <app-key> bank=bca&nominal=500000{ "kode_unik": 314 }Create forward transfer
POST
/v1/bank-transfersopenbankingBooks an interbank send: destination account, sender bank, amount, memo and unique code, returning the new transaction id and fee.
Auth: Authorization Bearer jwt plus api-key header
- emailTujuan
- noRekTujuan
- namaTujuan
- bankPengirim
- bankPenerima
- nominal
- berita
- jenisRekening
- kota
- kodeUnik
- isFlipPlus
- id_transaksi
- kode_unik
- biaya
- timestamp
POST /v1/bank-transfers HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: Bearer <jwt> api-key: <app-key> emailTujuan=budi%40contoh.id&noRekTujuan=1234567890&namaTujuan=BUDI%20SANTOSO&bankPengirim=mandiri&bankPenerima=bca&nominal=500000&berita=Bayar%20sewa&jenisRekening=biasa&kota=jakarta&kodeUnik=314&isFlipPlus=0{ "id_transaksi": "882145", "kode_unik": 314, "biaya": 0, "timestamp": "2026-10-17 09:14:02" }Validate forward transfer
POST
/v1/bank-transfers/precheckopenbankingPre-flight check of a draft send (account, banks, amount, Flip Plus flag) before a unique code is allocated and the row is created.
Auth: Authorization Bearer jwt plus api-key header
- noRekTujuan
- namaTujuan
- bankPengirim
- bankPenerima
- nominal
- berita
- jenisRekening
- kota
- isFlipPlus
- errors
POST /v1/bank-transfers/precheck HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: Bearer <jwt> api-key: <app-key> noRekTujuan=1234567890&namaTujuan=BUDI%20SANTOSO&bankPengirim=mandiri&bankPenerima=bca&nominal=500000&berita=Bayar%20sewa&jenisRekening=biasa&kota=jakarta&isFlipPlus=0{ "errors": [] }List forward transfers
GET
/v1/bank-transfersopenbankingPages the sender's interbank history with destination account, unique code, fee, serving timestamp and receipt shortlink.
Auth: Authorization Bearer jwt plus api-key header
- id
- no_rek_tujuan
- bank_penerima
- nama_tujuan
- kota
- bank_pengirim
- nominal
- biaya
- berita
- bukti_shortlink
- kode_unik
- status
- time_served
- bukti
- keterangan
GET /v1/bank-transfers?pagination=20&page=1&sort=-timestamp&showBundleChild=true HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "data": [ { "id": "882145", "no_rek_tujuan": "1234567890", "bank_penerima": "bca", "nama_tujuan": "BUDI SANTOSO", "kota": "jakarta", "bank_pengirim": "mandiri", "nominal": 500000, "biaya": 0, "berita": "Bayar sewa", "bukti_shortlink": "https://s.example.com/b/882145", "kode_unik": 314, "status": 1, "time_served": "2026-10-17 10:02:11", "bukti": "https://files.example.com/proofs/882145.jpg", "keterangan": "" } ] }Forward-transfer limit
GET
/v1/bank-transfers/allowanceopenfinanceReturns the remaining daily/period send cap that the app shows as the member's transfer limit.
Auth: Authorization Bearer jwt plus api-key header
- limit
GET /v1/bank-transfers/allowance HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "limit": 10000000 }Lifetime savings
GET
/v1/rewards/savingsopendataReads the running cashback and fee-saved total that the home screen shows as menghemat.
Auth: Authorization Bearer jwt plus api-key header
- hemat
GET /v1/rewards/savings HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "hemat": "340000" }Upload transfer receipt
POST
/v1/payment-proofsopenbankingAttaches a bank-deposit screenshot to a pending transfer so the unique-code payment can be confirmed.
Auth: Authorization Bearer jwt plus api-key header; multipart/form-data image upload
- id_transaksi
- bukti
- url
POST /v1/payment-proofs HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key> Content-Type: multipart/form-data --boundary Content-Disposition: form-data; name="id_transaksi" 882145 --boundary Content-Disposition: form-data; name="bukti"; filename="bukti.jpg" Content-Type: image/jpg <jpeg bytes>{ "url": "https://files.example.com/proofs/882145.jpg" }Saved destination accounts
GET
/v1/beneficiariesopenbankingReturns favourite and recently used destination accounts for the send form autocomplete.
Auth: Authorization Bearer jwt plus api-key header
- rekening_favorit
- history_rekening
- noRekening
- bank
- nama
- kota
GET /v1/beneficiaries HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "rekening_favorit": { "data": [ { "noRekening": "1234567890", "bank": "bca", "nama": "BUDI SANTOSO", "kota": "jakarta" } ] }, "history_rekening": [ { "noRekening": "0987654321", "bank": "mandiri", "nama": "SITI RAHMA" } ] }PPOB pulsa catalog
GET
/v1/airtime/catalogopendataLists pulsa/PPOB SKUs grouped by operator, with product id, display name, price and phone-number regex.
Auth: Authorization Bearer jwt plus api-key header
- jenis_produk
- version_code
- produks
- regex
- operator
- id_produk_flip
- nama_produk
- harga
GET /v1/airtime/catalog?jenis_produk=pulsa&version_code=61 HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "produks": [ { "operator": "telkomsel", "id_produk_flip": "tsel-25", "nama_produk": "Telkomsel 25rb", "jenis_produk": "pulsa", "harga": 25000 } ], "regex": [".*08.*"] }Create pulsa transfer
POST
/v1/airtime/ordersopenfinanceCreates a prepaid-airtime order against a catalog SKU, sender bank and displayed price; payment then waits for the unique-code deposit.
Auth: Authorization Bearer jwt plus api-key header
- noHpTujuan
- idProdukFlip
- hargaDitampilkan
- bankPengirim
- id
- kode_unik
- status
- timestamp
POST /v1/airtime/orders HTTP/1.1 Content-Type: application/x-www-form-urlencoded Authorization: Bearer <jwt> api-key: <app-key> noHpTujuan=081234567890&idProdukFlip=tsel-25&hargaDitampilkan=25000&bankPengirim=bca{ "id": "99102", "kode_unik": 218, "status": 0, "timestamp": "2026-10-17 09:20:11" }List withdrawals
GET
/v1/cashoutsopenfinanceLists balance cash-outs to a bank account with amount, destination and status.
Auth: Authorization Bearer jwt plus api-key header
- id
- jenis_transaksi
- nominal
- status
- no_rek_tujuan
- nama_tujuan
- bank_penerima
- bukti
- timestamp
GET /v1/cashouts HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "data": [ { "id": "44012", "jenis_transaksi": 0, "nominal": 125000, "status": 1, "no_rek_tujuan": "1234567890", "nama_tujuan": "ADA PUTRI", "bank_penerima": "bca", "bukti": "", "timestamp": "2026-10-16 18:01:00" } ] }List refunds
GET
/v1/reversalsopenfinancePages failed-send refunds with reason code, source transaction id (ref_sumber) and the bank account that should receive the money back.
Auth: Authorization Bearer jwt plus api-key header
- id
- nominal
- alasan
- status
- notes
- timestamp
- bukti
- ref_sumber
- keterangan
- no_rek_tujuan
- bank_penerima
- nama_tujuan
GET /v1/reversals?pagination=20&page=1&sort=-timestamp HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "data": [ { "id": "7701", "nominal": "500000", "alasan": 1, "status": "1", "notes": "Rekening tujuan salah", "timestamp": "2026-10-15 11:22:00", "bukti": "", "ref_sumber": "882100", "keterangan": [], "no_rek_tujuan": "1234567890", "bank_penerima": "bca", "nama_tujuan": "ADA PUTRI" } ] }App info and maintenance
GET
/v1/service/statusopendataPublishes the supported app version, a maintenance flag and a gangguan (outage) banner for the home screen.
Auth: Authorization Bearer jwt plus api-key header (the client attaches them even though the call is informational)
- version
- maintenance
- gangguan
GET /v1/service/status HTTP/1.1 Authorization: Bearer <jwt> api-key: <app-key>{ "version": "0.6.5", "maintenance": false, "gangguan": "" }
Data categories
- kyc-profile
- balances
- account-inquiry
- interbank-transfers
- unique-codes
- receipts
- pulsa-catalog
- refunds
- withdrawals
Where teams use this data
Reconcile unique-code deposits
A treasury bot matches inbound bank credits to Flip sends by kode_unik, nominal and bank_pengirim, then closes the row when time_served and bukti_shortlink appear.
Pre-validate destination accounts
Payroll or disbursement tools look up rekening + bank and refuse a payout unless the returned nama matches the intended beneficiary.
KYC and limit gating
A lending or cashback partner reads kyc, no_identitas, saldo and limit_transfer before allowing a larger send or a Flip-balance withdrawal.
Pulsa catalog sync
A bill-pay aggregator pulls produks grouped by operator (id_produk_flip, nama_produk, harga) so in-app airtime prices stay aligned with Flip's SKU list.
Frequently asked questions
Which Flip objects identify an interbank send?
A create call returns id_transaksi, kode_unik, biaya and timestamp. History rows add no_rek_tujuan, nama_tujuan, bank_pengirim, bank_penerima, time_served and bukti_shortlink.
How does destination-account inquiry work?
Post rekening and bank; the response nama, kota and optional email are copied onto the send form as noRekTujuan / namaTujuan before the precheck or create call.
What KYC and balance fields sit on the member record?
The member profile merges id, nama, email, no_identitas, jenis_identitas, no_hp, no_hp_verified, kyc, kyc_baru, saldo, limit_transfer, menghemat, kota, alamat and jumlah_transaksi.
How is the Flip client authenticated?
Email sign-in returns a jwt that the client keeps for the session. Every later call sends it as an Authorization Bearer token plus a static api-key header; POST bodies are application/x-www-form-urlencoded unless the receipt upload uses multipart.
Apps similar to Flip: Transfer & Cashback
- DANA Indonesia Digital Wallet — DANA is PT Espay Debit Indonesia Koe's Bank Indonesia–licensed e-wallet for QRIS payments, transfers to BCA, BRI, BNI and Mandiri accounts, and sends to GoPay, ShopeePay and OVO.
- OVO — OVO is PT Visionet Internasional's Jakarta e-money app, licensed by Bank Indonesia, that holds OVO Cash for payments and OVO Points for merchant rewards.
- GoPay: Transfer, Payment, QRIS — GoPay is PT GoTo Gojek Tokopedia Tbk's consumer wallet for bank transfers, QRIS payments, pulsa top-ups and bill pay, including sends to other GoPay users, banks and e-wallets.
- Jenius — Jenius is PT Bank SMBC Indonesia Tbk's digital-bank app with unlimited free transfers to other banks, bill and virtual-account payments, mobile-credit top-ups and Visa debit cards.
- SeaBank — SeaBank is PT Bank Seabank Indonesia's digital-bank app that lists no admin fee and 100 free transfers per month to all banks, plus fee-free ShopeePay top-ups.
- BCA mobile — BCA mobile is PT Bank Central Asia Tbk's consumer app whose m-BCA module sends money between BCA accounts and to other banks and keeps those transfer destinations on a list.
- Bank Jago — Bank Jago is an Indonesian digital-bank app that offers up to 150 free bank transfers, BI-FAST sends, QRIS payments from a chosen Pocket, and fee-free GoPay top-ups.
- Wise: International Transfers — Wise is an international-account app, listed on its Indonesia site, for sending, receiving and converting money across borders as an alternative to a bank's overseas transfer.
Topics
- Flip data API
- kode unik transfer
- cek norek Indonesia
- Flip saldo KYC
- pulsa Flip catalog
- interbank unique code
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