EventTrader

Prediction Market Platform
PAPER
Menu
Trade
Home AI Hedge Fund Perpetuals Markets Winner Takes All Swap
Agents
AI Bots (Blue Team) AI Bots (Red Team) AgentBook Marketplace Algos, Data & Models Skills & Tools Backtest Labs Launchpad
Compete
Competitions Backtest Leaderboard Feature Leaderboard Robinhood Testnet Bots VAIX Leaderboard
Community
Revenue Share Voting Rewards
Explore
VAIX Dashboard Satellite Intelligence Buy ETLP Trade ETLP Analytics
Learn
Documentation How It Works API
PAPER TRADING MODE — Enable real trading on your Account page
Back
REST + MCP

ET10 Exchange API

Exchange 100+ cryptos for ET10 Liquidity Stream Tokens. Built for AI agents, DCA bots, and programmatic trading.

8
REST Endpoints
100+
Supported Tokens
6
MCP Tools
7
Chains

Quick Start

# Buy ET10 — single call, get deposit address
curl -X POST https://cymetica.com/api/v1/rst/buy-et10 \
  -H "X-API-Key: evt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipient_address":"0xYOUR_WALLET","token_symbol":"USDC"}'

# Response: { deposit_address, intent_id, chain, instructions }
# Send USDC to deposit_address → ET10 delivered automatically
import requests

# Buy ET10 in one call
resp = requests.post("https://cymetica.com/api/v1/rst/buy-et10",
    headers={"X-API-Key": "evt_YOUR_KEY"},
    json={
        "recipient_address": "0xYOUR_WALLET",
        "token_symbol": "USDC"
    }).json()

print(f"Send USDC to: {resp['deposit_address']}")
print(f"ET10 will be delivered to: {resp['recipient_address']}")
# Send USDC → ET10 delivered automatically
// Buy ET10 in one call
const resp = await fetch("https://cymetica.com/api/v1/rst/buy-et10", {
  method: "POST",
  headers: {
    "X-API-Key": "evt_YOUR_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    recipient_address: "0xYOUR_WALLET",
    token_symbol: "USDC"
  })
}).then(r => r.json());

console.log(`Send USDC to: ${resp.deposit_address}`);
// Send USDC → ET10 delivered automatically

Authentication

Most ET10 exchange endpoints are public (token list, quotes, deposit addresses, status checks).

For programmatic purchases, use an API Key via the X-API-Key header. This skips CSRF/Origin validation — perfect for bots, AI agents, and automated systems.

# API Key auth (recommended for bots/agents/SDKs)
curl -X POST https://cymetica.com/api/v1/rst/buy-et10 \
  -H "X-API-Key: evt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipient_address":"0x...","token_symbol":"ETH"}'

# Bearer auth (legacy — still supported for deposit-intent)
curl -X POST https://cymetica.com/api/v1/rst/deposit-intent \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{"rst_address":"0x...","token_symbol":"ETH"}'

Get your API key from /account → API Keys.

Buy ET10 — Single Call

The fastest way to buy ET10 programmatically. One call, no registration required. Works with API key (bots/agents) or CSRF token (browser).

POST /api/v1/rst/buy-et10 Register recipient & get deposit address

Returns a deposit address. Send crypto to it and ET10 tokens are delivered to your wallet automatically. Auto-approved for deposits under $100.

Request Body

recipient_addressstringEVM wallet (0x..., 42 chars) to receive ET10
token_symbolstringToken to pay with (ETH, USDC, BTC, etc.)

Response

statusstring"ok"
intent_idintegerDeposit intent ID for tracking
deposit_addressstringSend your crypto here
recipient_addressstringWhere ET10 will be delivered
chainstringBlockchain name
chain_idintegerEVM chain ID
et10_pricestring"$0.001" per token
instructionsstringHuman-readable next step
curl -X POST https://cymetica.com/api/v1/rst/buy-et10 \
  -H "X-API-Key: evt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient_address": "0xYourWalletAddress",
    "token_symbol": "USDC"
  }'
import requests

resp = requests.post(
    "https://cymetica.com/api/v1/rst/buy-et10",
    headers={"X-API-Key": "evt_YOUR_KEY"},
    json={
        "recipient_address": "0xYourWalletAddress",
        "token_symbol": "USDC"
    }
).json()

