ET10 Exchange API
Exchange 100+ cryptos for ET10 Liquidity Stream Tokens. Built for AI agents, DCA bots, and programmatic trading.
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).
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
Response
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.
Returns all supported tokens with metadata including chain, address, decimals, and logo URL. ET10 price is fixed at $0.001.
Response Fields
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"
}
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
Response Fields
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}`);
Calculate how many ET10 you'll receive for a given token amount. Uses live CoinGecko prices.
Path Parameters
Query Parameters
Response Fields
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"
}
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
Response Fields
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.
Creates a deposit intent and returns the collection address. The platform watches for deposits and automatically sends ET10 back to the sender.
Request Body
Response Fields
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}`);
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']}")
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:
rst_received and tx_hash populated.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.).
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
| Code | Meaning | Action |
|---|---|---|
| 400 | Invalid token symbol or amount | Check supported tokens list |
| 400 | Token coming soon | Chain not yet supported for this token |
| 401 | Unauthorized | Add Bearer token for auth-required endpoints |
| 404 | ET10 not found | Verify the ET10 contract address |
| 429 | Rate limited | Wait and retry. Public: 30/min, Intents: 10/min |
| 503 | Exchange address unavailable | Chain wallet not configured. Try again later. |
| 503 | Price unavailable | CoinGecko price feed down. Retry in 60s. |
Rate Limits
| Endpoint | Limit | Window |
|---|---|---|
| supported-tokens | No limit | — |
| exchange-address | 30 requests | Per IP per minute |
| quote-token | 30 requests | Per IP per minute |
| deposit-status | 60 requests | Per IP per minute |
| deposit-intent | 10 requests | Per user per minute |