The Voxio Chat API follows RESTful architecture standards, offering clear and consistent resource-based endpoints. All requests and responses are transmitted in JSON format, leveraging standard HTTP verbs, status codes, and authentication protocols to enable secure, efficient, and scalable integrations.

API Base URL

Please note that Voxio Chat does not provide a sandbox or test environment. All API requests are processed in the live environment, so ensure that all request data and parameters are accurate before making any calls.

string
https://www.voxio.chat/external-api

All requests to the Voxio Chat API require authentication. Each API request must include a valid client-id and client-secret to the request header, which can be obtained from your Voxio Chat Dashboard under Developer Tools.

In addition to credentials, Voxio Chat enforces IP-based security. You must register and enable your server’s public IP address in the IP Whitelist section of the dashboard. Requests originating from non-whitelisted IP addresses will be automatically rejected.

Both valid API credentials and an approved IP address are mandatory. Without completing these two steps, authentication will fail and API access will not be granted.

All responses from the Voxio Chat API are returned in JSON format. Each response follows a consistent structure and includes a status indicator, message, and relevant data payload when applicable. Standard HTTP status codes are used to represent the outcome of each request.

Sample Success Response

JSON
{
"status": "success",
"remark": "contact-list",
"message":[
    "Contact data fetched successfully."
],
"data": {
   ...you get all data here
    }
}
                    

Error Sample Response

JSON
{
    "remark": "Unauthorized",
    "status": "error",
    "message": [
        "The client secret is required"
    ]
}
                    
JSON
 {
    "remark": "Unauthorized",
    "status": "error",
    "message": [
        "Access to this API endpoint is restricted to IP addresses that have been explicitly whitelisted.",
        "In order to access this API endpoint, please add your IP address (::1) to the white list from the user dashboard."
    ]
}
                    
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/contact/list?whatsapp_account_id=24',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

 
                                
                        
Query Parameters

Query parameters that allow you to customize the API response.

Name Description Required Default
page Specifies the page number to retrieve. No 1
paginate Defines the number of items returned per page. No 20
search Searches for contacts by firstname, lastname or mobile number. No -
whatsapp_account_id Filter contacts by sender account scope (via linked conversations). No All
from_number Filter contacts by sender phone number scope. No All

Tip: In multi-number usage, use one of these filters so results match /inbox/conversation-list scope.

php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/contact/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
    'firstname' => 'John',
    'lastname' => 'Doe',
    'mobile_code' => '62',
    'mobile' => '85712345678',
    'whatsapp_account_id' => '24'
  ),
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Required Fields

The following fields are required to create a new contact in the system.

Name Required Default
firstname Yes -
lastname Yes -
mobile_code Yes -
mobile Yes -
city No -
state No -
post_code No -
address No -
profile_image No -
whatsapp_account_id No Auto-resolved to default account
from_number No Auto-resolved to default account
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/contact/update/{contactId}',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
    'firstname' => 'John',
    'lastname' => 'Doe',
    'mobile_code' => '62',
    'mobile' => '85712345678',
    'whatsapp_account_id' => '24'
  ),
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Required Fields

The following fields are required to update a contact in the system.

Name Required Default
firstname Yes -
lastname Yes -
mobile_code Yes -
mobile Yes -
city No -
state No -
post_code No -
address No -
profile_image No -
whatsapp_account_id No Keep current/default account
from_number No Keep current/default account
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/contact/delete/{contactId}',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'DELETE',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/conversation-list',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Query Parameters

Name Description Default
status Filter conversations by status. Use below value for the filter conversation via status. Done = 1; Pending = 2; Important = 3; Unread = 4; Reset/All = 0; All
whatsapp_account_id Filter conversations by specific sender account ID. All
from_number Filter conversations by specific sender number. All
page Specifies the page number to retrieve. 1
paginate Defines the number of items returned per page. 20
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/conversation-messages/{conversation_id}',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

URL Parameters

Parameter Type Description
conversation_id integer Unique ID of the conversation
php

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/change-conversation-status/2',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('status' => '1'),
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

URL Parameters

Parameter Type Description
conversation_id integer Unique ID of the conversation

Request Body

Field Type Required
status integer Yes

Allowed status values: 1 (Done), 2 (Pending), 3 (Important), 0 (Reset/None).

php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/conversation-details/2',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

URL Parameters

