Zum Inhalt springen
Dokumentation

Telify einbinden. In zehn Minuten.

Eine REST-API mit JSON, aufgerufen von Ihrem Server. Zwei Aufrufe reichen: Code senden, Code prüfen. Der geheime Schlüssel bleibt immer auf Ihrem Server, nie im Browser.

Schnellstart

  1. Konto anlegen. Registrieren Sie sich mit Ihrer Handynummer. Neue Konten bekommen 10 Credits zum Ausprobieren.
  2. App anlegen. Ihr Name steht in der Nachricht, die Ihre Nutzer bekommen. Auf der Seite der App können Sie sofort eine Testverifizierung im Browser durchspielen.
  3. Testschlüssel erzeugen. Er beginnt mit sk_test_, verschickt nichts und verbraucht keine Credits.
  4. Code senden und prüfen, wie in den Beispielen. Im Testmodus ist der Code immer 000000.
  5. Live gehen. Live-Schlüssel erzeugen, Guthaben kaufen, Hinweis ins Formular setzen. Fertig.
# 1. Code senden
curl https://api.telify.de/v1/verifications \
  -H "Authorization: Bearer sk_test_…" \
  --json '{"phone": "+4915123456789"}'
# → {"id": "ver_01JC8ZK4…", "status": "pending", "channel": "whatsapp"}

# 2. Code prüfen
curl https://api.telify.de/v1/verifications/ver_01JC8ZK4…/check \
  -H "Authorization: Bearer sk_test_…" \
  --json '{"code": "000000"}'
# → {"status": "approved", "valid": true}

Die Basis-URL ist https://api.telify.de/v1. Jede Anfrage trägt den Schlüssel als Authorization: Bearer sk_… und schickt JSON.

Testmodus

Mit einem Testschlüssel läuft alles wie live, nur ohne Versand und ohne Kosten. Der Code ist immer 000000. Diese Nummern liefern feste Ergebnisse, jede andere deutsche Handynummer wird zugestellt:

NummerErgebnis
+4915550000001wird zugestellt
+4915550000002nicht zustellbar, Status undeliverable
+4915550000003Limit erreicht, 429 rate_limited

Hinweis im Formular

Ihre Nutzer sollten wissen, dass gleich eine Nachricht kommt. Für WhatsApp verlangt Meta das ausdrücklich. Setzen Sie diesen Satz neben das Feld für die Handynummer:

Wir schicken Ihnen einen Bestätigungscode per WhatsApp oder SMS. Absender ist Telify.
We will send you a verification code via WhatsApp or SMS. The sender is Telify.

Schicken Sie nur SMS, reicht „Wir schicken Ihnen einen Bestätigungscode per SMS.“

Ablauf und Status

Ein Code gilt zehn Minuten. Ihr Nutzer hat fünf Versuche, und Sie können den Code einmal erneut senden, frühestens nach 60 Sekunden. Telify versucht zuerst WhatsApp und schickt eine SMS, wenn WhatsApp nicht ankommt.

StatusBedeutung
pendingCode ist unterwegs, die Eingabe steht aus.
approvedRichtiger Code eingegeben. Kostet einen Credit.
failedFünfmal falsch eingegeben.
expiredNach zehn Minuten ohne richtigen Code.
canceledVon Ihnen abgebrochen.
undeliverableWeder WhatsApp noch SMS kamen an.

Abgerechnet wird nur approved: ein Credit zu 0,10 € netto. Beim Start wird ein Credit reserviert, damit viele gleichzeitige Vorgänge das Guthaben nicht überziehen. Endet die Verifizierung anders, wird die Reservierung frei.

Wiederholen ohne Doppelversand: Schicken Sie beim Start einen Header Idempotency-Key mit, etwa eine UUID. Ein wiederholter Aufruf mit demselben Schlüssel liefert 24 Stunden lang dieselbe Antwort, ohne zweiten Versand.

Limits und Schutz

Telify schützt Sie vor SMS-Pumping, bei dem Bots teure SMS auslösen. Wird ein Limit erreicht, antwortet die API mit 429 rate_limited und dem Header Retry-After.

