Webhook-Implementierungsleitfaden

Registrieren Sie eine HTTPS-URL und erhalten Sie Echtzeit-Ereignisbenachrichtigungen mit HMAC-Signatur, wenn Smart-Money-Signale ausgelöst werden – ohne Abfragen. Dieser Leitfaden behandelt Registrierung, Ereignisfilterung, Signaturüberprüfung und Wiederholungsverhalten.

Übersicht

Anstatt Abfragen /v1/confirm oder den Signalfeed zu nutzen, registrieren Sie einen Webhook und die Smart Money API sendet ein Ereignis an Ihren Endpunkt, sobald ein passendes Signal ausgelöst wird. Jede Zustellung ist mit HMAC-SHA256 signiert, sodass Sie überprüfen können, dass sie tatsächlich von uns stammt.

Ausgehende Webhooks sind verfügbar in den Pro und Enterprise-Tarifen.

Webhook registrieren

Senden Sie eine POST-Anfrage an /v1/webhooks mit Ihrem API-Schlüssel im X-API-Key Header. Der Körper benötigt vier Felder:

FeldTypBeschreibung
urlstringHTTPS-Endpunkt zum Empfangen von Ereignissen (muss mit https://)
eventsarrayEreignisnamen zum Empfangen, z.B. ["HIGH","MEDIUM","VETO"] oder ["*"]
symbolsarraySymbole zum Filtern, z.B. ["BTC","ETH"] oder ["*"]
secretstringIhr Signaturgeheimnis – mindestens 16 Zeichen. Wird gehasht gespeichert; behalten Sie den Rohwert auf Ihrer Seite, um Signaturen zu überprüfen.
cURL
curl -X POST https://api.smartmoneyapi.com/v1/webhooks \ -H "X-API-Key: sm_your_key" \ -H "Content-Type: application/json" \ -d '{ "url": "https://yourapp.com/webhooks/smartmoney", "events": ["HIGH", "MEDIUM"], "symbols": ["BTC", "ETH"], "secret": "a-long-random-secret-16-plus-chars" }'
201 Created
{ "webhook_id": 42, "url": "https://yourapp.com/webhooks/smartmoney", "events": ["HIGH", "MEDIUM"], "symbols": ["BTC", "ETH"], "message": "Webhook registered. Test with POST /v1/webhooks/test" }

Ereignisfilter

Zustellungen werden für Ereignisse ausgelöst, deren Name und Symbol mit Ihrer Registrierung übereinstimmen. Typische Ereignisnamen sind die Bestätigungsvertrauensstufen – HIGH, MEDIUM, VETO – plus generische SIGNAL Ereignisse. Verwenden Sie ["*"] , um alle Ereignisse oder alle Symbole zu empfangen.

Zustellung & Header

Jede Zustellung ist eine HTTP POST mit einem JSON-Body und diesen Headern:

HeaderWert
X-SmartMoney-EventDer Ereignisname (z.B. HIGH)
X-SmartMoney-SignatureHMAC-SHA256-Hex-Digest des Anfrage-Bodys (siehe unten)
Content-Typeapplication/json
User-AgentSmartMoneyAPI-Webhook/1.0
Beispiel-Nutzlast
{ "event": "HIGH", "ts": "2026-07-01T18:22:05Z", "symbol": "BTC", "direction": "long", "confidence": "HIGH", "composite": 0.74, "webhook_id": 42 }

Antworten Sie mit einem beliebigen 2xx Status zur Bestätigung. Nicht-2xx (oder ein Timeout) löst einen Wiederholungsversuch aus.

Signaturüberprüfung

Die Signatur in X-SmartMoney-Signature ist ein HMAC-SHA256-Hex-Digest des Anfrage-Bodys. Der HMAC-Schlüssel ist der SHA-256-Hex-Digest des von Ihnen registrierten Geheimnisses (Ihr Rohgeheimnis wird bei uns nur gehasht gespeichert). Zur Überprüfung: Leiten Sie den Schlüssel ab, HMAC-den Sie den Roh-Body und vergleichen Sie mit einer zeitkonstanten Prüfung. Lehnen Sie jede Anfrage ab, die fehlschlägt.

Python (Flask-Empfänger)
import hashlib, hmac from flask import Flask, request, abort app = Flask(__name__) MY_SECRET = "a-long-random-secret-16-plus-chars" # der von Ihnen registrierte Wert @app.post("/webhooks/smartmoney") def receive(): raw = request.get_data() # exakte Bytes des Bodys sig = request.headers.get("X-SmartMoney-Signature", "") key = hashlib.sha256(MY_SECRET.encode()).hexdigest() # HMAC-Schlüssel = sha256(secret) hex expected = hmac.new(key.encode(), raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(expected, sig): abort(401) event = request.get_json() # ... handeln Sie auf event["event"], event["symbol"], event["composite"] ... return "", 200
Node.js (Express-Empfänger)
import crypto from "crypto"; import express from "express"; const app = express(); const MY_SECRET = "a-long-random-secret-16-plus-chars"; // Erfassen Sie den Roh-Body, damit die Signaturprüfung die exakten Bytes verwendet. app.post("/webhooks/smartmoney", express.raw({ type: "*/*" }), (req, res) => { const sig = req.get("X-SmartMoney-Signature") || ""; const key = crypto.createHash("sha256").update(MY_SECRET).digest("hex"); const expected = crypto.createHmac("sha256", key).update(req.body).digest("hex"); const ok = expected.length === sig.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig)); if (!ok) return res.status(401).end(); const event = JSON.parse(req.body.toString()); // ... handeln Sie auf event ... res.status(200).end(); });
Überprüfen Sie gegen den rohen, unparsed Anfrage-Body – das erneute Serialisieren von geparstem JSON kann die Byte-Reihenfolge oder Abstände ändern und die Prüfung brechen.

Wiederholungsversuche

Wenn Ihr Endpunkt keinen 2xx zurückgibt (oder ein Timeout auftritt – die Zustellungszeitüberschreitung beträgt 10s), wiederholt die Smart Money API bis zu 3 Mal mit exponentiellem Backoff (etwa 1s, 4s, dann 16s). Machen Sie Ihren Handler idempotent, sodass ein erneut zugestelltes Ereignis sicher zweimal verarbeitet werden kann.

Eingehende Webhooks (TradingView)

Getrennt davon können Sie eine eingehende Warnung an uns senden. POST /v1/tradingview/webhook empfängt eine TradingView-Warnung, führt sie durch /confirm, und gibt die Bestätigung zurück. Da TradingView keine benutzerdefinierten Header senden kann, authentifiziert es sich über ein secret Feld im JSON-Body (nicht X-API-Key). Senden Sie secret, symbol, und direction (long/short); optional timeframe, strategy, und price.

Bereit für Echtzeit-Signale?

Holen Sie sich Ihren API-Schlüssel
Kostenlos starten – 200 Aufrufe/Tag, keine Karte

Erhalten Sie Live-Whale-Flow, Funding, Open Interest und On-Chain-Daten über 3 Börsen von einer API. Kostenlose Stufe, keine Kreditkarte, jederzeit upgraden.

Kostenlos starten →
Probieren Sie die Live-API-Konsole → (kein Konto benötigt)
Holen Sie sich Ihren API-Schlüssel in 30 Sekunden

Bereit zum Bauen? Holen Sie sich einen kostenlosen API-Schlüssel (200 Aufrufe/Tag, keine Karte) und starten Sie mit dem Abrufen von Live-Whale-, Funding- und On-Chain-Daten.

Holen Sie sich Ihren API-Schlüssel →