/ Developers
✦ Use with AI
On this page

Build on Epsilon

Epsilon is a trading platform on Robinhood Chain with advanced order types (limit, stop loss, DCA, trailing stop) for memecoins and RWAs. The developer platform gives you a keyed REST API — quotes, smart order routing, order placement, and market data — plus MCP servers so AI agents in Cursor, Claude, and any MCP client can trade programmatically.

Quickstart

1 — Get an API key. Keys are issued per Epsilon account. During early access, keys are concierge-issued — ask in the community or DM @TradeEpsilon. (Self-serve issuance with your Privy login lands with the developer dashboard.) Keys look like eps_… and are shown once at creation.

2 — First call: quote a swap. Amounts are raw token units (scaled by the token's decimals):

curl "https://api.epsilon.exchange/v1/route?tokenIn=0x…&tokenOut=0x…&amountIn=1500000000000000000&slippagePpm=10000&orderType=limit" \
  -H "X-API-Key: eps_YOUR_KEY"

The response contains the best route, expected and minimum output, price impact in ppm, and the feeLegs that a signed order must embed. Fees are priced per order kind × token class, so orderType must match what you'll submit (limit, stop_loss, take_profit, dca, trailing; add triggered=1 for a price-gated DCA) — omit it and you get the direct-swap cell, which an order submit will reject.

3 — Explore the surface. Everything lives under /v1 and is documented in the interactive API reference:

Endpoint What it does
GET/v1/quote venue-by-venue quotes for a pair
GET/v1/route best executable route + feeLegs
GET/v1/order-preflight will an order for this pair/size be executable?
POST/v1/orders submit an EIP-712-signed order
GET/v1/orders/{hash} order status (+ /fills)
DEL/v1/orders/{hash} cancel a pending order (maker-signed)
GET/v1/orderbook/{pair} open orders for a token pair
GET/v1/swaps · /v1/volume · /v1/stats market data
GET/v1/errors · /v1/config · /v1/openapi.json error catalog, chain config, spec (no key needed)
Building an AI agent? Skip raw HTTP — connect the MCP server (per-client setup for Cursor, Claude, ChatGPT, Codex, Grok) or install the Epsilon plugin (MCP + trading skills + Robinhood Chain rules in one bundle). Working code to start from — LangChain and Vercel AI SDK tools, a Telegram bot, a cron DCA trader — lives in the examples repo.

Authentication

Every keyed endpoint accepts the key in either header form:

X-API-Key: eps_YOUR_KEY
# or
Authorization: Bearer eps_YOUR_KEY

Keys are secrets: server-side only, never in browser code or repos. A leaked key can be disabled instantly and reissued — rotation is free.

Rate limits

Limits are per key (not per IP) over a sliding minute, in three buckets, driven by the key's tier:

Bucket Endpoints Free Builder
Quote /v1/quote, /v1/route, /v1/order-preflight 120 / min 600 / min
Read orders, orderbook, swaps, volume, stats, tokens 600 / min 3000 / min
Order POST /v1/orders, cancel 30 / min 150 / min

Every response carries X-RateLimit-Limit and X-RateLimit-Remaining; a 429 includes Retry-After. Order submission additionally has per-maker-wallet limits. Enterprise limits are per contract — contact us.

Rev-share (permissionless)

Routing other people's orders through Epsilon? Add &referrer=0xYOUR_ADDRESS to GET /v1/route and the served feeLegs.referrer becomes your payout address. The maker signs those fee legs into the order, and the referral leg of every fill is paid to your address on-chain by the router — no application, no minimums, earning from your first fill. The fee ppm is policy-set server-side: you choose where the referral leg goes, never how big it is, so your users pay exactly what they'd pay anyway. Both SDKs pass it through (fetchOrderRoute({ …, referrer }) / order_route(…, referrer=…)), and the MCP server takes an EPSILON_REFERRER env var. The builder tier (application in the dashboard) is only about the 5× rate limits in the table above — earnings need no tier.

Not to be confused with the in-app user referral program (invites, ranks, points): that pays for bringing users and requires an Epsilon account; rev-share pays for routing orders and needs only an address. On a routed fill the referral leg goes to the flow-router named in the fee legs, and the maker always pays their own policy rate — a third-party frontend can never change what the user pays.

Amounts & prices

Signed orders

Epsilon is non-custodial: an order is an EIP-712 message signed by the maker's wallet (domain EpsilonRouter v7, chain 4663), executed on-chain by keepers when the trigger condition is met. Funds stay in the maker's wallet until fill. The API key on POST /v1/orders is attribution and rate limiting — authorization is the signature itself.

Integration paths, most to least batteries-included:

Cancelling a pending order is also signed: EIP-712 OrderCancel(bytes32 orderHash) by the maker, sent with DELETE /v1/orders/{hash}.

Webhooks

Stop polling GET /v1/orders — register an HTTPS endpoint on the dashboard and Epsilon POSTs you the order-lifecycle events of your linked wallets: order.filled, order.cancelled, order.expired, order.failed, stop.triggered, dca.completed, dca.stalled. Up to 3 endpoints per account; each can subscribe to all triggers or a subset.

POST https://your-app.com/webhooks/epsilon
Content-Type: application/json
X-Epsilon-Event: order.filled
X-Epsilon-Delivery: 6f1c…        <- unique event id: dedupe on this
X-Epsilon-Signature: t=1756350000,v1=hex(HMAC-SHA256(secret, t + "." + body))

{ "id": "6f1c…", "trigger": "order.filled", "createdAt": "…",
  "data": { "orderType": "limit", "pair": "WETH/USDG", "amountIn": "…",
            "amountOut": "…", "txHash": "0x…", "orderHash": "0x…" } }

Verify every delivery: recompute HMAC-SHA256(secret, t + "." + rawBody) and compare to v1 (constant-time), reject t older than ~5 minutes. Delivery is at-least-once with exponential retries for about a day — respond 2xx fast and process async; dedupe on X-Epsilon-Delivery. Endpoints that keep failing are auto-disabled (re-enable by re-creating). Test any endpoint with the dashboard's Test button before going live.

Errors

Errors are JSON with a stable machine-readable code:

{ "error": "human-readable message", "code": "MACHINE_CODE" }
Code Meaning
RATE_LIMITED per-key limit hit — honor Retry-After
MAKER_RATE_LIMITED too many orders from one maker wallet
BAD_SIGNATURE signature doesn't recover to the maker
FEE_PARAMS_MISMATCH order fee fields don't match the served feeLegs
INVALID_TRAITS makerTraits flags invalid for the order type
ALREADY_EXISTS order hash already indexed
UNSUPPORTED_PAIR / NO_ORACLE pair can't be safely executed as a triggered order
NO_ROUTE / NO_POOL no executable liquidity right now

The complete, always-current catalog with retry guidance is served live at GET /v1/errors (no key required).

Changelog

Developer-facing changes. Product releases are on the epsilon.exchange changelog (RSS).

Date Change
2026-10-05 MCP tool surface v1.0. Hosted server 0.4.0 and @epsilon-exchange/mcp 0.4.0: verb-first names (order_preflight→check_order, get_order_status→get_order, recent_swaps→list_fills, error_catalog→get_error_catalog, token_info→get_token, wallet_info→get_wallet), market_stats + get_market_overview + token_volume merged into get_market_stats {scope, window}. MCP clients list tools per session, so no code change is needed; update saved prompts and skills that name tools. Also new: the hosted-execution roadmap on the MCP guide, VS Code + Gemini setup, epsilon.exchange/ai.
2026-09-17 Fee cells are order-kind × token-class. Route fetches must pass the orderType they will submit (limit, stop_loss, dca, trailing; triggered=1 for a floor-bearing DCA) so the served feeLegs match the cell the indexer exact-matches on submit. Clients republished for the contract: @epsilon-exchange/sdk 0.2.0, @epsilon-exchange/mcp 0.3.0, @epsilon-exchange/cli 0.2.0, PyPI epsilon-exchange 0.2.0. Older versions sign the previous contract and are rejected for referred wallets (FEE_PARAMS_MISMATCH).
2026-09-09 Sim-verified routing. GET /v1/route builds and simulates the top venue candidates and serves the highest verified output. New response fields: candidates (best executable quote per venue family, winner first), routeSim.reranked, displacedDex, verifiedOut, deliveryPpm. exclude= drops venue families from the race. New fast spot path GET /api/spot.
2026-09-03 Stop orders are classified and priced by signed traits (orderType=stop_loss on submit; mislabeled stops are rejected). Platform list endpoints (fee accruals, referees) are keyset-paginated: limit default 100 / max 500 + nextCursor.
2026-08-28 Developer platform launch: API keys + usage dashboard, hosted read-only MCP, local MCP package, TypeScript + Python SDKs, HMAC-signed webhooks, permissionless rev-share. Official MCP registry entry io.github.alienbase-xyz/epsilon; Cursor plugin on cursor.directory.