Skip to main content
Base URL: https://orchestration.flashnet.xyz OpenAPI:
  • Swagger UI: GET /docs
  • OpenAPI JSON: GET /openapi.json
The OpenAPI spec does not currently include GET /v1/orchestration/estimate. This product is named Orchestra. The API path prefix is still /v1/orchestration/*. Start here:

Authentication

Authenticated endpoints require an API key:
Authorization: Bearer fn_...
Use 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, Authorization is required because affiliate profiles are partner-scoped.

Idempotency

Partner-authenticated mutating endpoints require X-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": "string",
    "message": "string"
  }
}
Common error.code values:
  • unauthorized: Missing or invalid API key
  • auth_required: Authentication is required for this request
  • missing_idempotency_key: X-Idempotency-Key missing
  • idempotency_conflict: Same idempotency key reused with a different payload
  • unsupported_route: Route is not supported
  • unsupported_amount_mode: amountMode is not supported for the selected route
  • unsupported_fee_plan: appFees or affiliateId is not supported for the selected route or quote mode
  • invalid_request: Request body failed business validation
  • invalid_query: Invalid query parameters
  • invalid_address: Recipient or refund address is invalid
  • invalid_state: Endpoint was called in the wrong order state
  • conflict: State changed concurrently, retry the request
  • quote_expired: Quote has expired
  • not_found: Quote or order not found
  • amount_too_small: Swap input is below the Flashnet pool minimum
  • amount_too_large: Amount is too large for the selected route
  • rate_limited: Too many requests
  • flashnet_error: Swap simulation or execution failed
  • price_impact_too_high: Quote exceeds configured price impact constraints
  • internal_error: Unhandled error
Some malformed JSON or schema violations currently surface as internal_error. Treat it as a request bug and retry only after fixing the payload.

Chains, Assets, Amounts

Routes are expressed as (sourceChain, sourceAsset) -> (destinationChain, destinationAsset). Supported chains:
  • base
  • solana
  • spark
  • bitcoin
  • lightning
Supported assets:
  • USDC
  • USDB
  • BTC
  • ETH (Base)
  • SOL (Solana)
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 minute
  • GET /v1/orchestration/estimate: 120 requests per minute
  • POST /v1/orchestration/quote: 60 requests per minute
  • GET /v1/orchestration/order: 120 requests per minute
  • GET /v1/orchestration/status: 120 requests per minute
When enabled, responses include X-RateLimit-* headers and the API returns 429 rate_limited on exhaustion.

Reference Pages