curl --request POST \
--url https://mcp.echozero.app/api/public/agent-signals/{agentId} \
--header 'Content-Type: application/json' \
--header 'X-EZ-Signature: <x-ez-signature>' \
--header 'X-EZ-Timestamp: <x-ez-timestamp>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>' \
--data '{}'{
"success": true,
"data": {
"outcome": "matched",
"signalId": "<string>",
"status": "<string>",
"skipReason": "<string>",
"executionResult": {}
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Post a signed trading signal for a developer agent (webhook ingress)
Authenticates via per-agent signing secret (X-EZ-* headers). Accepts natural-language text, full structured JSON with eventType (#1098), or legacy action/tokenAddress. See docs/INBOUND_AGENT_WEBHOOK.md.
curl --request POST \
--url https://mcp.echozero.app/api/public/agent-signals/{agentId} \
--header 'Content-Type: application/json' \
--header 'X-EZ-Signature: <x-ez-signature>' \
--header 'X-EZ-Timestamp: <x-ez-timestamp>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>' \
--data '{}'{
"success": true,
"data": {
"outcome": "matched",
"signalId": "<string>",
"status": "<string>",
"skipReason": "<string>",
"executionResult": {}
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Headers
Lowercase hexadecimal HMAC-SHA256(secret, ${X-EZ-Timestamp}.${canonicalJsonBody})
"7c3bdb3e8f94c2eab5d2c4d4c3c3c3c4c4c9d09e89e4c2eab5d2c4d4f3f2f1ee"
Unix time in seconds (decimal integer). Compared server-side with ±5 minute skew tolerance.
"1715000000"
Required for API-key authenticated requests. HMAC-SHA256(secretKey, timestamp + METHOD + path + body) as lowercase hex. Omit only for JWT/OAuth session tokens or public routes.
Required with x-signature. Epoch milliseconds; rejected if drift exceeds 5 minutes. Omit only for JWT/OAuth session tokens or public routes.
Path Parameters
Body
Natural-language signal line. Mutually exclusive with structured JSON fields.
1 - 8000"BUY SOL $500 TP 180 SL 165"
Schema version (currently 1).
Required dedupe key for structured event payloads.
128ISO timestamp; server rejects stale market signals (>5 min).
Structured event lifecycle type. When set, activates the full JSON schema path.
trade_idea, buy, scale_in, sell, partial_sell, amend, breakeven, cancel, position_update, trade_review solana, hyperliquid Show child attributes
Show child attributes
Display symbol (e.g. SOL, BTC).
Optional TTL ISO timestamp.
long, short spot, perp, virtual Perp leverage override.
market, limit Show child attributes
Show child attributes
fixed, dynamic Show child attributes
Show child attributes
tradeId or original idempotencyKey for lifecycle events.
tp_hit, sl_hit, time_stop, manual, ai_decision Partial close % (partial_sell only).
Show child attributes
Show child attributes
trade_idea: optional link id for later entry.
position_update: current unrealized P&L %.
trade_review: related trade signal id.
Legacy structured action when eventType is omitted.
buy, sell Legacy Solana mint (also accepted inside instrument).
USD allocation (scaled server-side per subscriber).
low, medium, high Arbitrary structured metadata to persist on the trade signal.
Human-readable rationale; required for full-schema events.
40000 <= x <= 1