Echtzeit-Webhooks — Zustellberichte, Antworten, Posteingang, Opt-outs und mehr.

Was sind Webhooks?

Webhooks sind eine Erweiterung einer API, aber anstatt dass Ihr Code Daten von Smstools anfordert, sendet Smstools Daten an Sie. Die Daten kommen in einer Webanfrage bei Ihrer Anwendung an. Webhooks werden auch verwendet, um Ihre Anwendung über Ereignisse wie einen eingehenden Anruf oder eine Nachricht zu benachrichtigen. Da die Smstools-Server in der Lage sein müssen, Daten an Ihre Anwendung über Webhooks zu senden, müssen Sie einen Webserver einrichten, um die eingehenden HTTP-Anfragen zu empfangen. Sie müssen auch die URL jedes Webhooks auf Ihrem Webserver angeben, damit Daten an jedes gesendet werden können.

  • Echtzeit-Zustellung
  • Sicherer Endpoint
POST POST → Ihr Endpoint
{  "webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",  "webhook_type": "delivery_report",  "username": "myusername",  "timezone": "Europe/Brussels",  "method": "POST",  "created": "2026-01-01 09:00:06",  "created_utc": "2026-01-01 08:00:06",  "message": {    "messageid": "e1qk89exbzgf6fzfunceym2sd67h88",    "datetime": "2026-01-01 09:00:00",    "content": "here comes your message body",    "sender": "yoursender",    "receiver": "32470123456",    "reference": "yourref",    "message_type": "sms",    "delivery_code": "1",    "delivery_status": "delivered",    "delivery_status_datetime": "2026-01-01 09:00:05",    "cost": 1,    "cost_type": "credits"  }}
Beispiel-Payload
EU-Support
DSGVO-konform
EU-Server · 99,97% Uptime
Echtzeit-Push

Typ Beschreibung
delivery_report Bericht über die Zustellung nach jeder gesendeten Nachricht. Manchmal können zwei Webhooks vorhanden sein: zunächst ein 'eingereichter' Status und später ein 'zugestellter' oder 'nicht zugestellter' Status. Manchmal stehen zusätzliche Details zur Verfügung, wenn die Nachricht nicht zugestellt wurde.
read_report Lesebestätigung nachdem die Nachricht gelesen wurde. Eine Lesebestätigung ist nur für Social Messaging verfügbar oder durch Verwendung des Links 'Eine Lesebestätigung anfordern'.
inbox_message Eingehende Nachricht. Nur verfügbar, wenn Sie Social Messaging oder eine virtuelle Nummer verwenden.
call_forwarding Anrufweiterleitung. Nur verfügbar, wenn Sie Social Messaging oder eine virtuelle Nummer verwenden.
add_contact 1 Kontakt wurde über die API oder Software hinzugefügt
delete_contact 1 Kontakt wurde über die API oder Software entfernt
add_group Eine Gruppe wurde über die API oder Software hinzugefügt
delete_group Eine Gruppe wurde über die API oder Software entfernt
add_optout Ein Kontakt wurde über die API oder Software zur Opt-out-Liste hinzugefügt
delete_optout Ein Kontakt wurde über die API oder Software aus der Opt-out-Liste entfernt
funds_purchased Das Konto hat eine neue Guthabenbestellung abgeschlossen
insufficient_funds Das Konto hat kein verfügbares Guthaben mehr
email2sms_received Email2Sms hat eine E-Mail empfangen und versucht, sie per SMS zu senden
api_error Eine API-Anfrage ist fehlgeschlagen. Enthält die Fehlermeldung, den Fehlercode und den HTTP-Status der fehlgeschlagenen Anfrage.

Code Status Erklärung
0 SUBMITTED Diese Nachricht wurde mit dem Operator zugestellt, aber wir haben keinen Zustellungsbericht erhalten.
1 DELIVERED Diese Nachricht wurde erfolgreich zugestellt.
2 NOT DELIVERED Diese Nachricht wurde nicht zugestellt. Möglicher Grund: Empfänger befindet sich außerhalb des Bereichs des Netzwerks, Netzwerkprobleme, Empfänger im Ausland.
3 BUFFERED Diese Nachricht wurde mit dem Operator zugestellt, aber nicht mit dem Empfänger.
4 REJECTED Diese Nachricht wurde vom Operator abgelehnt.
5 REJECTED Erweiterte Informationen unten!
9 UNKNOWN Für diese Nachricht liegen keine Zustellungsberichte vor.

