LIKSOFT Pro Messaging API

A production API for transactional SMS, WhatsApp OTP, WhatsApp templates, and email, with delivery status on every message.

Create an API key in the portal with the scopes required for your integration: sms:send, otp:send, otp:verify, whatsapp:send, email:send.

All requests use the X-API-Key header. Recipients are E.164. SMS requires an approved Sender ID. Email from_email must belong to a verified or shared domain.

Open the portal

Authentication

1export LIK_API_KEY=lks_live_xxx
2export LPM_API=https://api.likbusiness.com

Send an SMS

Send a transactional SMS to an E.164 number from an approved Sender ID. The API returns HTTP 200. Store message_id so you can retrieve the message later by platform id, provider message_id, or your reference.

POST/v1/messagesHTTP 200

Parameters

torequiredE.164 recipient
senderrequiredApproved Sender ID
textrequiredMessage body
referenceoptionalYour correlation id

Request

1curl -X POST "https://api.likbusiness.com/v1/messages" \
2  -H "X-API-Key: $LIK_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5  "to": "+22890000000",
6  "sender": "LIKSOFT",
7  "text": "Votre commande CMD-1024 est en route."
8}'

Response

1{
2  "status": "submitted",
3  "description": "Message accepted",
4  "message_id": "sms_abc123",
5  "reference": null,
6  "to": "+22890000000",
7  "country": "TG",
8  "network": "TOGOCEL",
9  "charged_credits": 8
10}

Send OTP on WhatsApp and SMS (360)

LIKSOFT Pro Messaging sends the WhatsApp authentication template and the same code by SMS in parallel. If the number is known not to have WhatsApp, SMS only. TTL is about 10 minutes. The platform generates the code when you omit it.

POST/v1/otp/sendHTTP 201

Parameters

torequiredE.164 recipient

Verify the code

The user types the code. Confirm it with the challenge_id returned by the send call.

POST/v1/otp/verifyHTTP 200

challenge_idrequiredFrom POST /v1/otp/send
coderequiredCode entered by the user

Additional parameters are available on request. Contact LIKSOFT support for advanced delivery options.

Request

1curl -X POST "https://api.likbusiness.com/v1/otp/send" \
2  -H "X-API-Key: $LIK_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5  "to": "+22890000000"
6}'

Response

1{
2  "challenge_id": "otp_123",
3  "channel": "both",
4  "provider": "seed",
5  "to": "+22890000000",
6  "status": "sent",
7  "provider_message_id": "wamid.HBgMMjI4OTAwMDAwMDA",
8  "sms_provider_message_id": "sms_otp_456",
9  "expires_at": "2026-08-28T10:15:00+00:00",
10  "fallback_used": false,
11  "whatsapp_available": true
12}

Verify the code

1curl -X POST "https://api.likbusiness.com/v1/otp/verify" \
2  -H "X-API-Key: $LIK_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5  "challenge_id": "otp_123",
6  "code": "482917"
7}'

Response

1{
2  "verified": true,
3  "challenge_id": "otp_123",
4  "status": "verified",
5  "verified_at": "2026-08-28T10:08:12+00:00"
6}

Send a WhatsApp template

Send with template_name. The template must be APPROVED, and template_params must match body_param_count. billing_mode defaults to direct. List templates first with GET /v1/whatsapp/templates.

POST/v1/whatsapp/messagesHTTP 201

Parameters

torequiredE.164 recipient
template_namerequiredApproved template name
template_languagerequiredLanguage code, e.g. fr
template_paramsrequiredBody variables, in order

Request

1curl -X POST "https://api.likbusiness.com/v1/whatsapp/messages" \
2  -H "X-API-Key: $LIK_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5  "to": "+22890000000",
6  "template_name": "order_ready",
7  "template_language": "fr",
8  "template_params": [
9    "Alice",
10    "CMD-1024"
11  ]
12}'

Response

1{
2  "id": "wa_01HZX9K",
3  "channel": "whatsapp",
4  "provider": "seed",
5  "billing_mode": "direct",
6  "to": "+22890000000",
7  "country": "TG",
8  "status": "submitted",
9  "provider_message_id": "wamid.HBgMMjI4OTAwMDAwMDA",
10  "template": "order_ready",
11  "language": "fr",
12  "charged_credits": 5,
13  "billing_kind": "whatsapp_utility",
14  "created_at": "2026-08-28T10:05:00+00:00"
15}

Send an email

to is a list of addresses, not a single string. Provide text and/or html (at least one). Set from_email so the message leaves a verified identity. A successful send returns status send.

POST/v1/emailsHTTP 200

Parameters

