Most payment processors only give your account one webhook URL. ScaleBills turns that one URL into as many destinations as you need, so every product you run hears about every payment.
Say you use one payment provider account for a store, a subscription product, and a small donation page for a side project. It sends payment events to exactly one place. So the moment you wire it up for the store, the subscription app and the donation page stop hearing about payments at all — unless you're willing to build and babysit your own forwarding service for something that should be this simple.
ScaleBills gives you a single ingress URL. This is the only thing you paste into your payment provider's dashboard, wherever it asks for a webhook.
POST /relays
{ "name": "Payment provider — main account" }
← ingress_url:
relay.scalebills.com/in/ing_k93vXqL0mZEach product you run gets its own destination on that same relay — your store's API, your subscriptions app, whatever needs the event.
POST /relays/ing_k93vXqL0mZ/destinations
{ "url": "https://subs.myapp.io/hooks" }
← 3 destinations activeOne event in from your processor goes out to all of them, in parallel, with retries on failure and a delivery log you can inspect or replay.
→ checkout-api.mystore.com 200 9ms → subs.myapp.io/hooks 200 14ms → donate.ngo/hooks 200 11ms
Metering is a separate, standalone piece — it doesn't need a relay to work. Define a meter, choose what you're measuring, and start sending events to it from anywhere in your code. ScaleBills aggregates them as they arrive, so usage numbers are ready to plug into your billing the same day you start sending events.
// once — define what you're measuring
const meter = await scalebills.meters.create({
name: "API requests",
unit: "request",
})
// → mtr_7pQxL2vNwK
// on every call, from your own code
await scalebills.meters.ingest("mtr_7pQxL2vNwK", {
customer_id: "cus_4f2a",
value: 1,
})Provision a relay, attach destinations, rotate keys — script your entire setup if you're standing up a new product and don't want to click through a dashboard for it.
curl -X POST \
https://relay-wi5f.onrender.com/relays/ing_k93vXqL0mZ/destinations \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Subscriptions app",
"url": "https://subs.myapp.io/hooks"
}'{
"destination_id": "dst_qN3vLp",
"url": "https://subs.myapp.io/hooks",
"enabled": true
}One relay URL, handed to your processor once. Every product you run after that just needs a destination added — no card required to try it.