Bird Verify

API weryfikacji, w którym nie musisz niczego przechowywać.

Konfiguracja w:
Cursor

Send a one-time code over email, SMS, or WhatsApp, then check it by recipient, with no verification id to keep between the two calls. The channel order, sender, and code rules already resolve per country automatically. Same auth and idempotency as every other Bird channel, because the same team built them all. Voice is rolling out next.

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();
if (error) throw error;

Dwa wywołania od npm install do zweryfikowanego użytkownika

Wyślij kod, a następnie sprawdź go — w języku, którego już używasz.

Create-or-retry wysyła kod; check potwierdza go po odbiorcy. Dwa wywołania i żaden identyfikator weryfikacji do przekazywania między nimi.

1
2
3
4
const verification = await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
});
console.log(verification.id, verification.status);

Dziesięć rzeczy, których nie budujesz, gdy weryfikacja jest w API.

Konkretne elementy, nazwane i konfigurowalne. Żadnego zamydlania oczu.

  1. 01

    Utwórz lub ponów jednym wywołaniem.

    Wyślij ponownie tego samego odbiorcę, a my wznowimy aktywną sesję i wyślemy kod po upływie cooldownu. Bez osobnego endpointu ponownego wysyłania, bez zduplikowanych weryfikacji.

  2. 02

    Sprawdzaj po odbiorcy. Nie przechowuj niczego.

    Prześlij odbiorcę i kod; my rozwiążemy sesję na podstawie pary konfiguracja–odbiorca. Nie ma identyfikatora weryfikacji do przechowywania między wysłaniem a sprawdzeniem.

  3. 03

    E-mail, SMS i WhatsApp na start.

    Przekazany odbiorca determinuje kanał: adres e-mail oznacza weryfikację przez e-mail, numer telefonu — przez SMS lub WhatsApp. Zmiana kanału to zmiana jednego pola, a nie nowa integracja. Wkrótce pojawi się obsługa połączeń głosowych, a automatyczny fallback między kanałami jest w przygotowaniu.

  4. 04

    Per-country channel order, already resolved.

    Channel order, sender, and which channels are on differ by country. Bird's per-country base decides this, so a create call already resolves to the right plan everywhere.

  5. 05

    Kody, których nigdy nie widzisz.

    Generowany z kryptograficznego źródła losowego, przechowywany wyłącznie jako HMAC, porównywany w stałym czasie. Kod w postaci jawnej nigdy nie trafia na Twój stos ani do naszych logów.

  6. 06

    Konfigurowalny kod, TTL, liczba prób.

    Six-digit default, 4–10 configurable per request; a 10-minute window; 5 attempts; a 60-second resend cooldown.

  7. 07

    Każdy kod pozostaje ważny aż do zakończenia sesji.

    Opóźniona wiadomość i świeżo wysłany ponownie kod — oba weryfikują, ponieważ nie unieważniamy wcześniejszego kodu po wygenerowaniu nowego.

  8. 08

    Błędny kod to 200, nie wyjątek.

    Sprawdzaj odpowiedzi za pomocą wyniku logicznego — czy kod został zweryfikowany, tak lub nie — oraz powodu, który wyjaśnia niepowodzenie: nieprawidłowy, wygasły, już zweryfikowany lub wyczerpane próby. Rozgałęziasz logikę na podstawie pola, nigdy na podstawie rzuconego błędu.

  9. 09

    Wbudowane limity częstotliwości.

    Limity wysyłek per odbiorca i limit prób per weryfikacja — każdy jako 429 z Retry-After, więc brute force wyczerpie się, zanim Ty się wyczerpiesz.

  10. 10

    Ten sam kontrakt co reszta Bird.

    Autoryzacja Bearer, klucz idempotentności, typowane identyfikatory vrf_, jedna koperta błędów. Handler, który napisałeś dla e-maila, pasuje też do weryfikacji.

Nie przechowuj niczego między wysłaniem a sprawdzeniem.

