Dokumentasi Developer

Hubungkan software Anda sendiri ke inbox SyBox

ERP, point of sale (POS), atau aplikasi desktop Anda dapat mengirim pesan WhatsApp dari nomor terhubung milik Anda sendiri, menampilkan data pelanggan di samping chat, dan membuat tiket kasus. Endpoint pengiriman menggunakan format request yang sama persis dengan WhatsApp Cloud API Meta, sehingga kode yang sudah ada hanya memerlukan base URL baru dan device key SyBox — dan setiap pesan yang dikirim diteruskan ke Meta di bawah akun WhatsApp Business Anda sendiri.

01Panduan Cepat

Cukup tiga hal dan pesan pertama Anda langsung terkirim: base URL, device key, dan endpoint pesan.

Base URL
https://api.smartsybox.com
Authentication
Authorization: Bearer <YOUR_DEVICE_KEY>
Content type
application/json

Endpoint

POST /v26.0/{phone-number-id}/messages
Segmen versi diterima dalam format v apa pun (v26.0, v1.0, ...) — gunakan saja apa yang sudah dipakai kode Anda saat ini. {phone-number-id} adalah ID nomor WhatsApp Anda, sama persis seperti di Meta.

02Kirim pesan pertama Anda

Pesan teks biasa. Bagian body menggunakan payload standar Cloud API — kami meneruskannya langsung ke Meta tanpa perubahan apa pun.

cURL
curl -X POST https://api.smartsybox.com/v26.0/PHONE_NUMBER_ID/messages \
  -H "Authorization: Bearer YOUR_DEVICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "15551234567",
    "type": "text",
    "text": { "body": "Hello from SyBox 👋" }
  }'
C# · HttpClient
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "YOUR_DEVICE_KEY");

string json = @"{
  ""messaging_product"": ""whatsapp"",
  ""to"": ""15551234567"",
  ""type"": ""text"",
  ""text"": { ""body"": ""Hello from SyBox"" }
}";

var res = await http.PostAsync(
    "https://api.smartsybox.com/v26.0/PHONE_NUMBER_ID/messages",
    new StringContent(json, Encoding.UTF8, "application/json"));

Console.WriteLine(await res.Content.ReadAsStringAsync());

Respons

Anda menerima respons persis seperti yang dikembalikan Meta, lengkap dengan kode status HTTP yang sama — sehingga library client Cloud API yang ada dapat memprosesnya tanpa perubahan.

200 OK · application/json
{
  "messaging_product": "whatsapp",
  "contacts": [{ "input": "15551234567", "wa_id": "15551234567" }],
  "messages": [{ "id": "wamid.HBgLMTU1NTEyMzQ1NjcVAgARGBI…" }]
}

03Semua jenis pesan didukung

Karena bagian body diteruskan tanpa perubahan, semua jenis pesan Cloud API didukung penuh — template, gambar, dokumen, hingga pesan interaktif. Berikut adalah contoh pengiriman template.

Request body · template
{
  "messaging_product": "whatsapp",
  "to": "15551234567",
  "type": "template",
  "template": {
    "name": "hello_world",
    "language": { "code": "en_US" }
  }
}

04Tampilkan data Anda di samping chat

Saat agen membuka percakapan, SyBox memanggil endpoint ANDA dan menampilkan data yang Anda kirim tepat di samping chat — pesanan pelanggan, saldo, tiket. Kami mengirim nomor ponsel pelanggan, atau email pelanggan untuk percakapan email.

Request · SyBox → your endpoint
POST YOUR_ERP_URL
Authorization: Bearer YOUR_ERP_KEY
X-Sybox-Action: lookup

# body: { "data": "<json string>" } — the decoded "data":
{
  "phone": "15551234567",
  "email": "customer@example.com",
  "ref": ""
}
Your reply · application/json
{
  "renderAs": "table",
  "content": [
    { "Order": "#10432", "Status": "Shipped", "Total": "$1,250.00" }
  ]
}

renderAs

Atur renderAs untuk memberi tahu SyBox cara menampilkan konten Anda — salah satu dari:

table
Rows & columns. content = an array of flat objects (or { rows: [ … ] }). Object keys become the column headers.
cards · kpi
Compact tiles (a balance, an order count). content = an array of { label, value } (or { cards: [ … ] }).
feed · list · thread
A timeline of rich cards. content = an array of { title, text, date, tags, media:[{ type, url, name }] }.
message
A single message-style card (one record laid out as a note).
html
Your own trusted HTML — content = a string. Use only for markup you generate yourself.
sections
Several blocks at once: content = { sections: [ { title, renderAs, content } ] } — mix a table + cards + a feed in one reply.
json
The default when renderAs is omitted — SyBox pretty-prints your content as-is.

Tambahkan sybox_ref ke baris tabel atau kartu mana pun agar bisa diklik — SyBox akan memanggil endpoint Anda kembali dengan ref tersebut agar Anda dapat menampilkan detail data tersebut.

Kami mengirim nomor ponsel dan email — salah satunya bisa saja kosong. Cocokkan dengan data pengenal pelanggan di sistem Anda, lalu balas dengan { renderAs, content }.

Pencarian produk (X-Sybox-Action: products)

Endpoint yang sama juga dapat melayani pencarian produk. Saat agen mengetik apa yang dicari pelanggan, SyBox mengirimkannya sebagai "q", dan balasan Anda ditampilkan sebagai kartu produk di samping chat — lengkap dengan tombol Kirim sekali sentuh yang memasukkan link produk langsung ke composer.

Request · SyBox → your endpoint
POST YOUR_ERP_URL
Authorization: Bearer YOUR_ERP_KEY
X-Sybox-Action: products

