POST /v1/signals
Submit a single trading signal. The signal is attributed to the desk that owns the API key and stored.
POST https://api.traderz.dev/v1/signalsAuthorization: Bearer <api_key>Content-Type: application/jsonRequest body
Section titled “Request body”| Field | Type | Required | Description |
|---|---|---|---|
source | string | yes | Origin venue: polymarket, binance, or ibkr. |
type | string | yes | Instrument class: prediction_market, crypto, or stock. |
symbol | string | yes | Instrument symbol, e.g. ETH/USDT, TSLA, BTC 15min. |
side | string | yes | open or close. |
direction | string | no | long, short, buy, or sell. |
price | number | no | Execution/limit price. |
quantity | number | no | Size. |
signal_time | integer | no | Your event time, epoch milliseconds. |
client_signal_id | string | no | Idempotency key — see Idempotency. |
metadata | object | no | Arbitrary JSON (e.g. take-profit / stop-loss). |
{ "source": "binance", "type": "crypto", "symbol": "ETH/USDT", "side": "open", "direction": "long", "price": 3450.5, "quantity": 1.5, "signal_time": 1716500000000, "client_signal_id": "abc-123", "metadata": { "tp": 3600, "sl": 3300 }}Responses
Section titled “Responses”| Status | When | Body |
|---|---|---|
201 Created | Stored | { "id": "...", "received_at": 1716500000123, "deduped": false } |
200 OK | Duplicate client_signal_id | { "id": "...", "deduped": true } |
422 Unprocessable Entity | Validation failed | { "error": "validation_failed", "fields": { ... } } |
400 Bad Request | Malformed JSON | { "error": "bad_request", "message": "..." } |
401 Unauthorized | Missing/invalid key | { "error": "unauthorized", "message": "..." } |
id— server-generated, time-sortable identifier for the stored signal.received_at— server receive time, epoch milliseconds (UTC). Present only on201.deduped—truewhen the request matched a previousclient_signal_id.
See Errors for the full error model, and the machine-readable OpenAPI spec.