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) |
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
-
Tokens are addresses. Resolve symbols with
GET /v1/tokens?search=USDG— returns address, decimals, and 30-day volume (the disambiguator when symbols collide). -
Amounts are raw token units — decimal strings
already scaled by the token's decimals.
1.5WETH (18 decimals) is"1500000000000000000". -
Slippage is ppm (parts per million) in
/v1params: basis points × 100. 1% = 100 bps =10000ppm. -
Trigger prices are the price of 1 tokenIn expressed
in tokenOut, scaled to tokenOut's decimals.
0means execute at market (DCA legs). -
Chain: Robinhood Chain, id
4663. Live contract addresses at/v1/config.
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:
-
Local MCP package
(
@epsilon-exchange/mcp) — signs and submits for you; the private key never leaves your machine. Recommended for AI agents. See the MCP guide. -
SDKs —
@epsilon-exchange/sdk(TypeScript) andepsilon-exchange(Python): a thin /v1 client plus local EIP-712 order signing. One signing implementation, cross-verified against the on-chain verifier in three languages. -
CLI —
npx @epsilon-exchange/cli: the SDK as shell commands (quote,order,cancel,orders,portfolio,approve,tokens). Symbols resolve to addresses, amounts are human units, orders confirm on a terminal (--yesfor cron),--jsoneverywhere. Same env vars as the MCP server (EPSILON_API_KEY,EPSILON_WALLET_KEY,EPSILON_REFERRER,EPSILON_MAX_ORDER_USD). -
Raw HTTP — build and sign the order struct
yourself, then
POST /v1/orders. The full schema, maker-traits bit layout, and fee-leg rules are in the API reference. Fee fields must exactly match thefeeLegsserved byGET /v1/routefor the same wallet and the sameorderType— fees are per order-kind × token-class cell.
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.
|