Skip to content

Hosted HTTP API ​

Production API: https://billing.autlantic.com. Use an official SDK or call /v1 with your merchant API key.

Authenticate with x-autlantic-api-key (or Authorization: Bearer). Mode follows the key:

  • abk_test_… → Test · Base Sepolia
  • abk_live_… → Live · Base mainnet

Catalog, subscriptions, invoices, payments, payment links, and webhooks are scoped to that mode.

Machine-readable ​

ArtifactURL
OpenAPI 3.1OpenAPI guide · raw /openapi.yaml
Postman collectionPostman guide · raw JSON

Import either into Postman, Insomnia, Speakeasy, or your codegen tool. Production server: https://billing.autlantic.com.

Public checkout (no API key) ​

MethodPathPurpose
GET/checkout/subscribe/:idHosted HTML subscription checkout
GET/checkout/subscribe/:id/statusFast session status (no Base RPC)
GET/checkout/subscribe/:id/onchainAllowance + vault status (Base RPC)
GET/checkout/subscribe/:id.jsonSession JSON (same shape as /status)
POST/checkout/subscribe/:id/walletUpdate customer wallet (incomplete only)
POST / DELETE/checkout/subscribe/:id/couponApply / remove coupon
POST/checkout/subscribe/:id/activateActivate (test or live with { onChainSubscriptionId })
GET/checkout/pay/:idHosted one-time payment checkout
GET/checkout/pay/:id/statusPayment session JSON
GET/checkout/pay/:id.jsonPayment session JSON (alias of /status)
POST / DELETE/checkout/pay/:id/couponApply / remove coupon
POST/checkout/pay/:id/confirmConfirm payment ({ txHash? })
GET/checkout/link/:idPayment link landing (URL / QR target)
GET/checkout/link/:id/statusPayment link status JSON
POST/checkout/link/:id/openMint a one-time payment from the link ({ customerWallet? })

Mutating public checkout routes require a short-lived checkout action token from the session JSON.

API version ​

Send Autlantic-Version: 2026-01-01 (default when omitted). See API versioning.

Authenticated (X-Autlantic-Api-Key) ​

MethodPathPurpose
GET/v1/productsList catalog products and prices (?includeInactive=1 optional)
POST/v1/productsCreate product (optional nested price: amountUsdc, interval, trialDays, active)
PATCH/v1/products/:idUpdate product (name, description, active, metadata)
POST/v1/products/:id/pricesCreate price on a product
PATCH/v1/prices/:idUpdate price (amountUsdc, interval, trialDays, active)
GET/v1/couponsList coupons (?includeInactive=1 optional)
POST/v1/couponsCreate coupon (code, percentOff or amountOffUsdc, optional scopeKey / metadata / expiresAt)
PATCH/v1/coupons/:idUpdate coupon
DELETE/v1/coupons/:idDelete coupon
POST/v1/paymentsCreate one-time payment (priceId once or amountUsdc)
GET/v1/payments/:idFetch payment
POST/v1/payment-linksCreate shareable payment link (returns url)
GET/v1/payment-linksList payment links
GET/v1/payment-links/:idFetch payment link
POST/v1/payment-links/:id/disableDisable a payment link
GET/v1/subscriptionsList (?status=active)
POST/v1/subscriptionsCreate (priceId or amountUsdc + interval)
GET/v1/subscriptions/:idFetch
PATCH/v1/subscriptions/:idUpdate
POST/v1/subscriptions/:id/completeComplete mandate
POST/v1/subscriptions/:id/activateActivate
POST/v1/subscriptions/:id/cancelCancel
GET/v1/invoicesList (?subscriptionId=)
GET/v1/invoices/:idFetch
POST/v1/invoices/:id/chargeCharge
POST/v1/invoices/:id/refundRefund
POST/v1/invoices/:id/voidVoid

Billing is the coupon source of truth for portal and Autlantic creator UI. Hosted checkout resolves codes from the same store (scopeKey prefers scoped, then merchant-wide). See Coupons.

json
{
  "amountUsdc": 42,
  "merchantRefPrefix": "invoice",
  "description": "Consulting",
  "maxUses": 1,
  "expiresAt": null,
  "payoutAddressEvm": "0x…"
}

Or pass a catalog priceId with interval "once" instead of amountUsdc. Response includes paymentLink and url (/checkout/link/:id). Encode url as a QR for in-person or shareable pay.

Idempotency ​

Pass Idempotency-Key on POST requests. Replays return the cached response for 24 hours.

Renewals ​

Due invoices are processed by apps/billing-worker. Test invoices sandbox-charge; live invoices use the mainnet vault/relayer path.