torequiredList of recipient emails
subjectrequiredSubject line
textrequired herePlain-text body (or html)
from_emailoptionalVerified or shared sender

Request

1curl -X POST "https://api.likbusiness.com/v1/emails" \
2  -H "X-API-Key: $LIK_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5  "to": [
6    "[email protected]"
7  ],
8  "from_email": "[email protected]",
9  "subject": "Votre reçu",
10  "text": "Merci pour votre commande."
11}'

Response

1{
2  "id": "eml_01HZXA",
3  "provider": "aws_ses",
4  "provider_message_id": "0100018f-ses-example",
5  "status": "send",
6  "reference": null,
7  "suppressed": []
8}

Message status

SMS and OTP support GET by identifier. WhatsApp and email expose a list. Match the id (or provider_message_id) returned when the message was sent.

ChannelStatus endpoint
SMSGET /v1/messages/{message_id}. Accepts platform id, provider message_id, or reference. Also GET /v1/messages.
OTPGET /v1/otp/{challenge_id}. Status values: sent, delivered, verified, expired, failed.
WhatsAppGET /v1/whatsapp/messages. List only. Match id or provider_message_id.
EmailGET /v1/emails. List only. Match id from the send response.

SMS status

GET/v1/messages/{message_id}HTTP 200

Lookup accepts the platform id, the provider message_id from send, or your reference.

Request

1curl "https://api.likbusiness.com/v1/messages/sms_abc123" \
2  -H "X-API-Key: $LIK_API_KEY"

Response

1{
2  "id": "msg_01HZX8Q",
3  "message_id": "sms_abc123",
4  "to": "+22890000000",
5  "sender": "LIKSOFT",
6  "text": "Votre commande CMD-1024 est en route.",
7  "status": "success",
8  "reference": null,
9  "country": "TG",
10  "network": "TOGOCEL",
11  "charged_credits": 8,
12  "created_at": "2026-08-28T10:00:00+00:00",
13  "updated_at": "2026-08-28T10:00:12+00:00"
14}

OTP status

GET/v1/otp/{challenge_id}HTTP 200

Request

1curl "https://api.likbusiness.com/v1/otp/otp_123" \
2  -H "X-API-Key: $LIK_API_KEY"

Response

1{
2  "challenge_id": "otp_123",
3  "channel": "both",
4  "provider": "seed",
5  "to": "+22890000000",
6  "status": "sent",
7  "provider_message_id": "wamid.HBgMMjI4OTAwMDAwMDA",
8  "attempts": 0,
9  "max_attempts": 5,
10  "expires_at": "2026-08-28T10:15:00+00:00",
11  "verified_at": null,
12  "created_at": "2026-08-28T10:05:00+00:00"
13}

WhatsApp status

GET/v1/whatsapp/messagesHTTP 200

There is no GET /v1/whatsapp/messages/{id}. Match the identifier returned at send time in GET /v1/whatsapp/messages.

Request

1curl "https://api.likbusiness.com/v1/whatsapp/messages" \
2  -H "X-API-Key: $LIK_API_KEY"

Response

1[
2  {
3    "id": "wa_01HZX9K",
4    "channel": "whatsapp",
5    "provider": "seed",
6    "billing_mode": "direct",
7    "to": "+22890000000",
8    "country": "TG",
9    "status": "submitted",
10    "provider_message_id": "wamid.HBgMMjI4OTAwMDAwMDA",
11    "template": "order_ready",
12    "language": "fr",
13    "charged_credits": 5,
14    "billing_kind": "whatsapp_utility",
15    "created_at": "2026-08-28T10:05:00+00:00"
16  }
17]

Email status

GET/v1/emailsHTTP 200

There is no GET /v1/emails/{id}. Match the identifier returned at send time in GET /v1/emails. Recipients are in to_json.

Request

1curl "https://api.likbusiness.com/v1/emails" \
2  -H "X-API-Key: $LIK_API_KEY"

Response

1[
2  {
3    "id": "eml_01HZXA",
4    "user_id": "usr_01HZX",
5    "provider": "aws_ses",
6    "account_key": "ses-prod",
7    "provider_message_id": "0100018f-ses-example",
8    "from_email": "[email protected]",
9    "to_json": "[\"[email protected]\"]",
10    "cc_json": null,
11    "bcc_json": null,
12    "subject": "Votre reçu",
13    "text_body": "Merci pour votre commande.",
14    "html_body": null,
15    "status": "send",
16    "reference": null,
17    "created_at": "2026-08-28T10:20:00+00:00",
18    "updated_at": "2026-08-28T10:20:00+00:00"
19  }
20]