Skip to main content
The ChatSyncs Developer API lets you send WhatsApp messages, manage subscribers, labels, and catalogs, and trigger bot flows directly from your own server — everything you can do by hand in ChatSyncs, also available over HTTP.
New here? Jump to the Quickstart below for a copy-paste walkthrough of your first API call, step by step.

Get your API key

Every request needs an API key. Find yours under Control Panel → Developer — it’s shown at the top of that page as Your API key.
Treat your API key like a password. Anyone with it can send messages and read subscriber data on your account. Never commit it to a public repository or share it in a support ticket — if you think it’s leaked, regenerate it from the same Developer page.

Base URL

https://platform.chatsyncs.com/api/v1
Every endpoint path in this reference is relative to this base URL, e.g. /whatsapp/send means https://platform.chatsyncs.com/api/v1/whatsapp/send.

Authentication

Pass your API key as the apiToken parameter on every request — either as a query parameter (GET) or a form field (POST):
curl "https://platform.chatsyncs.com/api/v1/whatsapp/send?apiToken=YOUR_API_KEY&..."
A few endpoints (like Upload Media) also accept it as a Bearer token instead:
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.chatsyncs.com/api/v1/whatsapp/upload/media"

Making requests

Most endpoints accept both GET and POST — send parameters as a query string on GET, or as form fields (-d with curl) on POST. A few write-heavy or file-upload endpoints are POST-only; each endpoint page says which methods it supports.
For GET requests, URL-encode any parameter that contains spaces or special characters (e.g. a text message).
There’s no official ChatSyncs SDK package yet. The code samples on each endpoint page (cURL, Node.js, Python, PHP) are plain HTTP calls using each language’s standard library — fetch, requests, and curl/file_get_contents — not calls into a published package.

Quickstart

curl -X POST 'https://platform.chatsyncs.com/api/v1/whatsapp/send' \
  -d 'apiToken=YOUR_API_KEY' \
  -d 'phone_number_id=YOUR_PHONE_NUMBER_ID' \
  -d 'phone_number=919999999999' \
  -d 'message=Hello from the ChatSyncs API!'
const params = new URLSearchParams({
  apiToken: "YOUR_API_KEY",
  phone_number_id: "YOUR_PHONE_NUMBER_ID",
  phone_number: "919999999999",
  message: "Hello from the ChatSyncs API!",
});

const res = await fetch("https://platform.chatsyncs.com/api/v1/whatsapp/send", {
  method: "POST",
  body: params,
});

console.log(await res.json());
import requests

response = requests.post(
    "https://platform.chatsyncs.com/api/v1/whatsapp/send",
    data={
        "apiToken": "YOUR_API_KEY",
        "phone_number_id": "YOUR_PHONE_NUMBER_ID",
        "phone_number": "919999999999",
        "message": "Hello from the ChatSyncs API!",
    },
)

print(response.json())
<?php
$ch = curl_init('https://platform.chatsyncs.com/api/v1/whatsapp/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'apiToken' => 'YOUR_API_KEY',
    'phone_number_id' => 'YOUR_PHONE_NUMBER_ID',
    'phone_number' => '919999999999',
    'message' => 'Hello from the ChatSyncs API!',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Almost every endpoint also requires a phone_number_id — this identifies which of your connected WhatsApp numbers (bots) the request acts on. Find it under Chatbot Manager → (your bot) → Change Settings. That same panel also shows whatsapp_bot_id, needed by a few endpoints like Get Delivery Message Status.

Request flow

Reading the response

Every response is JSON with a status field:
  • "status": "1" (or true on a few endpoints) — the request succeeded. A message field usually confirms what happened, or returns the requested data (a subscriber, a list, etc.).
  • "status": "0" (or false) — the request failed. message explains why, e.g. "WhatsApp account not found." or "Subscriber limit has been exceeded."
{"status":"1","message":"Message sent successfully."}
{"status":"0","message":"WhatsApp account not found."}
Always check status before trusting the response — some failure responses still return an HTTP 200, so a successful HTTP request doesn’t guarantee the action succeeded.

Pagination

List endpoints (Subscriber List, Get Conversation) accept limit (how many records to return) and offset (how many to skip) to page through results — see the worked page-by-page example on Subscriber List.

Frequently asked

Go to Control Panel → Developer in ChatSyncs — your key is shown at the top of that page.
As the apiToken parameter (query string on GET, form field on POST) for almost every endpoint. A few endpoints, like Upload Media, also accept Authorization: Bearer YOUR_API_KEY.
Check the status field in the JSON response — "1" (or true) means success, "0" (or false) means failure, with a message explaining what went wrong.
It identifies which connected WhatsApp number/bot the request applies to. You’ll find it in Chatbot Manager for that bot.