Tunaiku - Pinjaman Dana Online icon

Tunaiku Pinjaman Dana Online Data API

PT Bank Amar Indonesia Tbk. · Lending 4.7 ★

Tunaiku - Pinjaman Dana Online is the unsecured cash-loan (KTA) app of PT Bank Amar Indonesia Tbk., an OJK-licensed Indonesian bank. Borrowers apply for IDR 2 million to IDR 30 million over 6–30 months at a published 3–5% flat monthly rate; Play’s sample quotes IDR 5,000,000 over six months at 3% with a 5% administration fee and IDR 550,000 account-maintenance fee, disbursing IDR 4,750,000 and a monthly installment of IDR 1,075,000. The same Android client covers first-time and repeat/top-up loans, early payoff, virtual-account repayment, eKYC, QRIS, and Amar Bank’s Senyumku savings account used as a disbursement rail. Google Play lists a 4.73 rating across 1,457,544 reviews and 10 million-plus installs, competing with Kredivo and Easycash for Indonesian pinjaman users.

Borrower identity lands as custHash, custId and KTP pin on the profile record, with mlpLevel, paymentNumber and flags eligibleToApply / hasActiveLoan. An offer row carries loanAmount, period, monthlyInstallmentAmount and net toBankAmount; an in-force loan adds saldo, totalUnpaid, dueDate and installment sum / partNum.

Repayment rails mint virtualAccount plus accountName; early payoff quotes earlyPaymentAmount and refundAmount against a dedicated VA. Senyumku savings expose averageBalance and nextMonthLevel. Collection desks and lending-stack bots stitch those fields into unpaid monitors and VA matching; openData Studio turns the same surface into callable open data.

Screenshots

  • Tunaiku - Pinjaman Dana Online screenshot 1
  • Tunaiku - Pinjaman Dana Online screenshot 2
  • Tunaiku - Pinjaman Dana Online screenshot 3
  • Tunaiku - Pinjaman Dana Online screenshot 4
  • Tunaiku - Pinjaman Dana Online screenshot 5
  • Tunaiku - Pinjaman Dana Online screenshot 6
  • Tunaiku - Pinjaman Dana Online screenshot 7