Większość API weryfikacji zwraca identyfikator, który musisz zapisać, wyszukać i przesłać kod do porównania. Bird rozwiązuje sesję na podstawie odbiorcy, więc po Twojej stronie nie ma żadnego stanu per weryfikacja.

Większość API weryfikacji

Create zwraca identyfikator, który zapisujesz, a potem wyszukujesz weryfikację, żeby sprawdzić kod.

id-keyed.ts
const { id } = await api.verifications.create({
  to: "+15551234567",
});
// persist id somewhere, then later…
await api.verifications.check({ id, code });

Bird Verify

Sprawdzaj po odbiorcy. Nie musisz przekazywać niczego między dwoma wywołaniami.

by-target.ts
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();
// no id to store; check by the same recipient
await bird.verify.verifications.check({
  to: { phone_number: "+15551234567" }, code,
}).safe();

Routing already knows the country.

Channel order, senders, and which channels are on differ by country: WhatsApp-first in one market, SMS-only in another. Bird's per-country base decides this, so a create call already resolves to the right plan. See channel orchestration.

per-country.ts
200
// Brazil already resolves WhatsApp, then SMS.
const { data, error } = await bird.verify.verifications.create({
  to: { phone_number: "+5511998765432" },
}).safe();
if (error) throw error;

Weryfikacja to również decyzja produktowa: to samo API obsługuje uwierzytelnianie dwuskładnikowe i logowanie bez hasła. Najpierw walidujesz numer? Połącz to z Lookup. Ciche uwierzytelnianie sieciowe i aplikacje TOTP są w planie rozwoju.

Dlaczego budujemy Verify

Bo kod, który wpuszcza użytkownika, nie powinien potrzebować własnej tabeli w bazie danych.

OTP to kanał, w którym kod, który nie dotrze, to rejestracja, która się nie wydarzy. Bird już obsługuje e-mail i SMS na dużą skalę, więc Verify to ta sama dostarczalność plus generowanie kodu, sesja, plan kanałów per kraj i limity częstotliwości — za dwoma endpointami, które nie przechowują niczego po Twojej stronie i odpowiadają w tym samym formacie co każdy inny kanał Bird.

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();
if (error) throw error;

Jeśli zintegrowałeś SMS, zintegrowałeś Verify.

Ten sam model uwierzytelniania, ten sam kontrakt idempotentności, ta sama struktura błędów. Różnica polega na tym, że Verify generuje kod, wybiera kanał i zarządza limitami częstotliwości — więc Ty nie musisz.

Verify

Jedno wywołanie wysyła kod, drugie sprawdza go po odbiorcy. Kod, sesja i limity są po naszej stronie.

verify.ts
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
});

SMS

Surowe wysyłanie — gdy chcesz samodzielnie kontrolować generowanie kodu i politykę ponownych prób.

notify.ts
await bird.sms.send({
  from:     "Bird",
  to:       "+15551234567",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

Wybierz nadawcę, którego widzą Twoi użytkownicy

Kody są domyślnie wysyłane przez Bird Verify i nie wymaga to rejestracji ani konfiguracji szablonów. Przełącz kanał na Authifly, a Twoi użytkownicy zobaczą neutralną tożsamość weryfikacyjną zamiast nazwy dostawcy platformy: e-mail z OTP przychodzi z adresu otp@verify.authifly.com, a SMS wyświetla nadawcę Authifly wszędzie tam, gdzie kraj docelowy zezwala na nadawcę markowego. Bird obsługuje obie tożsamości, więc wybór nie wiąże się z żadnymi dodatkowymi kosztami — dokonujesz go per kanał i per kraj. W przypadku e-maila możesz pójść dalej i wysyłać z domeny, którą samodzielnie zweryfikujesz. Jeśli odbiorca otrzyma nieoczekiwany kod, strona authifly.com zapewni go, że Authifly wysyła legalne kody jednorazowe w imieniu firmy. Authifly jest operowany przez Bird B.V.

Odwiedź authifly.com

Weryfikacja na tej samej platformie co reszta Twojej komunikacji.

Zacznij budować już dziś lub porozmawiaj z nami o kanałach, wolumenie i cenach, których potrzebujesz.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor