Flip: Transfer & Cashback icon

Flip data API: unique codes, bank inquiry and pulsa

PT Fliptech Lentera Inspirasi Pertiwi · Payments 4.7 ★

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

  • Flip: Transfer & Cashback screenshot 1
  • Flip: Transfer & Cashback screenshot 2
  • Flip: Transfer & Cashback screenshot 3
  • Flip: Transfer & Cashback screenshot 4
  • Flip: Transfer & Cashback screenshot 5
  • Flip: Transfer & Cashback screenshot 6
  • Flip: Transfer & Cashback screenshot 7
  • Flip: Transfer & Cashback screenshot 8

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

    Exchanges 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.

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

    Loads 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
    • email
    • 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/lookup openbanking

    Resolves 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
    • email
    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-codes openbanking

    Mints 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-transfers openbanking

    Books 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/precheck openbanking

    Pre-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-transfers openbanking

    Pages 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/allowance openfinance

    Returns 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/savings opendata

    Reads 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-proofs openbanking

    Attaches 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/beneficiaries openbanking

    Returns 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/catalog opendata

    Lists 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/orders openfinance

    Creates 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/cashouts openfinance

    Lists 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/reversals openfinance

    Pages 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/status opendata

    Publishes 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

Get a quote