Soma Stablecoin settlement

No one holds your money.

Stablecoin checkout that moves funds straight from the buyer's wallet to yours in a single transaction.

ROBINHOOD BASE ETHEREUM ARBITRUM SOLANA MERCHANT SETTLED
CA Announced at launch
ETHEREUM   BASE   ARBITRUM
01

One transaction, end to end.

Every payment takes the same six steps. Nothing is queued, pooled, or paid out later.

WALLET

The buyer holds the money

USDC already in their wallet. No funding step, no on-ramp, no account with us.

SIGN

They sign once

A single signature authorises the transfer. We never hold a key, and never move funds on their behalf.

NETWORK

The network takes it

Robinhood, Base, Ethereum, Arbitrum or Solana. Your integration names a chain and nothing else changes.

01 02 03

Blocks confirm it

We read the receipt from a node ourselves and match it to the invoice before anything is marked paid.

BUYER YOU

It lands in your wallet

Not a balance you withdraw from. The money is yours the moment the block confirms.

FEE
0.8%
99.2%TO MERCHANT 0.8%SOMA FEE
One flat fee. No custody. No routing maze. No surprises.
02

Every network, one checkout.

Soma launches on Robinhood Chain. The buyer picks a rail; the amount, the reference, and your integration stay identical on every one.

ROBINHOOD
ROBINHOOD / ACTIVE
Launch network
Built for tokenised assets. Where Soma launches.
BASE
BASE / ACTIVE
Cheapest path. Sub-cent fees.
ETHEREUM
ETHEREUM / ACTIVE
Settlement layer. Buyer covers gas.
ARBITRUM
ARBITRUM / ACTIVE
High throughput, fast finality.
SOLANA
SOLANA / ACTIVE
Flat fee per signature. Not EVM.
03

Nothing sits in the middle.

BUYER CUSTODIAN MERCHANT
No custody in between.
04

The last six digits are load-bearing.

Each open invoice is billed a unique sub-cent amount. That exact figure is how an anonymous transfer is matched to an order - even when the buyer pays from an exchange and never comes back to the page.

120.00
Invoice#018291
Expected120.000617
Observed120.000617
MatchCONFIRMED
05

This is the checkout.

A walkthrough of the real state machine - wallet, signature, confirmations, settlement.

01 02 03 WALLET MERCHANT SETTLED
NORTHBOUND / 038291 PAYMENT
120.000617
USDC
BASE0x7f3c…a19c
06

Every state, named.

A payment is only ever in one of these. The buyer sees the same vocabulary your webhooks do.

requires_paymentInvoice open, nothing signed.
processingBroadcast, waiting on blocks.
succeededMatched and confirmed on-chain.
failedReverted, or paid the wrong invoice.
expiredWindow closed before payment.
canceledCalled off. No funds moved.
06

Settled, continuously.

07

Two calls to a working checkout.

Create the intent on your server, open it in the browser. The buyer's wallet is the only thing that touches their keys.

// server
const intent = await fetch("https://pay.example.com/v1/payment_intents", {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.SOMA_API_KEY}` },
  body: JSON.stringify({ amount: "120.00", chain: "base", reference: order.id })
}).then(r => r.json());

// browser
<script src="https://pay.example.com/widget.js"></script>
<script>Soma.open({ intent: intent.id, onSuccess: () => location.href = "/thanks" });</script>
MethodPathDoes
POST/v1/payment_intentsCreate a payment and its checkout URL
GET/v1/payment_intents/:idRe-check against the chain and return status
GET/v1/payment_intentsList recent payments
POST/v1/payment_intents/:id/cancelCancel an unpaid intent
GET/v1/configFee, chains, settlement mode