Webhooks
Unter API & Konto hinterlegst du eine https-Adresse. Wir senden dorthin einen POST mit JSON, sobald sich der Status einer SMS ändert:
{"event":"message.delivered","id":123,"to":"+491711234567","status":"delivered",
"error":null,"sent_at":"2026-10-19T09:15:02+02:00","delivered_at":"2026-10-19T09:15:09+02:00"}
- Ereignisse:
message.sent,message.delivered,message.failedund zum Testenwebhook.test. - Antworte mit einem 2xx-Status; sonst versuchen wir es bis zu 3-mal (nach 1, 5 und 30 Minuten).
- Die Adresse muss öffentlich erreichbar sein (https, Port 443/8443). Weiterleitungen folgen wir nicht.
Signatur prüfen
Damit nur wir deinen Webhook aufrufen können, signieren wir jede Anfrage: Header X-SMSForge-Timestamp und X-SMSForge-Signature: sha256=… – HMAC-SHA256 über Timestamp + "." + Rohdaten mit deinem Secret.
$body = file_get_contents('php://input');
$ts = $_SERVER['HTTP_X_SMSFORGE_TIMESTAMP'];
$sig = $_SERVER['HTTP_X_SMSFORGE_SIGNATURE'];
$ok = hash_equals('sha256=' . hash_hmac('sha256', $ts . '.' . $body, $SECRET), $sig)
&& abs(time() - (int) $ts) < 300; // Replay-Schutz