Elapse

You only pay what elapsed.

Charge for APIs, GPUs, streams and seats by the second, and get paid out in dollars as it accrues. A Stripe-shaped SDK, a hosted checkout, and signed webhooks: your server hears about it once.

Nimbus · GPU · 4090$0.004/s
00:00:00.0
$0.000
Starting…
Subscriber paid
$0.332
Merchant receives
$0.325
Elapse keeps
$0.006

example · 83 s at $0.004/s · fee 2 %

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.

POST /webhooks · your server · example200 OK
X-Elapse-Signature: t=1756800083,v1=9f2c…
{
  "id": "evt_1S2xq7Kd3",
  "object": "event",
  "type": "subscription.canceled",
  "created": 1756800083,
  "data": {
    "object": {
      "id": "sub_1S2xq6Hf9",
      "object": "subscription",
      "status": "canceled",
      "seconds_elapsed": 83,
      "amount_settled": "0.33",
      "currency": "ausd",
      "product": "prod_gpu4090",
      "customer": "cus_7Qw2m"
    }
  }
}

Integrate in an afternoon. It is the Stripe you already know.

  1. 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. 2

    Authorise in your app

    Create a session, render <Authorize> and <Meter> from @elapse/react. Face ID, a live counter, and Stop, without leaving your page. No chain words.

    <Authorize session={session.id} />
  3. 3

    Get the webhook

    When they cancel, your server receives subscription.canceled with seconds_elapsed. Revoke access. Book revenue.

    subscription.canceled { seconds_elapsed: 83 }
server.ts
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",
});
// <Authorize session={session.id} /> in your app → Face ID, then <Meter />

const event = elapse.webhooks.constructEvent(
  rawBody,                          // unparsed bytes
  signature,                        // the X-Elapse-Signature header
  process.env.ELAPSE_WEBHOOK_SECRET
);

Nobody churns from a meter they can stop.

A monthly plan asks for commitment before the first minute of use, and the 27 unused days are the reason a customer cancels at renewal. Cards and slow settlement made anything finer than a month uneconomic, so the industry rounds up.

DAY 1DAY 30
Monthly plan · used 3 dayspaid $30.00

With a meter, more people start because nothing is asked up front, and revenue grows with use instead of resetting at renewal. Elapse settles what elapsed; your server hears about it once, by webhook.

0 s83 s5 min
Per-second meter · used 83 secondspaid $0.33

Built for anything that runs while someone uses it.

If your cost is a running thing and your price is a month, the gap is your churn. Set one rate per second and the price still reads like a price: Elapse shows the per-minute and per-hour figure beside it.

Illustrative rates
GPU and inference clouds
Rent accelerators and sell model calls, billed by the hour or by prepaid credits that expire.
A training run or a chat session pays for exactly the seconds it held the card.
$0.004 /s≈ $14.40 /h
Metered APIs
Charge per request or per token, then reconcile usage into an invoice at month end.
The meter runs while the connection is open, and the invoice is already settled when it closes.
$0.0009 /s≈ $3.24 /h
Live streaming and events
Sell a ticket for the whole show, and a viewer who leaves after ten minutes paid for two hours.
A viewer pays for the minutes they watched and can leave without asking for a refund.
$0.0011 /s≈ $3.96 /h
SaaS seats
Bill a seat for a month whether the person logged in on two days or twenty.
A seat costs nothing on holiday, and a team adds people without a proration email.
$0.00003 /s≈ $0.10 /h

The money.

Dollars in, dollars out, and every number on this page comes from the same math that settles the meter.

Elapse settles in AUSD on Monad, a dollar stablecoin on a chain with a block every 400 ms, which is what makes a second an honest unit of billing rather than a rounding of a month.

1 h
Paid out as it accrues
Settled to your payout address every hour a meter runs, and at once when it stops. No balance to withdraw, no payout day.
2 %
Of settled seconds
Elapse keeps 2 % of what a meter earned, taken inside each settlement. Refunds carry no fee. There is no monthly platform charge.
$0
Left on the table
Unused funds go back to the subscriber the moment they stop. Nobody emails support for a refund, and nobody is paying for a month they left.
0
No chargebacks
Every meter is prefunded before it starts, so a subscriber can only spend what they put in, and a bank can never pull it back out.

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.

Need a live number? Poll GET /v1/subscriptions/:id and compute it locally from rate and started_at, exactly as the dashboard does.

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.