Skip to main content
POST
Create a chain swap

Authorizations

Authorization
string
header
required

Secret organization API key from the partner panel, for servers. Sent on swap creation as Authorization: Bearer <key> to attribute the swap to your organization. Optional; an invalid key is rejected. Never use it in client-side code.

Body

application/json

Body of POST /v2/swap/chain — Boltz-shaped, camelCase. Atomic routes return one HTLC description per side and do not require a destination address at creation. The legacy plain-send route remains address-driven for backward compatibility.

preimageHash
string
required

The taker's BOLT11-style payment hash — SHA256(preimage), 32 bytes hex. Goes into the BTC lockup's claim leaf; the maker reveals the preimage at claim time.

refundPublicKey
string
required

Taker's 33-byte compressed refund pubkey (BTC side). The maker is the claim party on the BTC P2TR — taker refunds via script- path if the maker fails to claim.

claimPublicKey
string | null

Taker's 33-byte compressed claim pubkey for the Liquid side. Required for an atomic pair (the taker is the claim party on the maker's L-USDT HTLC); ignored for the plain-send pair.

from
string | null

Boltz: source on-chain currency symbol (e.g. "BTC").

fromAmount
integer<int64> | null

Legacy alias for userLockAmount.

Required range: x >= 0
pairHash
string | null

Optional pairHash rate-lock: the hash the taker quoted against. Verified against the pair's current rate card when present; a mismatch is rejected with 400 pair_hash_mismatch.

pairId
string | null

Trading-pair key. Must resolve to a Chain pair in the engine — Optional when from+to are given (stock Boltz SDK shape).

serverLockAmount
integer<int64> | null

Desired output-side amount; the maker inverse-quotes the canonical input. Exactly one amount side is accepted.

Required range: x >= 0
to
string | null

Boltz: destination on-chain currency symbol (e.g. "L-USDT").

userAddress
string | null

Legacy plain-send destination. Atomic swaps construct the payout from claimDetails after creation and therefore do not require it.

userLockAmount
integer<int64> | null

Input-side amount. Exactly one of this and serverLockAmount is required.

Required range: x >= 0
webhook
object | null

Optional HTTPS callback for status changes.

Response

Chain swap created.

POST /v2/swap/chain response. Atomic Liquid pairs use Boltz's standard lockupDetails + claimDetails shape. The optional flat fields preserve the existing plain-send and Arkade extension responses.

id
string
required
swapAuth
string
required

Per-swap taker credential, 32 bytes hex — see swapAuth. Chain swaps also need it on POST /v2/swap/chain/{id}/quote.

address
string | null
claimDetails
object | null

One side of the standard atomic Chain create response.

claimPublicKey
string | null
expectedAmount
integer<int64> | null
Required range: x >= 0
lockupDetails
object | null

One side of the standard atomic Chain create response.

payoutAmount
integer<int64> | null

L-USDT amount the maker delivers once the BTC deposit confirms.

Required range: x >= 0
serverLockup
object | null

Present only for atomic chain pairs — the maker's L-USDT (or VHTLC) lockup the taker claims revealing the preimage.

swapTree
object | null

swapTree returned on every swap creation + status response.

timeoutBlockHeight
integer<int32> | null
Required range: x >= 0
userAddress
string | null