Carbium API

Supported DEXs and Routing Sources

Understand the current Solana liquidity sources Carbium can route through, why route availability changes by pair and size, and why new integrations should use the CQ1-backed v2 Swap API flow instead of legacy v1 routes.

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. Current integrations should use the CQ1-backed v2 Swap API flow so Carbium can choose the available route from live liquidity.

Older provider-pinned v1 routes are considered legacy. They may still be useful when maintaining an existing integration or reproducing a support case, but they should not be the default path for new builds.

Part of the Carbium Solana infrastructure stack.


The short version

Start with the current CQ1-backed quote flow unless you have a specific reason to inspect route behavior.

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
Route diagnostics and comparison All Quote Helps inspect route availability while debugging or building internal tools
Maintaining an old provider-pinned integration Legacy GET /api/v1/quote or GET /api/v1/swap Use only when an existing integration depends on explicit provider values
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.


Current routing sources

Carbium's current routing work is centered on CQ1 and active Solana liquidity adapters. The current documented routing sources are:

Routing source Notes
Raydium Major Solana liquidity source
Orca Major Solana liquidity source
Meteora DLMM Concentrated/dynamic liquidity source
Pump.fun Route availability depends on token state; pre-graduation launch workflows may require gRPC plus raw transactions instead of public Swap API routing
Moonshot Route availability depends on pair and liquidity state
Raydium Launchpad Launchpad-related liquidity source

Treat this list as the current public integration vocabulary, not as a promise that every source can route every token pair at every size.

๐Ÿ“˜ Supported source does not mean supported route. A source 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:

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/all

Use it for diagnostics, comparison, and fallback design. Do not treat it as the main executable swap path for new integrations.

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 successful routes, ignore route misses that are not relevant to the chosen path, and only fail the user flow when no acceptable route remains.


Legacy provider-pinned routes

The older v1 provider-specific paths use this parameter family:

fromMint, toMint, amount, slippage, provider

Use provider-pinned requests only when:

  • you are maintaining an existing v1 integration
  • you are reproducing a support issue from a legacy provider-specific response
  • Carbium support specifically asks you to test an old provider-pinned path

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.

๐Ÿ”ถ New integrations should not start on provider-pinned v1 routes. Use the current CQ1-backed v2 quote flow unless you are maintaining a legacy integration.


Route availability rules

Good routing code treats route availability as dynamic.

Situation What it means Better response
One source returns a quote and another returns COULD_NOT_FIND_ANY_ROUTE The pair or size is not routable everywhere Compare the successful routes or let Q1 choose the route
Every source misses The pair, amount, or current liquidity state is not usable through the documented route set Change amount, pair, slippage, or execution plan
A source 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:

  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 legacy maintenance or support reproduction.
  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 v1 routes are legacy 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.