Sender IDs
Send branded international SMS from a name like ZERNIO instead of a phone number
Sender IDs
An alphanumeric sender ID lets your messages arrive from your brand name ("ZERNIO") instead of a phone number, the way banks and airlines text. There is no number to buy, no monthly fee, and no US carrier registration: create a name once, then use it as from when sending.
Sender IDs are one-way and international only. They cannot reach the US, Canada, or Puerto Rico, recipients cannot reply, and only text is supported (no MMS). For two-way conversations or US recipients, send from a phone number instead.
Quick Reference
| Property | Value |
|---|---|
| Format | 3-11 characters: letters, digits, spaces (at least one letter) |
| Direction | One-way only, recipients cannot reply |
| Destinations | International only, never US / Canada / Puerto Rico |
| Content | Text only (no MMS) |
| Cost | Same per-segment rate as regular SMS, the name itself is free |
| Daily limit | 500 messages/day per workspace by default, raisable on request |
| US registration | Not required (10DLC does not apply) |
Create a sender ID
createSmsSenderId (POST /v1/sms/sender-ids) registers the name. It is usable immediately.
curl -X POST "https://zernio.com/api/v1/sms/sender-ids" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"senderId": "ZERNIO"}'Names are vetted at creation:
- Names that impersonate well-known brands or institutions (payment providers, delivery carriers, banks, government) are rejected with a
422. - Active sender IDs are globally unique: a name already registered by another workspace returns a
409(sender_id_taken), first come, first served. - A workspace can hold up to 5 active sender IDs (
403 sender_id_limit_reachedbeyond that; contact support to raise it).
List your names with listSmsSenderIds (GET /v1/sms/sender-ids), remove one with deleteSmsSenderId (DELETE /v1/sms/sender-ids/{id}). Deleting deactivates the name; creating it again restores it.
Send from it
Pass the sender ID as from on the regular send endpoint, everything else is unchanged.
const { data } = await zernio.sms.sendSms({
body: {
from: 'ZERNIO',
to: '+34612345678',
text: 'Your verification code is 482913',
}
});
console.log(data.id, data.status);curl -X POST "https://zernio.com/api/v1/sms/messages" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from": "ZERNIO", "to": "+34612345678", "text": "Your verification code is 482913"}'Delivery works like any SMS: track it with the message.delivered / message.failed webhooks, and each segment bills at the destination country's SMS rate.
Sending to the US, Canada, or Puerto Rico from a sender ID returns a 403 (alpha_destination_not_supported) before the message reaches the carrier. Attaching mediaUrls returns a 403 (mms_not_supported).
Country behavior
Most of Europe and many other markets display alphanumeric senders as-is. Some countries substitute a numeric sender to guarantee delivery, and a few (for example India and the UAE) require the name to be pre-registered with local carriers before it displays; contact support if you need a registration-required destination.
Daily limits
Each workspace has a daily sender-ID message budget, shared across all its names and reset at midnight UTC:
| Level | Messages / day |
|---|---|
| 1 (default) | 500 |
| 2 | 2,000 |
| 3 | 10,000 |
| 4 | 25,000 |
Hitting the cap returns a 429 (alpha_daily_limit_reached). Request a higher level with requestSmsSenderIdLimitIncrease (POST /v1/sms/sender-ids/limit-request), including your use case and audience, requests are reviewed within a business day, and GET /v1/sms/sender-ids reports your current budget, level, and any pending request.