API Documentation
Dokumentasi resmi ZX REACTCH Reaction API. Semua endpoint bersifat publik, berbasis JSON, dan tidak memerlukan autentikasi.
ZX REACTCH API memungkinkan kamu mengirim reaction ke post WhatsApp Channel secara terprogram. Satu request = satu pengiriman lengkap â sistem kami memprosesnya melalui antrean pengiriman yang aman. Kamu tidak perlu mengelola akun, token, atau login apa pun.
/api/react diproses selama 5â20 detik tergantung antrean. Set timeout client minimal 60 detik agar tidak terputus duluan./api/react diproteksi rate limit per IP (lihat bagian Rate Limits). Pelanggaran dijawab 429 dengan field retryAfter â kirim ulang hanya setelah waktu tunggu habis.Semua response mengandung field v (versi API, saat ini 6) â gunakan untuk memastikan dokumentasi yang kamu baca sesuai dengan response yang kamu terima.
Mengirim satu set reaction ke satu post WhatsApp Channel. Satu request = satu pengiriman â tidak ada parameter jumlah; kalau butuh beberapa pengiriman, panggil endpoint ini berkali-kali dengan menghormati rate limit. Hasil setiap request otomatis tercatat di statistik global.
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
url | string | Wajib | URL lengkap post WhatsApp Channel. Format: https://whatsapp.com/channel/[id-channel]/[id-post]Catatan: alias waUrl juga diterima. |
reactions | string[] | Opsional | Array emoji yang dikirim (disarankan 1â10 item). Contoh: ["đ", "đ", "â¤ī¸"]Catatan: alias rawEmojis (string dipisah koma, mis. "đ,đ") juga diterima. Jika dikosongkan, emoji default đ yang dikirim. |
curl -X POST https://your-domain.vercel.app/api/react \
-H "Content-Type: application/json" \
-d '{
"url": "https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o/451",
"reactions": ["đ", "đ", "â¤ī¸"]
}'const res = await fetch('https://your-domain.vercel.app/api/react', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o/451',
reactions: ['đ', 'đ', 'â¤ī¸'],
}),
signal: AbortSignal.timeout(60000), // 1 request bisa 5-20 detik
});
const data = await res.json();
// { success: true, message: 'Reaction berhasil dikirim', ... }import requests
res = requests.post('https://your-domain.vercel.app/api/react', json={
'url': 'https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o/451',
'reactions': ['đ', 'đ', 'â¤ī¸'],
}, timeout=60)
print(res.json())200 OK{
"v": 6,
"success": true,
"message": "Reaction berhasil dikirim",
"logged": true,
"loggedFailed": []
}| Field | Tipe | Deskripsi |
|---|---|---|
v | number | Versi API (saat ini 6) |
success | boolean | true = reaction berhasil dikirim |
message | string | Pesan status yang aman ditampilkan ke end-user |
logged | boolean | Apakah request berhasil dicatat ke statistik global |
loggedFailed | string[] | Daftar counter statistik yang gagal dicatat (kosong jika semua sukses) |
retryAfter | number? | Hanya muncul saat 429: durasi tunggu (detik) sebelum request berikutnya diizinkan |
429 Too Many Requests{
"v": 6,
"success": false,
"message": "Terlalu cepat â tunggu 7 detik lagi",
"retryAfter": 7
}retryAfter detik sebelum mengirim request berikutnya. Melakukan retry lebih cepat hanya akan memperpanjang pembatasan.500{
"v": 6,
"success": false,
"message": "Timeout â server sedang sibuk, coba lagi",
"logged": true,
"loggedFailed": []
}"Timeout â server sedang sibuk, coba lagi"). Detail teknis penyebab kegagalan tidak diekspos ke client. Aman untuk di-retry setelah beberapa detik.Mengambil statistik global (total request, sukses, gagal, jumlah emoji terkirim, statistik hari ini) beserta daftar aktivitas terbaru secara real-time.
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
limit | number | Opsional | Jumlah entry live log yang dikembalikan. Default 40, maksimal 200. |
curl 'https://your-domain.vercel.app/api/live?limit=10'200 OK{
"success": true,
"v": 6,
"stats": {
"total": 128,
"success": 125,
"failed": 3,
"reactions": 384,
"lastTs": 1787847447337,
"today": {
"date": "2026-08-27",
"total": 42,
"success": 41,
"failed": 1,
"reactions": 126
}
},
"logs": [
{
"id": "mtp2zk1a2b",
"ts": 1787847447337,
"type": "success",
"message": "Reaction đđâ¤ī¸ terkirim",
"reactions": ["đ", "đ", "â¤ī¸"],
"url": "https://whatsapp.com/channel/âĻ/451",
"username": null
}
]
}| Field | Tipe | Deskripsi |
|---|---|---|
stats.total | number | Total seluruh request sepanjang waktu |
stats.success | number | Total request sukses |
stats.failed | number | Total request gagal |
stats.reactions | number | Total emoji terkirim sepanjang waktu |
stats.lastTs | number | null | Timestamp (ms) aktivitas terakhir |
stats.today | object | Statistik hari ini (reset tiap ganti hari, zona WIB) |
logs | array | Entry aktivitas terbaru (terbaru duluan). type bisa success, error, atau info. |
Mengambil daftar post WhatsApp Channel yang paling banyak mendapat reaction berdasarkan statistik sistem. Endpoint ini murni membaca data â tidak mengubah apa pun.
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
limit | number | Opsional | Jumlah entri maksimal. Default 50, maksimal 200. |
curl 'https://your-domain.vercel.app/api/leaderboard?limit=50'200 OK{
"success": true,
"posts": [
{
"url": "https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o/451",
"count": 37
},
{
"url": "https://whatsapp.com/channel/0029VbCNrb4DzgT7EgLB0f29/492",
"count": 12
}
]
}| Field | Tipe | Deskripsi |
|---|---|---|
posts[].url | string | URL post WhatsApp Channel |
posts[].count | number | Total reaction sukses yang pernah dikirim ke post tersebut |
| Status | Pesan | Penyebab |
|---|---|---|
400 | Parameter "url" wajib diisi | Request body tidak memuat field url |
405 | Method not allowed | HTTP method tidak sesuai (mis. GET ke /api/react) |
429 | Terlalu cepat â tunggu X detik lagi / Terlalu banyak request â tunggu ÂąX menit lagi / Limit harian tercapai â coba lagi dalam ÂąX jam | Rate limit per IP terlampaui. Response menyertakan retryAfter (detik) â tunggu selama itu sebelum retry. |
500 | Bervariasi (pesan generik) | Reaction gagal diproses â timeout, antrean penuh, limit pengiriman tercapai, atau gangguan jaringan. Aman untuk di-retry setelah beberapa detik. |
Endpoint /api/react diproteksi rate limit 3 lapis per IP. Semua limit dihitung per alamat IP pengunjung dan direset otomatis.
| Proteksi | Limit (per IP) | Pesan saat terlampaui |
|---|---|---|
| Cooldown antar request | 10 detik | Terlalu cepat â tunggu X detik lagi |
| Burst | Maks 8 request / 5 menit | Terlalu banyak request â tunggu ÂąX menit lagi |
| Harian | Maks 100 request / 24 jam | Limit harian tercapai â coba lagi dalam ÂąX jam |
| Praktik | Rekomendasi |
|---|---|
| Timeout client | Minimal 60 detik â 1 request diproses 5â20 detik |
| Jeda antar request | Minimal 10 detik (sama dengan cooldown rate limit) |
| Pola pemanggilan | Sekuensial (satu per satu) â hindari paralel dari client yang sama |
| Emoji per request | 1â10 emoji per request |
| Retry saat gagal | Tunggu minimal 5 detik; saat 429, tunggu sesuai retryAfter |
| Polling /api/live | Maksimal 1 kali per 5 detik per client |
Rate limit 3 lapis per IP (cooldown 10 detik, maks 8 request / 5 menit, maks 100 / hari) â pelanggaran dijawab 429 dengan field retryAfter. Endpoint /api/react kini 1 request per pengiriman (tanpa pengiriman massal per request).
Mesin pengiriman baru â lebih stabil dan tahan blokir. Response /api/react dirampingkan (field limit dan account dihapus), menerima alias waUrl / rawEmojis, dan leaderboard berubah menjadi daftar post paling banyak bereaksi (Top Post).
Response /api/react dibersihkan â hanya mengembalikan data milik pengguna. Ditambahkan field versi v, statistik global & harian pada /api/live.
Live log real-time dan statistik global. Setiap request otomatis tercatat beserta detail reaction-nya.
Delay antar request otomatis dengan variasi acak (anti-blokir) dan riwayat session tersimpan di sisi client.
Rilis awal â endpoint reaksi dasar dan leaderboard.