Dokumentasi API
Dua endpoint: kirim reaction emoji ke post channel WhatsApp, dan AI chat.
Endpoint
POST https://domainmu.com/api/v1/react
Header
| Header | Keterangan |
|---|
x-api-key | API key dari dashboard (wajib) |
Content-Type | application/json |
Body
| Parameter | Tipe | Keterangan |
|---|
url | string | Link post channel, format https://whatsapp.com/channel/<id>/<post> |
emojis | string / array | Emoji dipisah koma, atau array. Maksimal sesuai tier |
Contoh
cURL
curl -X POST https://domainmu.com/api/v1/react \
-H "Content-Type: application/json" \
-H "x-api-key: zx_xxxxxxxxxxxxxxxx" \
-d '{
"url": "https://whatsapp.com/channel/0029VbXXXXXXXXXXXX/123",
"emojis": "🥳,👍,❤️,🔥"
}'
JavaScript
const res = await fetch("https://domainmu.com/api/v1/react", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ZREACT_KEY,
},
body: JSON.stringify({
url: "https://whatsapp.com/channel/0029VbXXXXXXXXXXXX/123",
emojis: "🥳,👍,❤️,🔥",
}),
});
console.log(await res.json());
Python
import requests
r = requests.post(
"https://domainmu.com/api/v1/react",
headers={"x-api-key": "zx_xxxxxxxxxxxxxxxx"},
json={
"url": "https://whatsapp.com/channel/0029VbXXXXXXXXXXXX/123",
"emojis": "🥳,👍,❤️,🔥",
},
timeout=30,
)
print(r.json())
Response
Sukses (200)
{
"success": true,
"message": "Reaction masuk antrean",
"reactions": ["🥳", "👍", "❤️", "🔥"],
"quota": { "tier": "free", "type": "total", "limit": 200, "remaining": 187 }
}
Gagal
{
"success": false,
"code": "quota_exhausted",
"message": "Kuota habis. Undang teman untuk menambah kuota"
}
| code | HTTP | Arti |
|---|
invalid_url | 400 | URL bukan link post channel WhatsApp |
invalid_emojis | 400 | Parameter emojis kosong atau tidak valid |
emoji_limit | 400 | Jumlah emoji melebihi batas tier |
invalid_message | 400 | Parameter message kosong atau lebih dari 3000 karakter (endpoint AI) |
invalid_model | 400 | Model tidak tersedia (endpoint AI) |
invalid_image | 400 | Parameter image harus berupa URL https (endpoint AI) |
ai_disabled | 403 | Fitur AI belum tersedia untuk tier kamu |
invalid_key | 401 | API key tidak ada atau salah |
key_disabled | 403 | API key atau akun dinonaktifkan |
quota_exhausted | 403 | Kuota Trial/Free habis, undang teman untuk menambah kuota |
burst_limit | 429 | Terlalu banyak request dalam waktu singkat (lihat header Retry-After) |
hourly_limit | 429 | Kuota per jam habis, khusus VIP (lihat header Retry-After) |
upstream_error | 502 | Layanan bermasalah, kuota otomatis dikembalikan |
upstream_timeout | 504 | Layanan tidak merespons, kuota otomatis dikembalikan |
Request yang gagal karena layanan (502/504) tidak memotong kuota. Setiap response sukses menyertakan header X-RateLimit-Limit dan X-RateLimit-Remaining.
Endpoint AI
POST https://domainmu.com/api/v1/ai
Header sama seperti endpoint reaction (x-api-key). Jawaban dikirim setelah selesai, bisa sampai satu menit. Request yang gagal di layanan tidak memotong kuota.
| Parameter | Tipe | Keterangan |
|---|
message | string | Pertanyaan atau perintah (wajib, maks 3000 karakter) |
model | string | Opsional. Jika kosong dipakai model default |
image | string | Opsional. URL https gambar yang ingin dianalisis |
thinking | boolean | Opsional. true menyertakan ringkasan proses berpikir di field thinking |
cURL
curl -X POST https://domainmu.com/api/v1/ai \
-H "Content-Type: application/json" \
-H "x-api-key: zx_xxxxxxxxxxxxxxxx" \
-d '{
"message": "Jelaskan perbedaan REST API dan GraphQL",
"thinking": false
}'
JavaScript
const res = await fetch("https://domainmu.com/api/v1/ai", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ZREACT_KEY,
},
body: JSON.stringify({ message: "Jelaskan perbedaan REST API dan GraphQL" }),
});
const { content } = await res.json();
Response sukses (200)
{
"success": true,
"content": "# Perbedaan REST API dan GraphQL ...",
"quota": { "tier": "free", "type": "total", "limit": 200, "remaining": 199 }
}
Tier & limit
| Tier | Syarat | Kuota | Burst | Emoji / request |
|---|
| Trial | Otomatis setelah daftar | 10 request (tidak reset) | 2 / 10 dtk | 5 |
| Free | Undang 5 pengguna aktif. Tiap 5 undangan berikutnya +200 kuota | 200 kuota (tidak reset) | 5 / 10 dtk | 5 |
| VIP | Hubungi admin | 1000 request / jam | 20 / 10 dtk | 30 |
Satu request reaction dihitung satu kuota, berapa pun jumlah emojinya; request AI memotong kuota sesuai biaya yang berlaku (default 1). Kuota Trial dan Free adalah kuota total yang tidak reset; tambahannya didapat dengan mengundang teman (tiap 5 undangan aktif = +200 kuota). Kuota VIP reset setiap jam.