Skip to main content
Orchestra uses one async flow for every live route. You request a quote, accept a deposit, submit it, then track the order to completion. Base URL: https://orchestration.flashnet.xyz

Before you start

Create an account in the Orchestra dashboard. Flashnet reviews new accounts before enabling API access. After approval, create a server key and keep it outside client-side code.

The minimal flow

1

Create a webhook endpoint

Register a webhook endpoint and store the returned secret.
Verify inbound webhooks using X-Flashnet-Signature and the raw request body. See Webhooks.
2

Request a quote

Show prices with the public GET /v1/orchestration/estimate while the user is browsing; call /quote only when they commit. Each /quote persists a quote and allocates a deposit address.Quotes expire 2 minutes after creation. Late deposits are always repriced at live market rates at detection time and execute against the quote’s slippageBps.Quote requests that you intend to submit must include Authorization and X-Idempotency-Key.Example (exact-in, default mode): route USDC on Base to USDT on Solana.
3

Send the deposit

Send the source asset to depositAddress.The deposit instruction depends on the route:
  • Spark source (sourceChain = spark): depositAddress is a Spark address.
  • Bitcoin source (sourceChain = bitcoin): depositAddress is a Bitcoin L1 address.
  • Lightning source (sourceChain = lightning): depositAddress is a BOLT11 invoice.
  • Any other source chain (Solana, Base, other EVM chains, Tron, and the rest of GET /v1/orchestration/routes): depositAddress is a deposit address on the source chain that receives the source asset.
Send exactly amountIn of the source asset.
4

Submit the deposit

Submitting creates an order. Processing is async.submit requires:
  • Authorization: Bearer fn_...
  • X-Idempotency-Key
USDC deposit submit:
Submit shape depends on the quote sourceChain. Examples:
See API Reference for the full request shapes and optional fields.
5

Track the order

Preferred: use webhooks.Fallback: poll status after an order exists. For submissionless flows, use GET /v1/orchestration/order?quoteId=... until the deposit creates an order.
Treat every webhook delivery as at least once.

Picking a route

Beyond the basics

For advanced flows, see the dedicated guides:
Persist these identifiers:
  • quoteId
  • orderId
  • the source transaction identifier you submitted (txHash, bitcoinTxid + bitcoinVout, Spark transfer id, or Lightning receive request id)
Persist these optional workflow fields:
  • order.status
  • order.error (for refund and failure diagnostics)
  • order.paymentIntent
  • order.zeroconfOffer
  • order.refund

Next steps