Sikio API · v1
WhatsApp API
Use the same template-send endpoint for fixed text, personalized text, supported buttons and media templates. The selected template defines which values are required.
Send a template
A complete server-side text-template quickstart.
Types and parameters
Text, named variables, buttons and carousel fields.
Optional media assets
Use a template default or override an individual message.
Status and retries
Track receipts and avoid duplicate sends.
Prepare in the dashboard
Connect an eligible native WhatsApp channel, create the template in its library and wait for approval. The public API discovers and sends existing templates; it does not create or approve them. Discover templates from the same channel you intend to send through.
Example request: fetch WhatsApp channels
Replace the credential placeholders, then choose one client.
curl --fail-with-body \
--user 'YOUR_API_KEY:YOUR_API_SECRET' \
--write-out '\nHTTP %{http_code}\n' \
'https://stage.api.ictlife.com/v1/integrations/whatsapp/channels'const credentials = Buffer.from('YOUR_API_KEY:YOUR_API_SECRET').toString('base64');
const response = await fetch("https://stage.api.ictlife.com/v1/integrations/whatsapp/channels", {
method: 'GET',
headers: {
Authorization: 'Basic ' + credentials,
},
});
const text = await response.text();
if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`);
console.log(response.status, text ? JSON.parse(text) : null);import base64, json
import urllib.request, urllib.error
credentials = base64.b64encode(b'YOUR_API_KEY:YOUR_API_SECRET').decode()
headers = {'Authorization': 'Basic ' + credentials}
request = urllib.request.Request("https://stage.api.ictlife.com/v1/integrations/whatsapp/channels", method='GET', headers=headers)
try:
with urllib.request.urlopen(request, timeout=30) as response:
text = response.read().decode()
print(response.status, json.loads(text) if text else None)
except urllib.error.HTTPError as error:
raise SystemExit(f'HTTP {error.code}: {error.read().decode()}')Preserve business context
external_reference and context are optional internal metadata attached to each outbound message. Sikio shows them to authorized inbox users with the integration name. They are not sent to the customer unless separately included as template variables.
Sending preserves existing conversation assignment. It does not claim that the customer’s issue is resolved. Subsequent customer replies continue in the same channel conversation.
Use the right identifiers
| Identifier | Use |
|---|---|
channel_id | Numeric Sikio channel ID returned by discovery. |
template_id | Template ID from that channel’s template list. |
id in send response | Integration request ID for status lookup and reconciliation. |
conversation_id / message_id | Persisted Sikio conversation and message identifiers. |
provider_message_id | WhatsApp provider acceptance identifier, when available. |