Nachfolgend eine Übersicht der möglichen Fehlercodes, die Sie möglicherweise erhalten.

Status Erklärung
10 Empfängernummer ist ungültig oder unbekannt
11 Empfänger befindet sich vorübergehend außerhalb des Bereichs des Netzwerkbetreibers
12 Telefonbezogenes Problem.
13 Problem mit dem Netzwerk des Betreibers
14 Nachricht abgelaufen - Grund unbekannt
15 Empfänger ist auf einer schwarzen Liste verzeichnet
16 Problem mit dem Nachrichteninhalt
17 Empfänger kann nicht ermittelt werden
18 Der Operator hat dies aufgrund von Spam abgelehnt
19 Abonnent kann keine Premiumnachrichten empfangen (vom Operator blockiert)

Status Erklärung
2000 INSUFFICIENT_FUNDS
2001 TOO_LONG
2002 TOO_SHORT
2003 TIMEOUT
2004 GATEWAY_ISSUES
2005 INVALID_SENDER
2006 INVALID_NUMBER
4000 UNKNOWN
4001 EMPTY_MESSAGE
4002 EMPTY_CLIENT
4003 LOCKED
4004 BLOCKED
4005 JOB_FAILED
4006 DUPLICATE
4007 INVALID_CONTENT

Wenn für Ihre Webhook-URL ein Signing Secret festgelegt ist, enthält jede Webhook-Anfrage die Header X-Smstools-Timestamp (Unix-Timestamp) und X-Smstools-Signature (Format: t={timestamp},v1={signature}).

Zur Überprüfung der Signatur: Verketten Sie den Timestamp, einen Punkt (.) und den rohen JSON-Body, berechnen Sie den HMAC SHA-256 dieser Zeichenkette mit Ihrem Signing Secret und vergleichen Sie das Ergebnis mit dem v1-Wert. Bei GET-Webhooks wird der Query-String anstelle des JSON-Bodys signiert.

POST /your/webhook/endpoint HTTP/1.1
Content-Type: application/json
X-Smstools-Timestamp: 1767254406
X-Smstools-Signature: t=1767254406,v1=20bb9bf973ab6471e64f88a73fa11926c882dba87234f6760b87b5cbb0bf5aaa
$signedPayload = $timestamp . "." . $rawBody;
$signature = hash_hmac("sha256", $signedPayload, $secret);
hash_equals($signature, $v1);

Beispiel: Zustellungsbericht

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "delivery_report",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:00:06",
	"created_utc": "2026-01-01 08:00:06",
	"message": {
	  "messageid": "e1qk89exbzgf6fzfunceym2sd67h88",
	  "datetime": "2026-01-01 09:00:00",
	  "content": "here comes your message body",
	  "sender": "yoursender",
	  "receiver": "32470123456",
	  "reference": "yourref",
	  "message_type": "sms",
	  "delivery_code": "1",
	  "delivery_status": "delivered",
	  "delivery_status_datetime": "2026-01-01 09:00:05",
	  "cost": 1,
	  "cost_type": "credits"
	}
}

Zusätzliche Details bei NICHT ZUGESTELLTER Nachricht (Code 2)

								{
	"webhook_id": "wh_b1c67831-8bed-4d89-b15e-73632e2e4c10",
	"webhook_type": "delivery_report",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:00:15",
	"created_utc": "2026-01-01 08:00:15",
	"message": {
	  "messageid": "f2rl90fycahg7gagvodfzn3te78i99",
	  "datetime": "2026-01-01 09:00:00",
	  "content": "here comes your message body",
	  "sender": "yoursender",
	  "receiver": "32470123456",
	  "reference": "yourref",
	  "message_type": "sms",
	  "delivery_code": "2",
	  "delivery_status": "not delivered",
	  "delivery_status_datetime": "2026-01-01 09:00:12",
	  "delivery_code_detail": "10",
	  "delivery_code_detail_description": "Unknown Subscriber",
	  "cost": 1,
	  "cost_type": "credits"
	}
}

