doit
Product · Accept Payments

One API for Virtual Accounts and QRIS

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, in full, with no admin deductions.

Methods

The two most-used methods, built with care

Virtual Accounts and QRIS are the payment methods people use the most and dispute the least. Other methods will follow once these two are truly mature.

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 of 0,7% as regulated by Bank Indonesia, with no markup from us. See pricing details →

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.

WhatsApp cycle

Billing that closes its own loop

Through WACO (the official WhatsApp Business API, included in your subscription), invoices go out and confirmations come back without anyone typing a word.

Invoice sent The invoice and payment link are delivered on WhatsApp, from your own business number
Customer pays VA or QRIS, their choice on the payment page
PAID sent automatically The customer receives a confirmation, your system receives a webhook. Nobody types anything

ISPs run this cycle in production every single day, and it is not something you get by signing up with any gateway directly. Conversation fees are paid straight to Meta, with no markup from us.

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, WhatsApp, reporting, and fully recorded settlements.

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.

doit@idcloudhost.com Read the technical documentation