> ## Documentation Index
> Fetch the complete documentation index at: https://help.getvero.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SMS phone number format

> How to format the phone_number property so Vero can validate and deliver your SMS messages.

Vero stores a user's phone number in the `phone_number` property and uses it as the delivery address for every SMS you send. Phone numbers should be stored in **E.164 format**, the international standard for phone numbers.

Vero is forgiving about how you punctuate a number, but strict about one thing: it must carry a country code. Numbers without one can't be delivered.

## The E.164 format

An E.164 number is made up of three parts:

```
+[country code][subscriber number]
```

* **A leading `+`** — for example `+61412345678`.
* **The country code** — `1` for the United States and Canada, `61` for Australia, `44` for the United Kingdom.
* **The subscriber number** — the national number, with any leading trunk zero removed.

The whole number, not counting the `+`, is a maximum of 15 digits.

### What Vero accepts

Separators are stripped before the number is checked, so all of these are read as the same valid number:

| Value             | Result                                              |
| ----------------- | --------------------------------------------------- |
| `+61412345678`    | Valid                                               |
| `+61 412 345 678` | Valid — spaces are ignored                          |
| `+61.412.345.678` | Valid — dots are ignored                            |
| `61412345678`     | Valid — the `+` is optional                         |
| `0061412345678`   | Valid — the `00` international prefix is understood |

We recommend storing numbers as plain E.164 (`+61412345678`) anyway. It's unambiguous, it's what Vero displays back to you, and it avoids relying on the tolerances above.

### Formats to avoid

<Warning>**A number with no country code will never be delivered.** There is no default country — Vero can't assume one from your account or the recipient's other data, and a `region_code` on the profile can't rescue it. A national-format number is rejected outright.</Warning>

* `0412345678`, `07911123456`, `(555) 123-4567` — national formats with no country code. These are the most common cause of undelivered SMS. If you collect numbers from users in a single country, add the country code before sending them to Vero.
* **Placeholder and test numbers.** Vero checks numbers against each country's real numbering plan, not just their shape. Reserved ranges used in examples and test data — such as US `555-01xx` numbers or UK `07700 900xxx` numbers — are well formed but not valid, and will fail. Use real numbers when testing.
* **Numbers with trailing text.** An extension written as `+61412345678;123` is tolerated, but `+61412345678 ext 12` is not — the extension digits get absorbed into the number and corrupt it.

<Note>Passing the check means a number is well formed for its country's numbering plan. It does not mean the number is in service — a correctly formed number in a valid range will pass even if nobody holds it.</Note>

## Adding a phone number to a profile

You can set `phone_number` when you identify a user via the API:

```javascript theme={null}
vero.tracker.user.identify({
    id: "user_123",
    email: "alex@example.com",
    phone_number: "+61412345678",
    data: {
        first_name: "Alex",
        last_name: "Example"
    }
})
```

You can also supply a `phone_number` column when you [import an audience from a CSV](/vero-2/campaigns/broadcasts/adding-an-audience-to-your-campaign). The same format requirements apply.

Only *one* phone number can be stored per profile. Read more about [channel addresses on user profiles](/vero-2/user-profiles/understanding-user-profiles).

## When phone numbers are checked

<Warning>Phone numbers are **not** validated when you add them. A badly formatted number is accepted onto the profile and into your audience, and looks no different to a valid one. It fails later, per-recipient, at the moment Vero tries to send.</Warning>

This means a poorly formatted number won't stop your campaign from launching, and you won't see a warning while building your audience. If a country's numbers are being stored in national format, every one of those recipients is dropped individually at send time — so check your campaign logs, not your audience, when SMS aren't arriving.

A check runs as part of [quiet hours compliance](/vero-2/channels/sms/sms-quiet-hours-compliance), which applies to marketing messages. Vero uses the country code to work out which country a recipient is in, and therefore which quiet hours apply to them.

Vero stores the number exactly as you submit it — it isn't rewritten to E.164 on your behalf, so the value on the profile is always the value you sent.

<Tip>Store a `region_code` property on each profile — a timezone name like `Australia/Sydney` or `America/New_York` — so Vero can determine a recipient's timezone directly instead of estimating it from their phone number. Note that `region_code` supplies the timezone only; it can't stand in for a missing country code.</Tip>

## Troubleshooting

If your SMS messages aren't sending, check your campaign logs for these errors:

* **`Invalid phone number`** — the value in `phone_number` isn't a valid number. The usual causes are a missing country code, or a placeholder number from a reserved range.
* **`Unknown country`** — Vero couldn't determine a country from the number. This almost always means the country code is missing.
* **`Unknown region`** or **`Unknown timezone`** — Vero couldn't resolve a location or timezone for the recipient. Add a `region_code` to the profile.

Read more about [SMS quiet hours compliance](/vero-2/channels/sms/sms-quiet-hours-compliance) for the full list of reasons a message may not be sent.
