Verifizieren Sie Ihren ersten Kunden
Bird Verify bestätigt, dass jemand eine E-Mail-Adresse oder Telefonnummer kontrolliert. Sie bitten Bird, einen Bestätigungscode zu senden. Die Person gibt ihn in Ihrer App ein, und Sie fragen Bird, ob er übereinstimmt. Bird generiert und liefert den Code und erzwingt Ablaufzeit und Versuchslimits. Ihre App empfängt oder speichert den generierten Code nie.
Dieser Schnellstart verifiziert Ihre eigene E-Mail-Adresse, was kein Setup erfordert. Bird sendet E-Mail-Codes über seinen gemeinsamen Bird Verify-Absender, Sie brauchen also keine Domain und kein Guthaben. Nach der Aufladung von SMS verwendet die Verifizierung einer Telefonnummer dieselben zwei Aufrufe.
1. Erstellen Sie einen API-Key
Gehen Sie im Dashboard zu Developers > API keys und erstellen Sie einen Key. Keys sind einer Region zugeordnet und sehen aus wie bk_us1_... oder bk_eu1_...; die Region im Präfix zeigt Ihnen, welchen API-Host Sie aufrufen müssen: https://us1.platform.bird.com oder https://eu1.platform.bird.com.

Der vollständige Key wird einmalig bei der Erstellung angezeigt. Kopieren Sie ihn an einen sicheren Ort und exportieren Sie ihn für die Sendebeispiele:
Codebeispiel
export BIRD_API_KEY="bk_us1_..."2. Senden Sie einen Code
Erstellen Sie eine Verifizierung für die Adresse, die Sie bestätigen möchten. Das einzige Pflichtfeld ist to. Verwenden Sie Ihre eigene E-Mail-Adresse, damit Sie den Code lesen können. Installieren Sie das Bird SDK für Ihre Sprache gemäß dem SDK-Schnellstart.
Ersetzen Sie in den SDK-Tabs den Beispiel-API-Key und user@example.com, bevor Sie den Code ausführen. Der CLI verwendet Ihren Login, und der cURL-Tab verwendet BIRD_API_KEY.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: "bk_XXXXXXXXXXXXXXXXXXXXXXXX" });
const verification = await bird.verify.verifications.create({
to: { email: "user@example.com" },
});
console.log(verification.id, verification.status);from bird import APIError, Bird
with Bird(api_key="bk_XXXXXXXXXXXXXXXXXXXXXXXX") as client:
try:
verification = client.verify.verifications.create(
to={"email": "user@example.com"},
)
print(verification.id, verification.status)
except APIError as err:
print("could not start the verification:", err)package main
import (
"context"
"fmt"
"log"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey("bk_XXXXXXXXXXXXXXXXXXXXXXXX"))
if err != nil {
log.Fatal(err)
}
verification, err := client.Verify.Verifications.Create(context.Background(), bird.VerifyVerificationsCreateParams{
To: bird.VerificationTo{Email: bird.Email("user@example.com")},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(verification.Id, *verification.Status)
}<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use MessageBird\Bird;
use MessageBird\Wire\Model\VerificationCreateRequest;
use MessageBird\Wire\Model\VerificationTo;
$bird = new Bird('bk_XXXXXXXXXXXXXXXXXXXXXXXX');
$verification = $bird->verify->verifications->create(
(new VerificationCreateRequest())
->setTo((new VerificationTo())->setEmail('user@example.com')),
);
echo $verification->getId(), ' ', $verification->getStatus(), "\n";bird verify verifications create --email user@example.comcurl -X POST https://us1.platform.bird.com/v1/verify/verifications \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": { "email": "user@example.com" }
}'Wenn Ihr Key mit bk_eu1_ beginnt, rufen Sie stattdessen https://eu1.platform.bird.com auf.
Bird nimmt die Anfrage an und beginnt, den Code zu senden:
Codebeispiel
{
"id": "vrf_01ky7q1fdze3695yvyz7z9nm3a",
"status": "pending",
"reason": null,
"to": { "email": "user@example.com" },
"channels": [{ "channel": "email" }],
"last_channel": "email",
"expires_at": "2026-07-23T14:55:58Z",
"verified_at": null,
"created_at": "2026-07-23T14:45:58Z",
"updated_at": "2026-07-23T14:45:58Z"
}Sie müssen keine Verifizierungs-ID speichern: Die Prüfung in Schritt 3 ist an denselben Empfänger gebunden. Die E-Mail kommt von Bird Verify <otp@verify.bird.com> mit dem Betreff "Your verification code" und einem sechsstelligen Code; die Nachricht selbst zeigt an, wann er abläuft. Codelänge, Gültigkeitsdauer, Versuchslimit und Sendewiederholungs-Wartezeit sind Workspace-Einstellungen, und Verifizierungseinstellungen listet die Standardwerte und Bereiche auf.
3. Prüfen Sie den Code
Nehmen Sie den Code aus Ihrem Posteingang und senden Sie ihn, gebunden an denselben Empfänger:
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: "bk_XXXXXXXXXXXXXXXXXXXXXXXX" });
const result = await bird.verify.verifications.check({
to: { email: "user@example.com" },
code: "123456",
});
console.log(result.success);from bird import APIError, Bird
with Bird(api_key="bk_XXXXXXXXXXXXXXXXXXXXXXXX") as client:
try:
result = client.verify.verifications.check(
to={"email": "user@example.com"},
code="123456",
)
print(result.success)
except APIError as err:
print("could not check the passcode:", err)package main
import (
"context"
"fmt"
"log"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey("bk_XXXXXXXXXXXXXXXXXXXXXXXX"))
if err != nil {
log.Fatal(err)
}
result, err := client.Verify.Verifications.Check(context.Background(), bird.VerifyVerificationsCheckParams{
To: bird.VerificationTo{Email: bird.Email("user@example.com")},
Code: "123456",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(*result.Success)
}<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use MessageBird\Bird;
use MessageBird\Wire\Model\VerificationCheckRequest;
use MessageBird\Wire\Model\VerificationTo;
$bird = new Bird('bk_XXXXXXXXXXXXXXXXXXXXXXXX');
$result = $bird->verify->verifications->check(
(new VerificationCheckRequest())
->setTo((new VerificationTo())->setEmail('user@example.com'))
->setCode('123456'),
);
echo $result->getSuccess() ? 'verified' : 'not verified', "\n";bird verify verifications check 123456 --email user@example.comcurl -X POST https://us1.platform.bird.com/v1/verify/verifications/check \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": { "email": "user@example.com" },
"code": "123456"
}'Ein korrekter Code kommt mit success: true zurück, und die eingebettete Verifizierung wechselt auf verified:
Codebeispiel
{
"success": true,
"reason": null,
"attempts_remaining": null,
"verification": {
"id": "vrf_01ky7q1fdze3695yvyz7z9nm3a",
"status": "verified",
"reason": null,
"to": { "email": "user@example.com" },
"channels": [{ "channel": "email" }],
"last_channel": "email",
"expires_at": "2026-07-23T14:55:58Z",
"verified_at": "2026-07-23T14:46:47Z",
"created_at": "2026-07-23T14:45:58Z",
"updated_at": "2026-07-23T14:46:47Z"
}
}Bevor Sie diesen Ablauf in eine Registrierung einbauen, berücksichtigen Sie diese Ergebnisse:
- Eine fehlgeschlagene Prüfung gibt HTTP 200 zurück. Die Antwort enthält success: false, einen reason (incorrect_code, expired oder attempts_exhausted) und einen attempts_remaining-Zähler, solange Versuche übrig sind. Verzweigen Sie in Ihrer Anwendung anhand dieses Ergebnisses. Die Verifizierung schlägt endgültig fehl, wenn sie ihre Prüfversuche aufgebraucht hat.
- Eine Verifizierung wird einmal aufgelöst. Nachdem sie verified erreicht hat (oder fehlschlägt oder abläuft), gibt eine erneute Prüfung einen 404 zurück. Behandeln Sie die erste endgültige Antwort als die Antwort. Wenn der Nutzer einen neuen Code benötigt, rufen Sie den Create-Endpoint erneut mit demselben Empfänger auf: Die laufende Verifizierung wird wiederverwendet, und ein neuer Code wird gesendet, sobald die Sendewiederholungs-Wartezeit abgelaufen ist.
Jede von Ihnen erstellte Verifizierung erscheint auf der Verifications-Seite mit Status, Empfänger, Kanal und Zeitangaben. Der generierte Code wird nicht angezeigt.