API surface

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

  • Password or refresh session

    POST /v1/auth/grant osint

    Opens or renews the borrower session. Password grant sends username and password; refresh grant sends refreshToken. The JSON returns authToken (and optional resetPasswordToken) that the Android client attaches as Authorization: Bearer.

    Auth: JSON body username + password with grantType, or a refresh_token grant with refreshToken. Response authToken is replayed as Authorization: Bearer on all later calls.

    • username
    • password
    • grantType
    • refreshToken
    • authToken
    • resetPasswordToken
    POST /v1/auth/grant HTTP/1.1
    Content-Type: application/json
    
    {
      "username": "081234567890",
      "password": "********",
      "grantType": "password",
      "refreshToken": null
    }
    {
      "authToken": "eyJhbGciOiJSUzI1NiJ9.auth",
      "resetPasswordToken": null,
      "grantType": "password",
      "refreshToken": "rt_9f21c0ab"
    }
  • Request login OTP

    POST /v1/auth/otp/{purpose}/dispatch osint

    Starts an SMS or WhatsApp OTP for a purpose such as first-login. Body is username; the response mints otpRequestId and rate-limit counters attemptsLeft, retryableAfter, maxAttempt.

    Auth: Pre-login; JSON body username. purpose selects the flow such as first-login; medium is sms or whatsapp. No Bearer yet.

    • username
    • otpRequestId
    • attemptsLeft
    • retryableAfter
    • maxAttempt
    POST /v1/auth/otp/first-login/dispatch HTTP/1.1
    Content-Type: application/json
    
    {
      "username": "081234567890"
    }
    {
      "otpRequestId": "otp-7c21ab",
      "attemptsLeft": 4,
      "retryableAfter": 60,
      "maxAttempt": 5
    }
  • Verify login OTP

    POST /v1/auth/otp/{purpose}/check osint

    Consumes the OTP against otpRequestId and returns authToken (plus optional resetPasswordToken) that subsequent loan and profile calls attach as Bearer.

    Auth: Pre-login; JSON body otpRequestId + otp (+ optional transactionId). Returns authToken used as Authorization: Bearer.

    • otpRequestId
    • otp
    • transactionId
    • authToken
    • resetPasswordToken
    POST /v1/auth/otp/first-login/check HTTP/1.1
    Content-Type: application/json
    
    {
      "otpRequestId": "otp-7c21ab",
      "otp": "483920",
      "transactionId": "txn-pre-11"
    }
    {
      "authToken": "eyJhbGciOiJSUzI1NiJ9.auth",
      "resetPasswordToken": null
    }
  • Borrower profile

    GET /v1/borrower/profile osint

    Loads the signed-in borrower card: KTP pin, custHash / custId, mlpLevel, paymentNumber, eligibility flags, payout Account (bankName, accountNumber) and Income (jobType, monthlyIncome).

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • pin
    • custHash
    • custId
    • mlpLevel
    • currency
    • email
    • firstName
    • name
    • phone
    • paymentNumber
    • hasActiveLoan
    • eligibleToApply
    • eligibleForTopup
    • dateOfBirth
    • bankName
    • accountNumber
    • monthlyIncome
    GET /v1/borrower/profile HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "pin": "3174010101900001",
      "custHash": "ch_8f21",
      "custId": 440192,
      "mlpLevel": "GOLD",
      "currency": "IDR",
      "email": "[email protected]",
      "firstName": "Siti",
      "name": "Siti Nurhaliza",
      "phone": "081234567890",
      "paymentNumber": "880012345678",
      "hasActiveLoan": "true",
      "eligibleToApply": false,
      "eligibleForTopup": true,
      "otpEligible": true,
      "hasAcceptedHistory": true,
      "newLoanInfo": {
        "dateOfBirth": "1990-01-01",
        "gender": "F",
        "mobilePhoneNumber": "081234567890",
        "account": {
          "bankName": "BCA",
          "accountNumber": "1234567890",
          "accountType": "SAVINGS",
          "displayName": "SITI NURHALIZA",
          "swiftCode": "CENAIDJA"
        },
        "income": {
          "jobType": "EMPLOYEE",
          "monthlyIncome": "8000000",
          "employerName": "PT Contoh",
          "taxId": "10.20.30.4-567.000"
        }
      }
    }
  • Active loan detail

    GET /v1/loans/current openfinance

    Returns the in-force KTA: id, amount, period, remaining saldo / totalUnpaid, currentInstallmentValue, and the installment grid (date, sum, partNum, unpaid). loanProgress adds dueDate, totalBill and currentAmountDue for the repayment card.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • id
    • status
    • amount
    • period
    • saldo
    • partnerType
    • productType
    • currentInstallmentValue
    • totalUnpaid
    • unpaidMonths
    • toBankAmount
    • dueDate
    • currentUnpaidInstallment
    • totalBill
    • partNum
    • sum
    GET /v1/loans/current HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "priorityLoan": {
        "id": "LN-440192-01",
        "status": "ACTIVE",
        "amount": "5000000",
        "period": "6",
        "saldo": "3225000",
        "partnerType": "TUNAIKU",
        "productType": "PL",
        "applicationStatus": "ACCEPTED",
        "currentInstallmentValue": "1075000",
        "firstInstallmentValue": "1075000",
        "totalUnpaid": "3225000",
        "unpaidMonths": "3",
        "toBankAmount": "4750000",
        "loanProcessingFeeAmount": "250000",
        "installments": [
          {
            "date": "2026-11-14",
            "sum": "1075000",
            "partNum": "4",
            "unpaid": "1075000",
            "rowType": "INSTALLMENT",
            "onTime": true,
            "status": "UNPAID",
            "mlpPoint": 10
          }
        ]
      },
      "loanProgress": {
        "dueDate": "2026-11-14",
        "totalUnpaid": 3225000.0,
        "status": "IN_DEBT",
        "totalPrepayment": 0.0,
        "currentUnpaidInstallment": 1075000.0,
        "totalBill": 1075000.0,
        "currentAmountDue": 1075000.0
      }
    }
  • Loan history

    GET /v1/loans/history openfinance

    Pages closed and prior loans for the history screen: page / pageCount / totalData wrapping loan rows of id, status, amount, period, saldo and paidOutDate.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • page
    • pageCount
    • limit
    • totalData
    • id
    • status
    • amount
    • period
    • saldo
    • productType
    • paidOutDate
    GET /v1/loans/history?page=1&limit=10 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "page": 1,
      "pageCount": 2,
      "limit": 10,
      "totalData": 12,
      "data": [
        {
          "id": "LN-440192-00",
          "status": "PAID",
          "amount": "3000000",
          "period": "6",
          "saldo": "0",
          "productType": "PL",
          "paidOutDate": "2026-03-01"
        }
      ]
    }
  • Product loan summary

    GET /v1/offers/{productType}/quote openfinance

    Quotes the chosen productType (PL personal loan, SL smaller loan, LMT line): loanAmount, period, monthlyInstallmentAmount, processingFeeAmount / processingFeePercentage and net toBankAmount.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • loanAmount
    • period
    • monthlyInstallmentAmount
    • processingFeeAmount
    • processingFeePercentage
    • provisionFeePercentage
    • toBankAmount
    • totalFeeAmount
    • admissionFee
    • interestRate
    GET /v1/offers/PL/quote HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "loanAmount": "5000000",
      "period": "6",
      "monthlyInstallmentAmount": "1075000",
      "processingFeeAmount": "250000",
      "processingFeePercentage": 0.05,
      "provisionFeePercentage": 0.0,
      "admissionFee": "0",
      "toBankAmount": "4750000",
      "totalFeeAmount": "250000",
      "totalFeePercentage": "5",
      "interestRate": "0.03"
    }
  • Loan submission status

    GET /v1/applications/status openfinance

    Polls whether a just-submitted application is still IN_PROCESS, ACCEPTED or REJECTED, keyed by transactionID and product.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • status
    • transactionID
    • product
    GET /v1/applications/status HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "status": "IN_PROCESS",
      "transactionID": "txn-loan-8821",
      "product": "PL"
    }
  • Disburse accepted loan

    POST /v1/disbursements openfinance

    Pushes an accepted loan to the borrower’s bank after passwordVerified. The breakdown lists type, loanAmount, processingFeeAmount / processingFeeRate and net toBankAmount.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification; body includes passwordVerified after a password challenge

    • loanID
    • loanAmount
    • loanPeriod
    • passwordVerified
    • type
    • monthlyInstallmentAmount
    • processingFeeAmount
    • processingFeeRate
    • toBankAmount
    • interestRate
    POST /v1/disbursements HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    Content-Type: application/json
    
    {
      "loanID": "LN-440192-01",
      "loanAmount": 5000000,
      "loanPeriod": 6,
      "passwordVerified": {
        "verified": true
      }
    }
    {
      "disbursement": [
        {
          "type": "bank",
          "loanAmount": "5000000",
          "period": "6",
          "monthlyInstallmentAmount": "1075000",
          "processingFeeAmount": 250000,
          "processingFeeRate": 0.05,
          "provisionFeeAmount": 0,
          "provisionFeeRate": 0.0,
          "toBankAmount": "4750000",
          "interestRate": "0.03",
          "admissionFee": "0"
        }
      ]
    }
  • Repayment virtual account

    GET /v1/repayments/virtual-account/{productType} openbanking

    Mints the productType-scoped repayment VA shown on How to Pay: accountName plus virtualAccount. A companion customer-scoped call returns the same pair for the customer record.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • accountName
    • virtualAccount
    GET /v1/repayments/virtual-account/PL HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "accountName": "TUNAIKU SITI NURHALIZA",
      "virtualAccount": "8800123456789012"
    }
  • Early-payoff quote

    GET /v1/settlements/quote openfinance

    Quotes early settlement per loan (earlyPaymentAmount, refundAmount, paymentStatus) and the dedicated VA (virtualAccountName / virtualAccountNumber) plus subTotalEarlyPayment / totalEarlyPayment.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • loanId
    • loanType
    • earlyPaymentAmount
    • paymentStatus
    • refundAmount
    • virtualAccountName
    • virtualAccountNumber
    • subTotalEarlyPayment
    • totalEarlyPayment
    GET /v1/settlements/quote HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "loans": [
        {
          "loanId": "LN-440192-01",
          "loanType": "PL",
          "earlyPaymentAmount": 3100000.0,
          "paymentStatus": "QUOTED",
          "refundAmount": 0.0
        }
      ],
      "virtualAccountName": "TUNAIKU EARLY PAIDBACK",
      "virtualAccountNumber": "880099988877",
      "subTotalEarlyPayment": 3100000,
      "totalEarlyPayment": 3100000,
      "formattedTotalEarlyPayment": "Rp3.100.000"
    }
  • Submit early payoff

    POST /v1/settlements openfinance

    Locks the early-payoff basket and returns the VA the borrower must credit for totalEarlyPayment, with paymentStatus PENDING_VA until funds clear.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • loanId
    • loanType
    • earlyPaymentAmount
    • paymentStatus
    • virtualAccountName
    • virtualAccountNumber
    • totalEarlyPayment
    • refundAmount
    POST /v1/settlements HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    Content-Type: application/json
    
    {
      "loans": [
        {
          "loanId": "LN-440192-01",
          "loanType": "PL",
          "earlyPaymentAmount": 3100000.0
        }
      ]
    }
    {
      "paymentStatus": "PENDING_VA",
      "virtualAccountName": "TUNAIKU EARLY PAIDBACK",
      "virtualAccountNumber": "880099988877",
      "totalEarlyPayment": 3100000,
      "refundAmount": 0.0
    }
  • Senyumku average balance

    GET /v1/savings/summary openbanking

    Reads Amar Bank Senyumku savings: averageBalance (and formattedAverageBalance), nextMonthLevel, isNewUser, plus optional snapshot balance. A companion balance call returns the raw balance.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • averageBalance
    • formattedAverageBalance
    • isNewUser
    • nextMonthLevel
    • balance
    GET /v1/savings/summary HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    {
      "averageBalance": 1250000,
      "formattedAverageBalance": "Rp1.250.000",
      "isNewUser": false,
      "nextMonthLevel": "SILVER",
      "balance": 1800000
    }
  • KYC face compare

    POST /v1/identity/face-match osint

    Runs liveness/face-compare for a KYC purpose and returns kycToken plus status. Companion calls upload identity documents and return a documentId, then poll for the verification result.

    Auth: Authorization: Bearer {authToken} issued by the session grant or the OTP verification.

    • kycToken
    • status
    • documentId
    • firstName
    • lastName
    POST /v1/identity/face-match HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.auth
    Content-Type: application/json
    
    {
      "imageId": "img-selfie-01",
      "documentId": "doc-ktp-01"
    }
    {
      "kycToken": "kyc_4e19ab",
      "status": "MATCHED",
      "documentId": "doc-ktp-01",
      "values": {
        "firstName": "Siti",
        "lastName": "Nurhaliza"
      },
      "limit": {
        "remaining": 2
      }
    }

