RESTTypeScriptWebhooks

Build

Build payment flows in under 30 lines.

Issue invoices, verify receipts, and trigger cashouts from your backend. The SDK handles auth, retries, and BigInt serialization. The sandbox boots without credentials.

Quickstart

Create your first invoice.

Install the SDK or call the REST endpoint directly. Either way you get back a hosted payment URL you can send to your customer. The response shape is the same.

  • invoices.create returns hostedUrl in < 200ms.
  • Customer pays in USDC on Arc. We mint a Stenn-Proof receipt and POST invoice.paid to your webhook URL.
  • Verify the signature with verifyKlaroSignature and you’re done.
@klaro/sdkcURL
import { Klaro } from "@klaro/sdk";

const klaro = new Klaro({
  apiKey: process.env.KLARO_KEY,
  network: "arc-testnet",
});

const invoice = await klaro.invoices.create({
  amount: 4_200_00,                 // cents
  currency: "USD",
  receiveAs: "USDC",                // settled in USDC on Arc
  customer: { email: "client@example.com" },
  lineItems: [
    { description: "Week 17 sprint", amount: 4_200_00 },
  ],
}, { idempotencyKey: crypto.randomUUID() });

console.log(invoice.hostedUrl);
// → https://i.klaro.so/cl7-d3-m0
Show cURL equivalent
curl -X POST https://api.klaro.so/v1/invoices \
  -H "Authorization: Bearer $KLARO_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 420000,
    "currency": "USD",
    "receiveAs": "USDC",
    "customer": { "email": "client@example.com" },
    "lineItems": [
      { "description": "Week 17 sprint", "amount": 420000 }
    ]
  }'

Everything you need

REST, webhooks, SDK, sandbox.

REST API

Create invoices, trigger cashouts, verify receipts. JSON in, JSON out. Versioned, idempotent, rate-limited. OpenAPI 3.1 spec at /api/openapi.

Webhooks

Real-time delivery with HMAC signatures, automatic retries with exponential back-off, and a dead-letter queue you can replay from the dashboard.

TypeScript SDK

@klaro/sdk wraps every endpoint with typed responses, automatic retry on idempotent calls, and BigInt-safe serialization for USDC amounts.

Sandbox

The app boots without environment variables. Every external surface (Circle, Resend, MoonPay, Sumsub) falls back to a labelled simulated mode.

Boring infrastructure

Auth, idempotency, retries — handled.

Auth, per request.

API keys are scoped per environment. Rotate without downtime. Every key carries an audit trail of every call it made.

Idempotency, by default.

Pass an idempotency key on any POST. We dedupe for 24 hours and return the original response. Safe to retry on network failure.

Retries, with budget.

Webhook deliveries retry on a 1m / 5m / 30m / 4h / 24h schedule. After 5 failures the event lands in the DLQ and surfaces in your dashboard.

Ready to build

Open a workspace, mint a key, ship an invoice.

Sign in with Google or email. Generate a testnet API key from the settings screen. Send your first invoice in the next ten minutes.

Open testnet·Testnet preview

Issue your first
invoice in 90 seconds.

No credit check. No US bank required. No waitlist. Klaro testnet is free for everyone. Sign up with Google or email, plug in your ERP, issue your first invoice in 90 seconds.

  • Testnet simulation clearly labelled
  • Security audit planned
  • WCAG 2.1 AA target
Build · Klaro