webhooks
Schéma du payload
Le schéma JSON que Spectra accepte pour les ordres pilotés par webhook.
Spectra accepte une seule forme JSON sur les POSTs webhook. Tout autre forme renvoie 400 Bad Request avec un body d'erreur de schéma.
Ordre minimal
{
"action": "buy",
"symbol": "BTCUSDT",
"qty": 1
}
Route un market buy. La connexion broker est décidée par le secret avec lequel la requête a été signée.
Schéma complet
{
"action": "buy" | "sell" | "close" | "flatten",
"symbol": "string",
"qty": number,
"type": "market" | "limit" | "stop" | "stop_limit"
| "trailing_stop", // défaut : market
"limit_price": number, // requis pour limit / stop_limit
"stop_price": number, // requis pour stop / stop_limit
"trail_offset": number, // requis pour trailing_stop
"tp": number | { "value": number, "kind": "abs" | "pct" | "atr" },
"sl": number | { "value": number, "kind": "abs" | "pct" | "atr" },
"tif": "day" | "gtc" | "ioc" | "fok", // défaut : day
"client_id": "string" // votre clé d'idempotency (≤ 64 chars)
}
flatten ignore qty et clôt tout pour le symbole.
close clôt une quantité spécifique (défaut = position complète).
Idempotency
Si client_id est défini, Spectra dédoublonne. Re-POSTer le même
client_id dans les 24 h renvoie 200 OK avec le résultat original
plutôt que de placer un ordre dupliqué. Recommandé pour toute source
d'alertes susceptible de retenter d'elle-même (la plupart le font —
utilisez un client_id unique par ordre voulu).
Réponse
202 Accepted → body : { "order_id": "...", "client_id": "..." }
400 Bad Request → schéma ou règle métier (plafond perte, ...)
401 Unauthorized → signature / timestamp invalides
403 Forbidden → IP hors allowlist, ou secret en pause
429 Too Many Requests → rate-limit (1 req/sec/secret par défaut)