LimitWert
Je Nummer, über alle Apps3 pro Stunde, 10 pro Tag
Je App50 Verifizierungen pro Tag
Je IP Ihres Nutzers (mit client_ip)10 pro Stunde
SMS je App100 pro Tag

Das sind die Startwerte für neue Apps. Brauchen Sie mehr, schreiben Sie uns.

Erfolgsquote: Werden in einer Stunde bei mindestens 20 Verifizierungen weniger als die Hälfte bestätigt, pausiert Telify die App (503 app_paused) und informiert Sie per E-Mail. So viele unbestätigte Nummern sind fast immer Missbrauch.

API-Referenz

Die maschinenlesbare Beschreibung für Postman, Insomnia oder Codegeneratoren: openapi.yaml.

POST /verifications

Verifizierung starten. Schickt einen Code an die Nummer. Läuft für diese Nummer schon eine Verifizierung, kommt sie mit Status 200 zurück, und es geht kein zweiter Code raus. Eine neue antwortet mit 201.

FeldBedeutung
phonePflichtHandynummer, international (+4915123456789) oder national zusammen mit country.
countryoptionalLand für nationale Schreibweise, Standard DE.
localeoptionalSprache der Nachricht: de (Standard) oder en.
channelsoptionalKanäle in der gewünschten Reihenfolge, etwa ["sms"]. Begrenzt auf die Einstellungen der App.
client_ipoptionalIP-Adresse Ihres Nutzers. Damit greift das Limit je IP.

GET /verifications/{id}

Verifizierung abrufen. Liefert den aktuellen Stand, zum Beispiel ob die Zeit abgelaufen ist.

POST /verifications/{id}/check

Code prüfen. Prüft den eingegebenen Code. Die Antwort enthält valid. Bei richtigem Code wird die Verifizierung approved, und genau dann kostet sie einen Credit. Nach fünf falschen Versuchen ist sie failed.

FeldBedeutung
codePflichtDer sechsstellige Code, den Ihr Nutzer eingegeben hat.

POST /verifications/{id}/resend

Code erneut senden. Schickt denselben Code noch einmal, einmal pro Verifizierung und frühestens nach 60 Sekunden. Davor antwortet die API mit 429 und Retry-After.

FeldBedeutung
channeloptionalwhatsapp oder sms, etwa für „Code per SMS senden“.

POST /verifications/{id}/cancel

Verifizierung abbrechen. Beendet eine offene Verifizierung, zum Beispiel wenn Ihr Nutzer eine andere Nummer eingeben will. Kostet nichts.

GET /balance

Guthaben abfragen. balance ist das Guthaben, reserved die Credits offener Live-Verifizierungen, available der Rest. Ein Start braucht mindestens einen freien Credit.

Alle Verifizierungen antworten im selben Format:

{
  "id": "ver_01JC8ZK4QX6Y3M2N7P5R9T0VWA",
  "status": "pending",
  "phone": "+4915123456789",
  "channel": "whatsapp",
  "mode": "test",
  "attempts_left": 5,
  "expires_at": "2026-11-04T10:10:00Z",
  "resend_available_at": "2026-11-04T10:01:00Z",
  "approved_at": null,
  "created_at": "2026-11-04T10:00:00Z"
}

Fehlercodes

Fehler kommen immer als {"error": {"code": "…", "message": "…"}}. Prüfen Sie den code, die message kann sich ändern.

HTTPcodeBedeutung
400invalid_requestPflichtfeld fehlt oder hat das falsche Format.
400invalid_phoneKeine gültige Handynummer.
401invalid_api_keySchlüssel fehlt, ist falsch oder gesperrt.
402insufficient_creditsKein freies Guthaben.
404verification_not_foundUnbekannte ID oder die einer anderen App.
409verification_closedSchon approved, failed, expired, canceled oder undeliverable.
409idempotency_conflictIdempotency-Key für eine andere Anfrage benutzt, oder die erste läuft noch.
422country_not_allowedDas Land ist für die App nicht freigeschaltet. Zum Start nur Deutschland.
429rate_limitedEin Limit ist erreicht. Retry-After nennt die Sekunden bis zum nächsten Versuch.
503app_pausedDie App ist wegen einer auffälligen Erfolgsquote pausiert.