A Stripe-shaped REST API, settled on AsentumChain. Charges, customers, checkout sessions, webhooks. Drop the SDK into any Node app and start billing — settlement is on the chain, underneath.
import { Asentum } from '@asentum/pay'; const pay = new Asentum(process.env.ASE_SECRET); const charge = await pay.charges.create({ amount: 10_00, // 10 ASE, minor units currency: 'ase', customer: 'cus_8XQ2…', description: 'Monthly plan', }); // → charge.id = 'ch_2Lp9…' // → charge.status = 'pending' // → settles in < 5 seconds. webhook fires.
Card-on-file recurring billing has a 5–15% failure rate per cycle. International settlement takes 3–5 days. Chargebacks eat into margins for months. Asentum Pay replaces all of it with deterministic on-chain settlement.
The pay API is a thin shell over three things AsentumChain gives you natively — ARC-20 transfers, ARC-21 cron, and deterministic block-time finality.
POST /charges. The customer signs, the tx lands, the webhook fires. Idempotent, replayable, fully auditable from the block explorer.
ARC-21 cron fires the next charge from inside consensus. No keeper bot. No retry queue. The chain itself walks due subscriptions every block.
Stripe-style hosted-checkout flow. Mint a session, redirect the customer, get a webhook on completion. Wallet-agnostic — Telegram, Chrome extension, custodial.
Familiar surface: customers, payment methods, metadata fields. The DB indexes everything; the chain is the source of truth for value movement.
SHA-256 signed payloads, ordered delivery, exponential backoff. Same shape as Stripe webhooks — your existing handlers work with one line of glue.
npm install @asentum/pay. TypeScript-first, zero config, identical resource model to the Stripe SDK. Migrate in an afternoon.
All endpoints live under https://pay.asentum.com/api/v1 and require a Bearer key. Versioned, idempotency-key-safe, JSON in & out.
/v1/charges
/v1/charges/:id
/v1/customers
/v1/customers/:id
/v1/checkout/sessions
/v1/checkout/sessions/:id
checkout.session.completed webhook./v1/webhooks/endpoints
/v1/webhooks/endpoints/:id
Spin up an API key, drop the SDK into your app, take your first charge on testnet. Mainnet ships when the testnet has done its homework.