Parameter Type Description
conversation_id integer Unique ID of the conversation
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/send-message',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
    'mobile_code' => '880',
    'mobile' => 'xxxxxxxxx',
    'message' => 'Hello world',
    'from_number' => '6281234567890'
  ),
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;

Request Body

Field Type Required Description
mobile_code string yes Mobile country code. Must be a valid numeric country code without the plus (+) sign.
mobile string yes A valid mobile phone number associated with the provided country code.
from_number string conditional Optional sender number. Must match one of your connected WhatsApp numbers. Use this when your account has more than one number.
whatsapp_account_id integer Conditional Optional sender account ID. If both whatsapp_account_id and from_number are provided, whatsapp_account_id is prioritized.
message string Conditional Text message body. Required if no media, location, or interactive data is provided
image file No Image file (jpg, jpeg, png – max 5MB)
document file No Document file (pdf, doc, docx, xls, xlsx, txt – max 100MB)
video file No Video file (mp4 – max 16MB)
audio file No Audio file – max 16MB
latitude decimal Conditional Latitude for location message
longitude decimal Conditional Longitude for location message
name string No Optional location label used with latitude/longitude.
address string No Optional location address used with latitude/longitude.
cta_url_id integer No CTA URL ID for interactive button messages
interactive_list_id integer No Interactive list ID
product json string No WooCommerce product payload. When provided, message is sent as interactive CTA product message.
created_order_data json string No Created order payload for e-commerce CTA message generation.

Notes

At least one message type must be provided.

When using multiple sender numbers, always set from_number or whatsapp_account_id to avoid sending from the wrong number.

Interactive messages require an active plan.

Blocked contacts cannot send or receive messages.

Response Status (Success / Failed)

Field Possible Value Description
status success / error Main request result. success = accepted for send, error = failed to send request.
remark success, validation_error, not_found, exception Error or success category returned by API.
data.message.status 1, 2, 3, 9 Message state code in system: 1=SENT, 2=DELIVERED, 3=READ, 9=FAILED.

Sample Success Response

JSON
{
  "remark": "success",
  "status": "success",
  "message": [
    "Message sent successfully"
  ],
  "data": {
    "conversation_id": 123,
    "message": {
      "id": 456,
      "status": 1
    }
  }
}
                

Sample Failed Response

JSON
{
  "remark": "exception",
  "status": "error",
  "message": [
    "Something went wrong while sending message"
  ]
}
                
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/send-template-message',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
    'mobile_code' => '880',
    'mobile' => 'xxxxxx',
    'template_id' => 'your template id',
    'from_number' => '6281234567890'
  ),
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Request Body

Field Type Required Description
mobile_code string yes Mobile country code. Must be a valid numeric country code without the plus (+) sign.
mobile string yes A valid mobile phone number associated with the provided country code.
from_number string conditional Optional sender number. Must match one of your connected WhatsApp numbers. Use this when your account has more than one number.
whatsapp_account_id integer conditional Optional sender account ID. If both whatsapp_account_id and from_number are provided, whatsapp_account_id is prioritized.
template_id integer Yes Approved WhatsApp template ID

Notes

Only approved WhatsApp templates can be sent.

Template ID must belong to the selected sender number/account.

Template messages are typically used for business-initiated conversations.

Blocked contacts cannot receive template messages.

WhatsApp account must be connected before sending messages.

Response Status (Success / Failed)

Field Possible Value Description
status success / error Main request result. success = accepted for send, error = failed to send request.
remark template_sent, validation_error, not_found, insufficient_balance, exception Error or success category returned by API.

Sample Success Response

JSON
{
  "remark": "template_sent",
  "status": "success",
  "message": [
    "Message sent successfully"
  ],
  "data": {
    "conversation_id": 123
  }
}
                

Sample Failed Response

JSON
{
  "remark": "insufficient_balance",
  "status": "error",
  "message": [
    "Insufficient template balance."
  ]
}
                
php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.voxio.chat/external-api/inbox/template-list',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'client-id: YOUR-CLIENT-ID',
    'client-secret: YOUR-CLIENT-SECRET',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Query Parameters

Name Description Required
whatsapp_account_id Filter templates by a specific sender account ID. No
from_number Filter templates by a specific sender number. No
conversation_id Filter templates using the sender account from a conversation. Used when sending template from chat context. No

Notes

For multi-number accounts, use one of the filter parameters above to avoid mixed template lists.