Verifizieren Sie stattdessen eine Telefonnummer
Um über SMS zu verifizieren, geben Sie eine Telefonnummer im E.164-Format in to anstelle einer E-Mail-Adresse ein:
const verification = await bird.verify.verifications.create({
to: { phone_number: "+15551234567" },
});
console.log(verification.id, verification.status);verification = client.verify.verifications.create(to={"phone_number": "+15551234567"})
print(verification.id, verification.status)verification, err := client.Verify.Verifications.Create(context.Background(), bird.VerifyVerificationsCreateParams{
To: bird.VerificationTo{PhoneNumber: bird.String("+15551234567")},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(verification.Id, *verification.Status)$verification = $bird->verify->verifications->create(
(new VerificationCreateRequest())->setTo((new VerificationTo())->setPhoneNumber('+15551234567')),
);
echo $verification->getId(), ' ', $verification->getStatus();bird verify verifications create --body-file - <<'JSON'
{
"to": {
"phone_number": "+15551234567"
},
"metadata": {
"correlation_id": "signup-7f3a"
}
}
JSONcurl -X POST "https://{region}.platform.bird.com/v1/verify/verifications" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to": {
"phone_number": "+15551234567"
},
"metadata": {
"correlation_id": "signup-7f3a"
}
}'Die Prüfung ist identisch: Ersetzen Sie email durch dieselbe phone_number. Die Telefonzustellung wird aus dem SMS-Guthaben Ihres Workspace abgebucht, und das Zielland bestimmt die Route. Bird versucht in den meisten Ländern zuerst WhatsApp und in manchen zuerst SMS. Länderkonfiguration zeigt die verfügbaren Kanäle und deren Reihenfolge pro Zielland und ermöglicht deren Konfiguration. Absender und Branding zeigt, was auf jedem Kanal ankommt.
Erreichen Sie den Nutzer auf beiden Kanälen
Sie müssen sich nicht für einen Kanal entscheiden. Geben Sie sowohl eine email als auch eine phone_number in to an, und Bird erstellt einen Zustellplan aus Ihrer Länderkonfiguration, die die verfügbaren Kanäle und deren Reihenfolge pro Zielland zeigt. Bird folgt diesem Plan, bis ein Versand akzeptiert wird. Wenn die Zustellung danach endgültig fehlschlägt, sendet Bird einen neuen Code über den nächsten Kanal. Prüfen Sie den Code mit demselben to-Objekt, das zum Erstellen der Verifizierung verwendet wurde. Der Nutzer gibt den Code ein, der ihn erreicht hat.
Nächste Schritte
- Verifizierungen senden: Optionen, Status, erneutes Senden, Einstellungen und Limits im Detail.
- Länderkonfiguration: Länder aktivieren und die Kanalreihenfolge pro Land festlegen.
- Absender & Branding: Wie die Code-Nachrichten aussehen und wie Sie E-Mails von Ihrer eigenen Domain senden.
- Verify-API-Referenz: das vollständige Request- und Response-Schema.
- Telefonnummern bei der Anmeldung verifizieren: ein Video, das denselben Ablauf in einen Webshop integriert
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Das Konzept verstehenWhat does OTP mean? One-time passwords explainedDie Funktion erkundenCustomer verificationDem Lernpfad folgenBuild your first integration
Übung ausprobieren und ein Implementierungs-Briefing erhalten