REST API

Six chains, one API.

Token discovery, safety analysis, wallet intelligence, trading, automated orders, copy trading and multi-launchpad launching — over plain HTTP, from any language. All 87 of them take a free API key, which an agent can issue itself in a single call.

87 endpointsFree during early accessOpenAPI 3.1
MCP
Claude, ChatGPT, Cursor
SDK
TypeScript
CLI
Terminal & CI
REST API
Any language
Start

Try it right now

The base URL is https://foxd.xyz/api/v1, and every endpoint takes a key. Getting one is not a barrier — see below; an agent can sign itself up and be calling this within one round trip.

trending right now
curl 'https://foxd.xyz/api/v1/tokens/trending?chain=base&limit=10' \
  -H "Authorization: Bearer $FOXD_API_KEY"

Plain HTTP, so anything that can make a request works — these five are shown because they cover most people, not because they are special. Go and Rust are a net/http and a reqwest call against the exact same URL.

Use cases

The four things people actually do

Check a token is not a trap

Two different sources, deliberately. analytics.security is the provider verdict; simulateHoneypot actually simulates a buy and a sell against chain state and is the only one that covers HyperEVM. simulated: false is not a pass — it means no conclusion was reached.

provider verdict
curl 'https://foxd.xyz/api/v1/tokens/bsc/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c/security' \
  -H "Authorization: Bearer $FOXD_API_KEY"
simulate a real sell
curl 'https://foxd.xyz/api/v1/tokens/bsc/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c/simulate' \
  -H "Authorization: Bearer $FOXD_API_KEY"

Quote, then trade

The quote names the venue, expected output and price impact, and it is the same figure the spend cap is checked against. Amounts are base-unit strings — "10000000000000000" is 0.01 ETH.

quote
curl -X POST 'https://foxd.xyz/api/v1/trade/quote' \
  -H "Authorization: Bearer $FOXD_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"chain":"base","tokenIn":"0x0000000000000000000000000000000000000000","tokenOut":"0x532f27101965dd16442e59d40670faf5ebb142e4","amountIn":"10000000000000000","side":"buy"}'
execute
curl -X POST 'https://foxd.xyz/api/v1/trade/execute' \
  -H "Authorization: Bearer $FOXD_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"chain":"base","tokenIn":"0x0000000000000000000000000000000000000000","tokenOut":"0x532f27101965dd16442e59d40670faf5ebb142e4","amountIn":"10000000000000000","side":"buy","slippageBps":100}'

Watch a wallet before copying it

would copying have worked
curl 'https://foxd.xyz/api/v1/copy/trader/0xae2fc483527b8ef99eb5d9b44875f005ba1fae13/backtest?windowDays=30&ticketUsd=100' \
  -H "Authorization: Bearer $FOXD_API_KEY"

Be told instead of polling

A webhook costs one call to register and then nothing. Polling a feed every few seconds burns quota to learn nothing most of the time.

subscribe
curl -X POST 'https://foxd.xyz/api/v1/webhooks' \
  -H "Authorization: Bearer $FOXD_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"url":"https://your-service.example/foxd","event":"new_token","filters":{"chain":"base","platform":"pumpfun"}}'

Twenty worked examples, including signing up and launching a token, are in the cookbook.

Discovery

The API describes itself

All three of these are generated from the same declaration the endpoints are built from, on every request — so they cannot drift from what the server actually does.

  • /api/v1 — every endpoint with its route, scopes and cost, as JSON.
  • /api/v1/openapi.json — OpenAPI 3.1. Point any generator at it.
  • /llms-full.txt — the same surface as plain text, for agents and crawlers.
Auth

Getting a key — including headlessly

Create one in Profile → Settings, or let an agent sign itself up with nothing but a keypair:

# 1. ask for a challenge
curl -X POST https://foxd.xyz/api/v1/auth/challenge \
  -H 'content-type: application/json' \
  -d '{"address":"0xYourAddress"}'

# 2. sign the returned message EXACTLY as given, then:
curl -X POST https://foxd.xyz/api/v1/auth/wallet \
  -H 'content-type: application/json' \
  -d '{"message":"<the exact message>","signature":"0x…","address":"0xYourAddress"}'

# → { "apiKey": "fxk_live_…", "wallets": [ … ] }

That one exchange creates the account, provisions an EVM and a Solana wallet, and returns a key — no browser, no human. Sign in with an existing Google, X, Telegram or email account from a headless client via the device flow instead (/api/v1/auth/device), which is the same pattern gh auth login uses.

Those 5 sign-in endpoints are the only ones that answer without a credential, and they sit on their own hard per-IP limit. Everything else is attributable to an account on purpose: an anonymous call cannot be measured, throttled fairly, or cut off if it turns abusive.

Coverage

What is exposed

Everything the web terminal can do, grouped into 13 modules:

auth5
market13
analytics5
sniper4
copyIntel5
copyExec4
trade6
wallet13
launch8
automation11
alerts3
account5
keys5

The per-endpoint reference, with every request and response field, is in the documentation.

Conventions

Four things that will bite you otherwise

  • Price changes are ratios, not percents. 0.05 means +5%.
  • Amounts are base-unit strings. 0.01 ETH is "10000000000000000" — an 18-decimal integer does not survive a JavaScript float, so numbers are refused where precision matters.
  • 503 means retry, 500 means stop. A backing service being briefly unavailable returns 503 with a Retry-After header; a 500 is a real fault and retrying it will not help.
  • simulated: false is not a safety pass. It means no conclusion was reached — treat it as unknown, not as safe.
Errors

Every failure is structured

{
  "error": {
    "code": "spend_cap_exceeded",
    "message": "this trade ($185.48) would exceed the key's 24h spend cap ($0.00 of $100.00 used)"
  }
}

code is stable and safe to branch on; message is written for a human — or for a model deciding what to do next. Validation failures additionally name the offending fields, so a wrong argument tells you which one and what it wanted.

Get an API key

Public market data needs no key. Everything account-, wallet- or trade-related does. Keys are free, scoped, and revocable in one click.

Create an API keyFull documentation
SniperTradeLaunchAI
REST API — Multi-chain trading, discovery and launching | FoxD