subscription.canceled
seconds_elapsed and amount_settled are cumulative for the subscription, so one handler call tells you what was used and what was paid.
Why per second
Usage is continuous. Billing never was, because card networks and slow chains made anything finer than a month uneconomic. GPU hours, API calls, live streams and seats are all metered by the second in your own logs and then rounded up to a month on the invoice. Elapse runs on Monad, where blocks land every few hundred milliseconds and fees are near zero. That makes a per-second meter honest: accrual happens continuously on a contract, the counter your subscriber sees israte × seconds, and settlement is batched so nobody pays gas per tick. Subscribers never see any of that. They see Face ID, dollars and seconds.
Three surfaces
Platform API. Products, Checkout sessions, Subscriptions, Customers, Invoices and Events, with the ids and conventions you already know from Stripe:prod_, cus_, sub_, evt_, bearer secret keys, snake_case JSON, cursor pagination. The API reference is generated from the same schemas the server validates with.
@elapse/react. You create a session and render <Authorize> and <Meter> in your own page. Elapse handles sign-in, the permit and the live meter in a window it opens on its own origin, so the subscriber never leaves your app and you never hold a card or a wallet.
Webhooks. Six lifecycle events, signed with X-Elapse-Signature, retried on a fixed schedule, verified with one SDK call. There are no per-second events.
Where to start
Quickstart
Install the SDK, create a Product, take a Checkout URL to your phone and receive one webhook. About ten minutes.
Event catalog
Every event, when it fires, and what your server should do with it.
SDKs
The ten methods in
@elapse/sdk, with a cURL twin for each, and the React components beside them.Contracts
Addresses and events for anyone who wants to check the chain.