Skip to main content
Arkade Intents runs on mainnet. The preview is one solver, reached directly rather than discovered, serving Lightning payments capped per swap by its card’s bounds — currently 500 to 50,000 sats. These are real sats.

Setup

Fund more than one swap’s worth. A failed swap holds its coins in the contract until the refund timelock opens, so a wallet with exactly one swap’s balance is blocked until then.

Pay an Invoice

This solver is reached over Nostr rather than HTTP, so the transport comes from the @arkade-os/swap/nostr subpath and requires nostr-tools. The deployed solver serves the current wire (directed RFQ on kind 24859) — this exact flow settled a live mainnet payment on 2026-08-12. The call requests a quote, derives the contract locally (including the covenant co-signer, which the SDK supplies), refuses on any address mismatch, and checks expiry and refund headroom before returning. After funding you can go offline. The solver fills by observing the funding on chain, pays the invoice, and claims with the preimage. Fund payment.fundAmount, which is the quote’s from_amount. Do not fund the invoice amount. Invoices outside the card’s bounds are refused rather than partially executed, so the card’s max is the most a single swap can cost. The solver charges fee_bps: 0.
A zero fee means the quote’s from_amount equals the invoice amount, so funding the wrong field appears to work here and will fail against any solver that charges a spread. Read the field rather than the number.

Receive a Payment

The solver mints a hold invoice on a payment hash you chose, and the preimage never leaves your wallet. When the invoice is paid, the solver funds an Arkade contract pinned to your payout script. Your claim then publishes the preimage, which is what lets the solver settle its own side. An unpaid invoice commits nothing.
Not available during the beta. The preview solver sets max_base_amount: "0", which disables this direction. The code above is the released API, ready when a solver serves lightning:BTC → arkade:BTC.

Exchange BTC for an Asset

Both legs settle inside Arkade, so one transaction enforces the swap and binds which asset moves. Persist offer.offerHex and the funding txid. Those two values are all that cancelOffer and restoreAssetSwaps require. An unfilled offer never expires. No timeout returns it, and cancelOffer needs no solver signature. An integration with no route to cancel leaves the deposit stranded.

Preview Scope

A pinned solver and a ranked list of solvers differ only in where the terms come from. Everything after that point is already final, so build that part now and skip the solver selection UI. Runnable versions live in arkade-os/demos, one self-contained folder per task with a pinned SDK version.

Integrate Lightning

The full send and receive surface.

Arkade Assets

The full asset-exchange surface.

Implementation Status

What is available per route, and where.

Trust and Limitations

What each component guarantees, and what it does not.