Skip to content

DEX Arbitrage Scanner

The DEX scanner preview endpoint resolves one or two GeckoTerminal liquidity pool URLs, verifies token identity, and returns gross quote-spread candidates against selected centralized exchange spot books or another DEX pool. These are discovery signals, not executable net profit. Saved scanners and Telegram delivery live in the authenticated terminal app at /arbitrage/dex-scanner.


GET/v1/arbitrage/dex-scanner/preview

Preview a DEX scanner pool

Use this endpoint before creating a saved scanner. It accepts the same GeckoTerminal pool URL workflow as the terminal product, resolves pool metadata from GeckoTerminal or CoinGecko Onchain with Codex fallback, then checks selected CEX spot venues for a matching USDT market or compares against a second DEX pool.

Query parameters

  • Name
    poolUrl
    Type
    string
    Description

    Required GeckoTerminal pool URL, such as https://www.geckoterminal.com/eth/pools/0x....

  • Name
    exchanges
    Type
    string
    Description

    Optional comma-separated CEX list. Supported values: Binance, OKX, Bybit, Gate.io, MEXC, KuCoin, Bitget, HTX, BingX, CoinEx. Defaults to the core new-listing venues.

  • Name
    minProfitPct
    Type
    number
    Description

    Minimum gross quote-spread percentage to mark a validated row as a candidate. It is not a net-profit threshold. Defaults to 1.

  • Name
    mode
    Type
    string
    Description

    Scanner mode. Use cex_dex for CEX-vs-DEX comparison or dex_dex to compare two DEX pools. Defaults to cex_dex.

  • Name
    secondPoolUrl
    Type
    string
    Description

    Required when mode=dex_dex. Both pools must resolve to the same canonical network and target-token contract; mismatches return 400.

  • Name
    tier2Exchanges
    Type
    string
    Description

    Deprecated compatibility parameter. Extended exchanges do not yet have verified live price providers; requested values return explicit unsupported-provider warnings and no rows.

  • Name
    includeFundingLeg
    Type
    string
    Description

    Set to true or false to include funding-leg context when the scanner can match a relevant perpetual market.

Request

GET
/v1/arbitrage/dex-scanner/preview
curl -G https://www.sharpe.ai/api/v1/arbitrage/dex-scanner/preview \
  -H "Authorization: Bearer sk_live_your_key_here" \
  --data-urlencode "poolUrl=https://www.geckoterminal.com/eth/pools/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640" \
  -d exchanges=Binance,OKX,Bybit,MEXC \
  -d minProfitPct=1 \
  -d mode=cex_dex

Response

{
  "data": {
    "pool": {
      "source": "GeckoTerminal",
      "poolUrl": "https://www.geckoterminal.com/eth/pools/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "network": "eth",
      "poolAddress": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
      "dexName": "Uniswap V3",
      "targetToken": {
        "symbol": "WETH",
        "name": "Wrapped Ether",
        "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
      },
      "priceUsd": 2027.45,
      "liquidityUsd": 1000000,
      "volume24hUsd": 250000
    },
    "opportunities": [
      {
        "token": "WETH",
        "spreadPct": 1.6,
        "buyVenue": "GeckoTerminal",
        "sellVenue": "Binance",
        "cexPrice": 2060,
        "dexPrice": 2027.45,
        "direction": "buy-dex-sell-cex",
        "priceType": "bid-ask-vs-dex-mid",
        "identityVerified": true,
        "dataFresh": true,
        "executable": false,
        "status": "opportunity",
        "warnings": [
          "Gross quote spread only; DEX slippage, trading fees, gas, and transfer time are not included."
        ]
      }
    ],
    "warnings": [
      "Gross quote spread only; DEX slippage, trading fees, gas, and transfer time are not included."
    ],
    "fetchedAt": "2026-05-23T11:00:00Z"
  },
  "meta": {
    "request_id": "req_abc123def456ghij",
    "timestamp": "2026-05-23T11:00:00Z",
    "elapsed_ms": 86
  }
}

Spread logic

The scanner reports gross quote spread, not executable net profit.

  • Name
    Buy DEX / Sell CEX
    Type
    direction
    Description

    Returned when the selected CEX bid is above the DEX pool mid.

  • Name
    Buy CEX / Sell DEX
    Type
    direction
    Description

    Returned when the DEX pool mid is above the selected CEX ask.

  • Name
    spreadPct
    Type
    number
    Description

    (sellQuote - buyQuote) / buyQuote * 100. CEX legs use bid/ask when available; DEX legs remain pool mids.

  • Name
    status
    Type
    string
    Description

    opportunity means identity, freshness, bid/ask, liquidity, volume, and saved-route checks passed. blocked means one of those prerequisites is unavailable. below-threshold is reserved for otherwise-valid data below the gross threshold.

  • Name
    warnings
    Type
    string[]
    Description

    Stale, missing, unsupported, non-executable, or identity-unverified data is surfaced explicitly instead of being promoted to an alertable row.

Saved scanners add ownership, Telegram chat configuration, run history, and step notification rules. Public transfer-route metadata is currently verified for Bitget and HTX. Other shown CEX venues can provide preview books, but their saved rows fail closed and cannot alert until a verified transfer provider is available. Use the terminal product for those user-specific workflows.

Was this page helpful?