Bird Verify

无需存储的验证 API

通过邮件、SMS 或 WhatsApp 发送一次性验证码,然后按接收者进行验证,无需在两次调用之间保留验证 ID。通道顺序、发送者和验证码规则已按国家/地区自动解析。与所有其他 Bird 通道使用相同的身份验证和幂等机制,因为它们都由同一团队构建。语音通道即将上线。

Cursor
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;
Verification flow

Your account

Confirm it’s you.

Enter the code sent to

+1 ••• ••• 4567

Example verification code

482691
Code verified
Send a code. Confirm the recipient.

深受构建世界级软件团队的日常信赖

查看更多客户故事

npm install到用户验证,仅需两次调用

用您已熟悉的语言发送并验证验证码。

Create-or-retry 发送验证码;check 按接收方确认验证码。两次调用,无需在它们之间传递验证 ID。

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

十项您无需自行构建的功能 ——当验证就是 API。

具体的基础组件,命名清晰、可配置。绝不含糊。

  1. 01

    一次调用即可创建或重试。

    重新提交相同的接收方,我们会恢复当前会话,并在冷却时间过后重新发送。无需单独的重发端点,不会产生重复验证。

  2. 02

    按目标检查,无需存储。

    提交接收方和验证码;我们通过配置与接收方的组合解析会话。发送和检查之间无需持久化验证 ID。

  3. 03

    首发支持邮件、SMS 和 WhatsApp。

    The recipient you pass picks the channel: an email address verifies by email, a phone number by SMS or WhatsApp. Switching channels is a one-field change, not a new integration. Delivery failure can advance the verification to the next available channel. Voice is rolling out next.

  4. 04

    按国家/地区的通道顺序,已自动解析。

    通道顺序、发送者以及启用的通道因国家/地区而异。Bird 的国家/地区级基础配置会自动处理,因此一次创建调用即可在所有地区解析为正确的方案。

  5. 05

    您永远看不到的验证码。

    验证码通过加密随机源生成,仅以 HMAC 形式存储,并在恒定时间内进行比较。明文验证码不会触及您的技术栈或我们的日志。

  6. 06

    可配置的验证码、TTL 和尝试次数。

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

  7. 07

    每个验证码在会话结束前始终有效。

    延迟送达的消息和重新发送的验证码都可用于验证,因为我们不会在发送新验证码时使旧验证码失效。

  8. 08

    错误的验证码返回 200,而非异常。

    通过布尔结果校验答案——该验证码是否通过验证,是或否——并附带原因说明失败情况:无效、已过期、已验证或尝试次数用尽。您只需根据字段值进行分支判断,无需捕获抛出的异常。

  9. 09

    内置速率限制。

    按接收者的发送上限和按验证的猜测次数限制——每项超限均返回 429 及 Retry-After,让暴力攻击在耗尽您的资源之前先耗尽自身。

  10. 10

    与 Bird 其他产品相同的接口契约。

    Bearer 认证、幂等键、带类型的 vrf_ ID、统一错误信封。您为邮件编写的处理逻辑同样适用于验证。

在发送和验证之间无需存储任何内容。

大多数验证 API 会返回一个 ID,需要您持久化、查询并提交验证码进行校验。Bird 通过接收者解析会话,因此您无需维护任何按验证的状态。

大多数验证 API

创建请求返回一个您需要存储的 ID,然后查找该验证记录以校验验证码。

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

Bird Verify

按接收者校验。两次调用之间无需传递任何内容。

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();

路由已自动识别国家/地区。

通道顺序、发送者以及启用的通道因国家/地区而异:某些市场优先使用 WhatsApp,另一些则仅用 SMS。Bird 的国家/地区级基础配置会自动处理,因此一次创建调用即可解析为正确的方案。参见通道编排

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;

验证也是一项产品决策:同一 API 支持双因素认证无密码登录。需要先验证号码?搭配 Lookup 使用。静默网络认证和 TOTP 认证器应用已在路线图中。

我们为何构建 Verify

因为让用户登录的验证码不应该需要一张专属数据库表。

OTP 是这样一种渠道:验证码送达失败意味着注册流程中断。Bird 已大规模运行邮件和 SMS,因此 Verify 就是在此投递能力之上加上验证码生成、会话管理、按国家渠道方案和速率限制——仅需两个端点,您无需存储任何内容,响应格式与所有其他 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;

如果您已集成 SMS,就等于已集成 Verify。

相同的认证模型、相同的幂等性契约、相同的错误信封。不同之处在于 Verify 负责生成验证码、选择渠道并执行速率限制,您无需处理这些。

Verify

一次调用发送验证码,一次调用按接收者校验。验证码、会话和频率限制均由我们管理。

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

SMS

原始发送模式,适用于您希望自行控制验证码生成和重试策略的场景。

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

选择用户看到的发送者身份

验证码默认以 Bird Verify 的身份发送,无需注册或设置模板。将某个渠道切换为 Authifly 后,用户看到的将是一个中立的验证身份,而非平台供应商:OTP 邮件来自 otp@verify.authifly.com,SMS 在目的地国家允许品牌发送者的情况下显示 Authifly 发送者。Bird 同时运营两种身份,因此切换不会产生任何额外费用,且您可以按渠道和国家自由选择。在邮件渠道上,您还可以更进一步,使用您自己验证过的域名进行发送。如果收件人收到了意外的验证码,authifly.com 会向其确认 Authifly 是代表企业发送合法一次性验证码的服务。Authifly 由 Bird B.V. 运营。

访问 authifly.com

无需编写任何代码,即可发送第一个请求。

整个公开 API 以 Postman 集合形式提供,从生成 SDK 所用的同一份 OpenAPI 规范转换而来,每个端点都附带示例请求和响应。将它 Fork 到您自己的工作区,设置一个 API 密钥,即可发送实时请求。

验证服务与您的其他消息服务在同一平台上。

立即开始构建,或与我们沟通您所需的渠道、用量和定价方案。

您的信息

所有联系方式均为必填项。

方便我们的团队就演示事宜与您联系。

感兴趣的产品

选填

我们将与您联系以安排演示。
隐私政策

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

正在使用 Claude Code、Cursor 或 Codex?复制一条设置提示,您的智能代理即可自动安装 Bird CLI 和相关技能。选择您的工具:

Cursor