You only pay what elapsed.
Per-second subscriptions for APIs, GPUs, streams and SaaS. A Stripe-shaped SDK, a hosted checkout, and signed webhooks. Your server hears about it once, by webhook.
- 1 s
- billing granularity
- 6
- lifecycle webhooks, never one per second
- 0
- wallets your customer ever sees
Cancel at 83 seconds. Pay 83 seconds.
Press Cancel on the meter above. The pen lifts, the readout locks, and this event arrives at your server with those exact numbers.
{
"id": "evt_1S2xq7Kd3",
"object": "event",
"type": "subscription.canceled",
"created": 1756800083,
"data": {
"object": {
"id": "sub_1S2xq6Hf9",
"status": "canceled",
"seconds_elapsed": 83,
"amount_settled": "0.33",
"currency": "usd",
"product": "prod_gpu4090",
"customer": "cus_7Qw2m"
}
}
}Integrate in an afternoon. It is the Stripe you already know.
- 1
Create a product
Name it and give it a rate in dollars per second. That is the whole price list.
products.create({ rateUsdPerSecond: "0.004" }) - 2
Send them to Checkout
Create a session, redirect to session.url. Face ID, a live counter, and a Cancel button. No chain words.
checkout.sessions.create({ product }) → session.url - 3
Get the webhook
When they cancel, your server receives subscription.canceled with seconds_elapsed. Revoke access. Book revenue.
subscription.canceled { seconds_elapsed: 83 }
import { Elapse } from "@elapse/sdk";
const elapse = new Elapse({ secretKey: process.env.ELAPSE_SECRET_KEY });
const product = await elapse.products.create({
name: "GPU · 4090",
rateUsdPerSecond: "0.004",
});
const session = await elapse.checkout.sessions.create({
product: product.id,
successUrl: "https://merchant.example/ok",
cancelUrl: "https://merchant.example/cancel",
});
// session.url → subscriber Face ID checkout
const event = elapse.webhooks.constructEvent(
rawBody, // unparsed bytes
headers["x-elapse-signature"],
process.env.ELAPSE_WEBHOOK_SECRET
);Cancel on day 3, pay for 30. The meter is a lie.
Usage is continuous. Billing is not. Cards and slow settlement made anything finer than a month uneconomic, so APIs, GPUs and live streams round up or sell prepaid credits.
Elapse accrues every second and settles only what elapsed. Cancel mid-second and the unused funds are already yours. Your server hears about it once, by webhook.
Six events. Never one per second.
The meter accrues continuously and ticks in the dashboard. Your server is notified on lifecycle only: signed with an HMAC you can verify in one line, retried up to eight times, deduplicated by event id.
| Type | When | Your action |
|---|---|---|
| checkout.session.completed | Subscriber finished Face ID checkout | Provision access |
| subscription.created | Meter started | Mark entitled |
| subscription.updated | Pause, resume, or rate change | Sync entitlement |
| subscription.canceled | Cancel; elapsed seconds settled | Revoke access immediately |
| invoice.settled | Accrued funds settled to you | Book revenue |
| invoice.payment_failed | Subscriber's funds ran out | Pause product access |
- checkout.session.completedSubscriber finished Face ID checkoutActionProvision access
- subscription.createdMeter startedActionMark entitled
- subscription.updatedPause, resume, or rate changeActionSync entitlement
- subscription.canceledCancel; elapsed seconds settledActionRevoke access immediately
- invoice.settledAccrued funds settled to youActionBook revenue
- invoice.payment_failedSubscriber's funds ran outActionPause product access
Need a live number? Poll GET /v1/subscriptions/:id and compute it locally from rate and started_at, exactly as the dashboard does.
Anything that runs while someone uses it.
Set one rate per second. Elapse shows your customer the per-minute and per-hour figures so the price still reads like a price.
Illustrative rates- GPU rental
- An RTX 4090 by the second, not the hour
- $0.004 /s≈ $14.40 /h
- API metering
- A vision model billed per request-second
- $0.0009 /s≈ $3.24 /h
- Live streaming
- A pay-per-view stream you can leave
- $0.0011 /s≈ $3.96 /h
- SaaS seats
- A seat that costs nothing on holiday
- $0.00003 /s≈ $0.10 /h
- Desk & studio time
- A recording room, a hot desk, a court
- $0.0083 /s≈ $29.88 /h
Stripe’s shape. A stopwatch’s granularity.
Merchants learn nothing new. The only novelty is that the meter is honest.
- TypeScript SDK
- Products, checkout sessions, subscriptions, customers, invoices. Secret key server-side only.
- Hosted checkout
- Face ID sign-in, live counter, Cancel. Redirects to your success URL with a session id.
- Signed webhooks
- X-Elapse-Signature with a timestamp and HMAC. Retried, deduplicated, replayable from the dashboard.
- Test and live mode
- Separate keys, separate data. Break things in test; nothing moves until you flip live.
- Dashboard
- Keys, products, running meters, delivery log with resend, payout address. Nothing you need SQL for.