Zusätzliche Felder bei einer Antwort oder Lesebestätigung

								{
	"webhook_id": "wh_c2d78942-9cfe-4e9a-8c26-84743f3f5d21",
	"webhook_type": "delivery_report",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:02:35",
	"created_utc": "2026-01-01 08:02:35",
	"message": {
	  "messageid": "e1qk89exbzgf6fzfunceym2sd67h88",
	  "datetime": "2026-01-01 09:00:00",
	  "content": "here comes your message body",
	  "sender": "yoursender",
	  "receiver": "32470123456",
	  "reference": "yourref",
	  "message_type": "sms",
	  "delivery_code": "1",
	  "delivery_status": "delivered",
	  "delivery_status_datetime": "2026-01-01 09:00:05",
	  "confirm_type": "replies_yes_no_answer",
	  "confirm_date": "2026-01-01 09:02:30",
	  "confirm_memo": "YES",
	  "cost": 1,
	  "cost_type": "credits"
	}
}

Beispiel: Lesebestätigungsbericht

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "read_report",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:01:01",
	"created_utc": "2026-01-01 08:01:01",
	"message": {
	  "messageid": "e1qk89exbzgf6fzfunceym2sd67h88",
	  "datetime": "2026-01-01 09:00:00",
	  "content": "here comes your message body",
	  "sender": "yoursender",
	  "receiver": "32470123456",
	  "reference": "yourref",
	  "message_type": "sms",
	  "delivery_code": "1",
	  "delivery_status": "delivered",
	  "delivery_status_datetime": "2026-01-01 09:00:05",
	  "read_status": "message_read",
	  "read_datetime": "2026-01-01 09:01:00"
	}
}

Beispiel: eingehende Nachricht

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "inbox_message",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:05:01",
	"created_utc": "2026-01-01 08:05:01",
	"message": {
	  "id": "12345678",
	  "public_id": "inb_46f4c0e37652d4149352e1cb54fed50b",
	  "date": "2026-01-01 09:05:00",
	  "date_iso8601": "2026-01-01T09:05:00+01:00",
	  "date_utc": "2026-01-01 08:05:00",
	  "date_utc_iso8601": "2026-01-01T08:05:00+00:00",
	  "sender": "sendernumber",
	  "receiver": "12345678",
	  "content": "message content",
	  "type": "sms",
	  "file": null,
	  "processed": 0
	},
	"isreply": {
	  "reply": true,
	  "orig_message_content": "original message content",
	  "orig_messageid": "985zvqipp73csuuha2079fbshx",
	  "orig_messagedate": "2026-01-01 09:00:00",
	  "orig_messagedate_iso8601": "2026-01-01T09:00:00+01:00",
	  "orig_messagedate_utc": "2026-01-01 08:00:00",
	  "orig_messagedate_utc_iso8601": "2026-01-01T08:00:00+00:00",
	  "orig_sender": "32471123456",
	  "orig_receiver": "12345678",
	  "orig_reference": ""
	}
}

Beispiel: Anrufweiterleitung

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "call_forwarding",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:10:01",
	"created_utc": "2026-01-01 08:10:01",
	"message": {
	  "id": "12345678",
	  "public_id": "inb_7ecad8b1a486b73732b897fde12f080c",
	  "date": "2026-01-01 09:10:00",
	  "date_iso8601": "2026-01-01T09:10:00+01:00",
	  "date_utc": "2026-01-01 08:10:00",
	  "date_utc_iso8601": "2026-01-01T08:10:00+00:00",
	  "sender": "sendernumber",
	  "receiver": "12345678",
	  "content": "Incoming VOIP Call - Forwarded to XXXXX",
	  "content_type": "complete",
	  "type": "call"
	}
}

Beispiel: Kontakt hinzufügen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "add_contact",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:15:00",
	"created_utc": "2026-01-01 08:15:00",
	"contact": {
	  "action": "add",
	  "groupid": "12345",
	  "groupname": "Groupname",
	  "receiver": "32498123456",
	  "firstname": "John",
	  "lastname": "Doe",
	  "Custom1": null,
	  "Custom2": null,
	  "Custom3": null,
	  "Custom4": null,
	  "Custom5": null,
	  "Custom6": null,
	  "Custom7": null,
	  "Custom8": null,
	  "unsubscribed": false,
	  "unsubscribe_date": null
	}
}

