DEVELOPERS
A stable billing model across changing payment routes.
Create invoices, issue secure checkout links and respond to precise state changes through one integration.
request.json● ● ●
const session = await rw.checkout.create({
invoice: "inv_10482",
customer: "cus_8Q2",
expires_in: 1800
});
return session.url;✓ 201 Created · 184 msQUICKSTART
From invoice to verified event in four steps.
- 01Create an invoice
Fix seller, amount, currency and purpose before payment.
- 02Open checkout
Give the customer an opaque, expiring URL.
- 03Start an attempt
The customer chooses and authorises an enabled wallet.
- 04Consume events
Update your product from authenticated, idempotent webhooks.
DOMAIN OBJECTS
Primitives that map to the real collection lifecycle.
01Customer→
02Subscription→
03Invoice→
04Checkout session→
05Payment attempt→
06Provider evidence
WEBHOOK EVENTpayment_attempt.updated
{
"attempt_id": "pat_7J4M",
"status": "UNKNOWN",
"reason": "PROVIDER_TIMEOUT",
"safe_to_retry": false
}Ambiguity is data. UNKNOWN remains distinct until provider evidence resolves the attempt.
NEXT STEP
Build the billing integration once.
Use the product model today and add provider routes as your commercial approvals mature.