Data categories

  • borrower profile
  • loan offers
  • active loan saldo
  • installment schedule
  • repayment VA
  • early payoff
  • Senyumku balance
  • KYC face compare

Where teams use this data

  • Unpaid-installment monitor

    A collection desk polls totalUnpaid, currentUnpaidInstallment and dueDate nightly, then matches inbound credits to virtualAccount / paymentNumber so overdue IDR bills are flagged the same day they age.

  • Offer and disbursement reconciliation

    Finance ops compare quoted loanAmount, processingFeeAmount and toBankAmount on the product summary with the post-passwordVerified disbursement breakdown so net IDR landed in accountNumber equals the accepted offer.

  • Early-payoff VA matching

    Ops take earlyPaymentAmount plus virtualAccountNumber from the early-payoff quote and post bank credits against totalEarlyPayment until paymentStatus leaves PENDING_VA.

  • Senyumku float check

    A lending-stack bot reads averageBalance and nextMonthLevel before routing a disbursement onto the Senyumku rail, and blocks the draw when balance is below toBankAmount.

Frequently asked questions

What loan-balance fields does Tunaiku expose?

The active-loan call returns id, amount, period, remaining saldo and totalUnpaid, currentInstallmentValue, and installment rows of date, sum, partNum and unpaid. A nested loanProgress block adds dueDate, totalBill, currentUnpaidInstallment and currentAmountDue.

