OpenSettle
ProductDevelopersPricingCustomersBlogDocs
Sign inStart building
Getting started
  • Overview
  • Quickstart
  • Core concepts
  • Supported chains
Billing
  • Checkouts
  • Subscriptions
  • Invoices
  • Refunds
Developer
  • API reference
  • SDKs
  • Webhooks
  • Errors
  • CLI
Operations
  • Reconciliation
  • Analytics
  • Security posture
OpenSettle

Stablecoin billing infrastructure. Non-custodial by design.

OpenSettle is not a money transmitter, custodian, or exchange. Funds settle directly to merchant wallets.

Get the changelog in your inbox

Product news and deep engineering notes. Unsubscribe in one click.

Product
  • Overview
  • Pricing
  • Integrations
  • vs. Stripe
  • Roadmap
  • Changelog
Developers
  • Documentation
  • API reference
  • Quickstart
  • Webhooks
  • System status
Company
  • About
  • Customers
  • Partners
  • Blog
  • Careers
  • Press
  • Brand
  • Contact sales
Legal
  • Security
  • Trust center
  • Terms
  • Privacy
  • Compliance
  • DPA
  • Subprocessors
  • Cookies
© 2026 OpenSettle Labs, Inc. All rights reserved.security.txt
All systems operational
Getting started›Quickstart

Accept your first stablecoin payment.

5 minutes·Test mode · No real funds

1. Install the SDK

We'll use the Node SDK. Same shape in Python, Go, and Ruby.

bash
npm install @opensettle/sdk

2. Create a checkout

One POST creates a hosted checkout page. We'll return a URL you redirect your customer to.

checkout.ts
import { OpenSettle } from "@opensettle/sdk";

const os = new OpenSettle({ apiKey: process.env.OPENSETTLE_TEST_KEY });

const checkout = await os.checkouts.create({
  amount: 199.00,
  currency: "USD",
  settlement: {
    chain: "base",
    token: "USDC",
    wallet: process.env.MERCHANT_WALLET,
  },
  success_url: "https://yourapp.com/success",
  cancel_url: "https://yourapp.com/pricing",
});

return { url: checkout.url };

3. Handle the webhook

Verify signatures, then fulfill the order. Webhooks are idempotent — safe to re-process without double-billing your customer.

webhook.ts
import { verifyWebhook } from "@opensettle/sdk";

app.post("/webhook", async (req, res) => {
  const event = verifyWebhook(
    req.body,
    req.header("opensettle-signature"),
    process.env.WEBHOOK_SIGNING_SECRET,
  );

  if (event.type === "payment.confirmed") {
    const payment = event.data;
    await grantAccess(payment.customer);
    await sendReceipt(payment.customer, payment.id);
  }

  res.sendStatus(200);
});

4. Test it end-to-end

Use the CLI to trigger a test payment — it behaves identically to a real one, without moving funds.

bash
$ opensettle listen --forward-to http://localhost:3000/webhook
🔌 Listening for events…

$ opensettle checkouts test --amount 199
✓ Created checkout ck_test_9Zxq3Bm2
✓ Payment confirmed in 12.1s
✓ Webhook payment.confirmed delivered to localhost:3000
You shipped stablecoin billing.
Ready to go live? Generate live keys and flip the switch.
Open dashboard
OverviewCore concepts