https://orchestration.flashnet.xyz
OpenAPI:
- Swagger UI:
GET /docs - OpenAPI JSON:
GET /openapi.json
/v1/orchestration/ prefix.
The OpenAPI spec omits GET /v1/orchestration/estimate. This endpoint is documented below under Authentication and in the Rate Limiting table.
Start here:
- Product overview: Orchestra
- End-to-end integration flow: Quickstart
How does authentication work?
Authenticated endpoints require an API key:GET /v1/orchestration/estimate for unauthenticated price previews.
POST /v1/orchestration/quote is the start of a submit-able flow and should be called with Authorization. Quotes created without Authorization (if accepted) cannot be submitted.
A quote is bound to your partner account and can only be submitted by an API key for the same partner.
If a quote uses affiliateId or affiliateIds, Authorization is required because affiliate profiles are partner-scoped.
Server keys vs client keys
Orchestra issues two key types. Server keys (fn_...) are secret and have full access. Client keys (fnp_...) are public, scope-gated, and safe to embed in open-source SDKs or browser code.
Use a server key when the key runs in an environment you control. Use a client key when the key will ship inside something your users can inspect. See Client Keys for scopes, modes, read-tokens, and rate limits.
How does idempotency work?
Partner-authenticated mutating endpoints requireX-Idempotency-Key.
Rules:
- Key scope is
(partnerId, endpoint, key). - Replaying the same request returns the stored response and sets
X-Idempotency-Replayed: true. - Reusing a key with a different JSON body returns
409 idempotency_conflict.
Errors
Errors use a single envelope:error.code values:
unauthorized: Missing or invalid API keyauth_required: Authentication is required for this requestforbidden: Route or action is not permitted for the key type presented (typically a client key hitting a server-only endpoint)origin_required: Client key inbrowsermode is missing theOriginheaderorigin_not_allowed: Origin is not on the key’s allowed listread_token_required: Client key hitGET /v1/orchestration/statusor SSE withoutX-Read-Token/?readToken=invalid_read_token: Read-token is malformed, expired, or not bound to this order / keymissing_idempotency_key:X-Idempotency-Keymissingidempotency_conflict: Same idempotency key reused with a different payloadunsupported_route: Route is not supportedunsupported_amount_mode:amountModeis not supported for the selected routeunsupported_fee_plan:appFees,affiliateId, oraffiliateIdsis not supported for the selected route or quote modeinvalid_request: Request body failed business validationinvalid_query: Invalid query parametersinvalid_address: Recipient or refund address is invalidinvalid_state: Endpoint was called in the wrong order stateconflict: State changed concurrently, retry the requestquote_expired: Quote has expirednot_found: Quote or order not foundamount_too_small: Swap input is below the Flashnet pool minimumamount_too_large: Amount is too large for the selected routerate_limited: Too many requestsflashnet_error: Swap simulation or execution failedprice_impact_too_high: Quote exceeds configured price impact constraintsinternal_error: Unhandled error
internal_error. Treat it as a request bug and retry only after fixing the payload.
What chains, assets, and amount formats are supported?
Routes are expressed as(sourceChain, sourceAsset) -> (destinationChain, destinationAsset).
Supported chains:
basesolanaethereumarbitrumoptimismpolygonbsctempotronplasmasparkbitcoinlightning
USDCUSDC.eUSDTPathUSDUSDBBTCETHSOLBNBDAIWBTCcbBTC
USDC is supported as both a source and destination asset. Tempo PathUSD is currently supported as a destination asset. WBTC and DAI are available on Ethereum. cbBTC is available on Base and Solana. BNB and USDT are available on BSC. USDC.e is available on Polygon.
Amounts are integer strings in smallest units. Do not send floats.
Rate limiting
Some public endpoints are IP rate-limited when rate limiting is enabled in the deployment:GET /v1/orchestration/routes: 60 requests per minuteGET /v1/orchestration/estimate: 120 requests per minutePOST /v1/orchestration/quote: 60 requests per minuteGET /v1/orchestration/order: 120 requests per minuteGET /v1/orchestration/status: 120 requests per minute
X-RateLimit-* headers and the API returns 429 rate_limited on exhaustion.
Client keys have an additional two-layer rate limit that server keys don’t:
| Route | Per-key/min | Per-(key, IP)/min |
|---|---|---|
POST /v1/orchestration/quote | 600 | 60 |
POST /v1/orchestration/submit | 120 | 10 |
POST /v1/orchestration/onramp | 120 | 10 |
POST /v1/accumulation-addresses | 60 | 5 |
POST /v1/liquidation-addresses | 60 | 5 |
Reference pages
- Client Keys: Public, scope-gated keys for SDK and browser embedding
- Quotes and Orders: Create quotes, submit deposits, and track order status
- Approval Flows: Resolve repricing requests and ZeroConf offers
- Resource Management: Manage affiliates, webhooks, accumulation addresses, and liquidation addresses