- Wallet buy flow: users pay USDC and receive BTC to a Spark address, Bitcoin address, or Lightning invoice.
- Payout rails: convert USDC into BTC without running Bitcoin infrastructure.
Supported Routes
USDC (base|solana) -> BTC (spark)USDC (base|solana) -> BTC (bitcoin)USDC (base|solana) -> BTC (lightning)USDC (base|solana) -> USDB (spark)ETH (base) -> BTC (spark)ETH (base) -> BTC (bitcoin)ETH (base) -> BTC (lightning)SOL (solana) -> BTC (spark)SOL (solana) -> BTC (bitcoin)SOL (solana) -> BTC (lightning)ETH (base) -> USDB (spark)SOL (solana) -> USDB (spark)
Token Identifiers
If you need to construct a USDC transfer:| Chain | USDC Identifier |
|---|---|
| Base | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Solana | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
Flow
- Create a quote:
POST /v1/orchestration/quote. - Send the source asset to
depositAddressforamountIn. - Submit the deposit transaction:
POST /v1/orchestration/submit. - Track status via webhooks or
GET /v1/orchestration/status?id=....
Affiliate Fee Note
App fees are supported on Stablecoin -> BTC routes when the source isbase or solana.
Behavior:
- Fees are computed in USDC units on the source-side USDC leg.
- For
SOL/ETHsource routes, the engine first converts to USDC, then applies platform + app fees atomically on that source-side USDC amount. - You can pass recipients inline (
appFees) or reference a registered profile (affiliateId). - Use either
appFeesoraffiliateId, not both. - Fee recipient addresses must match the source chain format.
- The remaining net amount is bridged/swapped into BTC or USDB.
- Quote response includes
totalFeeAmount, and includesappFeeAmountandappFeeswhen requested.
Example: USDC (Base) to BTC (Spark)
Example: SOL (Solana) to BTC (Spark)
amount is lamports (1 SOL = 1_000_000_000 lamports).
Example: SOL (Solana) to BTC (Spark) with Affiliate Fee
Example: SOL (Solana) to BTC (Spark) with Affiliate Registry
Example: USDC to BTC (Bitcoin L1)
SetdestinationChain = bitcoin and provide a Bitcoin address in recipientAddress.
Example: USDC to BTC (Lightning)
For Lightning payouts,recipientAddress must be a 0-amount (amountless) BOLT11 invoice.
Deposit Verification Notes
The engine verifies that the deposit transaction sent USDC to the quoteddepositAddress.
- Base: the verifier checks for a USDC
Transferlog todepositAddressand, whensourceAddressis provided, requires the log sender to match. - Solana: the verifier checks that
depositAddressreceived at leastamountInof USDC in the transaction and, whensourceAddressis provided, checks that address had a corresponding debit.
amountIn.
On Base, deposits must match the quoted amount.
On Solana, deposits of at least amountIn pass verification, but the engine still processes only the quoted amount and any surplus is not attributed to the order.