Zernio
APIFor you
Zernio
APIFor you
API Reference

SMS

Messaging

Send an SMS/MMSPOSTLook up carrier + line typeGETList SMS opt-outsGET

Number Setup

Enable SMS on a numberPOSTDisable SMS on a numberDELETEAdd number to SMS registrationPOST

Registrations

List carrier registrationsGETPre-check a carrier registrationPOSTStart a carrier registrationPOSTGet a carrier registrationGETCreate a registration share linkPOSTDeactivate a brand/campaign registrationDELETE

Registration Review

Appeal a rejected campaignPOSTReply to a change requestPOSTUpload opt-in form proof for an appealPOSTUpload opt-in form proofPOSTRe-send the sole-prop OTPPOSTSubmit the sole-prop OTPPOST

Sender IDs

List alphanumeric sender IDsGETCreate an alphanumeric sender IDPOSTDelete an alphanumeric sender IDDELETERequest a higher sender ID daily limitPOST
Dashboard
OverviewPlatformsAPI ReferenceResources
SMS

Reply to a change request

Replies to a reviewer change request on a registration in changes_requested state: a note, hosted document URLs (from POST /v1/sms/opt-in-proof), or both, sent together. When the request was written as points (reviewRequest on the registration), send one entry in answers per point. The registration returns to requested (back in review), and you do not need to resubmit the whole registration. A rejected registration can also be answered when we asked for changes to fix it (reviewRequest set); it stays rejected. To change the submitted brand/campaign fields themselves, resubmit via POST /v1/sms/registrations with resubmitRequestId instead.


POST
/v1/sms/registrations/{id}/respond

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

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.respondToSmsRegistrationReview({  path: {    id: 'abc123',  },  body: {    note: 'string',    files: [      'string',    ],    requestId: 'request_abc123',  },});console.log(data);
{  "status": "requested"}
Was this page helpful?

Appeal a rejected campaign

Appeals a rejected 10DLC campaign with the carrier registry. Only a registration that reached campaign creation can be appealed; a brand-level rejection should be fixed and re-verified instead. On success the registration returns to `pending`. Content rejections (e.g. an opt-in flow without a verifiable form link, or unrealistic samples) should be FIXED in the same call: pass the corrected `messageFlow` / `sample1` / `sample2` and the campaign is updated before the appeal is filed, so the reviewer sees the new content. The current content is on `GET /v1/sms/registrations/{id}` (`campaignContent`).

Upload opt-in form proof for an appeal

Hosts a screenshot (or PDF) of your SMS opt-in form and returns its public URL. Carrier reviewers reject campaigns whose consent can't be verified and ask for a "link/screenshot of the opt-in form". The registry has no attachment field, so include the returned URL inside the `messageFlow` you submit with the appeal (`POST /v1/sms/registrations/{id}/appeal`).

note?string

Answer for the reviewer. Required when no files are sent.

Lengthlength <= 2000
files?array<string>

Hosted document URLs returned by POST /v1/sms/opt-in-proof.

Itemsitems <= 5
requestId?string

The reviewRequest.id you are answering. When it no longer matches the open request the reply is refused with 409.

answers?array<>

One answer per point of the open reviewRequest, each point at most once. Required (every point) when the request has points; a missing, repeated or unknown point is a 400 naming the point ids. At most 10 files per reply.

Itemsitems <= 20