Zum Inhalt springen
HEXSMSDEVELOPERS
HEXSMS API · v1

SMS-Versand
in Ihren Dienst integrieren.

Starten Sie mit einem API-Schlüssel. Wählen Sie ein Land und senden Sie pro Anfrage an bis zu 1.000 Nummern. Das Ergebnis jeder Nummer können Sie abfragen.

REST APIJSONBis zu 1.000 Empfänger / Anfrage

Schnellstart

  1. API-Schlüssel erstellen

    Nach Registrierung, Freigabe und OTP-Anmeldung unterAPI-Schlüssel verwalteneinen Schlüssel erstellen.

  2. Credits bereitstellen

    Die API nutzt das Guthaben und die Preise Ihres Kontos. Der Betrag wird abgezogen, sobald die Sendung angenommen wird.

  3. Senden und Ergebnisse prüfen

    Speichern Sie die Kampagnen-ID und prüfen Sie die Ergebnisse über die Status-API.

Base URL https://hexsms.com

Rufen Sie die API für echte Integrationen von einem HTTPS-Server auf. In der Vorschau werden keine echten Schlüssel ausgestellt und keine Nachrichten über die API gesendet.

Unterstützte Länder

190+Globale Netzabdeckung

Ausgewählte Zielländer

  • Vereinigte Staaten
  • Kanada
  • Vereinigtes Königreich
  • Deutschland
  • Frankreich
  • Spanien
  • Italien
  • Niederlande
  • Schweden
  • Norwegen
  • Dänemark
  • Polen
  • Rumänien
  • Tschechien
  • Österreich
  • Schweiz
  • Irland
  • Portugal
  • Finnland
  • Japan
  • Südkorea
  • China
  • Taiwan
  • Sonderverwaltungsregion Hongkong
  • Singapur
  • Malaysia
  • Indonesien
  • Philippinen
  • Thailand
  • Vietnam
  • Indien
  • Bangladesch
  • Pakistan
  • Australien
  • Neuseeland
  • Brasilien
  • Mexiko
  • Südafrika
  • Nigeria
  • Vereinigte Arabische Emirate
  • Saudi-Arabien

Verfügbarkeit, Preise und Anforderungen an die Absenderregistrierung hängen von Ihrem Konto und den lokalen Netzen ab. Prüfen Sie vor dem Versand die Länderpreise.

GET/api/v1/messages/countries

Aktive Länder und tatsächlich geltende Preise fragen Sie über die API ab. Geben Sie beim Senden das Land mit country an und verwenden Sie pro Anfrage nur Nummern desselben Landes. Für Länder ohne hinterlegten Preis werden keine Sendungen angenommen.

200 OK
{ "currency": "USDT", "countries": [{ "country": "US", "unitPrice": 0.02 }] }

Mit API-Schlüssel authentifizieren

Fügen Sie jeder externen API-Anfrage den folgenden Header hinzu. Anmelde-Cookies oder OTP-Codes sind nicht nötig.

HTTP
Authorization: Bearer hex_live_IHR_API_SCHLUESSEL

Der Schlüssel wird nur einmal bei der Erstellung angezeigt. Bewahren Sie ihn in einer Umgebungsvariable auf dem Server auf, niemals im Frontend-Code. Widerrufene Schlüssel und gesperrte Konten können die API nicht nutzen. Sie können bis zu 5 Schlüssel erstellen.

POST/api/v1/messages

An bis zu 1.000 Nummern auf einmal senden

Senden Sie denselben Text an mehrere Nummern. Die Anfrage wird geprüft, in die Warteschlange gestellt und sofort beantwortet. Für unterschiedliche Inhalte pro Nummer senden Sie separate Anfragen mit jeweils neuem Idempotency-Key.

FeldTypBeschreibung
country *stringISO-3166-1-alpha-2-Ländercode, z. B. US, GB, JP, KR. Es gibt kein Standardland.
text *string1–1.600 Zeichen nach Entfernen von Leerzeichen am Anfang und Ende. Alle Nummern einer Anfrage erhalten denselben Inhalt.
recipients *string[]1–1.000 Mobilnummern. Das Format mit +Ländervorwahl wird empfohlen; alle Nummern müssen zum Land in country passen.
Idempotency-Key *header8–100 Zeichen aus Buchstaben (ASCII), Ziffern, Bindestrichen oder Unterstrichen. Wählen Sie für jede Anfrage einen eindeutigen Wert.

Enthält die Anfrage auch nur eine ungültige oder doppelte Nummer, wird sie vollständig abgelehnt – ohne Versand und ohne Abbuchung. Duplikate werden nach Umwandlung ins internationale Format geprüft.

