Supported DEXs and Routing Sources
Understand the documented Solana DEX routing sources in Carbium Swap API, when provider-specific route misses are normal, and how to choose between Q1, All Quote, and direct provider routes.
Supported DEXs and Routing Sources
Use this page when you need to know which Solana liquidity sources Carbium can route through and how to interpret route availability during integration.
Carbium Swap API is not a hard-coded single-DEX wrapper. The documented API surfaces expose multi-DEX routing through Q1 and provider-aware v1 routes, powered by Carbium's CQ1 routing engine.
Part of the Carbium Solana infrastructure stack.
The short version
Start with Q1 unless you have a specific reason to pin or compare providers.
| Need | Use | Why |
|---|---|---|
| Best default quote and optional executable transaction | Q1 | Uses the current GET /api/v2/quote flow and can return txn when user_account is present |
| Provider-by-provider visibility | All Quote | Shows which documented providers returned quotes and which returned route misses |
| A provider-pinned legacy flow | GET /api/v1/quote or GET /api/v1/swap | Lets older integrations pass a provider value explicitly |
| Troubleshooting no-route behavior | Swap API Errors Reference | Separates auth, request-shape, route, and missing-txn problems |
A route miss on one provider does not mean Carbium Swap API is down. It usually means that pair, size, pool, or provider cannot serve the exact request you sent.
Documented provider IDs
The current local API reference documents these provider IDs for provider-specific v1 quote and swap requests:
| Provider ID | Typical meaning in integration | Notes |
|---|---|---|
raydium | Raydium route family | Default provider on the older v1 reference examples |
raydium-cpmm | Raydium CPMM route family | Use only when you intentionally need this route family |
orca | Orca route family | Common major-pair liquidity source |
meteora | Meteora route family | General Meteora routing source |
meteora-dlmm | Meteora DLMM route family | Useful when DLMM liquidity is the intended route |
pump-fun | Pump.fun route family | Public Swap API routing depends on route availability; pre-graduation pump.fun sniping is a separate gRPC + raw transaction workflow |
moonshot | Moonshot route family | Use only when the pair is supported by that route source |
stabble | Stabble route family | Provider-specific availability depends on the pair and size |
printdex | PrintDEX route family | Provider-specific availability depends on the pair and size |
goosefx | GooseFX route family | Provider-specific availability depends on the pair and size |
The public API landing page highlights major Solana DEX coverage such as Raydium, Meteora, Orca, Pump.fun, and Moonshot. The provider enum in the mirrored API reference is broader, so treat the table above as the documented integration vocabulary rather than a guarantee that every pair routes through every provider at every size.
Supported provider does not mean supported route. A provider can be valid and still return no route for a specific token pair, amount, pool hint, or market state.
How Q1 chooses routes
Q1 is the clean path for most new builds:
GET https://api.carbium.io/api/v2/quoteQ1 uses the current parameter family:
| Parameter | Meaning |
|---|---|
src_mint | Input token mint |
dst_mint | Output token mint |
amount_in | Raw input amount in smallest units |
slippage_bps | Slippage tolerance in basis points |
user_account | Optional wallet address for an executable txn response |
Use Q1 when your product wants Carbium to find a route and, when possible, return an executable transaction payload. Do not add a provider parameter to Q1 unless the Q1 guide or API reference explicitly documents that behavior later.
Minimal Q1 request:
curl --request GET \
--url 'https://api.carbium.io/api/v2/quote?src_mint=So11111111111111111111111111111111111111112&dst_mint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount_in=1000000&slippage_bps=50&user_account=YOUR_WALLET' \
--header 'X-API-KEY: YOUR_API_KEY'Inspect routePlan, destAmountOut, destAmountOutMin, and txn before signing. If txn is missing, confirm that user_account was included before debugging deeper.
When to use All Quote
All Quote is useful when you want visibility into provider-level route behavior:
GET https://api.carbium.io/api/v1/quote/allUse it for diagnostics, comparison, and fallback design. Do not treat it as the main executable swap path.
Example response pattern:
{
"success": true,
"data": {
"meteora": {
"outAmount": "92423917",
"minimumReceived": "90575439",
"priceImpactPercent": "0.0135723484306514772574751266",
"ammKey": "2EwDgGitpoqDaAkscPXN74hE1C1o6fsiHP9FKo7TDq9r"
},
"meteora-dlmm": {
"error": "Could not find any route",
"error_code": "COULD_NOT_FIND_ANY_ROUTE"
}
}
}The useful signal is mixed availability. Your app can compare the successful providers, ignore route misses that are not relevant to the chosen path, and only fail the user flow when no acceptable route remains.
Provider-pinned routes
The older v1 provider-specific paths use this parameter family:
fromMint, toMint, amount, slippage, providerUse provider-pinned requests when:
- you are maintaining an existing
v1integration - you are testing one liquidity source deliberately
- your product policy requires excluding or preferring a specific route family
- you are reproducing a support issue from a provider-specific response
Example provider-pinned quote:
curl --request GET \
--url 'https://api.carbium.io/api/v1/quote?fromMint=So11111111111111111111111111111111111111112&toMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount=1000000&slippage=50&provider=raydium' \
--header 'X-API-KEY: YOUR_API_KEY'Do not mix Q1 field names with v1 paths. If you send src_mint to v1, or fromMint to Q1, you are testing the request shape rather than the route source.
Route availability rules
Good routing code treats route availability as dynamic.
| Situation | What it means | Better response |
|---|---|---|
One provider returns a quote and another returns COULD_NOT_FIND_ANY_ROUTE | The pair or size is not routable everywhere | Compare the successful providers or let Q1 choose the route |
| Every provider misses | The pair, amount, or current liquidity state is not usable through the documented route set | Change amount, pair, slippage, or execution plan |
| A provider works for small size but misses or prices badly for large size | Liquidity depth is not enough for that request | Split, reduce size, or accept a different route only if your product allows it |
| A route works in quote but transaction later fails | The route-build stage succeeded; the failure moved to signing, freshness, RPC, or on-chain execution | Debug the transaction lifecycle, not just routing |
| Pump.fun pre-graduation token has no Swap API route | The token may not be routable through public Swap API yet | Use gRPC launch detection plus direct bonding-curve transactions only if your team owns that advanced workflow |
Do not silently widen slippage until a route appears. Slippage is a user-risk boundary, not a debugging knob. If routing fails, surface a clear reason or retry with an explicit product policy.
Practical integration policy
A simple production policy looks like this:
- Use Q1 for the normal user flow.
- Log
routePlan, output amount, minimum received, and route misses. - Use All Quote in diagnostics or internal tooling when route behavior needs explanation.
- Use provider-pinned
v1routes only for deliberate legacy or route-control cases. - Route pre-sign errors to Swap API Errors Reference.
- Route signed transaction issues to your RPC confirmation and blockhash recovery flow.
That keeps the integration readable: Q1 is the default path, All Quote is the diagnostic lens, and provider-pinned routes are explicit exceptions.
Start with Q1 for the current executable quote flow. Use All Quote when you need provider-level visibility, and start platform setup at carbium.io.
Updated 10 days ago
