Developers
Build with the Inalambria APIs
REST APIs for SMS, RCS, WhatsApp and Email, plus SMPP connections and file-based sending. Token authentication, JSON payloads and status notifications delivered to your own infrastructure.
Overview
Each service has its own host:
| Service | Host |
|---|---|
| SMS, RCS, token and monitoring | https://rest.inalambria.com |
https://multichannel.inalambria.com | |
https://emailrest.inalambria.com | |
| SMPP | smsc.inalambria.com · smscssl.inalambria.com |
Requirements: a sending account configured by Inalambria, authentication credentials and an HTTPS connection. Some services (RCS, notifications, monitoring, files) must be enabled first.
This page summarizes the official reference. For full details on each endpoint see docs.inalambria.com .
Quickstart
- 1
Request your account
Inalambria configures your sending account and gives you a username and password.
- 2
Get a token
POST /tokenwith Basic Authentication andgrant_type: password. - 3
Send your first SMS
POST /mtmessagewith the Bearer Token. Keep theTransactionNumber. - 4
Receive statuses
Enable the account webhook or the per-request callback.
# 1. Request a token (Basic Authentication with your credentials)
TOKEN=$(curl -s -X POST https://rest.inalambria.com/token \
-u "$INALAMBRIA_USER:$INALAMBRIA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{"grant_type": "password"}' | jq -r '.access_token')
# 2. Send an SMS (Colombia: 12 digits, 57 + mobile)
curl -X POST https://rest.inalambria.com/mtmessage \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Type": 1,
"MessageText": "Your order PEDIDO-4471 is on its way",
"Devices": "573001234567",
"CustomMessageId": "PEDIDO-4471"
}'// Node.js 18+
const BASE = 'https://rest.inalambria.com';
async function getToken() {
const basic = Buffer.from(`${process.env.INALAMBRIA_USER}:${process.env.INALAMBRIA_PASSWORD}`).toString('base64');
const res = await fetch(`${BASE}/token`, {
method: 'POST',
headers: { Authorization: `Basic ${basic}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ grant_type: 'password' }),
});
const { access_token } = await res.json(); // default lifetime: 4 hours
return access_token;
}
const token = await getToken();
const res = await fetch(`${BASE}/mtmessage`, {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
Type: 1,
MessageText: 'Reminder: your appointment is tomorrow at 8:30 am',
Devices: '573001234567',
}),
});
console.log(await res.json()); // { TransactionNumber, Status: 0 | 1, MessageText }# Python 3 + requests
import os, requests
BASE = "https://rest.inalambria.com"
token = requests.post(
f"{BASE}/token",
auth=(os.environ["INALAMBRIA_USER"], os.environ["INALAMBRIA_PASSWORD"]),
json={"grant_type": "password"},
timeout=10,
).json()["access_token"]
resp = requests.post(
f"{BASE}/mtmessage",
headers={"Authorization": f"Bearer {token}"},
json={
"Type": 1,
"MessageText": "Your October invoice is now available",
"Devices": "573001234567-573007654321", # several destinations separated by a hyphen
"DateMessage": "2027-01-15 08:00:00", # scheduled send (optional)
},
timeout=10,
)
print(resp.status_code, resp.json())
Authentication
- Token:
POST /tokenwith Basic Authentication (Base64 username and password) and the body{"grant_type": "password"}. The response includesaccess_token,expires_in,refresh_tokenandtoken_type. - By default a token lasts 4 hours and each account has 1 active token: requesting a new one expires the previous one. Both can be extended on request.
- To renew it without credentials, send
{"grant_type": "refresh_token", "refresh_token": "..."}. - SMS and RCS use
Authorization: Bearer <token>(recommended) or Basic. WhatsApp uses Basic. Email uses thex-api-keyheader. - Requests from unauthorized IP addresses receive
403.
SMS: POST /mtmessage
| Field | Description |
|---|---|
Type* | 1 bulk (same text), 2 personalized (MessagePattern + MessageData), 3 template (TemplateId + MessageData). |
Devices | Recipients separated by a hyphen: 573XXXXXXXXX-573YYYYYYYYY. |
MessageText | Message text (bulk mode). |
Channel | SMS (default) or RCS. |
DateMessage | Scheduling: yyyy-MM-dd HH:mm:ss. |
FlashSMS | 1 for a flash SMS. |
Url | Long URL to shorten and insert in the message. |
HasMore / TransactionNumber | Split sends under a single transaction number. |
CustomMessageId / CallbackData | Your own data, returned in the status notification. |
Response: TransactionNumber (28 digits), Status (0 accepted, 1 rejected) and MessageText with the rejection reason.
Format: Colombian numbers with 12 digits (57 + mobile) and E.164 elsewhere. There is no character limit, but staying under 500 is recommended.
RCS
RCS uses the same /mtmessage endpoint with "Channel": "RCS". The account and RCS agent must be configured first.
# RCS: same endpoint with "Channel": "RCS" (requires prior account set-up)
curl -X POST https://rest.inalambria.com/mtmessage \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Type": 1,
"Channel": "RCS",
"MessageText": "Your order PEDIDO-4471 arrives today between 2 and 5 pm",
"Devices": "573001234567"
}'
Batch: POST /mtmessage/massive
Several messages, each with its own destinations list, in a single request. Each message supports flash, shortCode, notifyUrl, notifyContentType and callbackData (text); at the root, bulkId groups the campaign.
# Batch: several messages and recipients in one request, with per-request notification
curl -X POST https://rest.inalambria.com/mtmessage/massive \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"bulkId": "CAMPANA-001",
"messages": [
{
"destinations": [
{ "to": "573001234567", "messageId": "1" },
{ "to": "573007654321", "messageId": "2" }
],
"text": "Your installment is due on December 5",
"notifyUrl": "https://tu-servidor.example/inalambria/estado?token=TU_TOKEN",
"callbackData": "{\"campana\": \"cobro-dic\"}"
}
]
}'
Two-way SMS: POST /momessage
Send from your assigned short code (ShortCode) to receive replies. Returns Id, Message (OK or ERROR) and Status. User replies can also be received over SMPP (Receiver mode).
# Two-way: send from your assigned short code
curl -X POST https://rest.inalambria.com/momessage \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"MessageText": "Confirm your Thursday appointment? Reply 1 for Yes, 2 for No",
"PhoneNumber": "573001234567",
"ShortCode": "12345"
}'
Status notifications
| Mode | Use | Your endpoint’s auth |
|---|---|---|
| Account webhook | With /mtmessage. The URL is configured on your account (activation can take up to 10 minutes). | Basic or token in the URL |
| Per-request callback | With /mtmessage/massive. The URL travels in notifyUrl. | Token in the URL |
- Both are enabled by writing to support with the sending accounts and the receiving URL.
- One request per message arrives (
resultshas a single element) when the operator accepts or rejects it;smsCountshows the segments. - Reply
2xx. Only503triggers retries: up to 5, after 10, 20, 30, 40 and 50 seconds. Any other code or no response is not retried. - Be idempotent on
transactionNumber+toand don’t assume ordering. status.nameisDELIVERED_TO_HANDSETon success andNO_SUCCESSon failure.
// Delivery status receiver (Node.js)
import http from 'node:http';
const seen = new Set();
http.createServer((req, res) => {
if (req.method !== 'POST' || !req.url.startsWith('/inalambria/estado')) {
res.writeHead(404).end();
return;
}
let body = '';
req.on('data', (chunk) => (body += chunk));
req.on('end', () => {
// Acknowledge with 2xx right away; reply 503 only if you want a retry.
res.writeHead(200).end();
const [result] = JSON.parse(body).results; // always a single element
const key = `${result.transactionNumber}:${result.to}`;
if (seen.has(key)) return; // idempotency
seen.add(key);
console.log(result.messageId, result.status.name, result.smsCount);
});
}).listen(8080);
Send Meta-approved templates with source, destination, templateId and parameters (in the template’s exact order). A 200 confirms receipt and creates a transaction number, not final delivery.
# WhatsApp with an approved Meta template (Basic Authentication)
curl -X POST https://multichannel.inalambria.com/MultiChannelInput/SendMessageMetaWhatsApp \
-u "$INALAMBRIA_USER:$INALAMBRIA_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"source": "573000000000",
"destination": "573000000001",
"templateId": "ID_PLANTILLA",
"parameters": ["Ana", "PEDIDO-4471"]
}'
frommust belong to a sender domain verified for your account.- Use
templateId(seeGET /email/v1/templates) orhtmlwithsubject.{{variable}}placeholders are filled fromfields. - Up to 50 recipients per request; base64 attachments (up to 10 files and 8 MB; the full request cannot exceed 20 MB).
# Email with a stored template (x-api-key header)
curl -X POST https://emailrest.inalambria.com/email/v1/deliver \
-H "x-api-key: $INALAMBRIA_EMAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "notificaciones@tu-dominio-verificado.example",
"fromName": "Your company",
"templateId": "TEMPLATE_ID_ASIGNADO",
"payload": [
{ "recipient": "usuario@example.com", "fields": { "nombre": "Ana" } }
]
}'
# Returns 202: check overallStatus, errors and each recipient status.
SMPP and files
| Connection | Host | Port |
|---|---|---|
| SMPP without SSL | smsc.inalambria.com | 5020 |
| SMPP with SSL/TLS | smscssl.inalambria.com | 6011 |
| Inbound messages (MO), Receiver mode | smscmo.inalambria.com | 6900 |
Bind modes: Transceiver, Transmitter or Receiver, using the System ID and password Inalambria provides.
SMS by file: drop a .txt file (personalized: number and message per line; or bulk: one message for many numbers) in a configured SFTP site or S3 bucket, and the sends are generated within minutes.
Monitoring
GET /platformmonitory: operator status, whether they act as alternates and their delivery time, as close to real time as possible.GET /bireports/effectivitybyclient: processing times by status (last 15 minutes).GET /bireports/msgmtclient: messages processed by operator and status (last 15 minutes).
Value-added services: they must be enabled first.
Response codes
| Code | Meaning |
|---|---|
| 200 | Received and processing (or token issued). |
| 202 | Email: request registered; check each recipient’s status. |
| 400 | Invalid payload structure. |
| 401 | Unauthorized: check your credentials. |
| 403 | Insufficient permissions, for example an IP that is not allowed. |
| 500 | Internal error: retry in a few minutes or contact support. |
Service catalog
| Service | Endpoint | Host | Auth | Reference |
|---|---|---|---|---|
| Request token | POST /token | rest.inalambria.com | Basic | View |
| One-way SMS / RCS | POST /mtmessage | rest.inalambria.com | Bearer | View |
| Batch SMS | POST /mtmessage/massive | rest.inalambria.com | Bearer | View |
| Two-way SMS | POST /momessage | rest.inalambria.com | Bearer | View |
| Account webhook | Inalambria → your server | — | Basic or URL token | View |
| Per-request callback | Inalambria → your server | — | URL token | View |
POST /MultiChannelInput/SendMessageMetaWhatsApp | multichannel.inalambria.com | Basic | View | |
| Send Email | POST /email/v1/deliver | emailrest.inalambria.com | x-api-key | View |
| Email templates | GET /email/v1/templates | emailrest.inalambria.com | x-api-key | View |
| Operator monitoring | GET /platformmonitory | rest.inalambria.com | Bearer | View |
| Effectiveness monitoring | GET /bireports/effectivitybyclient | rest.inalambria.com | Bearer | View |
| Message status monitoring | GET /bireports/msgmtclient | rest.inalambria.com | Bearer | View |
| SMS by file | SFTP / Amazon S3 | — | — | View |
| SMPP | smsc.inalambria.com | :5020 / :6011 (TLS) | System ID | View |
Inalambria Express API
For small businesses and developers who want to start without a contract, the Inalambria Express API (OpenAPI 3.1, Bearer Token) offers:
- SMS to one or many recipients
- Batches with different messages for different groups
- Personalized messages with templates and variables
- Usage history, credit balance and budget
- Async job and queue tracking
Technical support
Email soporte@inalambria.com or open a request in the support form choosing “REST API” as the product.
Ready to communicate better with your customers?
Tell us about your needs and we’ll design the right solution with you, backed by more than 23 years of experience in Colombia.