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.
Authentication
1export LIK_API_KEY=lks_live_xxx
2export LPM_API=https://api.likbusiness.comSend 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
to | required | E.164 recipient |
sender | required | Approved Sender ID |
text | required | Message body |
reference | optional | Your 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
to | required | E.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_id | required | From POST /v1/otp/send |
code | required | Code 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
to | required | E.164 recipient |
template_name | required | Approved template name |
template_language | required | Language code, e.g. fr |
template_params | required | Body 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
to | required | List of recipient emails |
subject | required | Subject line |
text | required here | Plain-text body (or html) |
from_email | optional | Verified 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.
| Channel | Status endpoint |
|---|---|
SMS | GET /v1/messages/{message_id}. Accepts platform id, provider message_id, or reference. Also GET /v1/messages. |
OTP | GET /v1/otp/{challenge_id}. Status values: sent, delivered, verified, expired, failed. |
WhatsApp | GET /v1/whatsapp/messages. List only. Match id or provider_message_id. |
Email | GET /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]