Beispiel: Kontakt löschen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "delete_contact",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:16:00",
	"created_utc": "2026-01-01 08:16:00",
	"contact": {
	  "action": "delete",
	  "groupid": "12345",
	  "groupname": "Groupname",
	  "receiver": "32498123456",
	  "firstname": "John",
	  "lastname": "Doe",
	  "Custom1": null,
	  "Custom2": null,
	  "Custom3": null,
	  "Custom4": null,
	  "Custom5": null,
	  "Custom6": null,
	  "Custom7": null,
	  "Custom8": null,
	  "unsubscribed": false,
	  "unsubscribe_date": null
	}
}

Beispiel: Gruppe hinzufügen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "add_group",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:20:00",
	"created_utc": "2026-01-01 08:20:00",
	"group": {
	  "action": "add",
	  "groupid": "12345",
	  "groupname": "Groupname"
	}
}

Beispiel: Gruppe löschen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "delete_group",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:21:00",
	"created_utc": "2026-01-01 08:21:00",
	"group": {
	  "action": "delete",
	  "groupid": "12345",
	  "groupname": "Groupname"
	}
}

Beispiel: Opt-out hinzufügen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "add_optout",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2025-08-04 14:30:00",
	"created_utc": "2025-08-04 12:30:00",
	"optout": {
	  "action": "add",
	  "id": "1234",
	  "number": "32498123456",
	  "memo": "Sample opt-out",
	  "date": "2025-08-04",
	  "date_utc": "2025-08-04"
	}
}

Beispiel: Opt-out löschen

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "delete_optout",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2025-08-04 14:31:00",
	"created_utc": "2025-08-04 12:31:00",
	"optout": {
	  "action": "delete",
	  "number": "32498123456",
	  "date": "2025-08-04",
	  "date_utc": "2025-08-04"
	}
}

Beispiel: Guthaben gekauft

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "funds_purchased",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2025-08-04 14:33:50",
	"created_utc": "2025-08-04 12:33:50",
	"funds": {
	  "order_id": "1234",
	  "item_amount": 1,
	  "currency": "eur",
	  "total_price": 10,
	  "price_excl": 0,
	  "purchase_type": "credits",
	  "payment_mode": "online",
	  "reference": "Reference",
	  "date": "2025-08-04 14:33:45",
	  "date_utc": "2025-08-04 12:33:45"
	}
}

Beispiel: Nicht genügend Guthaben

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "insufficient_funds",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2025-08-04 14:34:22",
	"created_utc": "2025-08-04 12:34:22",
	"funds": {
	  "item_amount": "0.000",
	  "item_type": "balance",
	  "message": "Insufficient funds",
	  "date": "2025-08-04 14:34:22",
	  "date_utc": "2025-08-04 12:34:22"
	}
}

Beispiel: Email2SMS-Auslöser

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "email2sms_received",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2025-01-01 10:00:02",
	"created_utc": "2025-01-01 09:00:02",
	"email2sms": {
	  "sender": "[email protected]",
	  "receiver": {
		"group": false,
		"receiver": "32498123456"
	  },
	  "result": "Success",
	  "status": "Message Sent",
	  "email_message_id": "abc123def456",
	  "sms_message_id": "985zvqipp73csuuha2079fbshx",
	  "date": "2025-01-01 10:00:00",
	  "date_utc": "2025-01-01 09:00:00"
	}
}

Beispiel: API-Fehler

								{
	"webhook_id": "wh_a9b56720-7adc-4c78-a04d-62521d1d3b09",
	"webhook_type": "api_error",
	"username": "myusername",
	"timezone": "Europe/Brussels",
	"method": "POST",
	"created": "2026-01-01 09:25:00",
	"created_utc": "2026-01-01 08:25:00",
	"error": {
	  "error": "Destination number 32498123456 missing or invalid",
	  "error_code": 103,
	  "sender": "yoursender",
	  "receiver": "32498123456",
	  "http_code": 400,
	  "date": "2026-01-01 09:25:00",
	  "date_utc": "2026-01-01 08:25:00"
	}
}
Entdecken Sie jetzt unsere SMS-Plattform!

SMS versenden war noch nie so einfach.