The stablecoin payment event platform,
a settlement layer built for software.
API-first and Webhook-first. Collection, on-chain listening, confirmation, reconciliation, callbacks and AI Agent tooling rolled into one platform — so SaaS, trading infra, and Agent apps can focus on their product instead of rebuilding a payment pipeline.
One event model across the entire stablecoin payment lifecycle.
Payment orders, on-chain transfers, confirmations, webhooks and Agent actions share the same resource model in StableOps.
From one order to one reliable webhook — this is all the code it takes.
The SDK already handles idempotency keys, signature verification, and chain/asset abstraction. You just react to business events: activate, post a ledger entry, alert.
- 1
Initialize the client
Drop in your API key and pick an environment. The SDK handles auth and chain/asset abstraction for you.
- 2
Create a payment order
Pass an idempotency key and the assets you accept — retries collapse into one order, never a double charge.
- 3
Pay with the wallet SDK
After your frontend receives the order, call @stableops/wallet-sdk to open the user's wallet and send the stablecoin transfer to the order address.
- 4
Verify the webhook
Validate the HMAC signature, then react to the business event: activate, post a ledger entry, or alert.
Prefer not to install the SDK? You can call the StableOps HTTP API directly and wrap requests, idempotency keys, and webhook verification yourself.
Read the full quickstartimport { StableOps } from "@stableops/api-sdk";
import {
verifySignature,
SIGNATURE_HEADER,
} from "@stableops/api-sdk/webhooks";
const stableops = new StableOps({
apiKey: process.env.STABLEOPS_API_KEY!,
environment: "sandbox"
});const order = await stableops.paymentOrders.create(
{
merchantOrderId: "sub_89231_2026_06",
amount: "49.00",
settlementAsset: "USDC",
acceptedAssets: [
{ chain: "base-sepolia", asset: "USDC" },
{ chain: "ethereum-sepolia", asset: "USDC" },
],
},
{ idempotencyKey: "sub_89231_2026_06" },
);import * as wallet from "@stableops/wallet-sdk";
const sent = await wallet.sendOrderWalletPayment({
order,
providers: wallet.getInjectedWalletProviders(),
})const verified = verifySignature({
secret: process.env.STABLEOPS_WEBHOOK_SECRET!,
header: req.headers.get(SIGNATURE_HEADER) ?? undefined,
rawBody,
});