cURL · Massen-SMS senden
curl -X POST 'https://hexsms.com/api/v1/messages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: notice-20261024-001' \
  -d '{
    "country": "US",
    "text": "Your verification code is 482913.",
    "recipients": ["+12025550123", "+12025550124"]
  }'
202 Accepted · In Warteschlange
{
  "id": "35bed356-b84a-452a-8e94-98b538972ecd",
  "country": "US",
  "state": "RUNNING",
  "total": 2,
  "segments": 1,
  "unitPrice": 0.025,
  "cost": 0.05,
  "createdAt": 1792800000000,
  "note": null,
  "replayed": false
}
Ist die Antwort verloren gegangen, wiederholen Sie die Anfrage mit demselben Anfrageschlüssel.

Eine Wiederholung mit demselben Konto, demselben Idempotency-Key sowie identischem Inhalt und gleicher Nummernreihenfolge liefert das ursprüngliche Ergebnis ohne erneuten Versand oder Abbuchung (200, replayed: true). Bei abweichendem Inhalt kommt 409. Der Duplikatschutz bleibt auch nach einem Schlüsselwechsel bestehen. Anfrageschlüssel verfallen nicht.

So wird der Preis berechnet

Anzahl Nummern × Segmente (segments) × KontopreisUCS-2-Text passt mit bis zu 70 Zeichen in 1 Segment, danach 67 Zeichen pro Segment. Einfacher GSM-7-Text passt mit bis zu 160 Zeichen in 1 Segment, danach 153 pro Segment. Erweiterungszeichen zählen doppelt, Emojis nach UTF-16-Länge. unitPrice und cost sind in USDT. Der Preis in der Antwort ist der tatsächlich geltende; 0.025 oben ist nur ein Beispiel.

GET/api/v1/messages/{id}

Ergebnis pro Nummer abfragen

Verwenden Sie die id aus der Sende-API. Abfragbar sind nur per API gesendete Kampagnen desselben Kontos. Die Abfrage liefert gespeicherte Ergebnisse. Für die neuesten Ergebnisse des Netzbetreibers rufen Sie zuerst die folgende Aktualisierungs-API auf.

cURL · Status abfragen
curl 'https://hexsms.com/api/v1/messages/35bed356-b84a-452a-8e94-98b538972ecd?limit=1&offset=0' \
  -H 'Authorization: Bearer YOUR_API_KEY'
200 OK · Ergebnisse pro Nummer
{
  "id": "35bed356-b84a-452a-8e94-98b538972ecd",
  "country": "US",
  "state": "DONE",
  "total": 2, "segments": 1,
  "unitPrice": 0.025, "cost": 0.05,
  "createdAt": 1792800000000, "note": null,
  "summary": { "DELIVERED": 1, "PENDING": 1 },
  "messages": [
    {
      "id": "d2787184-d8b8-49c6-9c15-1db90a6d5516",
      "to": "12025550123",
      "status": "DELIVERED",
      "statusName": "DELIVERED_TO_HANDSET",
      "description": "Message delivered to handset",
      "error": null,
      "updatedAt": 1792800005000
    }
  ],
  "pagination": { "limit": 1, "offset": 0, "nextOffset": 1 }
}

limit ist 1–1.000 (Standard 100), offset ist 0–1.000 (Standard 0). Ist nextOffset null, ist es die letzte Seite. summary zählt alle Nummern nach Status. to wird im internationalen Format ohne + zurückgegeben, Zeitstempel in Unix-Millisekunden. Die Reihenfolge kann von der ursprünglichen Nummernreihenfolge abweichen; unterscheiden Sie die Nachrichten anhand ihrer id.

DONE bedeutet nicht zugestellt.

Es bedeutet nur, dass die Warteschlange abgearbeitet ist. Ob eine Nachricht tatsächlich angekommen ist, sehen Sie am status DELIVERED in messages.

POST/api/v1/messages/{id}/refresh

Neuesten Zustellstatus abrufen

Fragt die Logs des Netzbetreibers ab und aktualisiert die gespeicherten Ergebnisse. Ein Request-Body ist nicht nötig. Lesen Sie die Ergebnisse danach erneut per GET. Dieselbe Kampagne kann alle 30 Sekunden aktualisiert werden. Netzbetreiber-Logs sind bis 48 Stunden nach dem Versand abrufbar. Mit konfigurierten Webhooks können Ergebnisse auch automatisch übernommen werden.

cURL · Status aktualisieren
curl -X POST 'https://hexsms.com/api/v1/messages/35bed356-b84a-452a-8e94-98b538972ecd/refresh' \
  -H 'Authorization: Bearer YOUR_API_KEY'