# body: { "data": "<json string>" } — the decoded "data":
{
  "q": "wireless keyboard",
  "phone": "15551234567",
  "email": "customer@example.com",
  "ref": ""
}
Your reply · application/json
{
  "content": [
    {
      "name":      "Wireless Keyboard K380",
      "price":     449,
      "oldPrice":  520,
      "currency":  "USD",
      "available": true,
      "stock":     12,
      "image":     "https://cdn.example.com/k380.jpg",
      "link":      "https://shop.example.com/p/k380",
      "note":      "Ships in 24h"
    }
  ]
}
name
Satu-satunya kolom wajib. Produk yang hanya memiliki nama tetap akan tampil rapi sebagai kartu.
price · oldPrice · currency
Gunakan angka, bukan string terformat. Kirim oldPrice hanya jika memang ada harga sebelumnya — persentase diskon akan dihitung otomatis dari kedua harga tersebut.
available · stock
available bernilai true/false; stock adalah jumlah opsional yang ditampilkan di sampingnya. Abaikan kedua kolom ini jika Anda tidak melacak stok — kolom yang tidak ada tidak akan menampilkan apa pun dan tidak pernah dianggap habis stok.
image
URL gambar langsung dengan protokol https. Gambar apa pun yang gagal dimuat akan digantikan dengan placeholder netral.
link
URL halaman produk. Tanpa URL ini kartu hanya dapat dilihat (read-only) — tombol Kirim ke chat hanya muncul jika ada link untuk dikirim.
note
Satu baris teks singkat di bawah harga — waktu pengiriman, varian, atau kondisi barang.
Cukup gunakan endpoint yang sudah Anda buat: URL yang sama, key yang sama, struktur { "data": "…" } yang sama. Periksa X-Sybox-Action untuk membedakan antara pencarian produk dan pencarian pelanggan. Berikan respons berupa content sebagai array biasa (atau { items: [ … ] }).

05Buat tiket kasus dari sistem Anda sendiri

Ini adalah rute yang digunakan sistem ERP atau akuntansi. Program Anda tidak mengirimkan pesan keluhan terformat — melainkan meminta SyBox untuk membuka kasus. Satu catatan, satu tempat, satu nomor referensi yang dapat diberikan staf Anda kepada pelanggan.

cURL
curl -X POST "https://api.smartsybox.com/v1/case" \
  -H "Authorization: Bearer $SYBOX_CASE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_unique_id": "CUST-10432",
    "header": "Screen replacement not delivered",
    "description": "Paid on 12 Aug, promised in 3 days, still nothing.",
    "ext_ref": "TICKET-99817"
  }'

Kolom data

customer_unique_id
ID data pelanggan dari sistem Anda sendiri — kunci yang sama dengan sinkronisasi pelanggan. Menggunakan nomor ponsel jika Anda tidak menyertakan ID.
header / description
Wajib diisi setidaknya satu. Header adalah baris yang dilihat staf di dalam daftar.
ext_ref
Nomor tiket Anda. Sertakan nomor ini. Permintaan ulang dengan ext_ref yang sama akan mengembalikan kasus yang sudah ada daripada membuat tiket ganda — sehingga panggilan API aman diulang setelah batas waktu (timeout).
Data pelanggan harus sudah ada. Kasus yang dibuat untuk pelanggan yang tidak ditemukan akan ditolak, alih-alih membuat pelanggan baru secara otomatis. Buat pelanggan terlebih dahulu dengan POST /v1/sync.
Gunakan key dengan jenis 'case'. Relay key (yang digunakan untuk mengirim pesan) akan ditolak di sini dengan kode status 403 demi keamanan: key yang dapat mengirim pesan ke pelanggan tidak boleh memiliki akses untuk membuka data di CRM Anda.

06Kirim pesan masuk dari program lain

Untuk pesan di luar WhatsApp: catatan dari kasir/POS, peringatan dari perangkat, atau pesan dari sistem lama. Pesan ini masuk ke percakapan yang tepat berdasarkan nomor ponsel, dan ditandai dengan nama program pengirimnya.

cURL
curl -X POST "https://api.smartsybox.com/v1/inbound" \
  -H "Authorization: Bearer $SYBOX_INBOUND_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "15551234567",
    "text": "Order 4821 has left the warehouse."
  }'
Dirancang khusus hanya untuk pesan masuk. Rute ini mencatat pesan ke dalam percakapan dan tidak mengirim apa pun ke pelanggan. Gunakan rute pengiriman pesan di atas untuk mengirim pesan ke pelanggan.

07Error

Pesan error dikembalikan apa adanya dari Meta, lengkap dengan kode status dan format error asli dari Meta — tidak ada yang diubah.

4xx · application/json
{
  "error": {
    "message": "(#131030) Recipient phone number not in allowed list",
    "type": "OAuthException",
    "code": 131030
  }
}

08Mendapatkan device key

Device key dibuat di dalam ruang kerja Anda dan sudah memuat rute tujuannya sendiri — tidak memerlukan subdomain atau ID akun di dalam request.

  • Buka ruang kerja Anda → Pengaturan → API keys lalu buat device key baru.
  • Setiap key terikat pada satu nomor dan dapat dicabut kapan saja.
  • Token WhatsApp asli Anda tidak pernah keluar dari server kami — device key berfungsi sebagai penggantinya.
  • Gateway dinonaktifkan secara default; mengaktifkan akses API pada ruang kerja akan menyalakannya.
SMART SOUQ

SMART SOUQ · RC Marrakech N° 154779 · RC Fès N° 87323 · ICE 003587569000031
© 2026. All rights reserved.

SyBox™ is a registered trademark of SMART SOUQ · OMPIC N° 307572.