Skip to main content

Country Compliance Requirements

Messaging and voice rules are set country by country. Before you send to a new market you need to know four things: which sender types that country accepts (a long code? an alphanumeric Sender ID? a short code?), whether registration is required, what documents you must supply, and which content is restricted. Getting this wrong is the most common reason first sends to a new country silently fail to deliver. Orbit maintains a curated, per-country regulatory reference so you do not have to assemble this yourself. This page explains how to read it.
This reference is guidance to help you plan, not a delivery guarantee or legal advice. Final approval of a Sender ID or registration is granted by the regulator or carrier in each country, not by Orbit. Coverage is enabled per tenant — a country appearing here does not mean it is enabled on your account.

Look up a country’s rules

GET /compliance/country-rules is the read-only regulatory reference behind Orbit’s send-time gates. Any authenticated user can call it. Filter by channel (defaults to sms) and optionally by region:
Each row describes one country × channel:
The channel filter accepts sms, whatsapp, rcs, voice, email, and viber. The same country has separate rows per channel because different channels answer to different regulators — for example Meta’s WABA rules govern WhatsApp in Brazil while Anatel’s rules govern SMS.

Reading each field

Sender types


The registration levels

The registration field is the single most important value to read before launching. It drives Orbit’s send-time gate:
No Sender-ID registration is required. You can start sending once the channel and country are enabled on your account.
Traffic is blocked until you have an approved Sender-ID registration for the country. A2P SMS to a required country with no approved entry is held by the send-time gate. Register and get approved before launch — see Sender-ID Registration.

Documentation each country expects

Where a country requires (or recommends) registration, you submit supporting documents once, then reference them by their doc_… IDs when you register a Sender ID. The exact set varies by market, but most regulators ask for some combination of:
  • Proof of business registration — certificate of incorporation, business license, or equivalent.
  • A use-case description — what you send (transactional, OTP, marketing) and to whom.
  • Brand ownership / authorization — proof you are entitled to the Sender ID / brand name you are registering.
  • Local tax or regulator ID — for markets that key registration to a national identifier.
Read the target country’s sender_rules and content_restrictions in the country-rules response for the specifics, then attach the matching documents when you submit the registration. Some markets run their own dedicated registration regime rather than the generic Sender-ID flow:
  • India — Sender IDs (“Headers”), content templates, and consent templates register through the TRAI DLT portal. See DLT-India Onboarding.
  • United States — A2P SMS senders register a brand and campaign via 10DLC. See the 10DLC Registration guide.

A launch checklist for a new country

1

Look up the rules

Call GET /compliance/country-rules?channel=<channel> for the destination and read sender_types, registration, and content_restrictions.
2

Pick an accepted sender type

Choose a sender identity from that country’s sender_types — an alphanumeric Sender ID, a long code, a short code, or a channel-native sender (WABA / RCS agent).
3

Register if required

If registration is required (or recommended), upload your documents and submit the Sender ID for approval. Plan lead time — some markets take days to weeks.
4

Check content restrictions

Confirm your use case is allowed against content_restrictions and Restricted & Prohibited Industries, and add the required opt-out keyword if stop_requirement calls for one.
5

Launch

Once the country is enabled, the sender type is accepted, and any required registration is approved, start sending.

Maintaining the rules source (platform operators)

This section is for platform operators and self-hosted deployments. SaaS customers on api.orbit.devotel.io can stop here — Devotel keeps the country rules current for you, and the endpoints below are gated to platform admins.
The country-rules reference is fed by scheduled upstream syncs plus manual operator edits. This section covers how to keep it fresh and how to edit a single country safely. The endpoints that write to the rules table are platform-admin only — tenant owners and admins get a 403, because the rules table is global across all tenants, not per-tenant data.

Feed sources

Each row’s sync_source records which feed last refreshed it. Six providers plug into the sync endpoint: Two adjacent feeds feed their own tables:
  • Telnyx coverage for the legacy sender-ID matrix — the read endpoints behind the sender-ID compliance matrix draw from a separate legacy table. Refresh it with POST /api/v1/compliance/admin/sync (admin only; same weekly scheduler also refreshes it automatically).
  • Reassigned Numbers Database (RND) — the US disconnected-number gate documented under Deactivation scrubbing. Tenants enable it per tenant via PUT /api/v1/compliance/rnd/settings with { "enabled": true }; the toggle refuses to switch on until an operator has loaded an RND snapshot into the deployment, so tenants cannot opt into an empty gate.

Run an upstream sync

POST /api/v1/compliance/country-rules/sync refreshes from one provider. Pick the feed with ?provider= (defaults to telnyx) and optionally scope to one ?channel=.
The response reports upstreamCount, updated, createdNew, and an errors array. A sync never overwrites operator-curated prose — only structural fields (country name, calling code, region, sender types, registration level) are refreshed; the free-text fields (sender_rules, content_restrictions, notes) keep whatever an operator last wrote.

Feed cadence

Two paths keep the table current:
  • Weekly scheduler — the webhook-worker’s compliance-sync tick runs the Telnyx, MEF, and GSMA feeds automatically. It also runs once at worker startup, so a fresh deployment seeds itself on first boot.
  • On-demand — the admin “Refresh from upstream” action calls the sync endpoint above for an immediate pull (useful right after you provision a new feed credential).
Staleness is checked against last_synced_at, which the read endpoint returns alongside the rows. Manual edits stamp last_reviewed_at instead, so the dashboard can show provenance (“Synced from MEF 3 days ago; reviewed by ops yesterday”) rather than a single ambiguous timestamp.

Failure handling

Every connector is optional and fail-open: when its credential env var is unset the sync logs a skip message and returns an entry in errors, and existing rows stay in place. The same applies on an upstream outage — the response carries the error text while previously synced data remains readable. These are read-only metadata feeds on a lookup path; outbound messaging continues to route through your normal sender while a feed is down.
Sync providers touch only coverage metadata. They are never a transport path — do not attempt to route outbound messaging through any of the coverage feeds listed here.

Edit a single country

PUT /api/v1/compliance/country-rules/:channel/:country_code upserts one country × channel row. Use it to supply details no feed carries — for example STOP-keyword wording or throughput limits picked up from regulator text. Platform-admin credentials are required; tenant admins receive a 403.
Editable fields: sender_types, registration (none / recommended / required), sender_rules, content_restrictions, stop_requirement, two_way, dlr_support, default_tps, notes, and sources (a [{ label, url }] list of attribution links). The upsert stamps last_reviewed_at and marks the row sync_source: manual, so a later auto-sync refreshes only the structural fields and leaves your prose alone.

Validation checklist before you flip a country live

Before you turn a country on for sending, confirm:
1

Fresh sync stamp

last_synced_at (or, for the legacy matrix, last_verified_at) is recent — otherwise run the on-demand sync for the relevant provider before enabling.
2

Correct registration level

registration is set (none / recommended / required). A required country blocks unregistered traffic at send time, so a missed registration review means failed sends, not delayed ones.
3

Prose fields reviewed

stop_requirement and content_restrictions say what they should — feeds only refresh structure, so prose must be set by an operator.
4

Sender type accepted

At least one of the country’s sender_types matches what you plan to send from.
5

Related gates loaded

If the destination has an RND or DLT gate (US RND, India DLT), confirm that feed is loaded too — see Deactivation scrubbing and DLT-India Onboarding.