print(f"Send USDC to: {resp['deposit_address']}")
print(f"Chain: {resp['chain']} (ID: {resp['chain_id']})")
print(resp["instructions"])
const resp = await fetch("https://cymetica.com/api/v1/rst/buy-et10", {
  method: "POST",
  headers: {
    "X-API-Key": "evt_YOUR_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    recipient_address: "0xYourWalletAddress",
    token_symbol: "USDC"
  })
}).then(r => r.json());

console.log(`Send USDC to: ${resp.deposit_address}`);
console.log(resp.instructions);
// MCP Tool: et_buy_et10
{
  "name": "et_buy_et10",
  "arguments": {
    "recipient_address": "0xYourWalletAddress",
    "token_symbol": "USDC"
  }
}

// Response:
// { "success": true, "deposit_address": "0x...", "instructions": "..." }

Example Response

{
  "status": "ok",
  "intent_id": 376,
  "recipient_address": "0xYourWalletAddress",
  "deposit_address": "0xDepositAddressReturnedByAPI",
  "token_symbol": "USDC",
  "chain": "Ethereum",
  "chain_id": 1,
  "et10_price": "$0.001",
  "instructions": "Send USDC to 0x9378... — ET10 will be delivered to 0xYour... automatically."
}

Public Endpoints

No authentication required. Use these for token discovery, price quotes, deposit addresses, and status tracking.

GET /api/v1/rst/supported-tokens List all accepted tokens

Returns all supported tokens with metadata including chain, address, decimals, and logo URL. ET10 price is fixed at $0.001.

Response Fields

tokensarrayArray of token objects
tokens[].symbolstringToken symbol (e.g., "ETH", "BTC")
tokens[].namestringFull token name
tokens[].chainstringBlockchain network
tokens[].chain_idintegerEVM chain ID
tokens[].addressstringContract address (null for native tokens)
tokens[].logoUrlstringToken logo image URL
rst_price_usdstringCurrent ET10 price (always "0.001")
curl https://cymetica.com/api/v1/rst/supported-tokens
import requests
tokens = requests.get("https://cymetica.com/api/v1/rst/supported-tokens").json()
for t in tokens["tokens"][:5]:
    print(f"{t['symbol']:6s} {t['name']:20s} {t['chain']}")
const data = await fetch("https://cymetica.com/api/v1/rst/supported-tokens").then(r => r.json());
data.tokens.slice(0, 5).forEach(t =>
  console.log(`${t.symbol} - ${t.name} (${t.chain})`)
);

Example Response

{
  "tokens": [
    {
      "rank": 1,
      "symbol": "BTC",
      "name": "Bitcoin",
      "address": "0x...",
      "decimals": 8,
      "chain": "Ethereum",
      "chain_id": 1,
      "category": "major",
      "logoUrl": "https://s2.coinmarketcap.com/static/img/coins/64x64/1.png"
    },
    ...
  ],
  "rst_price_usd": "0.001"
}
GET /api/v1/rst/exchange-address/{token_symbol} Get deposit address for a token

Returns the platform's collection address for the token's chain. Send crypto to this address and ET10 is sent back to the sender's address automatically.

Path Parameters

token_symbolstringToken symbol (e.g., "ETH", "BTC", "SOL")

Response Fields

deposit_addressstringAddress to send tokens to
chainstringChain name (e.g., "Ethereum", "Base")
chain_idintegerEVM chain ID
rst_price_usdstringCurrent ET10 price
curl https://cymetica.com/api/v1/rst/exchange-address/ETH
addr = requests.get("https://cymetica.com/api/v1/rst/exchange-address/ETH").json()
print(f"Send ETH to: {addr['deposit_address']} on {addr['chain']}")
const addr = await fetch("https://cymetica.com/api/v1/rst/exchange-address/ETH").then(r => r.json());
console.log(`Send ETH to: ${addr.deposit_address} on ${addr.chain}`);
GET /api/v1/rst/{address}/quote-token Quote token-to-ET10 conversion

Calculate how many ET10 you'll receive for a given token amount. Uses live CoinGecko prices.

Path Parameters

addressstringET10 token contract address

Query Parameters

tokenstringToken symbol (e.g., "ETH", "BTC", "USDC")
amountstringAmount of token to exchange

Response Fields

