# Verify number ownership

`POST /v1/voice/verified-numbers/{verified_number_id}/verify`

Completes a number ownership verification challenge started in the dashboard. Submit
the code delivered by the verification call. An incorrect code is rejected.

If the verification call could not be started previously, this request can
retry it and place another call to the same number. Your organization must
still meet the identity-verification requirements for registering verified numbers;
otherwise the request returns `412`. For an expired or exhausted challenge,
use **Get a new code** under **Voice** > **Numbers** in the dashboard to remove
and register the verified number again. List verified numbers again to obtain the new
registration ID before submitting its code. Number registration and deletion
are not available through the public API.

A successful ownership check is retained even when organization eligibility
prevents outbound activation. If the verified number's `status` is `verified` after
a `412` or `503`, complete the missing steps or contact support, then
resubmit an empty object (`{}`). The saved proof is reused without checking
a code again. While proof is still pending, include the code; an empty
object is rejected. A `412` means missing verification steps or an
eligibility decision requiring support; a `503` means assessment is pending
or unavailable. `outbound_enabled` indicates whether activation has
completed. Outbound calls remain subject to routing and number ownership
requirements.

Activation attempts to enable the number's country as a Voice destination.
An unavailable country or a failed settings update can leave it disabled.
Check **Voice** > **Destinations** before calling; see the
[verified number guide](https://bird.com/docs/guides/voice/caller-ids).

## Code samples

**TypeScript**

```ts
const verifiedNumber = await bird.voice.verifiedNumbers.verify("vvn_01krdgeqcxet5s7t44vh8rt9mg", { code: "123456" });
console.log(verifiedNumber.id, verifiedNumber.status);
```

Examples: [TypeScript](/docs/api/reference/verify-voice-verified-number.ts.md) · [Python](/docs/api/reference/verify-voice-verified-number.py.md) · [Go](/docs/api/reference/verify-voice-verified-number.go.md) · [PHP](/docs/api/reference/verify-voice-verified-number.php.md) · [CLI](/docs/api/reference/verify-voice-verified-number.cli.md) · [MCP](/docs/api/reference/verify-voice-verified-number.mcp.md) · [cURL](/docs/api/reference/verify-voice-verified-number.curl.md)

## Example response `200`

```json
{
  "id": "vvn_01krdgeqcxet5s7t44vh8rt9mg",
  "workspace_id": "ws_01j8z5k2qvfpx9m3n7r4t6y8bc",
  "phone_number": "+14155551234",
  "name": "Support line",
  "status": "verified",
  "verified_at": "2026-09-23T10:15:00Z",
  "created_at": "2026-09-23T10:00:00Z",
  "updated_at": "2026-09-23T10:15:00Z"
}
```

## Path parameters

- `verified_number_id` (string)

## Request body

- `code` (string): The 6-digit verification code read out by the verification call. Required until ownership is verified. Omit it when retrying activation of an already verified number.

## Response body

- `id` (string, required): Unique identifier for this verified number.
- `workspace_id` (string, required)
- `phone_number` (string, required): The phone number in E.164 format registered as an outbound caller ID.
- `name` (nullable string, required): Your label for this verified number, to tell several registered numbers apart. `null` when the verified number has no label. It is yours to choose and appears nowhere on a call, so changing it never affects what the person you are calling sees. Set it with the verified number update operation.
- `status` (string, required)

  Verification state of the verified number.

  - `pending`: the number is registered but ownership has not yet been proven.
  - `verified`: the workspace proved ownership of the number. Check the
    resource's activation or direction fields for outbound availability.
  - `failed`: terminal because the verification challenge expired or the attempt limit was exhausted.
    Remove and register the verified number again in the dashboard to retry.

  Open enum: additional states may be added over time, so treat an unrecognized
  value as a future state rather than an error.

  Possible values (may grow over time): `pending`, `verified`, `failed`
- `outbound_enabled` (boolean, required): Whether outbound caller ID activation has completed. A verified number can remain inactive until activation requirements are met. Outbound calls remain subject to routing and number ownership requirements.
- `verified_at` (nullable string, required): When the verified number was verified. `null` when its status is `pending` or `failed`.
- `created_at` (string, required)
- `updated_at` (string, required)

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
