webhooks
Payload-Schema
Das JSON-Schema, das Spectra für Webhook-getriebene Orders akzeptiert.
Spectra akzeptiert eine einzige JSON-Form auf Webhook-POSTs. Alles andere ergibt 400 Bad Request mit einem Schema-Fehler-Body.
Minimal-Order
{
"action": "buy",
"symbol": "BTCUSDT",
"qty": 1
}
Routet einen Market-Buy. Die Broker-Verbindung wird durch das Secret bestimmt, mit dem die Request signiert wurde.
Vollschema
{
"action": "buy" | "sell" | "close" | "flatten",
"symbol": "string",
"qty": number,
"type": "market" | "limit" | "stop" | "stop_limit"
| "trailing_stop", // Default: market
"limit_price": number, // Pflicht für limit / stop_limit
"stop_price": number, // Pflicht für stop / stop_limit
"trail_offset": number, // Pflicht für 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" // dein Idempotency-Key (≤ 64 Zeichen)
}
flatten ignoriert qty und schließt alles für das Symbol.
close schließt eine bestimmte Menge (Default = volle Position).
Idempotency
Wenn client_id gesetzt ist, dedupliziert Spectra. Eine erneute
POST mit derselben client_id binnen 24 h liefert 200 OK mit dem
ursprünglichen Ergebnis statt einer Doppel-Order. Empfohlen für jede
Alert-Quelle, die selbst Retries macht (die meisten tun das — setze
eine eindeutige client_id pro beabsichtigter Order).
Antwort
202 Accepted → Body: { "order_id": "...", "client_id": "..." }
400 Bad Request → Schema- oder Geschäftsregel-Fehler (Loss-Cap, ...)
401 Unauthorized → Signatur/Timestamp ungültig
403 Forbidden → IP nicht in Allowlist oder Secret pausiert
429 Too Many Requests → Rate-Limit (1 Req/Sek/Secret Default)