SMS HTTP API Documentation

Security Recommendations

For production integrations, always prefer HTTPS and pass credentials via the Authorization header or HTTP Basic Auth, instead of placing username/password directly in a GET URL. Query-string credentials can be exposed in server logs, browser history, and referrer headers.

01

Overview

The Get Verified SMS HTTP API allows you to send SMS messages and check delivery status via simple HTTP requests. Replace <your-api-host> below with the host provided to you at onboarding. Code examples are shown in curl, Node.js, and Python — click a tab to switch.

02

Sending a Message

GETHTTP
http://<your-api-host>:8001/api?username=<username>&password=<password>&ani=<ani>&dnis=<dnis>&message=<message>&command=submit&serviceType=<serviceType>&longMessageMode=<longMessageMode>
const params = new URLSearchParams({
  username: '<username>',
  password: '<password>',
  ani: '<ani>',
  dnis: '<dnis>',
  message: '<message>',
  command: 'submit',
  serviceType: '<serviceType>',
  longMessageMode: '<longMessageMode>'
});

const response = await fetch(`http://<your-api-host>:8001/api?${params}`);
const data = await response.json();
import requests

params = {
    'username': '<username>',
    'password': '<password>',
    'ani': '<ani>',
    'dnis': '<dnis>',
    'message': '<message>',
    'command': 'submit',
    'serviceType': '<serviceType>',
    'longMessageMode': '<longMessageMode>'
}

response = requests.get('http://<your-api-host>:8001/api', params=params)
print(response.json())
POSTCredentials in URL
curl -H 'Content-Type: application/json' -X POST \
  -d '{"ani":"ani","dnis":"dnis","message":"test"}' \
  'https://<your-api-host>:8002/api?command=submit&username=username&password=password'
const response = await fetch(
  'https://<your-api-host>:8002/api?command=submit&username=username&password=password',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ ani: 'ani', dnis: 'dnis', message: 'test' })
  }
);
import requests

response = requests.post(
    'https://<your-api-host>:8002/api',
    params={'command': 'submit', 'username': 'username', 'password': 'password'},
    json={'ani': 'ani', 'dnis': 'dnis', 'message': 'test'}
)
POSTCredentials in JSON body
curl -H 'Content-Type: application/json' -X POST \
  -d '{"username":"username","password":"password","command":"submit","ani":"ani","dnis":"dnis","message":"test"}' \
  'https://<your-api-host>:8002/api'
const response = await fetch('https://<your-api-host>:8002/api', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    username: 'username',
    password: 'password',
    command: 'submit',
    ani: 'ani',
    dnis: 'dnis',
    message: 'test'
  })
});
import requests

response = requests.post('https://<your-api-host>:8002/api', json={
    'username': 'username',
    'password': 'password',
    'command': 'submit',
    'ani': 'ani',
    'dnis': 'dnis',
    'message': 'test'
})

Note: To send the same message to multiple recipients, provide several comma-separated numbers in the dnis field.

03

Parameters

ParameterDescriptionRequired
commandRequest type: submit, query, or mo. To send a message, use command=submit.Required
dnisDestination number in international E.164 format (up to 15 digits). Max 2048 characters or 100 numbers per request; longer requests are rejected with 400 Bad Request. Duplicate numbers in the same request are only sent once. Cannot contain multiple numbers when longMessageMode=split_or_payload.Required
messageMessage text. Must be URL-encoded for GET requests.Required
usernameAPI login.Required
passwordAPI password. Prefer sending via HTTPS + Authorization header rather than in the URL.Required
serviceTypeService type assigned by Get Verified for your interconnection. Max 9 bytes. Can be left blank.Required
aniCaller ID / Sender ID. Alphanumeric, up to 32 characters. Some destinations may impose additional restrictions.Optional
dataCodingCharacter encoding for the outgoing message. Integer. Allowed: 0 (SMSC default), 1 (IA5/ASCII), 3 (Latin-1), 6 (Cyrillic), 7 (Latin/Hebrew), 8 (UCS2), 10 (ISO-2022-JP), 14 (KS C 5601).Optional
esmClassCorresponds to the SMPP parameter of the same name. Integer, 0–255.Optional
flashMarks the message as a flash SMS. 0 = regular, 1 = flash (shown on screen, not stored). Does not change the data coding.Optional
longMessageModeHow long messages are handled: cut (default, trims to 140 bytes), split / split_sar (splits into segments with different headers), single_id_split (splits but keeps one message ID), payload (sends full text in the payload field), split_or_payload (for HTTP-to-SMPP delivery; not supported with multiple DNIS).Optional
incMsgIdYour own message ID (max 124 bytes) to correlate requests, useful when no routes are available. For split messages, the same ID is reused per segment with a suffix (e.g. -1, -2).Optional
srcTon, srcNpi, dstTon, dstNpiSender/destination type and numbering plan indicators. Integer.Optional
priorityFlagCorresponds to the SMPP parameter of the same name. Allowed: 0, 1.Optional
registeredDeliveryCorresponds to the SMPP parameter of the same name. Allowed: 0, 1.Optional
replaceIfPresentFlagCorresponds to the SMPP parameter of the same name. Allowed: 0, 1.Optional
silentSends a silent SMS (no sound, not shown on screen). 0 = not silent; any other explicit value is treated as silent. Actual behavior depends on the destination carrier.Optional
validityPeriodMessage validity, in relative (e.g. 000002000000000R = 2 days) or absolute (e.g. 241222080910000- = valid until Dec 22 2024, 08:09:10 GMT) format.Optional
04

Checking Delivery Status

ParameterDescriptionRequired
usernameAPI login.Required
passwordAPI password.Required
messageIdThe message ID returned when the message was submitted.Required
commandMust be set to query.Required

Example response:

{"status": "DELIVRD", "delivery_time": "20260728093309"}

delivery_time format: YYYYMMDDHHMMSS, UTC.

05

Response Formats

200 OKSuccess — single recipient
Content-Type: application/json

{"message_id":"alss-a1b2c3d4-e5f67890"}
200 OKSuccess — multiple recipients or split message
Content-Type: application/json

[{"dnis":"34511121","message_id":"5b4c46a8-8dc9-44b4-f55f-3bef56819305","segment_num":"1"},
 {"dnis":"34511121","message_id":"5b4c46a8-46bc-7ee6-4a16-7d4e5a0d14af","segment_num":"2"}]
400 Bad RequestNo route available
Content-Type: text/html; charset=UTF-8

NO ROUTES
401 UnauthorizedInvalid credentials
Content-Type: text/html; charset=UTF-8

not authorized (check login and password)
400 Bad RequestInvalid service type
Content-Type: text/html; charset=UTF-8

Service type is invalid
508 Loop DetectedLoop detected
Content-Type: text/html; charset=UTF-8

loop detected