Start a carrier registration
Starts the US carrier registration that a number needs before SMS
delivers: 10DLC (standard company or sole-proprietor) or toll-free
verification. 10DLC needs brand + campaign; toll-free needs
tollFree. Approval is asynchronous; poll
GET /v1/sms/registrations/{id} (sole-prop registrations first need
the OTP step: a code is texted to the brand's mobile number, submit it
via /verify-otp).
Already have an approved registration? Add another number to it with
POST /v1/phone-numbers/{id}/sms/reuse-registration instead
of registering (and paying the carrier brand fee) again.
Rather have your client fill in the legal business details? Create a
share link with POST /v1/sms/registrations/share.
API key authentication - use your Zernio API key as a Bearer token
In: header
"standard_10dlc" | "sole_prop_10dlc" | "toll_free"Your numbers this registration covers. When omitted or empty on a 10DLC registration, defaults to your active SMS-enabled US local numbers not already covered by another registration.
Required for 10DLC. The legal entity behind the traffic (TCR brand).
Required for 10DLC. What you'll send and how recipients opt in/out.
The opt-in/opt-out/help auto-responses (optinMessage,
optoutMessage, helpMessage) are optional: when omitted, a
compliant, brand-named template with the carrier-required
disclosures is generated for you. If you do send them, they must
name the registered brand and carry the disclosures — submissions
that don't are rewritten to the compliant template before the
campaign is filed.
DBA / trade name used to brand message content (samples and auto-replies) when it differs from the legal name, e.g. a sole proprietor texting under a business name. The legal brand.displayName is still what the carrier vets.
2 <= length <= 60Raw dashboard-wizard answers, stored only to prefill edit-and-resubmit. API integrators can omit.
Resubmit a registration that was returned for changes — updates it in place instead of creating a new one.
Required for toll_free.
Response Body
application/json
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.sms.startSmsRegistration({ body: { registrationType: 'standard_10dlc', },});console.log(data);{
"registrationId": "string",
"status": "pending",
"awaitingOtp": true
}{
"error": "string",
"type": "invalid_request_error",
"code": "string",
"param": "string",
"platform": "string",
"platformError": {},
"details": {}
}{
"error": "Unauthorized"
}Create a registration share link POST
Creates a single-use, expiring link (valid 7 days) that lets someone else (whoever has the legal business details) fill in the carrier registration form for one of your numbers, without a Zernio login. The registration is created under your account once the form is submitted.
Upload opt-in form proof POST
Hosts a screenshot (or PDF) of your SMS opt-in form and returns its public URL. Include that URL in the campaign's `messageFlow` (the opt-in workflow text) — the carrier registry has no attachment field, so reviewers verify consent by opening links in that answer. Works before a registration exists (use it when registering) and for appeals. `/v1/sms/registrations/{id}/opt-in-proof` is an alias.