# Sector notes and gotchas - **Swaps** are meta-aggregated: `/v1/swaps/quote` returns `{best, all, failed}` so you can show alternatives. `/v1/swaps/build` re-quotes and returns steps. - **Memecoins**: a token that has graduated off its bonding curve returns `QUOTE_EXPIRED` (pump.fun) or `UNSUPPORTED_VENUE` (four.meme) from the builders — route it through `/v1/swaps` instead, and an address that is not a curve token at all returns `TOKEN_NOT_FOUND`. Both venues quote before building, so `slippageBps` is enforced on-chain (four.meme `minAmount`/`minFunds`, pump.fun via the routed swap) and the returned `quote` carries the expected output. pump.fun curve trades are routed through Jupiter; four.meme is encoded directly against its TokenManager. Builds are simulation-gated like swaps and accept `"simulate": false`. - **Perps**: check `/v1/perps/venues` for per-venue `capabilities` before calling orderbook / TP-SL / margin endpoints; unsupported combinations return `UNSUPPORTED_VENUE`. - **Predictions**: check `/v1/predictions/venues` first — venues carry `capabilities` and `tradable`; unsupported combinations (and unknown venues) return `UNSUPPORTED_VENUE`. **Limitless is the venue where a plain EOA can open a position** — it accepts `signatureType 0` with `signer == maker`, no proxy or deposit wallet, on Base with USDC collateral. `POST /v1/predictions/limitless/orders/build` needs your profile id as `ownerId` (from limitless.exchange) and returns a `sign-typed-data` + `post-to-endpoint` pair; you supply the API token as executor credentials. Polymarket by contrast refuses a bare EOA as maker in CLOB V2 — it requires a deposit wallet created through their onboarding, which is why `funder`/`signatureType` exist. Kalshi is data-only (`chain: "offchain"`, custodial venue): markets, odds and orderbook, no positions or actions; its prices are normalized to 0..1 probability decimal strings. First-time Polymarket wallets need onboarding (allowances + CLOB credentials): call `/v1/predictions/{venue}/onboarding`, or pass `hints` to `/orders/build` so satisfied steps are pruned. **`hints.hasApiCreds` selects the credential step, and the two are mutually exclusive at the venue**: a first-time wallet gets `POST /auth/api-key` (create), a returning one gets `GET /auth/derive-api-key` (derive) — creating twice is a 400 and deriving before creating is a 400. If your wallet trades from a Polymarket proxy/deposit wallet rather than a bare EOA, pass `funder` (the address holding the funds, which becomes the order's `maker`) and the matching `signatureType` (0 EOA, 1 proxy, 2 Gnosis safe, 3 EIP-1271); the venue rejects orders whose maker is an account it does not know. **Polymarket trades settle on CLOB V2 (since 2026-04-28): collateral is pUSD — wrap USDC via `pUSD.wrap()` — and fees are protocol-set at match time.** Redeem winnings of a resolved market with `POST /v1/predictions/{venue}/claims/build` (simulation-gated; accepts `simulate: false`); resolved markets expose `meta.resolution` = `{resolved, winningOutcomeId, winningOutcomeIndex}`. Orderbooks are the YES-side view, sorted best-first on both sides (`?outcomeId=` selects another outcome and must belong to that market; Kalshi asks are derived as 1 − NO-bid). An odds outcome carrying `"noQuotes": true` has no quotes on either side — its `price` is a floor, not a market price, so do not treat it as a probability. Cross-venue: `GET /v1/predictions/markets` (unified list with per-venue degradation) and `GET /v1/predictions/compare?query=` return same-event groups matched by slug (confidence 1) or fuzzy text (confidence <1) — markets are never auto-merged because resolution criteria differ per venue; each entry names its `resolutionSource`. **In practice `compare` returns few or no groups today**: the venues slice and phrase markets very differently (Polymarket "Will Bitcoin reach $100,000 in July?" vs Kalshi "BTC price range on Jul 29 at 7pm"), so lexical matching finds almost nothing. Treat it as best-effort; use the per-venue endpoints for coverage. Note also that only Polymarket has real text search — Kalshi has none (its recurring price series are reachable only by `series_ticker`, which we index for a few high-traffic topics) and Limitless caps upstream pages at 25, so a query on those venues is a bounded local sweep, not exhaustive. - **RWA**: `freelyTradable` describes **access reality only** (open DEX + no transfer restrictions) — it is not a liquidity opinion. Permissioned assets refuse builds with `UNSUPPORTED_VENUE` plus `accessMode`, `kycRequired` and `issuerUrl` so you can point the user at the issuer. - **NFT** endpoints are currently disabled. - Adapters whose optional provider key is unset disable themselves — check `/v1/providers` to see what is live.