doit
Product · Recurring Billing

Recurring billing, on autopilot

Create a plan once, and doit.id issues the invoice every period: complete with a ready-to-use payment link and, if you like, a billing email sent straight to your customer. Built for school fees, internet subscriptions, SaaS plans, and anything else you bill on a schedule.

How it works

Three steps, then it runs on its own

Create a plan

Set the amount, the method (VA or QRIS), and the interval (daily, weekly, or monthly). One POST /v1/billing/plans is all it takes.

Subscribe your customer

Enroll a customer in the plan. The first invoice is issued right away with a payment link ready to share, without you creating it by hand.

doit.id does the billing

Every period, a new invoice is issued automatically. The invoice.created webhook arrives at your server, and the billing email can go straight to your customer.

Example

Two API calls, and you are done

terminal · create a plan & subscription
// 1. create a monthly plan, send invoices by email
$ curl -X POST https://pay.doit.id/v1/billing/plans \
  -H "Authorization: Bearer pb_live_xxx" \
  -d '{"name": "Internet 20 Mbps", "amount": 200000,
       "interval": {"unit": "month", "count": 1},
       "kirim_email": true}'

// 2. subscribe a customer → the first invoice is issued immediately
$ curl -X POST https://pay.doit.id/v1/billing/subscriptions \
  -H "Authorization: Bearer pb_live_xxx" \
  -d '{"plan_id": "plan_x8Kj2…", "customer_name": "Budi",
       "customer_email": "budi@contoh.id", "reference": "CUST-001"}'

{
  "id": "sub_9aQ…",
  "next_invoice_at": "2026-09-27T…",
  "first_invoice": {
    "reference": "CUST-001/20260827",
    "hosted_url": "https://pay.doit.id/p/pay_…"
  }
}
What you get

Designed so no invoice ever slips through

📧

Billing emails, no integration needed

Turn on kirim_email in the plan, and every time an invoice is issued doit.id emails the payment link straight to your customer. No mail server, no templates.

💬

Or send it yourself over WhatsApp

Turn email off, take the hosted_url from the invoice.created webhook, and share it from your own business WhatsApp number. The channel is yours, the issuing is on us.

🛡

No stored cards, no auto-debit

Customers pay through the link on each invoice, so you avoid the complexity of recurring-debit consent. No card data is stored anywhere.

A schedule you control

Pause when a customer takes a break, resume when they are back, cancel when they leave. Resume picks up from the next period, without dumping invoices for the periods in between.

To your systems, every invoice is just a regular payment: the payment.paid webhook still arrives when it is settled, reporting lives in the same dashboard, and settlement follows the same T+1 flow. Read more in the recurring billing documentation.

Stop chasing payments

Tell us who you bill every month, and we will help you set up the plans. Sandbox access is available from day one.

doit@idcloudhost.com Read the technical docs