> ## Documentation Index
> Fetch the complete documentation index at: https://docs.elapse.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Elapse is Stripe Billing for things that should charge by the second.

A subscriber starts a meter, watches a live dollar counter tick, cancels whenever they like, and pays only the seconds that elapsed. Your server finds out through a signed webhook, not a cron job.

```json subscription.canceled theme={"system"}
{
  "id": "evt_test_subscription_canceled",
  "object": "event",
  "type": "subscription.canceled",
  "created": 1757160000,
  "livemode": false,
  "pending_webhooks": 1,
  "data": {
    "object": {
      "id": "sub_test00000000000",
      "object": "subscription",
      "status": "canceled",
      "product": "prod_test0000000000",
      "customer": "cus_test00000000000",
      "checkout_session": "cs_test000000000000",
      "manage_url": "https://elapse.finance/account",
      "rate_usd_per_second": "0.004",
      "started_at": 1757159917,
      "paused_at": null,
      "canceled_at": 1757160000,
      "ended_reason": "canceled",
      "max_duration_seconds": 3600,
      "max_escrow_usd": "14.4",
      "funded_usd": "14.4",
      "settled_usd": "0.332",
      "seconds_elapsed": 83,
      "currency": "ausd",
      "livemode": false,
      "created": 1757159910,
      "amount_settled": "0.332"
    }
  }
}
```

That body arrives at your endpoint when someone cancels. `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 is `rate × 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](/api-reference/authentication) 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

<CardGroup cols={2}>
  <Card title="Quickstart" icon="bolt" href="/quickstart">
    Install the SDK, create a Product, take a Checkout URL to your phone and receive one webhook. About ten minutes.
  </Card>

  <Card title="Event catalog" icon="bell" href="/webhooks/events">
    Every event, when it fires, and what your server should do with it.
  </Card>

  <Card title="SDKs" icon="code" href="/sdks/typescript">
    The ten methods in `@elapse/sdk`, with a cURL twin for each, and the React components beside them.
  </Card>

  <Card title="Contracts" icon="link" href="/contracts">
    Addresses and events for anyone who wants to check the chain.
  </Card>
</CardGroup>
