{
  "data": {
    "a": {
      "slug": "gemini-exchange",
      "name": "Gemini Exchange API",
      "vendor": "Gemini Trust Company, LLC",
      "vendorUrl": "https://developer.gemini.com",
      "kind": "http-api",
      "category": "crypto-exchanges",
      "summary": "Gemini's exchange API for spot, margin, perpetuals, prediction markets and staking, through REST, WebSocket and FIX, with API key roles or OAuth, plus an official MCP server and SDKs from its developer-platform repository.",
      "url": "https://www.anchorterminal.com/tools/gemini-exchange",
      "markdownUrl": "https://www.anchorterminal.com/tools/gemini-exchange.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/gemini-exchange.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/gemini-exchange.json",
      "dns": "gemini-exchange.grade.anchorterminal.com",
      "repo": "https://github.com/gemini/developer-platform",
      "license": "Proprietary hosted API under Gemini's user agreement. The developer-platform repository (MCP server, TypeScript and Go SDKs, samples and skills) is Apache-2.0",
      "transports": [
        "stdio"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@gemini-markets/sdk"
        }
      ],
      "auth": "mixed",
      "authNotes": "API key and secret made at exchange.gemini.com/settings/api after a browser signup with identity checks, sent as X-GEMINI-APIKEY, X-GEMINI-PAYLOAD (base64 JSON with a nonce) and X-GEMINI-SIGNATURE (HMAC-SHA384). Keys carry one role, Trader by default, Fund Manager for withdrawals and transfers, Auditor read-only, Administrator for master keys only, and a `master-` key reaches subaccounts. A key can require a heartbeat that cancels its session's orders after 30 seconds of silence. OAuth 2.0 (authorisation code, PKCE S256 for public clients, 24-hour access tokens, single-use refresh tokens, RFC 7009 revocation) is open in the sandbox at once and reviewed by Gemini before production. No IP allow-list was found in the docs (https://developer.gemini.com/roles, https://developer.gemini.com/authentication/api-key, https://developer.gemini.com/authentication/oauth, checked 2026-11-03).",
      "pricing": "usage",
      "pricingNotes": "The API itself costs nothing. Trades pay the API fee schedule, effective 1 September 2026, 0.600% maker and 1.200% taker at the base tier (under $10,000 of 30-day volume), falling to 0.000% maker and 0.020% taker above $250M. Stablecoin pairs 0.00% maker and 0.01% taker. Derivatives from 0.02% maker and 0.07% taker, charged in GUSD. Liquidations 0.5%. The sandbox at api.sandbox.gemini.com credits each new account with test funds and needs no card (https://www.gemini.com/fees/api-fee-schedule, https://developer.gemini.com/get-started/sandbox, checked 2026-11-03).",
      "priceSummary": "0.6% fee",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, llms.txt, agents.md, the OpenAPI catalogue or the fee schedule (checked 2026-11-03). Trading fees are taken from the account; onboarding is a browser signup.",
        "endpoints": []
      },
      "toolCount": 87,
      "popularity": {
        "githubStars": 8,
        "npmWeekly": 99,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://developer.gemini.com",
      "llmsTxt": "https://developer.gemini.com/llms.txt",
      "openapi": "https://developer.gemini.com/specs/openapi/rest.yaml",
      "capabilities": [
        "exchange.market-data",
        "exchange.spot-trading",
        "exchange.derivatives",
        "exchange.balances",
        "exchange.transfers",
        "exchange.staking",
        "market.crypto"
      ],
      "tags": [
        "official",
        "hosted",
        "api-key",
        "oauth",
        "mcp",
        "llms-txt",
        "openapi",
        "sandbox",
        "status-page",
        "bug-bounty",
        "typescript",
        "go",
        "usage-priced"
      ],
      "lastRelease": "2026-10-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 74.6,
        "grade": "BB",
        "agentReady": true,
        "rank": 70,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 1,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 79,
          "maintenance": 88,
          "payments": 40,
          "reliability": 73,
          "schema": 88,
          "security": 78,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "Gemini publishes an OpenAPI and AsyncAPI contract, API key roles that keep withdrawals off a trading key, a funded sandbox, and an official MCP server whose tools carry read-only and destructive annotations and a confirm gate. Client order ids are not checked for duplicates, there is no SLA, and UK, EEA and Australian accounts closed in April 2026.",
        "bestFor": "An agent trading spot, perpetuals or prediction markets for a US customer with a role-limited key and a sandbox to rehearse on.",
        "strengths": [
          "Key roles enforce least privilege, since Trader cannot withdraw, Fund Manager cannot trade, Auditor is read-only, and a 403 `MissingRole` names the role an endpoint needs",
          "Official MCP server with readOnlyHint and destructiveHint on every tool, a `confirm: true` gate on funds-moving tools, untrusted-output framing and redaction of free-text fields",
          "OpenAPI 3 and AsyncAPI files, llms.txt, llms-full.txt, agents.md, an agent card and an error-codes page with 53 named reasons",
          "A sandbox with the same REST, WebSocket and FIX surfaces, test balances on signup and a documented 2FA bypass for automated tests",
          "Fee schedule published per tier without login, and a Statuspage feed with component-level incidents"
        ],
        "weaknesses": [
          "Client order ids are only recommended to be unique and no duplicate rejection is documented, so a retried order can execute twice",
          "No Retry-After, backoff guidance or SLA; 429 continues until the rate drops, and the upcoming-changes page reads \"TBD\"",
          "The MCP server lists 87 tools with no toolset or read-only subset switch, which costs context on every session",
          "The hosted MCP address in the repository's plugin manifest is on no docs page and gave no complete answer to a GET",
          "Accounts in the United Kingdom, the EEA and Australia closed on 6 April 2026, and the availability page still lists those countries"
        ],
        "agentNotes": [
          "Create a Trader key for order flow and a separate Fund Manager key only if withdrawals are in scope; never combine them, and keep the secret out of prompts and logs",
          "Set a `client_order_id` per order and look it up with `get_order_status` before resending after a timeout, because Gemini does not reject duplicates",
          "Start on api.sandbox.gemini.com with the same code; sandbox apps register at once, production OAuth apps wait for Gemini's review",
          "Stay under 1 public and 5 private requests a second; a 429 keeps answering 429 until the rate falls, with no Retry-After to read",
          "Check the person's country against the availability page first; UK, EEA and Australian accounts were closed on 6 April 2026"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 74.6
          }
        ],
        "editorialScores": {
          "ergonomics": 79,
          "maintenance": 88,
          "payments": 40,
          "reliability": 73,
          "schema": 88,
          "security": 78,
          "transparency": 54
        },
        "provenanceScore": 95,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install @gemini-markets/sdk",
        "http": "curl https://api.gemini.com/v1/pubticker/btcusd",
        "claudeCode": "claude mcp add gemini -s user -e GEMINI_API_KEY=your_key -e GEMINI_API_SECRET=your_secret -- node /absolute/path/to/mcp-server/dist/index.js",
        "config": {
          "mcpServers": {
            "gemini": {
              "args": [
                "/absolute/path/to/mcp-server/dist/index.js"
              ],
              "command": "node",
              "env": {
                "GEMINI_ACCOUNT": "primary",
                "GEMINI_API_KEY": "your_api_key_here",
                "GEMINI_API_SECRET": "your_api_secret_here",
                "GEMINI_WS_URL": "wss://ws.gemini.com"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/exchange.market-data",
        "tool": "https://letme.dev/gemini-exchange"
      },
      "area": "payments",
      "unitPrices": [
        {
          "item": "Spot maker fee, base tier (under $10,000 of 30-day volume)",
          "unit": "pct",
          "usd": 0.6,
          "note": "API fee schedule effective 1 September 2026"
        },
        {
          "item": "Spot taker fee, base tier",
          "unit": "pct",
          "usd": 1.2,
          "note": "falls to 0.02% above $250M of 30-day volume"
        },
        {
          "item": "Derivatives taker fee, base tier",
          "unit": "pct",
          "usd": 0.07,
          "note": "maker 0.02%, charged in GUSD"
        }
      ],
      "provenance": {
        "legalEntity": "Gemini Trust Company, LLC",
        "domain": "gemini.com",
        "domainRegistered": "1994-02-14",
        "endpointOnVendorDomain": true,
        "terms": "https://www.gemini.com/legal/user-agreement",
        "privacy": "https://www.gemini.com/legal/privacy-policy",
        "statusPage": "https://status.gemini.com",
        "changelog": "https://developer.gemini.com/changelog/revision-history",
        "securityTxt": "valid",
        "checked": "2026-11-03",
        "notes": [
          "The user agreement page of 19 February 2026 names Gemini Trust Company, LLC and Gemini Moonbase, LLC by state of residence; the privacy policy of 11 May 2026 lists the affiliates by region. The SEC's submissions record names the parent Gemini Space Station, Inc., Nasdaq GEMI.",
          "RDAP gives gemini.com a registration date of 14 February 1994.",
          "https://www.gemini.com/.well-known/security.txt is a PGP-signed file with Contact psirt@gemini.com, a bug bounty policy with payouts from $150 to $20,000 and a sandbox-only scope, but no Expires line.",
          "www.gemini.com/robots.txt allows the pages read and sets Crawl-delay 600; developer.gemini.com and status.gemini.com allow all (the status site disallows /api/ and /embed/, so the history feed was read, not the incidents API). support.gemini.com answered 403 to an article fetch.",
          "status.gemini.com is a Statuspage site with an Atom history feed."
        ],
        "score": 95
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/gemini-exchange.json",
      "live": {
        "slug": "gemini-exchange",
        "vendorStatus": {
          "page": "https://status.gemini.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-04T19:31:36.16016617Z"
        },
        "securityTxt": {
          "url": "https://gemini.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-11-04T15:53:25.749980755Z"
        },
        "updatedAt": "2026-11-04T19:31:36.16016617Z"
      }
    },
    "answer": "Gemini Exchange API scores 74.6 (BB) on agent readiness against Uniswap Trading API's 63.3 (B), and leads in 4 of 7 scored categories.",
    "b": {
      "slug": "uniswap",
      "name": "Uniswap Trading API",
      "vendor": "Uniswap Labs",
      "vendorUrl": "https://developers.uniswap.org",
      "kind": "http-api",
      "category": "crypto-exchanges",
      "summary": "Uniswap Labs' Trading API quotes and builds swap, bridge and liquidity transactions across Uniswap v2, v3, v4 and UniswapX on 21 chains. The caller signs with its own wallet and broadcasts; the API is free behind an API key.",
      "url": "https://www.anchorterminal.com/tools/uniswap",
      "markdownUrl": "https://www.anchorterminal.com/tools/uniswap.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/uniswap.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/uniswap.json",
      "dns": "uniswap.grade.anchorterminal.com",
      "repo": "https://github.com/Uniswap/uniswap-ai",
      "license": "The Trading API is a proprietary hosted service under Uniswap Labs' API Terms of Use, which we couldn't read; the SDKs and the uniswap-ai skills are MIT. Swaps execute on the open-source Uniswap protocol contracts on chain",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@uniswap/v4-sdk"
        }
      ],
      "auth": "api-key",
      "authNotes": "An API key from the Uniswap Developer Platform dashboard, sent as `x-api-key` on every request; the docs say to keep it server-side. The API never holds funds or keys. `/quote` returns `permitData` the user signs as EIP-712 typed data, `/swap` returns calldata the caller signs and broadcasts, and `/order` takes a signed UniswapX order. An optional `X-Agent-Info` header with `decision_origin` of `autonomous` or `human_mediated` attributes agent traffic (https://developers.uniswap.org/docs/trading/swapping-api/start-building/integration-guide, checked 2026-11-03).",
      "pricing": "free",
      "pricingNotes": "The API is free, with no subscription or per-call charge, per the FAQ and the Developer Platform post of 16 April 2026. Swaps pay the pool fee and gas on chain; UniswapX orders are gasless for the swapper. Integrators may add up to 4 fee entries totalling at most 500 bips. Each key is limited to 6 requests a second (https://developers.uniswap.org/docs/trading/swapping-api/faqs, checked 2026-11-03).",
      "priceSummary": "Free",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the API's endpoints (checked 2026-11-03). The uniswap-ai repository's `pay-with-any-token` skill helps an agent pay HTTP 402 challenges (MPP or x402) by swapping tokens through Uniswap, which is a buyer-side skill, not a paid endpoint.",
        "endpoints": []
      },
      "toolCount": 0,
      "popularity": {
        "githubStars": 236,
        "npmWeekly": 153782,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://developers.uniswap.org/docs/trading/overview",
      "llmsTxt": "https://developers.uniswap.org/llms.txt",
      "openapi": "https://trade-api.gateway.uniswap.org/v1/api.json",
      "capabilities": [
        "exchange.spot-trading",
        "exchange.market-data",
        "market.crypto",
        "wallet.onchain"
      ],
      "tags": [
        "official",
        "hosted",
        "closed-source",
        "openapi",
        "llms-txt",
        "api-key",
        "free",
        "no-card",
        "typescript",
        "agent-skills",
        "no-status-page",
        "security-txt",
        "rest"
      ],
      "lastRelease": "2026-10-22",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 63.3,
        "grade": "B",
        "agentReady": false,
        "rank": 446,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 5,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 72,
          "maintenance": 88,
          "payments": 40,
          "reliability": 42,
          "schema": 90,
          "security": 63,
          "transparency": 55
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "The Trading API is free, documented by an OpenAPI file with stable error codes, holds no keys since the caller signs every swap, and posts sunset notices 30 days ahead. There is no official MCP server, status page or sandbox, the key is a plain header secret at 6 requests a second, and the API terms refused our reader.",
        "bestFor": "An agent swapping or bridging tokens from its own wallet on 21 EVM chains, or managing liquidity positions, with routing done for it.",
        "strengths": [
          "OpenAPI 3.0 file, llms.txt, llms-full.txt and Markdown twins, with 400, 401, 404 and 429 schemas and a stable `errorCode` enum",
          "The API builds calldata and never holds funds or keys; the caller signs `permitData` and the transaction with its own wallet",
          "Free with no per-call charge, 21 chains for classic swaps and UniswapX on 10 of them",
          "Dated changelog notices with a 30-day minimum sunset policy, and the uniswap-ai skills (MIT) for coding agents",
          "A documented `X-Agent-Info` header for autonomous and human-mediated traffic, and retry guidance per error code"
        ],
        "weaknesses": [
          "No official MCP server; the registry's Uniswap entries are third parties",
          "No status page, no SLA and no sandbox; tests use production endpoints on testnets",
          "A single `x-api-key` per key with 6 requests a second and no scopes; the dashboard is disallowed by robots.txt so key management is unchecked",
          "The API Terms of Use and Uniswap Labs' terms and privacy policy are on a help centre that answered 403 or draw by script, so restricted countries and data handling are unchecked",
          "No official client library for the API; the TypeScript SDKs cover the protocol and quoting, not the API"
        ],
        "agentNotes": [
          "Call `/check_approval` first, then `/quote`; if `permitData` is non-null sign it as EIP-712 and send `signature` and `permitData` together to `/swap` or `/order`, never one without the other",
          "Route on the quote's `routing`: `CLASSIC`, `WRAP`, `UNWRAP` and `BRIDGE` go to `/swap`, `DUTCH_V2`, `DUTCH_V3` and `PRIORITY` to `/order`, `CHAINED` to `/plan`",
          "Refresh any quote older than 30 seconds before broadcasting, and on 429 pause every request from the key before retrying",
          "Retry unchanged only on `UpstreamTimeoutError`; `NoRouteFoundError` and `QuoteAmountTooLowError` need a different amount, token or `protocols` list",
          "Send `X-Agent-Info` with `decision_origin: autonomous` and keep `x-api-key` server-side"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 63.3
          }
        ],
        "editorialScores": {
          "ergonomics": 72,
          "maintenance": 88,
          "payments": 40,
          "reliability": 42,
          "schema": 90,
          "security": 63,
          "transparency": 35
        },
        "provenanceScore": 74,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npx skills add Uniswap/uniswap-ai",
        "http": "curl -X POST https://trade-api.gateway.uniswap.org/v1/quote -H 'x-api-key: YOUR_UNISWAP_API_KEY' -H 'Content-Type: application/json' -d '{\"tokenIn\":\"0x0000000000000000000000000000000000000000\",\"tokenOut\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"tokenInChainId\":1,\"tokenOutChainId\":1,\"type\":\"EXACT_INPUT\",\"amount\":\"1000000000000000000\",\"swapper\":\"0xYourWallet\"}'"
      },
      "letme": {
        "capability": "https://letme.dev/exchange.spot-trading",
        "tool": "https://letme.dev/uniswap"
      },
      "area": "payments",
      "provenance": {
        "legalEntity": "Uniswap Labs",
        "domain": "uniswap.org",
        "domainRegistered": "2018-11-26",
        "endpointOnVendorDomain": true,
        "terms": "https://support.uniswap.org/hc/en-us/articles/43018872248589-API-Terms-of-Use",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://developers.uniswap.org/docs/changelog",
        "securityTxt": "valid",
        "checked": "2026-11-03",
        "notes": [
          "Uniswap Labs is the name on the uniswap-ai licence and the blog; the API Terms of Use (support.uniswap.org, answered 403) are said in a search snippet to name Universal Navigation, Inc., which was not read first-hand.",
          "RDAP gives uniswap.org a registration date of 26 November 2018, registrar Cloudflare.",
          "app.uniswap.org/.well-known/security.txt lists a Cantina bounty and security@uniswap.org with no Expires field; uniswap.org redirects to the app.",
          "status.uniswap.org redirects to app.uniswap.org/swap, so no status page is recorded.",
          "The privacy policy at app.uniswap.org draws by script and was not read. developers.uniswap.org/robots.txt disallows /dashboard, /api/ and /oauth/, so the key dashboard was not fetched; trade-api.gateway.uniswap.org has no robots.txt (404)."
        ],
        "score": 74
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/uniswap.json",
      "live": {
        "slug": "uniswap",
        "securityTxt": {
          "url": "https://uniswap.org/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-04T15:53:09.573484239Z"
        },
        "updatedAt": "2026-11-04T15:53:09.573484239Z"
      }
    },
    "edges": [
      {
        "by": 31,
        "category": "reliability",
        "leads": "gemini-exchange",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the hosted lines on the REST API at api.gemini.com. status.gemini.com is a Statuspage site with component history (20). Its Atom feed for 10 September to 3 November 2026 holds 25 entries, mostly scheduled trading and FIX upgrades of 15 to 60 minutes with possible order timeouts, single-network deposit delays, and incorrect perpetual index prices for about 3.5 hours on 15 and 16 October; a 3-hour scheduled eOTC window was planned and outside the core API. Minor only (20). Rate limits with numbers, 120 a minute public and 600 private plus per-endpoint limits (15). 429 is documented but with no Retry-After or backoff guidance, and client order ids are recommended without duplicate rejection, so retries are not safe by contract; the heartbeat cancel is a safety net rather than idempotency (8 of 15). No SLA found (0). Generally available (10). 20 + 20 + 15 + 8 + 0 + 10 = 73.",
          "b": "Read with the hosted lines on the Trading API. status.uniswap.org redirects to the swap app and the docs link no status page (0). No readable history (5). Rate limit documented as 6 requests a second per key (15). The errors page says to pause all requests from the key on 429, retry 500 and 503 with backoff and refresh quotes after 30 seconds; swaps are signed transactions, so idempotency rests on the chain nonce (12 of 15). No SLA (0). The API is generally available; Guidestar routing is a beta notice (10). 0 + 5 + 15 + 12 + 0 + 10 = 42."
        },
        "scores": {
          "a": 73,
          "b": 42
        }
      },
      {
        "by": 20,
        "category": "transparency",
        "leads": "gemini-exchange",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "The editorial half. A closed service under a user agreement that names its entities by state, with the MCP server and SDKs open under Apache-2.0 (18 of 30). The privacy policy of 11 May 2026 names entities and processing countries, ties retention to need without numbers and names provider categories only, with no DPA or subprocessor list found (16 of 30). The revision history records removals and type changes with dates, but the upcoming-changes page is \"TBD\" and no notice period is stated (8 of 20). Processing countries are named (US, Ireland, UK, Malta, Singapore, Australia) and providers by category, with no named subprocessors (12 of 20). 18 + 16 + 8 + 12 = 54.",
          "b": "The editorial half. The API is closed under API Terms of Use that answered 403; the SDKs and uniswap-ai are MIT and the protocol contracts are open source (15 of 30). No privacy policy read (app.uniswap.org draws by script) and nothing in the docs on retention of quotes or wallet addresses (0 of 30). A published sunset policy of at least 30 days, ideally 60, with dated notices such as the Universal Router 2.0 and 2.1.1 sunset of 21 October 2026 (20). No subprocessors or data locations (0 of 20). Total 35."
        },
        "scores": {
          "a": 75,
          "b": 55
        }
      },
      {
        "by": 15,
        "category": "security",
        "leads": "gemini-exchange",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Revocable API keys with one role each (Trader, Fund Manager, Auditor, Administrator), HMAC-SHA384 signing with a nonce, and OAuth 2.0 with scopes, PKCE S256, single-use refresh tokens and RFC 7009 revocation; no IP allow-list documented and no key expiry (28 of 30). Auditor is read-only, a Trader key cannot withdraw, approved withdrawal addresses are a Fund Manager action, and the MCP server refuses funds-moving tools without `confirm: true` (18 of 20). The MCP server wraps every response in untrusted-output markers, strips control and bidi characters and redacts memos, labels and agreement text; the REST docs say nothing on the subject (13 of 15). Order and transfer history are readable, but no per-key audit log or API access log was found (5 of 15). security.txt with a PGP contact and a bug bounty paying $150 to $20,000, scoped to the sandbox hosts; no certification was read and no public advisory process was found (14 of 20). 28 + 18 + 13 + 5 + 14 = 78.",
          "b": "A single `x-api-key` header, no scopes, no IP allow-list; revocation and rotation happen in a dashboard robots.txt disallows, so unchecked; nothing in a URL (18 of 30). The API never holds keys or funds, every value transfer needs the caller's signature on `permitData` and the transaction, and the swapper sets slippage (16 of 20). The API returns routes and token lists, not untrusted content (10). The dashboard presumably shows key usage; not read, and no per-call log is documented (5 of 15). security.txt on app.uniswap.org with a Cantina bounty and security@uniswap.org, protocol audits in the docs; no SOC 2 or disclosure timeline read (14 of 20). Total 63."
        },
        "scores": {
          "a": 78,
          "b": 63
        }
      },
      {
        "by": 7,
        "category": "ergonomics",
        "leads": "gemini-exchange",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "Graded on the REST API, with the MCP server noted. Order book depth, trade and candle counts can be limited and symbols filtered; the MCP server lists 87 tools with no toolset or read-only subset switch, so a session that loads it pays for all of them (18 of 25). Timestamps, `limit_trades`, `since` and per-symbol filters on history, pagination on prediction-market lists (16 of 20). Errors carry a reason and message an agent can branch on, such as InsufficientFunds, MarketNotOpen and MissingRole, though some messages only say to retry later (16 of 20). client_order_id is echoed back but not checked for duplicates, cancel-all-session-orders and the heartbeat limit damage; the MCP server publishes readOnlyHint and destructiveHint on every tool and gates destructive ones on `confirm: true` (14 of 20). Few required parameters, sensible defaults, and official TypeScript and Go SDKs (15). 18 + 16 + 16 + 14 + 15 = 79.",
          "b": "An API, read for response sizing. Quotes and calldata are compact and `/tokens` takes a limit; the quote can carry the swap calldata to save a call (20 of 25). `GET /orders` and `GET /swaps` poll status by id, `/swappable_tokens` and `/tokens` filter by chain and sort, with little pagination elsewhere (12 of 20). Stable `errorCode` values with a `detail` string and a `requestId`, and the docs say which codes to retry (18 of 20). No idempotency key; a swap is a signed transaction whose nonce prevents a double spend, and the docs warn about nonce collisions with pending transactions (12 of 20). Few required fields on `/quote`, defaults for slippage and urgency, but no official client library for the API and signing needs ethers.js, viem or web3.js (10 of 15). Total 72."
        },
        "scores": {
          "a": 79,
          "b": 72
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Gemini Trust Company, LLC",
        "b": "Uniswap Labs",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio",
        "b": "",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary hosted API under Gemini's user agreement. The developer-platform repository (MCP server, TypeScript and Go SDKs, samples and skills) is Apache-2.0",
        "b": "The Trading API is a proprietary hosted service under Uniswap Labs' API Terms of Use, which we couldn't read; the SDKs and the uniswap-ai skills are MIT. Swaps execute on the open-source Uniswap protocol contracts on chain",
        "name": "Licence"
      },
      {
        "a": "87",
        "b": "0",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-28",
        "b": "2026-10-22",
        "name": "Last release"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "8 stars, 99 npm/wk",
        "b": "236 stars, 154k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Gemini Exchange API scores 74.6 (BB) on agent readiness against Uniswap Trading API's 63.3 (B), and leads in 4 of 7 scored categories.",
        "question": "Which is better for AI agents, Gemini Exchange API or Uniswap Trading API?"
      },
      {
        "answer": "Gemini Exchange API takes an API key or an OAuth sign-in. Uniswap Trading API needs an API key.",
        "question": "Do Gemini Exchange API and Uniswap Trading API need an API key?"
      },
      {
        "answer": "Gemini Exchange API runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for Uniswap Trading API.",
        "question": "Can an agent call Gemini Exchange API and Uniswap Trading API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 73 against 42",
          "Agent ergonomics, 79 against 72",
          "Security \u0026 auth, 78 against 63",
          "Transparency \u0026 trust, 75 against 55"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "Runs on your own machine"
        ],
        "goodFor": "An agent trading spot, perpetuals or prediction markets for a US customer with a role-limited key and a sandbox to rehearse on.",
        "slug": "gemini-exchange",
        "watchFor": "Client order ids are only recommended to be unique and no duplicate rejection is documented, so a retried order can execute twice"
      },
      {
        "aheadOn": null,
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "An agent swapping or bridging tokens from its own wallet on 21 EVM chains, or managing liquidity positions, with routing done for it.",
        "slug": "uniswap",
        "watchFor": "No official MCP server; the registry's Uniswap entries are third parties"
      }
    ],
    "history": null,
    "job": {
      "capability": "exchange.market-data",
      "name": "Exchange market data"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bitfinex-vs-gemini-exchange.json",
        "title": "Bitfinex API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/bitfinex-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bitfinex-vs-uniswap.json",
        "title": "Bitfinex API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/bitfinex-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bitget-vs-gemini-exchange.json",
        "title": "Bitget vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/bitget-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bitget-vs-uniswap.json",
        "title": "Bitget vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/bitget-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bithumb-vs-gemini-exchange.json",
        "title": "Bithumb Open API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/bithumb-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bithumb-vs-uniswap.json",
        "title": "Bithumb Open API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/bithumb-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bitstamp-vs-gemini-exchange.json",
        "title": "Bitstamp API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/bitstamp-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bitstamp-vs-uniswap.json",
        "title": "Bitstamp API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/bitstamp-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bybit-vs-gemini-exchange.json",
        "title": "Bybit vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/bybit-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bybit-vs-uniswap.json",
        "title": "Bybit vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/bybit-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crypto-com-exchange-vs-gemini-exchange.json",
        "title": "Crypto.com Exchange API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/crypto-com-exchange-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crypto-com-exchange-vs-uniswap.json",
        "title": "Crypto.com Exchange API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/crypto-com-exchange-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dydx-vs-uniswap.json",
        "title": "dYdX vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/dydx-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gate-io-vs-gemini-exchange.json",
        "title": "Gate vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/gate-io-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gate-io-vs-uniswap.json",
        "title": "Gate vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/gate-io-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-htx.json",
        "title": "Gemini Exchange API vs HTX trading API",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-htx"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-hyperliquid.json",
        "title": "Gemini Exchange API vs Hyperliquid",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-hyperliquid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-kraken.json",
        "title": "Gemini Exchange API vs Kraken API",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-kraken"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-kucoin.json",
        "title": "Gemini Exchange API vs KuCoin",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-kucoin"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-mexc.json",
        "title": "Gemini Exchange API vs MEXC API",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-mexc"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-okx.json",
        "title": "Gemini Exchange API vs OKX API",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-okx"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-upbit.json",
        "title": "Gemini Exchange API vs Upbit Open API",
        "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-upbit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/htx-vs-uniswap.json",
        "title": "HTX trading API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/htx-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kucoin-vs-uniswap.json",
        "title": "KuCoin vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/kucoin-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mexc-vs-uniswap.json",
        "title": "MEXC API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/mexc-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/binance-vs-gemini-exchange.json",
        "title": "Binance API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/binance-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/binance-vs-uniswap.json",
        "title": "Binance API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/binance-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-gemini-exchange.json",
        "title": "Coinbase Advanced Trade API vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-uniswap.json",
        "title": "Coinbase Advanced Trade API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/coinbase-mcp-vs-gemini-exchange.json",
        "title": "Coinbase MCP server (Coinbase for Agents) vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/coinbase-mcp-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/coinbase-mcp-vs-uniswap.json",
        "title": "Coinbase MCP server (Coinbase for Agents) vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/coinbase-mcp-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deribit-vs-uniswap.json",
        "title": "Deribit vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/deribit-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hyperliquid-vs-uniswap.json",
        "title": "Hyperliquid vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/hyperliquid-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kraken-vs-uniswap.json",
        "title": "Kraken API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/kraken-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/okx-vs-uniswap.json",
        "title": "OKX API vs Uniswap Trading API",
        "url": "https://www.anchorterminal.com/compare/okx-vs-uniswap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/uniswap-vs-upbit.json",
        "title": "Uniswap Trading API vs Upbit Open API",
        "url": "https://www.anchorterminal.com/compare/uniswap-vs-upbit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deribit-vs-gemini-exchange.json",
        "title": "Deribit vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/deribit-vs-gemini-exchange"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dydx-vs-gemini-exchange.json",
        "title": "dYdX vs Gemini Exchange API",
        "url": "https://www.anchorterminal.com/compare/dydx-vs-gemini-exchange"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 31,
        "edge": "gemini-exchange",
        "gemini-exchange": 73,
        "key": "reliability",
        "name": "Reliability",
        "uniswap": 42,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "uniswap",
        "gemini-exchange": 88,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "uniswap": 90,
        "weight": 13
      },
      {
        "by": 7,
        "edge": "gemini-exchange",
        "gemini-exchange": 79,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "uniswap": 72,
        "weight": 13
      },
      {
        "by": 15,
        "edge": "gemini-exchange",
        "gemini-exchange": 78,
        "key": "security",
        "name": "Security \u0026 auth",
        "uniswap": 63,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "gemini-exchange": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "uniswap": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 0,
        "edge": "",
        "gemini-exchange": 88,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "uniswap": 88,
        "weight": 7
      },
      {
        "by": 20,
        "edge": "gemini-exchange",
        "gemini-exchange": 75,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "uniswap": 55,
        "weight": 7
      }
    ],
    "summary": "Gemini Exchange API scores 74.6 (BB) on agent readiness against Uniswap Trading API's 63.3 (B), and leads in 4 of 7 scored categories. Both do exchange market data.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "gemini-exchange": "Gemini publishes an OpenAPI and AsyncAPI contract, API key roles that keep withdrawals off a trading key, a funded sandbox, and an official MCP server whose tools carry read-only and destructive annotations and a confirm gate. Client order ids are not checked for duplicates, there is no SLA, and UK, EEA and Australian accounts closed in April 2026.",
      "uniswap": "The Trading API is free, documented by an OpenAPI file with stable error codes, holds no keys since the caller signs every swap, and posts sunset notices 30 days ahead. There is no official MCP server, status page or sandbox, the key is a plain header secret at 6 requests a second, and the API terms refused our reader."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap",
    "json": "https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap.min.md"
  },
  "markdown": "Gemini Exchange API scores 74.6 (BB) on agent readiness against Uniswap Trading API's 63.3 (B), and leads in 4 of 7 scored categories. Both do exchange market data.\n\n- Gemini Exchange API: grade BB, 74.6/100, rank #70 of 1349. Markdown https://www.anchorterminal.com/tools/gemini-exchange.md · JSON https://www.anchorterminal.com/api/v1/tools/gemini-exchange.json\n- Uniswap Trading API: grade B, 63.3/100, rank #446 of 1349. Markdown https://www.anchorterminal.com/tools/uniswap.md · JSON https://www.anchorterminal.com/api/v1/tools/uniswap.json\n- Best crypto exchange APIs and MCP servers for AI agents: https://www.anchorterminal.com/best/crypto-exchanges/index.md\n- All 210 exchanges comparisons: https://www.anchorterminal.com/compare/crypto-exchanges/index.md\n\n## Which one, for what\n\n### Gemini Exchange API (BB)\n\nGood for: An agent trading spot, perpetuals or prediction markets for a US customer with a role-limited key and a sandbox to rehearse on.\n\nAhead on:\n- Reliability, 73 against 42\n- Agent ergonomics, 79 against 72\n- Security \u0026 auth, 78 against 63\n- Transparency \u0026 trust, 75 against 55\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- Runs on your own machine\n\nWatch for: Client order ids are only recommended to be unique and no duplicate rejection is documented, so a retried order can execute twice\n\n### Uniswap Trading API (B)\n\nGood for: An agent swapping or bridging tokens from its own wallet on 21 EVM chains, or managing liquidity positions, with routing done for it.\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: No official MCP server; the registry's Uniswap entries are third parties\n\n\n## Why the edge\n\n### Reliability: Gemini Exchange API +31\n\n- Gemini Exchange API (73): Read with the hosted lines on the REST API at api.gemini.com. status.gemini.com is a Statuspage site with component history (20). Its Atom feed for 10 September to 3 November 2026 holds 25 entries, mostly scheduled trading and FIX upgrades of 15 to 60 minutes with possible order timeouts, single-network deposit delays, and incorrect perpetual index prices for about 3.5 hours on 15 and 16 October; a 3-hour scheduled eOTC window was planned and outside the core API. Minor only (20). Rate limits with numbers, 120 a minute public and 600 private plus per-endpoint limits (15). 429 is documented but with no Retry-After or backoff guidance, and client order ids are recommended without duplicate rejection, so retries are not safe by contract; the heartbeat cancel is a safety net rather than idempotency (8 of 15). No SLA found (0). Generally available (10). 20 + 20 + 15 + 8 + 0 + 10 = 73.\n- Uniswap Trading API (42): Read with the hosted lines on the Trading API. status.uniswap.org redirects to the swap app and the docs link no status page (0). No readable history (5). Rate limit documented as 6 requests a second per key (15). The errors page says to pause all requests from the key on 429, retry 500 and 503 with backoff and refresh quotes after 30 seconds; swaps are signed transactions, so idempotency rests on the chain nonce (12 of 15). No SLA (0). The API is generally available; Guidestar routing is a beta notice (10). 0 + 5 + 15 + 12 + 0 + 10 = 42.\n\n### Transparency \u0026 trust: Gemini Exchange API +20\n\n- Gemini Exchange API (75): The editorial half. A closed service under a user agreement that names its entities by state, with the MCP server and SDKs open under Apache-2.0 (18 of 30). The privacy policy of 11 May 2026 names entities and processing countries, ties retention to need without numbers and names provider categories only, with no DPA or subprocessor list found (16 of 30). The revision history records removals and type changes with dates, but the upcoming-changes page is \"TBD\" and no notice period is stated (8 of 20). Processing countries are named (US, Ireland, UK, Malta, Singapore, Australia) and providers by category, with no named subprocessors (12 of 20). 18 + 16 + 8 + 12 = 54.\n- Uniswap Trading API (55): The editorial half. The API is closed under API Terms of Use that answered 403; the SDKs and uniswap-ai are MIT and the protocol contracts are open source (15 of 30). No privacy policy read (app.uniswap.org draws by script) and nothing in the docs on retention of quotes or wallet addresses (0 of 30). A published sunset policy of at least 30 days, ideally 60, with dated notices such as the Universal Router 2.0 and 2.1.1 sunset of 21 October 2026 (20). No subprocessors or data locations (0 of 20). Total 35.\n\n### Security \u0026 auth: Gemini Exchange API +15\n\n- Gemini Exchange API (78): Revocable API keys with one role each (Trader, Fund Manager, Auditor, Administrator), HMAC-SHA384 signing with a nonce, and OAuth 2.0 with scopes, PKCE S256, single-use refresh tokens and RFC 7009 revocation; no IP allow-list documented and no key expiry (28 of 30). Auditor is read-only, a Trader key cannot withdraw, approved withdrawal addresses are a Fund Manager action, and the MCP server refuses funds-moving tools without `confirm: true` (18 of 20). The MCP server wraps every response in untrusted-output markers, strips control and bidi characters and redacts memos, labels and agreement text; the REST docs say nothing on the subject (13 of 15). Order and transfer history are readable, but no per-key audit log or API access log was found (5 of 15). security.txt with a PGP contact and a bug bounty paying $150 to $20,000, scoped to the sandbox hosts; no certification was read and no public advisory process was found (14 of 20). 28 + 18 + 13 + 5 + 14 = 78.\n- Uniswap Trading API (63): A single `x-api-key` header, no scopes, no IP allow-list; revocation and rotation happen in a dashboard robots.txt disallows, so unchecked; nothing in a URL (18 of 30). The API never holds keys or funds, every value transfer needs the caller's signature on `permitData` and the transaction, and the swapper sets slippage (16 of 20). The API returns routes and token lists, not untrusted content (10). The dashboard presumably shows key usage; not read, and no per-call log is documented (5 of 15). security.txt on app.uniswap.org with a Cantina bounty and security@uniswap.org, protocol audits in the docs; no SOC 2 or disclosure timeline read (14 of 20). Total 63.\n\n### Agent ergonomics: Gemini Exchange API +7\n\n- Gemini Exchange API (79): Graded on the REST API, with the MCP server noted. Order book depth, trade and candle counts can be limited and symbols filtered; the MCP server lists 87 tools with no toolset or read-only subset switch, so a session that loads it pays for all of them (18 of 25). Timestamps, `limit_trades`, `since` and per-symbol filters on history, pagination on prediction-market lists (16 of 20). Errors carry a reason and message an agent can branch on, such as InsufficientFunds, MarketNotOpen and MissingRole, though some messages only say to retry later (16 of 20). client_order_id is echoed back but not checked for duplicates, cancel-all-session-orders and the heartbeat limit damage; the MCP server publishes readOnlyHint and destructiveHint on every tool and gates destructive ones on `confirm: true` (14 of 20). Few required parameters, sensible defaults, and official TypeScript and Go SDKs (15). 18 + 16 + 16 + 14 + 15 = 79.\n- Uniswap Trading API (72): An API, read for response sizing. Quotes and calldata are compact and `/tokens` takes a limit; the quote can carry the swap calldata to save a call (20 of 25). `GET /orders` and `GET /swaps` poll status by id, `/swappable_tokens` and `/tokens` filter by chain and sort, with little pagination elsewhere (12 of 20). Stable `errorCode` values with a `detail` string and a `requestId`, and the docs say which codes to retry (18 of 20). No idempotency key; a swap is a signed transaction whose nonce prevents a double spend, and the docs warn about nonce collisions with pending transactions (12 of 20). Few required fields on `/quote`, defaults for slippage and urgency, but no official client library for the API and signing needs ethers.js, viem or web3.js (10 of 15). Total 72.\n\n## Score by category\n\n| Category | Weight | Gemini Exchange API | Uniswap Trading API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 73 | 42 | Gemini Exchange API +31 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 88 | 90 | Uniswap Trading API +2 |\n| Agent ergonomics | 13% (16.2 this run) | 79 | 72 | Gemini Exchange API +7 |\n| Security \u0026 auth | 14% (17.5 this run) | 78 | 63 | Gemini Exchange API +15 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 88 | 88 | even |\n| Transparency \u0026 trust | 7% (8.8 this run) | 75 | 55 | Gemini Exchange API +20 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **74.6 · BB** | **63.3 · B** | |\n\n## Facts side by side\n\n| Fact | Gemini Exchange API | Uniswap Trading API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Gemini Trust Company, LLC | Uniswap Labs |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | stdio |  |\n| Auth | OAuth or key | API key |\n| Pricing | Pay per use | Free |\n| x402 | no | no |\n| Licence | Proprietary hosted API under Gemini's user agreement. The developer-platform repository (MCP server, TypeScript and Go SDKs, samples and skills) is Apache-2.0 | The Trading API is a proprietary hosted service under Uniswap Labs' API Terms of Use, which we couldn't read; the SDKs and the uniswap-ai skills are MIT. Swaps execute on the open-source Uniswap protocol contracts on chain |\n| Tools exposed | 87 | 0 |\n| Read-only variant documented | yes | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-28 | 2026-10-22 |\n| Terms last updated | couldn't be read | couldn't be read |\n| Privacy policy last updated | no date given | no document linked |\n| Customer content may train models | yes | couldn't be read |\n| Terms restrict automated access | couldn't be read | couldn't be read |\n| Terms restrict benchmarking | couldn't be read | couldn't be read |\n| Terms or service can change without notice | couldn't be read | couldn't be read |\n| Arbitration or class-action waiver | couldn't be read | couldn't be read |\n| Popularity | 8 stars, 99 npm/wk | 236 stars, 154k npm/wk |\n\n## Verdicts\n\n**Gemini Exchange API.** Gemini publishes an OpenAPI and AsyncAPI contract, API key roles that keep withdrawals off a trading key, a funded sandbox, and an official MCP server whose tools carry read-only and destructive annotations and a confirm gate. Client order ids are not checked for duplicates, there is no SLA, and UK, EEA and Australian accounts closed in April 2026.\n\n**Uniswap Trading API.** The Trading API is free, documented by an OpenAPI file with stable error codes, holds no keys since the caller signs every swap, and posts sunset notices 30 days ahead. There is no official MCP server, status page or sandbox, the key is a plain header secret at 6 requests a second, and the API terms refused our reader.\n\n## Before you call either\n\n### Gemini Exchange API\n\n1. Create a Trader key for order flow and a separate Fund Manager key only if withdrawals are in scope; never combine them, and keep the secret out of prompts and logs\n2. Set a `client_order_id` per order and look it up with `get_order_status` before resending after a timeout, because Gemini does not reject duplicates\n3. Start on api.sandbox.gemini.com with the same code; sandbox apps register at once, production OAuth apps wait for Gemini's review\n4. Stay under 1 public and 5 private requests a second; a 429 keeps answering 429 until the rate falls, with no Retry-After to read\n5. Check the person's country against the availability page first; UK, EEA and Australian accounts were closed on 6 April 2026\n\n### Uniswap Trading API\n\n1. Call `/check_approval` first, then `/quote`; if `permitData` is non-null sign it as EIP-712 and send `signature` and `permitData` together to `/swap` or `/order`, never one without the other\n2. Route on the quote's `routing`: `CLASSIC`, `WRAP`, `UNWRAP` and `BRIDGE` go to `/swap`, `DUTCH_V2`, `DUTCH_V3` and `PRIORITY` to `/order`, `CHAINED` to `/plan`\n3. Refresh any quote older than 30 seconds before broadcasting, and on 429 pause every request from the key before retrying\n4. Retry unchanged only on `UpstreamTimeoutError`; `NoRouteFoundError` and `QuoteAmountTooLowError` need a different amount, token or `protocols` list\n5. Send `X-Agent-Info` with `decision_origin: autonomous` and keep `x-api-key` server-side\n\n## Questions\n\n### Which is better for AI agents, Gemini Exchange API or Uniswap Trading API?\n\nGemini Exchange API scores 74.6 (BB) on agent readiness against Uniswap Trading API's 63.3 (B), and leads in 4 of 7 scored categories.\n\n### Do Gemini Exchange API and Uniswap Trading API need an API key?\n\nGemini Exchange API takes an API key or an OAuth sign-in. Uniswap Trading API needs an API key.\n\n### Can an agent call Gemini Exchange API and Uniswap Trading API without installing anything?\n\nGemini Exchange API runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for Uniswap Trading API.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap.json, and with the fewest tokens: https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"gemini-exchange\", \"b\": \"uniswap\"}`. From a terminal: `anchor compare gemini-exchange uniswap`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/gemini-exchange.json and https://www.anchorterminal.com/api/v1/tools/uniswap.json\n\n## Other comparisons with Gemini Exchange API or Uniswap Trading API\n\n- [Bitfinex API vs Gemini Exchange API](https://www.anchorterminal.com/compare/bitfinex-vs-gemini-exchange.md)\n- [Bitfinex API vs Uniswap Trading API](https://www.anchorterminal.com/compare/bitfinex-vs-uniswap.md)\n- [Bitget vs Gemini Exchange API](https://www.anchorterminal.com/compare/bitget-vs-gemini-exchange.md)\n- [Bitget vs Uniswap Trading API](https://www.anchorterminal.com/compare/bitget-vs-uniswap.md)\n- [Bithumb Open API vs Gemini Exchange API](https://www.anchorterminal.com/compare/bithumb-vs-gemini-exchange.md)\n- [Bithumb Open API vs Uniswap Trading API](https://www.anchorterminal.com/compare/bithumb-vs-uniswap.md)\n- [Bitstamp API vs Gemini Exchange API](https://www.anchorterminal.com/compare/bitstamp-vs-gemini-exchange.md)\n- [Bitstamp API vs Uniswap Trading API](https://www.anchorterminal.com/compare/bitstamp-vs-uniswap.md)\n- [Bybit vs Gemini Exchange API](https://www.anchorterminal.com/compare/bybit-vs-gemini-exchange.md)\n- [Bybit vs Uniswap Trading API](https://www.anchorterminal.com/compare/bybit-vs-uniswap.md)\n- [Crypto.com Exchange API vs Gemini Exchange API](https://www.anchorterminal.com/compare/crypto-com-exchange-vs-gemini-exchange.md)\n- [Crypto.com Exchange API vs Uniswap Trading API](https://www.anchorterminal.com/compare/crypto-com-exchange-vs-uniswap.md)\n- [dYdX vs Uniswap Trading API](https://www.anchorterminal.com/compare/dydx-vs-uniswap.md)\n- [Gate vs Gemini Exchange API](https://www.anchorterminal.com/compare/gate-io-vs-gemini-exchange.md)\n- [Gate vs Uniswap Trading API](https://www.anchorterminal.com/compare/gate-io-vs-uniswap.md)\n- [Gemini Exchange API vs HTX trading API](https://www.anchorterminal.com/compare/gemini-exchange-vs-htx.md)\n- [Gemini Exchange API vs Hyperliquid](https://www.anchorterminal.com/compare/gemini-exchange-vs-hyperliquid.md)\n- [Gemini Exchange API vs Kraken API](https://www.anchorterminal.com/compare/gemini-exchange-vs-kraken.md)\n- [Gemini Exchange API vs KuCoin](https://www.anchorterminal.com/compare/gemini-exchange-vs-kucoin.md)\n- [Gemini Exchange API vs MEXC API](https://www.anchorterminal.com/compare/gemini-exchange-vs-mexc.md)\n- [Gemini Exchange API vs OKX API](https://www.anchorterminal.com/compare/gemini-exchange-vs-okx.md)\n- [Gemini Exchange API vs Upbit Open API](https://www.anchorterminal.com/compare/gemini-exchange-vs-upbit.md)\n- [HTX trading API vs Uniswap Trading API](https://www.anchorterminal.com/compare/htx-vs-uniswap.md)\n- [KuCoin vs Uniswap Trading API](https://www.anchorterminal.com/compare/kucoin-vs-uniswap.md)\n- [MEXC API vs Uniswap Trading API](https://www.anchorterminal.com/compare/mexc-vs-uniswap.md)\n- [Binance API vs Gemini Exchange API](https://www.anchorterminal.com/compare/binance-vs-gemini-exchange.md)\n- [Binance API vs Uniswap Trading API](https://www.anchorterminal.com/compare/binance-vs-uniswap.md)\n- [Coinbase Advanced Trade API vs Gemini Exchange API](https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-gemini-exchange.md)\n- [Coinbase Advanced Trade API vs Uniswap Trading API](https://www.anchorterminal.com/compare/coinbase-advanced-trade-vs-uniswap.md)\n- [Coinbase MCP server (Coinbase for Agents) vs Gemini Exchange API](https://www.anchorterminal.com/compare/coinbase-mcp-vs-gemini-exchange.md)\n- [Coinbase MCP server (Coinbase for Agents) vs Uniswap Trading API](https://www.anchorterminal.com/compare/coinbase-mcp-vs-uniswap.md)\n- [Deribit vs Uniswap Trading API](https://www.anchorterminal.com/compare/deribit-vs-uniswap.md)\n- [Hyperliquid vs Uniswap Trading API](https://www.anchorterminal.com/compare/hyperliquid-vs-uniswap.md)\n- [Kraken API vs Uniswap Trading API](https://www.anchorterminal.com/compare/kraken-vs-uniswap.md)\n- [OKX API vs Uniswap Trading API](https://www.anchorterminal.com/compare/okx-vs-uniswap.md)\n- [Uniswap Trading API vs Upbit Open API](https://www.anchorterminal.com/compare/uniswap-vs-upbit.md)\n- [Deribit vs Gemini Exchange API](https://www.anchorterminal.com/compare/deribit-vs-gemini-exchange.md)\n- [dYdX vs Gemini Exchange API](https://www.anchorterminal.com/compare/dydx-vs-gemini-exchange.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Gemini Exchange API vs Uniswap Trading API",
        "url": ""
      }
    ],
    "description": "Gemini Exchange scores 74.6 (BB) to Uniswap Trading's 63.3 (B) for exchange market data. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Gemini Exchange API BB 74.6",
      "Uniswap Trading API B 63.3",
      "scores"
    ],
    "h1": "Gemini Exchange API vs Uniswap Trading API",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/gemini-exchange-vs-uniswap",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Gemini Exchange vs Uniswap Trading for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-03",
    "url": "https://www.anchorterminal.com/compare/gemini-exchange-vs-uniswap"
  },
  "tokens": {
    "markdown": 4650,
    "slim": 2280
  },
  "version": 1
}
