Quickstart
Use this flow to start the local API and web app. This is the safe path for a new checkout.1. Prepare config
.env. Non-secret policy stays in config.toml.
The copied .env contains empty placeholders. They are harmless while protocol
workers are disabled, but live mode requires real values.
Default config uses:
- API bind:
127.0.0.1:5050 - Solana cluster label:
mainnet-beta - assets: USDC, SOL, cbBTC
- small demo caps
runtime.enable_protocol_workers = false
2. Start the backend
runtime.enable_protocol_workers = false, it does not sign transactions or call
Jupiter/Circle.
3. Start the web app
4. Start the API docs
https://api.firmament.shaikazeem.com. Choose the local 127.0.0.1:5050
server in a local docs preview when testing against your own cargo run
backend.
5. Inspect public runtime routes
/v1/runtime/trades is the global recent-trades feed used by the Runtime tab.
Trade rows and active wallet-settlement state are durable SQLite records, so
terminal trades and resumable active settlements can survive a backend restart.
Pass wallet=<address> to scope the feed to the connected taker wallet, which
is what the swap page history drawer uses.
6. Request a friendly RFQ
The friendly request shape uses asset symbols and a decimalamount.
Asset identifiers are case-insensitive.
In default local mode this route returns 503 service_unavailable because the
live orchestrator is not attached. That is expected. Use it to verify request
shape and error handling before enabling live maker mode.
pair, input, output, and a next_action
hint pointing at POST /v1/quotes/{quote_id}/wallet-settlement. Rejected
responses include a user-facing message and a suggested_action.
The legacy mint/raw-amount request shape (input_mint, output_mint,
input_amount_raw) keeps working for existing API consumers.
During browser-wallet settlement, the app can recover an active trade with
POST /v1/trades/{trade_id}/resume. Before any on-chain lock signature, it can
abandon the unused settlement with POST /v1/trades/{trade_id}/abandon by
sending the browser-held secret_hash. Expired pre-lock settlements are marked
failed instead of receiving fresh lock transactions. After a locked settlement
expires, it can prepare and record a refund with
POST /v1/trades/{trade_id}/taker-refund.
Live RFQ mode
To run live RFQ and settlement, follow Maker setup. At minimum, configure:SOLANA_RPC_URL- exactly one maker keypair source
JUPITER_API_KEYwhen Jupiter is enabledCIRCLE_GATEWAY_SOLANA_ADDRESSwhen Gateway is enabled- a verified Solana cbBTC mint in
config.toml runtime.enable_protocol_workers = true