webhooks
Схема payload
JSON-схема, которую Spectra принимает для ордеров, управляемых вебхуком.
Spectra принимает единственную форму JSON в POST-запросах вебхука. Всё остальное возвращает 400 Bad Request с телом, содержащим ошибку схемы.
Минимальный ордер
{
"action": "buy",
"symbol": "BTCUSDT",
"qty": 1
}
Направляет рыночную покупку. Соединение с брокером определяется тем, каким секретом был подписан запрос.
Полная схема
{
"action": "buy" | "sell" | "close" | "flatten",
"symbol": "string",
"qty": number,
"type": "market" | "limit" | "stop" | "stop_limit"
| "trailing_stop", // default: market
"limit_price": number, // required for limit / stop_limit
"stop_price": number, // required for stop / stop_limit
"trail_offset": number, // required for trailing_stop
"tp": number | { "value": number, "kind": "abs" | "pct" | "atr" },
"sl": number | { "value": number, "kind": "abs" | "pct" | "atr" },
"tif": "day" | "gtc" | "ioc" | "fok", // default: day
"client_id": "string" // your idempotency key (≤ 64 chars)
}
flatten игнорирует qty и закрывает всё по символу.
close закрывает указанное количество (по умолчанию = полная позиция).
Идемпотентность
Если задан client_id, Spectra дедуплицирует. Повторная отправка того
же client_id в течение 24 ч возвращает 200 OK с исходным
результатом вместо размещения дублирующего ордера. Рекомендуется для
любого источника алертов, который может повторять запросы сам
(большинство так делает — задавайте уникальный client_id на каждый
предполагаемый ордер).
Ответ
202 Accepted → body: { "order_id": "...", "client_id": "..." }
400 Bad Request → schema or business-rule failure (loss-cap breach, ...)
401 Unauthorized → signature/timestamp invalid
403 Forbidden → IP not in allowlist, or secret paused
429 Too Many Requests → rate-limit (1 req/sec/secret default)