200 OK
{ "id": "35bed356-b84a-452a-8e94-98b538972ecd", "updated": 2 }

updated ist die Anzahl aktualisierter Zeilen. Solange Nachrichten noch warten oder keine neuen Ergebnisse vorliegen, kann der Wert 0 sein. Wir empfehlen, GET im Abstand von mindestens 10 Sekunden aufzurufen und refresh nur bei Bedarf anzufordern.

Statuscodes verstehen

state der Sendeanfrage

PREPARING: wird vorbereitet · RUNNING: in Bearbeitung · PAUSED: pausiert · DONE: Warteschlange abgearbeitet · CANCELED: storniert

status pro NummerBedeutung
QUEUEDWartet in der Warteschlange.
SENDINGWird an den Netzbetreiber übermittelt.
PENDINGVom Netzbetreiber angenommen, Endergebnis steht aus.
DELIVEREDAuf dem Empfangsgerät zugestellt.
UNDELIVERABLEKonnte nicht zugestellt werden.
EXPIREDDie Gültigkeitsdauer für die Zustellung ist abgelaufen.
REJECTEDAbgelehnt oder es ist ein Verarbeitungsfehler aufgetreten.
CANCELEDVor dem Versand storniert.
UNKNOWNDas Ergebnis ist noch nicht bekannt.

Netzbetreiber können neue Statuscodes hinzufügen – behandeln Sie daher auch unbekannte status-Werte. Fehlergründe finden Sie in statusName, description und error.

Fehler behandeln

Format der Fehlerantwort
{ "error": "Nicht genügend Credits. Bitte laden Sie auf und senden Sie die Anfrage erneut.", "code": "INSUFFICIENT_CREDITS" }
HTTPcodeWas zu prüfen ist
403COUNTRY_NOT_ENABLEDPrüfen Sie Länderpreise und Aktivstatus.
400INVALID_COUNTRYGeben Sie in country einen ISO-Ländercode an.
400INVALID_BODY / INVALID_JSON / INVALID_TEXTPrüfen Sie das JSON-Objekt und den Nachrichteninhalt.
400INVALID_RECIPIENTS / INVALID_PHONE / DUPLICATE_PHONEPrüfen Sie Anzahl, Format und Duplikate der Nummern.
400INVALID_IDEMPOTENCY_KEY / INVALID_PAGINATIONPrüfen Sie den Anfrageschlüssel oder die Seitenwerte.
401UNAUTHORIZEDDer Bearer-API-Schlüssel fehlt oder ist ungültig.
402INSUFFICIENT_CREDITSLaden Sie Ihre Credits auf.
403ACCOUNT_INACTIVEPrüfen Sie, ob das Konto freigegeben und aktiv ist.
404NOT_FOUNDPrüfen Sie die Kampagnen-ID und die Kontozugehörigkeit.
409IDEMPOTENCY_CONFLICTDerselbe Anfrageschlüssel wurde mit anderem Inhalt verwendet.
413 / 415BODY_TOO_LARGE / UNSUPPORTED_MEDIA_TYPESenden Sie einen JSON-Body von höchstens 128KiB.
429RATE_LIMITED / REFRESH_TOO_SOONWarten Sie die in Retry-After angegebenen Sekunden und wiederholen Sie dann die Anfrage.
500 / 502INTERNAL_ERROR / PROVIDER_UNAVAILABLEVersuchen Sie es später erneut. Für Sende-Wiederholungen denselben Anfrageschlüssel verwenden.
503PREVIEW_ONLYIn der Vorschau kann die echte API nicht aufgerufen werden.

Pro API-Schlüssel sind insgesamt 120 Anfragen pro Minute für Senden, Abfragen und Aktualisieren möglich. Wird das Limit erreicht, beachten Sie den Retry-After-Header. Die API ist für Server-zu-Server-Integrationen gedacht; CORS-Aufrufe aus dem Browser werden nicht unterstützt.

Mit Node.js verbinden

Node.js · Auf dem Server ausführen
const response = await fetch('https://hexsms.com/api/v1/messages', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.HEXSMS_API_KEY,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'notice-20261024-001'
  },
  body: JSON.stringify({
    country: 'US',
    text: 'Your order is on its way.',
    recipients: ['+12025550123', '+12025550124']
  })
});
const result = await response.json();
if (!response.ok) throw new Error(result.code + ': ' + result.error);
console.log(result.id); // Use this ID to check delivery status.

Erstellen Sie den Anfrageschlüssel einmal pro Vorgang und verwenden Sie ihn auch bei Wiederholungen nach ausbleibender Antwort. Wird ein erfolgreicher Vorgang mit neuem Schlüssel erneut gesendet, gilt er als separate Sendung.