Frequently Asked Questions
Do I need an API key to start?
Do I need an API key to start?
Authorization: Bearer <token>) are already accepted and attributed — they carry scopes such as quote:read for market data and quotes and swap:execute for swap init and execute.Enforcement is rolling out gradually. Once it is on, a missing or invalid key returns 401, so send a key now rather than retrofitting it later. Details in the Overview.What is the difference between the Maker API and the RLN API?
What is the difference between the Maker API and the RLN API?
Do I need to run an RGB Lightning Node?
Do I need to run an RGB Lightning Node?
swapstring and routes the HTLC. That is exactly why the maker never takes custody — there is no step in the protocol where it holds your funds. See Node Hosting for deployment options.Which environments can I integrate against?
Which environments can I integrate against?
What units are amounts in — sats or msats?
What units are amounts in — sats or msats?
POST /api/v1/swaps/init states this explicitly, and the quote examples follow the same convention: 1000000 on a BTC leg is 1,000 sats.RGB asset legs are raw smallest units, decided by the asset’s own precision from GET /api/v1/market/assets. Precision differs per asset — USDT at precision 6 means 1000000 is 1.00 USDT.Never hardcode a divisor. Read precision per asset, and treat the precision field as display metadata rather than as the unit of the amount you send.How do I read the price field?
How do I read the price field?
price is the price of one whole unit of from_asset, expressed in the smallest unit of to_asset. It is not a display price, and it is not the amount you will receive.The amount you will actually get is already on the response leg — to_asset.amount — with the fee folded in. Use that for anything user-facing, and use price only if you need the rate itself.How long is an rfq_id valid?
How long is an rfq_id valid?
expires_at (unix time) — a short window, measured in tens of seconds. One quote backs one POST /api/v1/swaps/init.Do not hold an rfq_id across user think-time. Fetch the quote, then init, whitelist, and execute promptly; if a user pauses on a confirmation screen, request a fresh quote when they resume.Should I use WebSocket or REST for quotes?
Should I use WebSocket or REST for quotes?
quote_request and the server answers that one message. There is no subscription, so a price only stays fresh if you keep asking. Send periodic ping messages to keep the connection healthy.Use the WebSocket when you are showing a moving price and want to avoid the per-request HTTP overhead; use POST /api/v1/market/quote for a one-off swap. See Swap Protocol.What is a swapstring, and why do I have to whitelist it?
What is a swapstring, and why do I have to whitelist it?
swapstring returned by /swaps/init encodes the exact terms of the swap — both amounts, both assets, and the payment hash. Whitelisting it on your own node is how you authorise those precise terms.This is the non-custodial hinge of the protocol: the maker cannot move your assets, it can only offer an HTLC your node has already agreed to honour. Whitelisting happens through the /taker API of your RGB Lightning Node, not through the Maker API.Why does /swaps/init return an access_token, and what happens if I lose it?
Why does /swaps/init return an access_token, and what happens if I lose it?
access_token is a per-swap credential and is returned only once, at init. You need it alongside the payment_hash to poll POST /api/v1/swaps/atomic/status.Without it, the status endpoint returns a uniform 404 Swap not found — by design, so the endpoint cannot be used to probe for other people’s payment hashes. Persist the token with the payment hash the moment init returns. LSPS1 channel orders work the same way: create_order returns a per-order access_token required by get_order and rate_decision.Can I call the API directly from a browser?
Can I call the API directly from a browser?
What are the rate limits?
What are the rate limits?
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset — read them instead of guessing. Cache assets and pairs locally; they change rarely.How is the API versioned?
How is the API versioned?
v1, as in https://api.signet.kaleidoswap.com/api/v1. The versioned OpenAPI specifications are published in the specs repository and updated on each release, so you can diff two versions rather than discover changes at runtime.Should I use an SDK instead of calling REST directly?
Should I use an SDK instead of calling REST directly?
client.maker.* and client.rln.*, and give you a typed error hierarchy with retry hints.Call REST directly when you are in a language the SDKs do not cover, or when you need control the client abstracts away. There is also a CLI for driving a node from the terminal.Get Help
Check Troubleshooting for errors rather than questions, and Additional Resources for specifications and upstream links. For anything else, report a problem through your preferred channel from the options below, including:- Request URL and HTTP method
- Request payload (redact any API key)
- Full error response, including
request_id - Timestamp of the request
- Environment (Signet / Mainnet)