Payments infrastructure · Live on testnet

Payments,
settled on-chain in five seconds.

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.

charge.ts
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.

The Stripe stack,
without the Stripe stack.

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.

Card rails

  • 5–15% recurring failure rate per cycle
  • 3–5 day international settlement
  • Chargebacks unwind months later
  • 2.9% + 30¢ + FX spread
  • Processor lock-in & account freezes

Asentum Pay

  • Tx mines or reverts — no maybe state
  • ~5 second global settlement
  • No reversal once on-chain
  • Tx fees in millicents, no FX
  • Self-custodied — your account, your keys

Built on chain-native primitives.

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.

+

One-shot charges

POST /charges. The customer signs, the tx lands, the webhook fires. Idempotent, replayable, fully auditable from the block explorer.

Recurring, on-chain

ARC-21 cron fires the next charge from inside consensus. No keeper bot. No retry queue. The chain itself walks due subscriptions every block.

Checkout sessions

Stripe-style hosted-checkout flow. Mint a session, redirect the customer, get a webhook on completion. Wallet-agnostic — Telegram, Chrome extension, custodial.

Customers & metadata

Familiar surface: customers, payment methods, metadata fields. The DB indexes everything; the chain is the source of truth for value movement.

🔔

HMAC-signed webhooks

SHA-256 signed payloads, ordered delivery, exponential backoff. Same shape as Stripe webhooks — your existing handlers work with one line of glue.

Drop-in SDK

npm install @asentum/pay. TypeScript-first, zero config, identical resource model to the Stripe SDK. Migrate in an afternoon.

One API. Four resources.

All endpoints live under https://pay.asentum.com/api/v1 and require a Bearer key. Versioned, idempotency-key-safe, JSON in & out.

POST/v1/charges
Create a one-shot charge. Returns immediately with status=pending; settles on-chain in seconds.
GET/v1/charges/:id
Fetch a charge by id, with current settlement status & on-chain tx hash.
POST/v1/customers
Create a customer record. Attach metadata, default address, billing email.
GET/v1/customers/:id
Retrieve a customer. Listable via the index endpoint; filter by metadata.
POST/v1/checkout/sessions
Mint a hosted-checkout session. Returns a redirect URL; webhook fires on completion.
GET/v1/checkout/sessions/:id
Poll the session state. Or just listen for the checkout.session.completed webhook.
POST/v1/webhooks/endpoints
Register a webhook URL. Get back the signing secret for HMAC verification.
DELETE/v1/webhooks/endpoints/:id
Disable a webhook endpoint. Existing in-flight retries will drain.

Start billing in 10 minutes.

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.