backend-go menyajikan ~70 endpoint POST /v1/* dalam 3 varian tenant. Semua route memakai JSON body (kecuali callback_message dan escalation yang memakai multipart).
Autentikasi
| Kategori | Auth | Pengecualian |
|---|---|---|
Default (/v1/*) | ✅ JWT Bearer wajib | callback_message dipanggil WA gateway, skip auth |
Admin (/v1/*_admin) | ❌ skip auth | Semua 16 route admin di excluded paths |
CRM (/v1/*_crm) | ❌ skip auth | Semua 16 route crm di excluded paths |
| IP allowlist | ❌ skip auth | IP di ALLOWED_IPS bypass semua route |
Lihat Auth & JWT untuk detail middleware.
Header umum
Authorization: Bearer <jwt>
Content-Type: application/jsonUntuk escalation (request-escalate, request-escalate):
Authorization: Bearer <jwt>
Content-Type: multipart/form-dataResponse envelope
Tidak ada standardisasi — shape berbeda per handler. Pola umum:
// Sukses
{"result": true, "message": "...", "data": {...}}
// Error bisnis (status 200)
{"result": false, "message": "..."}
// Error validasi (status 422)
{"errors": [{"field": "...", "tag": "...", "message": "..."}]}
// Error auth (status 401)
{"status": "error", "message": "Unauthenticated"}
// Broadcast scheduler (pengecualian — pakai "status" bukan "result")
{"status": "success", "message": "..."}Grup endpoint
| Grup | Halaman | Endpoint | Tenant varian |
|---|---|---|---|
| Chat Inbound | Chat Inbound | callback_message, chat_inbox, chat_inbox_position, chat_list, chat_markread, chat_newinbox, chat_inboxdetail | ✅ admin, crm |
| Chat Lifecycle | Chat Lifecycle | handle_chat, chat_finish, chat_open, chat_pending, chat_move, chats/request-escalate, chats/finish-escalate | ✅ admin, crm |
| Send Outbound | Send Outbound | send_message, send_image, send_document, send_audio, send_video, send_link, send_location, send_express | ✅ admin, crm |
| Notifications | Notifications | readall_notif, get_notif, get_totalnotif, markread_notif, getdetail_notif | ❌ |
| Broadcast | Broadcast | send_broadcast, broadcast/scheduler | ✅ crm |
| Ticket | Ticket | change_ticket_status | ❌ (CRM context) |
| Tenant Variants | Tenant Variants | Perbedaan _admin / _crm vs default | — |
Struktur payload
Sebagian besar handler memakai shared struct Payload (handlers/chat.go:22-72) atau ChatLivePayload (handlers/chat_live.go:34-61). Lihat per-halaman untuk field yang dipakai.
Daftar endpoint lengkap
Default tenant
| Endpoint | Grup |
|---|---|
POST /v1/callback_message | Inbound (webhook WA gateway) |
POST /v1/chat_inbox | Inbound |
POST /v1/chat_inbox_position | Inbound |
POST /v1/chat_list | Inbound |
POST /v1/chat_markread | Inbound |
POST /v1/chat_newinbox | Inbound |
POST /v1/chat_inboxdetail | Inbound |
POST /v1/handle_chat | Lifecycle |
POST /v1/chat_finish | Lifecycle |
POST /v1/chat_open | Lifecycle |
POST /v1/chat_pending | Lifecycle |
POST /v1/chat_move | Lifecycle |
POST /v1/chat_requesthandle | Lifecycle (alias chats/request-escalate) |
POST /v1/chat_finishhandle | Lifecycle (alias chats/finish-escalate) |
POST /v1/chats/request-escalate | Lifecycle |
POST /v1/chats/finish-escalate | Lifecycle |
POST /v1/send_message | Outbound |
POST /v1/send_image | Outbound |
POST /v1/send_document | Outbound |
POST /v1/send_audio | Outbound |
POST /v1/send_video | Outbound |
POST /v1/send_link | Outbound |
POST /v1/send_location | Outbound |
POST /v1/send_express | Outbound |
POST /v1/readall_notif | Notif |
POST /v1/get_notif | Notif |
POST /v1/get_totalnotif | Notif |
POST /v1/markread_notif | Notif |
POST /v1/getdetail_notif | Notif |
POST /v1/send_broadcast | Broadcast |
POST /v1/broadcast/scheduler | Broadcast |
POST /v1/change_ticket_status | Ticket |
Admin tenant (_admin suffix)
16 route — mirror dari default untuk chat inbound + lifecycle + send. Skip auth. Lihat Tenant Variants.
CRM tenant (_crm suffix)
16 route — mirror default + broadcast crm + change_ticket_status. Skip auth. Saat ini panic (MongoClientCrm nil). Lihat Tenant Variants dan Tech Debt.
Catatan
- Semua endpoint
POST— tidak adaGET/PUT/DELETEdi/v1 - Route naming snake_case, kecuali
chats/request-escalatedanchats/finish-escalate(kebab-case + slash) - Tidak ada versioning selain
/v1— tidak ada/v2 - Root
GET /return{"Dazo":"App"}(health check, no auth)