token_symbolstringToken symbol
token_amountstringInput amount
token_price_usdstringCurrent token price in USD
usd_valuestringTotal USD value of the input
rst_amountstringET10 tokens you'll receive
rst_price_usdstringET10 price (always "0.001")
curl "https://cymetica.com/api/v1/rst/0xRST_ADDRESS/quote-token?token=ETH&amount=1.5"
quote = requests.get(
    "https://cymetica.com/api/v1/rst/0xRST_ADDRESS/quote-token",
    params={"token": "ETH", "amount": "1.5"}
).json()
print(f"1.5 ETH (${quote['usd_value']}) = {quote['rst_amount']} ET10")
const quote = await fetch(
  "https://cymetica.com/api/v1/rst/0xRST_ADDRESS/quote-token?token=ETH&amount=1.5"
).then(r => r.json());
console.log(`1.5 ETH ($${quote.usd_value}) = ${quote.rst_amount} ET10`);

Example Response

{
  "token_symbol": "ETH",
  "token_amount": "1.5",
  "token_price_usd": "3200.50",
  "usd_value": "4800.75",
  "rst_amount": "4800750",
  "rst_price_usd": "0.001"
}
GET /api/v1/rst/deposit-status/{token_symbol} Check deposit status (public)

Check the status of the most recent deposit for a token. Returns status from the last 2 hours. Use this for polling after sending crypto.

Path Parameters

token_symbolstringToken symbol to check (e.g., "ETH")

Response Fields

statusstring"waiting", "pending", "converting", "completed", or "failed"
token_symbolstringToken symbol
rst_receivedstringET10 amount received (when completed)
tx_hashstringTransaction hash (when completed)
curl https://cymetica.com/api/v1/rst/deposit-status/ETH
status = requests.get("https://cymetica.com/api/v1/rst/deposit-status/ETH").json()
print(f"Status: {status['status']}")
if status.get("tx_hash"):
    print(f"Tx: https://etherscan.io/tx/{status['tx_hash']}")
const status = await fetch("https://cymetica.com/api/v1/rst/deposit-status/ETH").then(r => r.json());
console.log(`Status: ${status.status}`);
if (status.tx_hash) console.log(`Tx: https://etherscan.io/tx/${status.tx_hash}`);

Authenticated Endpoints

These endpoints require a Bearer token. Used for creating deposit intents and tracking individual user deposits.

POST /api/v1/rst/deposit-intent Create a deposit intent AUTH

Creates a deposit intent and returns the collection address. The platform watches for deposits and automatically sends ET10 back to the sender.

Request Body

rst_addressstringET10 token contract address
token_symbolstringToken symbol to deposit (e.g., "ETH", "BTC")

Response Fields

intent_idintegerUnique intent identifier
deposit_addressstringAddress to send tokens to
chainstringChain name
chain_idintegerEVM chain ID
statusstringInitial status ("pending")
curl -X POST https://cymetica.com/api/v1/rst/deposit-intent \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rst_address":"0xRST_ADDRESS","token_symbol":"ETH"}'
intent = requests.post(
    "https://cymetica.com/api/v1/rst/deposit-intent",
    headers={"Authorization": "Bearer YOUR_TOKEN"},
    json={"rst_address": "0xRST_ADDRESS", "token_symbol": "ETH"}
).json()
print(f"Send ETH to: {intent['deposit_address']}")
const intent = await fetch("https://cymetica.com/api/v1/rst/deposit-intent", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_TOKEN",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ rst_address: "0xRST_ADDRESS", token_symbol: "ETH" })
}).then(r => r.json());
console.log(`Send ETH to: ${intent.deposit_address}`);
GET /api/v1/rst/deposit-intent/{intent_id} Check intent status AUTH

Check the status of a specific deposit intent. Users can only view their own intents.

curl https://cymetica.com/api/v1/rst/deposit-intent/42 \
  -H "Authorization: Bearer YOUR_TOKEN"
status = requests.get(
    "https://cymetica.com/api/v1/rst/deposit-intent/42",
    headers={"Authorization": "Bearer YOUR_TOKEN"}
).json()
print(f"Intent #{status['id']}: {status['status']}")
GET /api/v1/rst/deposit-intents List all user intents AUTH

List all deposit intents for the authenticated user (most recent first, max 50).

curl https://cymetica.com/api/v1/rst/deposit-intents \
  -H "Authorization: Bearer YOUR_TOKEN"

Status Tracking

