Three steps to your first webhook
Grab a sandbox API key
Keys start with pb_test_. The environment is determined
by the key prefix, not the base URL, so your integration code never
changes when you go live.
Create your first payment
One POST /v1/payments with the amount, method, and your
own reference. The response comes back with a
hosted_url, a VA number, or QR content.
Simulate a payment
Click Simulate paid in the portal, and a
payment.paid webhook lands on your server. Integration
done before your coffee gets cold.
One request, one webhook
$ curl -X POST https://pay.doit.id/v1/payments \ -H "Authorization: Bearer pb_test_xxx" \ -d '{"amount": 150000, "rail": "qris", "reference": "INV/001"}' // response: render qr_content as a QR image { "id": "pay_x8Kj2…", "amount": 150000, "status": "pending", "qr_content": "00020101…" } // when the customer pays → webhook to your server POST https://api.tokomu.id/webhook { "event": "payment.paid", "reference": "INV/001" }
Details you only notice when your system gets busy
Idempotency built in
Every POST takes an Idempotency-Key header. A request
retried after a timeout will never create a duplicate payment.
Webhooks that do not give up
Delivery failed? Retried with backoff for up to 24 hours, then moved to a dead-letter queue you can replay any time from the portal, complete with a history of every attempt.
Compatibility modes
Your existing code for Duitku or Xendit (Invoice API) keeps working as is: swap the base URL and key, done. Migrate gradually with zero downtime.
Errors that name the problem
Every error carries a stable code for machines and a
message that names the exact field at fault, plus a
doc_url linking to the explanation.
Checkout on your site, and an API that speaks AI
Embed checkout
One script tag, and the doit.id payment page opens as a modal on
your site. Customers pay without leaving the page, the modal closes
itself once paid, and the onPaid callback notifies
your code.
AI agents & MCP server
An API reference in llms.txt for LLMs to understand,
plus a single-file MCP server with zero dependencies: your AI agent
can create payments and check statuses directly as tools.
Self-service, but never on your own
Our documentation is written so you never have to ask. But when you need a human, someone answers: a person who understands your code and how business works here.
- Integration guidance From flow design to your first successful webhook, we stay with you until your first live transaction.
- 24-hour support team Payment systems do not keep office hours. Neither does our team.
- Local developers first Documentation in English and Indonesian, support in Indonesian, and a real understanding of how business is done here.
- We are its first customer IDCloudHost's own billing system runs on it every day. If anything breaks, we feel it before you do.