Solana
Solana is supported as a first-class chain in Suwappu with its own dedicated swap routing through the Jupiter aggregator.
| Property | Value |
|---|---|
| Chain Type | Solana |
| Key | solana |
| Alias | sol |
| Native Token | SOL |
| Address Format | Base58 (not 0x) |
| Token Standard | SPL |
Key Differences from EVM
- Wallet addresses are Base58-encoded (e.g.,
7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU), not hexadecimal0xaddresses. - Token addresses are also Base58-encoded (e.g.,
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vfor USDC). - Managed wallets for Solana are separate from EVM wallets. When you create a wallet via
POST /wallets, the response includes achain_typefield indicating"solana"or"evm". - Swap routing uses the Jupiter aggregator instead of Li.Fi.
- Quote responses for Solana return
price_impactandroutefields instead ofexchange_rateandgas_usd.
Common Tokens
| Token | Address | Decimals |
|---|---|---|
| SOL | So11111111111111111111111111111111111111112 | 9 |
| WSOL | So11111111111111111111111111111111111111112 | 9 |
| USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | 6 |
| USDT | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB | 6 |
| BONK | DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 | 5 |
| WIF | EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm | 6 |
| JUP | JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN | 6 |
| RAY | 4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R | 6 |
| PYTH | HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3 | 6 |
| JTO | jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL | 9 |
| ORCA | orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE | 6 |
| MNDE | MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey | 9 |
| MSOL | mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So | 9 |
| JITOSOL | J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn | 9 |
Note: SOL and WSOL share the same mint address. The API handles wrapping and unwrapping automatically when needed for swaps.
Example: Swap SOL to USDC on Solana
Get a Quote
-kw">curl -X POST https://api.suwappu.bot/v1/agent/quote \
-H -str">"Authorization: Bearer suwappu_sk_your_api_key" \
-H -str">"Content-Type: application/json" \
-d -str">'{
-str">"from_token": -str">"SOL",
-str">"to_token": -str">"USDC",
-str">"amount": -str">"1.0",
-str">"chain": -str">"solana"
}'
#### Example Response
{
"hl-key">"success": true,
"hl-key">"quote_id": "qt_sol_a1b2c3d4",
"hl-key">"from_token": "SOL",
"hl-key">"to_token": "USDC",
"hl-key">"amount": "1.0",
"hl-key">"expected_output": "142.85",
"hl-key">"price_impact": "0.02",
"hl-key">"route": ["SOL", "USDC"],
"hl-key">"chain": "solana",
"hl-key">"expires_at": "2026-03-07T12:05:00Z"
}
Note that Solana quotes include price_impact (percentage) and route (swap path) instead of the EVM fields exchange_rate and gas_usd.
Execute the Swap
-kw">curl -X POST https://api.suwappu.bot/v1/agent/swap/execute \
-H -str">"Authorization: Bearer suwappu_sk_your_api_key" \
-H -str">"Content-Type: application/json" \
-d -str">'{-str">"quote_id": -str">"qt_sol_a1b2c3d4"}'
Python Example
import requests
API_KEY = class="hl-str">"suwappu_sk_your_api_key"
BASE_URL = class="hl-str">"https:class="hl-commentclass="hl-str">">//api.suwappu.bot/v1/agent"
headers = {class="hl-str">"Authorization": fclass="hl-str">"Bearer {API_KEY}"}
class=class="hl-str">"hl-comment"># Get a quote for SOL → USDC
quote = requests.post(
fclass="hl-str">"{BASE_URL}/quote",
headers=headers,
json={
class="hl-str">"from_token": class="hl-str">"SOL",
class="hl-str">"to_token": class="hl-str">"USDC",
class="hl-str">"amount": class="hl-str">"2.5",
class="hl-str">"chain": class="hl-str">"solana",
},
).json()
print(fclass="hl-str">"Expected output: {quote[class="hl-str">'expected_output']} USDC")
print(fclass="hl-str">"Price impact: {quote[class="hl-str">'price_impact']}%")
class=class="hl-str">"hl-comment"># Execute the swap
swap = requests.post(
fclass="hl-str">"{BASE_URL}/swap/execute",
headers=headers,
json={class="hl-str">"quote_id": quote[class="hl-str">"quote_id"]},
).json()
print(fclass="hl-str">"Swap ID: {swap[class="hl-str">'swap_id']}, Status: {swap[class="hl-str">'status']}")
TypeScript Example
const API_KEY = class="hl-str">"suwappu_sk_your_api_key";
const BASE_URL = class="hl-str">"https:class="hl-commentclass="hl-str">">//api.suwappu.bot/v1/agent";
const headers = {
Authorization: Bearer ${API_KEY},
class="hl-str">"Content-Type": class="hl-str">"application/json",
};
class=class="hl-str">"hl-comment">// Get a quote for SOL → USDC
const quoteRes = await fetch(${BASE_URL}/quote, {
method: class="hl-str">"POST",
headers,
body: JSON.stringify({
from_token: class="hl-str">"SOL",
to_token: class="hl-str">"USDC",
amount: class="hl-str">"2.5",
chain: class="hl-str">"solana",
}),
});
const quote = await quoteRes.json();
console.log(Expected output: ${quote.expected_output} USDC);
console.log(Price impact: ${quote.price_impact}%);
class=class="hl-str">"hl-comment">// Execute the swap
const swapRes = await fetch(${BASE_URL}/swap/execute, {
method: class="hl-str">"POST",
headers,
body: JSON.stringify({ quote_id: quote.quote_id }),
});
const swap = await swapRes.json();
console.log(Swap ID: ${swap.swap_id}, Status: ${swap.status});
Discovering Solana Tokens
Use the tokens endpoint to find available Solana tokens:
-kw">curl -str">"https://api.suwappu.bot/v1/agent/tokens?chain=solana" \
-H -str">"Authorization: Bearer suwappu_sk_your_api_key"