After sending crypto to the deposit address, poll the status endpoint to track progress. The state machine flows through these states:

waiting pending converting completed
failed
waitinginitialNo deposit detected yet. Keep polling.
pendingdetectedDeposit detected on-chain, awaiting confirmations.
convertingprocessingConfirmed. Converting to USD value, calculating ET10 amount.
completedsuccessET10 sent to sender's address. rst_received and tx_hash populated.
failederrorConversion failed. Check error details. Deposited crypto is safe and can be recovered.

Polling Example

import time, requests

BASE = "https://cymetica.com/api/v1/rst"

# Poll every 10 seconds until completed or failed
while True:
    status = requests.get(f"{BASE}/deposit-status/ETH").json()
    print(f"Status: {status['status']}")

    if status["status"] == "completed":
        print(f"Received {status['rst_received']} ET10!")
        print(f"Tx: https://etherscan.io/tx/{status['tx_hash']}")
        break
    elif status["status"] == "failed":
        print("Deposit failed — contact support")
        break

    time.sleep(10)

MCP Integration

6 MCP tools for AI agents using any MCP-compatible client (Claude Code, Cursor, IDE plugins, etc.).

et_buy_et10Buy ET10 — single call, returns deposit address. Recommended for bots.
et_rst_list_tokensList all 100+ supported tokens with metadata
et_rst_quoteGet a price quote for token → ET10 conversion
et_rst_deposit_addressGet deposit address for a specific token
et_rst_check_statusCheck deposit/exchange status for a token
et_rst_create_intentCreate a deposit intent (legacy, auth required)

Claude Desktop Configuration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "event-trader": {
      "command": "uvx",
      "args": ["event-trader-mcp"],
      "env": {
        "ET_API_URL": "https://cymetica.com",
        "ET_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Once configured, ask Claude: "List all tokens I can exchange for ET10" or "Quote me 0.1 ETH to ET10".

DCA Bot Example

A complete Python script that performs dollar-cost averaging into ET10 with any supported token.

#!/usr/bin/env python3
"""ET10 DCA Bot — automated recurring purchases."""

import time
import requests

BASE = "https://cymetica.com/api/v1/rst"
RST_ADDRESS = "0xYOUR_RST_ADDRESS"
TOKEN = "ETH"
API_KEY = "YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

def buy_et10():
    # 1. Get a quote
    quote = requests.get(
        f"{BASE}/{RST_ADDRESS}/quote-token",
        params={"token": TOKEN, "amount": "0.01"}
    ).json()
    print(f"Quote: 0.01 {TOKEN} = {quote['rst_amount']} ET10 (${quote['usd_value']})")

    # 2. Create deposit intent
    intent = requests.post(
        f"{BASE}/deposit-intent",
        headers=HEADERS,
        json={"rst_address": RST_ADDRESS, "token_symbol": TOKEN}
    ).json()
    print(f"Deposit address: {intent['deposit_address']} ({intent['chain']})")

    # 3. Send crypto to the deposit address (use your wallet/web3 library here)
    print(f"Send 0.01 {TOKEN} to {intent['deposit_address']}")

    # 4. Poll for completion
    for _ in range(60):  # 10 minutes max
        status = requests.get(f"{BASE}/deposit-status/{TOKEN}").json()
        if status["status"] == "completed":
            print(f"Received {status['rst_received']} ET10!")
            print(f"Tx: https://etherscan.io/tx/{status['tx_hash']}")
            return True
        elif status["status"] == "failed":
            print("Failed — check deposit")
            return False
        time.sleep(10)
    return False

if __name__ == "__main__":
    buy_et10()

Troubleshooting

Error Codes

CodeMeaningAction
400Invalid token symbol or amountCheck supported tokens list
400Token coming soonChain not yet supported for this token
401UnauthorizedAdd Bearer token for auth-required endpoints
404ET10 not foundVerify the ET10 contract address
429Rate limitedWait and retry. Public: 30/min, Intents: 10/min
503Exchange address unavailableChain wallet not configured. Try again later.
503Price unavailableCoinGecko price feed down. Retry in 60s.

Rate Limits

EndpointLimitWindow
supported-tokensNo limit
exchange-address30 requestsPer IP per minute
quote-token30 requestsPer IP per minute
deposit-status60 requestsPer IP per minute
deposit-intent10 requestsPer user per minute