> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashnet.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# General Swaps

Orchestra uses the same quote and order flow for stablecoin transfers and native-asset swaps as it does for Bitcoin routes.

This guide covers two live pairs: USDT on Ethereum to USDT on Tron, and ETH on Ethereum to USDC on Base. Both currently use exact-in, variable delivery. Check [`GET /v1/orchestration/routes`](/products/orchestration/routes) before presenting either pair because route availability and capability flags can change.

## Before you start

[Create an account in the Orchestra dashboard](https://orchestra.flashnet.xyz/dashboard). After Flashnet approves the account, create a server key for the authenticated quote and submit calls.

Use the public `/estimate` endpoint while a user edits their amount. Call `/quote` when they commit to the swap.

## USDT on Ethereum to USDT on Tron

This route moves a stablecoin balance between networks without changing its display symbol. The chain and token contract identify each endpoint:

| Endpoint    | Chain    | Asset contract                               | Decimals |
| ----------- | -------- | -------------------------------------------- | -------- |
| Source      | Ethereum | `0xdAC17F958D2ee523a2206206994597C13D831ec7` | 6        |
| Destination | Tron     | `TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t`         | 6        |

### Preview the price

This request prices 1,000 USDT. The `amount` is `1000000000` because Ethereum USDT has 6 decimals.

```bash theme={null}
curl -sS -G "https://orchestration.flashnet.xyz/v1/orchestration/estimate" \
  --data-urlencode "sourceChain=ethereum" \
  --data-urlencode "sourceAsset=USDT" \
  --data-urlencode "destinationChain=tron" \
  --data-urlencode "destinationAsset=USDT" \
  --data-urlencode "amount=1000000000"
```

Read `estimatedOut`, `feeAmount`, `feeAsset`, and `route` from the response. `estimatedOut` is the projected Tron USDT delivery after quoted fees.

### Create the quote

`recipientAddress` must be a Tron address that can receive USDT.

```bash theme={null}
curl -sS -X POST "https://orchestration.flashnet.xyz/v1/orchestration/quote" \
  -H "Authorization: Bearer fn_..." \
  -H "X-Idempotency-Key: quote:eth-usdt-to-tron-usdt:YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceChain": "ethereum",
    "sourceAsset": "USDT",
    "destinationChain": "tron",
    "destinationAsset": "USDT",
    "amount": "1000000000",
    "recipientAddress": "TYourTronAddress...",
    "slippageBps": 50
  }'
```

The response includes an Ethereum `depositAddress`, the required `amountIn`, and a 2 minute `expiresAt`. Send Ethereum USDT to that address before expiry.

## ETH on Ethereum to USDC on Base

This route starts with a native asset and delivers an ERC-20 stablecoin. `amount` is denominated in wei; Base USDC uses 6 decimals.

### Preview the price

This request prices 0.1 ETH, or `100000000000000000` wei.

```bash theme={null}
curl -sS -G "https://orchestration.flashnet.xyz/v1/orchestration/estimate" \
  --data-urlencode "sourceChain=ethereum" \
  --data-urlencode "sourceAsset=ETH" \
  --data-urlencode "destinationChain=base" \
  --data-urlencode "destinationAsset=USDC" \
  --data-urlencode "amount=100000000000000000"
```

The route can contain more than one execution leg. Orchestra currently prices this pair through Ethereum ETH, Base ETH, and Base USDC. Treat the response `route` as execution metadata, not a sequence your client must reproduce.

### Create the quote

`recipientAddress` must be an address on Base.

```bash theme={null}
curl -sS -X POST "https://orchestration.flashnet.xyz/v1/orchestration/quote" \
  -H "Authorization: Bearer fn_..." \
  -H "X-Idempotency-Key: quote:eth-to-base-usdc:YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceChain": "ethereum",
    "sourceAsset": "ETH",
    "destinationChain": "base",
    "destinationAsset": "USDC",
    "amount": "100000000000000000",
    "recipientAddress": "0xYourBaseAddress...",
    "slippageBps": 50
  }'
```

Send native ETH to the returned Ethereum `depositAddress`. Do not send WETH or another ERC-20 token to a native ETH deposit instruction.

## Fund and submit the quote

For either example:

1. Send exactly `amountIn` of the source asset to `depositAddress` before `expiresAt`.
2. Submit the source transaction hash. Include `sourceAddress` so Orchestra can match the sender during deposit verification.
3. Track the resulting order by webhook. Status polling is a fallback.

```bash theme={null}
curl -sS -X POST "https://orchestration.flashnet.xyz/v1/orchestration/submit" \
  -H "Authorization: Bearer fn_..." \
  -H "X-Idempotency-Key: submit:YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "quoteId": "q_...",
    "txHash": "0x...",
    "sourceAddress": "0xYourEthereumAddress..."
  }'
```

## Route constraints

Both examples are exact-in and variable-delivery routes today. Their `/routes` entries report `exactOutEligible: false` and `fixedEligible: false`. Omit `amountMode` and `deliveryMode` to use those defaults.

Generalized routes can appear on `/routes` without a `/limits` entry. An amount that exceeds live policy or liquidity fails at `/estimate` or `/quote`; handle that response instead of assuming every listed pair accepts every size.

The quoted `estimatedOut` remains firm for 2 minutes. A late deposit is repriced against the quote's `slippageBps` and refunds when it cannot execute inside that bound.

## Next steps

* [Quickstart](/products/orchestration/integration): Complete lifecycle and submit shapes
* [Supported Routes](/products/orchestration/routes): Live pairs, decimals, and capability flags
* [Pricing](/products/orchestration/concepts/pricing): Estimates, quotes, slippage, and fixed delivery
* [Webhooks](/products/orchestration/webhooks): Order status events and signature verification
