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.

NeedUseWhy
Best default quote and optional executable transactionQ1Uses the current GET /api/v2/quote flow and can return txn when user_account is present
Provider-by-provider visibilityAll QuoteShows which documented providers returned quotes and which returned route misses
A provider-pinned legacy flowGET /api/v1/quote or GET /api/v1/swapLets older integrations pass a provider value explicitly
Troubleshooting no-route behaviorSwap API Errors ReferenceSeparates 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 IDTypical meaning in integrationNotes
raydiumRaydium route familyDefault provider on the older v1 reference examples
raydium-cpmmRaydium CPMM route familyUse only when you intentionally need this route family
orcaOrca route familyCommon major-pair liquidity source
meteoraMeteora route familyGeneral Meteora routing source
meteora-dlmmMeteora DLMM route familyUseful when DLMM liquidity is the intended route
pump-funPump.fun route familyPublic Swap API routing depends on route availability; pre-graduation pump.fun sniping is a separate gRPC + raw transaction workflow
moonshotMoonshot route familyUse only when the pair is supported by that route source
stabbleStabble route familyProvider-specific availability depends on the pair and size
printdexPrintDEX route familyProvider-specific availability depends on the pair and size
goosefxGooseFX route familyProvider-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/quote

Q1 uses the current parameter family:

ParameterMeaning
src_mintInput token mint
dst_mintOutput token mint
amount_inRaw input amount in smallest units
slippage_bpsSlippage tolerance in basis points
user_accountOptional 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/all

Use 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, provider

Use provider-pinned requests when:

  • you are maintaining an existing v1 integration
  • 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.

SituationWhat it meansBetter response
One provider returns a quote and another returns COULD_NOT_FIND_ANY_ROUTEThe pair or size is not routable everywhereCompare the successful providers or let Q1 choose the route
Every provider missesThe pair, amount, or current liquidity state is not usable through the documented route setChange amount, pair, slippage, or execution plan
A provider works for small size but misses or prices badly for large sizeLiquidity depth is not enough for that requestSplit, reduce size, or accept a different route only if your product allows it
A route works in quote but transaction later failsThe route-build stage succeeded; the failure moved to signing, freshness, RPC, or on-chain executionDebug the transaction lifecycle, not just routing
Pump.fun pre-graduation token has no Swap API routeThe token may not be routable through public Swap API yetUse 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:

  1. Use Q1 for the normal user flow.
  2. Log routePlan, output amount, minimum received, and route misses.
  3. Use All Quote in diagnostics or internal tooling when route behavior needs explanation.
  4. Use provider-pinned v1 routes only for deliberate legacy or route-control cases.
  5. Route pre-sign errors to Swap API Errors Reference.
  6. 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.