How are installments repaid?

The repayment call mints accountName and virtualAccount for the How-to-Pay screen, scoped per product. Early settlement is a separate quote (earlyPaymentAmount, refundAmount) whose submission locks a dedicated virtualAccountNumber for totalEarlyPayment.

How does the app authenticate these calls?

Sign-in accepts username and password (grantType password) or a refreshToken grant. OTP sign-in first requests a code over SMS or WhatsApp, then verifies otpRequestId plus otp to obtain authToken; later calls send Authorization: Bearer {authToken}.

Where does a disbursement land?

The profile's newLoanInfo.account carries bankName and accountNumber. After a password challenge, the disbursement call returns toBankAmount and processingFeeAmount. Amar Bank Senyumku savings can take the same draw; the savings summary returns averageBalance and nextMonthLevel.

Apps similar to Tunaiku - Pinjaman Dana Online

  • Kredivo - Paylater & Pinjaman — Kredivo is PT Kredivo Finance Indonesia's paylater and cash-loan line of up to IDR 50 million, repaid in 30 days or in 3- to 24-month installments at partner merchants.
  • Easycash - Pinjaman Daring — Easycash is an OJK-licensed Indonesian unsecured cash-loan app offering IDR 100,000 to IDR 100,000,000 over 3–12 months without a credit card.
  • Singa Fintech-Digital Loans — Singa Fintech is PT Abadi Sejahtera Finansindo's OJK-licensed Indonesian cash-loan app, with published limits from IDR 1.1 million to IDR 48 million.
  • AdaKami — AdaKami is an OJK-licensed Indonesian online cash-loan platform that uses a published 30-day installment cycle with tenors of 1–12 months and states it does not deduct fees up front.
  • Akulaku — Akulaku combines shopping installments, cash loans (pinjaman tunai) and digital banking in one Indonesian app, with PayLater operated by PT Akulaku Silvrr Indonesia.
  • JULO — JULO is an OJK-supervised Indonesian digital-credit app whose one limit can be drawn as cash, e-wallet top-ups, or paylater spend on Tokopedia, Shopee, Lazada, Blibli and TikTok Shop.
  • Indodana PayLater — Indodana PayLater is an OJK-supervised Indonesian buy-now-pay-later line of up to Rp50 million, repaid in 30 days or in 3-, 6-, 12-, 18- or 24-month installments at partner merchants.
  • Home Credit Indonesia — Home Credit Indonesia (PT Home Credit Indonesia) finances phones, TVs, laptops, furniture and other goods in store on installment plans, and also offers cash financing (Pembiayaan Tunai).

Topics

  • Tunaiku API
  • Tunaiku pinjaman data
  • custHash
  • totalUnpaid
  • virtualAccount
  • PT Bank Amar Indonesia Tbk
  • Indonesia KTA loan API

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