doit
Product · Accept Payments

One API for Virtual Accounts, QRIS, and Bank Transfer

Create an invoice in a single request, let your customer choose how to pay, and receive a webhook the moment it is settled. Funds flow to your business bank account in T+1 business days, with only a flat Rp10,000 payout fee per transfer.

Methods

The three most-used ways to pay, done properly

Virtual Account, QRIS, and bank transfer straight to your own account: the payment methods people use the most and dispute the least. Bank transfer can even be used while verification is still in progress.

Virtual Account

A unique account number for every invoice, in your customer's name. Available at 8 banks: BRI, BNI, CIMB Niaga, Permata, Danamon, Maybank, Mandiri, and BSI. Customers pay from any ATM, mobile banking, or internet banking service.

From Rp3.000 per transaction. See pricing per bank →

QRIS

One QR code for every digital wallet and mobile banking app connected to QRIS. Code expired? The payment page generates a fresh one, and the invoice stays alive.

MDR as regulated by Bank Indonesia, with no markup from us: since 1 October 2026 transactions up to Rp100.000 carry no MDR (0%), and 0,7% above that. See pricing details →

Bank Transfer

Customers transfer straight into your own business account (BCA, Mandiri, BNI, or BSI). Each invoice carries a unique 3-digit code and is confirmed automatically the moment the mutation is read. The money never stops anywhere in between: it lands in your account right away, with no settlement.

An exact amount means the customer never has to confirm anything. Wrong amount? The customer uploads the transfer receipt on the payment page, you get notified, and you mark it paid from the dashboard or through the mutation API for your support team.

Rp0 per transaction; the Account Mutation subscription is Rp300,000/month per account. Usable while your verification is still in progress. See how it works →

Payment experience

A ready-made payment page, or build your own

Every invoice automatically comes with a hosted_url: a payment page we maintain, ready to share through any channel. Prefer to present it inside your own app? Take the qr_content or the VA number straight from the API response.

Create from the dashboard, no code needed

The + Create invoice button in the portal: enter the amount and the customer's name, and the payment link is ready, complete with a billing message template you can send straight to WhatsApp. Your admin staff will never need a developer.

One link for everything

Send it through WhatsApp, email, or SMS. Customers choose VA or QRIS on the page, with no extra app to install. Want it on your own site? Embed it as a modal with a single script tag.

Invoices that refuse to die quietly

An expired QR is not the end of the story: the payment page regenerates a new code as long as the invoice is still valid. Customers simply try again.

A webhook the moment it is paid

The payment.paid event arrives at your server with a complete payload: enough to mark the invoice as paid and switch the service on without an extra API call.

Security

Settlement that is locked down and auditable

A locked destination account

Settlements are only ever sent to the business bank account verified during onboarding. The destination account cannot be changed without re-verification, so your account is safe from takeover.

Every rupiah leaves a trail

There is no balance to withdraw manually. Every settlement goes out on schedule, is announced by email with its full breakdown, and its entire history can be audited in the dashboard. The CSV export already includes the tax base (DPP) and VAT (PPN).

Move from another gateway with zero downtime

Already on Duitku or Xendit? Switch on compatibility mode, swap the base URL and key, and your existing code keeps running as it is. Migrate step by step while your old system keeps serving.

Processed by a BI-licensed provider

Transaction processing is handled by a payment service provider licensed by Bank Indonesia. doit.id orchestrates the cycle: the API, the payment page, reporting, and fully recorded settlements.

Several companies, one dashboard

Own more than one company? Add each as a business entity under the same account: every entity passes its own KYC and gets its own payout account, while the integration, API keys, and team stay one. Each app simply picks the entity it pays out to.

Payouts on your rhythm

Automatic in T+1 business days, or hold funds and pay out yourself from the portal whenever you like: one transfer, one payout fee. Any pending balance is still paid out automatically by the start of the following month.

Ready to start accepting payments?

Tell us about your business and the systems you use. We will send you sandbox access and stay with you until your first transaction goes through.

care@doit.id Read the technical documentation