Affiliates
Affiliate profiles let you register a partner-scoped app-fee recipient with a payout destination on any supported chain under a stableaffiliateId, then reference that id in quote requests.
PUT /v1/affiliates/:affiliateId
Create or update an affiliate profile. Headers:payoutAddress is where affiliate fee claims are settled, and it is validated against the chosen payoutChain’s address format.
Supported (payoutChain, payoutAsset) combinations include:
| Chain | Supported assets |
|---|---|
arbitrum | USDC, USDT, ETH |
base | USDC, cbBTC, ETH |
bsc | USDT, BNB |
bitcoin | BTC |
ethereum | DAI, USDC, USDT, WBTC, ETH |
optimism | USDC, USDT, ETH |
plasma | USDT |
polygon | USDC, USDC.e |
solana | USDC, SOL |
spark | BTC, USDB |
tempo | USDC, PathUSD |
tron | USDT, TRX |
(chain, asset) tuple in the live payout route table is accepted. This table lists the common ones. The full live list is available via GET /v1/affiliate-dashboard/payout-destinations. The server validates the pair on PUT /v1/affiliates/:affiliateId and rejects unsupported combinations with invalid_payout_destination. Lightning is intentionally excluded. Lightning invoices are single-use and amount-bound, so they do not fit a static payout-address model.
Response:
GET /v1/affiliates
List affiliate profiles for your partner. Headers:includeDisabled(true|false, defaultfalse)limit(default200, max1000)offset(default0)
DELETE /v1/affiliates/:affiliateId
Disable an affiliate profile. Headers:POST /v1/affiliates/:affiliateId/claim
Create a claim for the full available affiliate fee balance. The available balance reflects the affiliate’s 80% share after Flashnet’s 20% platform cut. Minimum claim is $1 USDC. Headers:payoutChain, payoutAsset, payoutAddress). Claims are settled out of the same ledger where fees accrued (solana:USDC or spark:USDB depending on the orders that generated them) and delivered to the configured payout destination. The worker pipeline depends on the source ledger and destination:
| Source | Destination | Pipeline |
|---|---|---|
| Solana USDC | Solana USDC | Single deliver-solana-usdc step |
| Solana USDC | EVM stablecoin (USDC, USDT, and so on, on Base, Ethereum, Arbitrum, Optimism, Polygon, BSC) | Single delivery step from the Solana USDC float wallet |
| Spark USDB | Spark USDB | Single deliver-spark-usdb step |
| Spark USDB | Solana USDC or EVM stablecoin | Bridge USDB to USDC, then delivery |
| Spark USDB | Spark BTC or Bitcoin BTC | Swap USDB to BTC, then deliver or withdraw. No USDC hop. |
GET /v1/affiliate-dashboard/payout-destinations
List every(chain, asset) tuple supported as a payout destination. The list is derived live from the orchestrator’s pipeline route table, so it stays in sync with backend reality without doc updates whenever new supported chains are added. Use this for discovery instead of GET /v1/orchestration/routes (which only returns user-facing orchestration routes, not payout routes).
Headers:
(chain, asset). Lightning is intentionally excluded. The list above is the live snapshot at the time of writing. Call the endpoint for the current canonical set.
GET /v1/affiliates/:affiliateId/claims
List claims for an affiliate. Headers:limit(default50, max200)offset(default0)
Partner webhooks
Webhooks deliver order status changes for your partner account.POST /v1/webhooks
Register an endpoint. Headers:secret is only returned at creation time. Store it.
DELETE /v1/webhooks/:id
Disable an endpoint. Headers:Accumulation addresses
Accumulation addresses are reusable deposit addresses on Solana and any supported chain. Each deposit automatically creates an order that deliversBTC or USDB on Spark.
POST /v1/accumulation-addresses
Create an accumulation address. Headers:appFees and affiliateIds are both optional and mutually exclusive (use one or the other, not both). affiliateIds entries accept the same string | { affiliateId, feeBps } union shape as POST /v1/orchestration/quote. The fee plan you submit is validated at creation time and frozen onto the address. Every deposit processed through this address replays the same plan without re-evaluating affiliate profiles. See Reusable Addresses for details.
Response:
appFees array reflects the frozen fee plan. Each entry always has recipient and feeBps. affiliateId is present for entries backed by a registered affiliate profile (the recipient is pulled from the profile’s payoutAddress); inline appFees entries omit affiliateId. The array is omitted from the response when no fee plan was configured at creation.
POST /v1/accumulation-addresses/sync
Re-sync all enabled accumulation addresses into the configured deposit detection webhooks. Headers:GET /v1/accumulation-addresses
List accumulation addresses.GET /v1/accumulation-addresses/:id
Get a single accumulation address, including subscription status.DELETE /v1/accumulation-addresses/:id
Disable an accumulation address. Headers:Liquidation addresses
Liquidation addresses are reusable Bitcoin L1 deposit addresses. Each deposit automatically creates an order that delivers to any supported chain and asset.POST /v1/liquidation-addresses
Create a liquidation address. Headers:appFees and affiliateIds are both optional and mutually exclusive. affiliateIds entries accept the same string | { affiliateId, feeBps } union shape as POST /v1/orchestration/quote. The fee plan is frozen at creation time and replayed into every Bitcoin L1 deposit processed through the address. appFees inline recipients must be valid addresses on the fee settlement chain (Solana USDC for most routes, Spark USDB for USDB destinations), not the destination chain. See Reusable Addresses for details.
Response:
appFees array reflects the frozen fee plan. Each entry always has recipient and feeBps. affiliateId is present for entries backed by a registered affiliate profile; inline appFees entries omit it. The array is omitted when no fee plan was configured.