Kontak
Endpoint untuk membaca dan membuat kontak di workspace whatsGo.
List Kontak
Mengembalikan daftar kontak dalam workspace. Mendukung pagination dan pencarian berdasarkan nama atau nomor telepon.
Endpoint
GET {base_url}/contact/list
Query Parameter
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
page |
integer | Tidak | Nomor halaman. Default: 1 |
per_page |
integer | Tidak | Jumlah item per halaman. Default: 20, maks: 100 |
search |
string | Tidak | Kata kunci pencarian. Mencocokkan nama atau nomor telepon. |
Contoh Request
curl -X GET "https://whats.sahabatmobile.com/external-api/contact/list?page=1&per_page=20&search=joko" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Contoh Response
{
"success": true,
"data": {
"current_page": 1,
"data": [
{
"id": 1,
"phone": "6281234567890",
"name": "Joko Susilo",
"email": "joko@example.com",
"tags": ["leads", "vip"],
"custom_fields": {
"company": "PT Maju Jaya",
"city": "Jakarta"
},
"created_at": "2025-06-01T08:30:00.000000Z",
"updated_at": "2025-06-15T10:45:00.000000Z"
}
],
"first_page_url": "https://whats.sahabatmobile.com/external-api/contact/list?page=1",
"from": 1,
"last_page": 5,
"last_page_url": "https://whats.sahabatmobile.com/external-api/contact/list?page=5",
"next_page_url": "https://whats.sahabatmobile.com/external-api/contact/list?page=2",
"path": "https://whats.sahabatmobile.com/external-api/contact/list",
"per_page": 20,
"prev_page_url": null,
"to": 20,
"total": 100
}
}
Field Response
| Field | Tipe | Deskripsi |
|---|---|---|
id |
integer | ID unik kontak. |
phone |
string | Nomor telepon internasional tanpa tanda plus (e.g. 6281234567890). |
name |
string | Nama kontak. |
email |
string|null | Alamat email kontak. |
tags |
array | Daftar label/tag yang terkait dengan kontak. |
custom_fields |
object | Field kustom berbentuk key-value pair. |
created_at |
string | Timestamp pembuatan kontak (ISO 8601). |
updated_at |
string | Timestamp pembaruan terakhir kontak (ISO 8601). |
Buat Kontak
Membuat kontak baru di workspace whatsGo.
Endpoint
POST {base_url}/contact/store
Request Body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
phone |
string | Ya | Nomor telepon internasional tanpa tanda plus (e.g. 6281234567890). |
name |
string | Tidak | Nama kontak. |
email |
string | Tidak | Alamat email kontak. |
tags |
array | Tidak | Daftar label/tag untuk kontak (e.g. ["leads", "vip"]). |
custom_fields |
object | Tidak | Field kustom berbentuk key-value pair (e.g. {"company": "PT Maju"}). |
Contoh Request
curl -X POST "https://whats.sahabatmobile.com/external-api/contact/store" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"phone": "6281234567890",
"name": "Joko Susilo",
"email": "joko@example.com",
"tags": ["leads", "vip"],
"custom_fields": {
"company": "PT Maju Jaya",
"city": "Jakarta"
}
}'
Contoh Response
{
"success": true,
"message": "Kontak berhasil dibuat.",
"data": {
"id": 1,
"phone": "6281234567890",
"name": "Joko Susilo",
"email": "joko@example.com",
"tags": ["leads", "vip"],
"custom_fields": {
"company": "PT Maju Jaya",
"city": "Jakarta"
},
"created_at": "2025-06-01T08:30:00.000000Z",
"updated_at": "2025-06-01T08:30:00.000000Z"
}
}
Error
| HTTP Code | Kode Error | Deskripsi |
|---|---|---|
| 422 | validation_error |
Field phone wajib diisi atau format tidak valid. |
| 409 | duplicate_phone |
Nomor telepon sudah terdaftar di workspace. |
| 401 | unauthorized |
Token API tidak valid atau belum disediakan. |
Update Kontak
Memperbarui data kontak berdasarkan ID.
Endpoint
POST {base_url}/contact/update/{id}
Path Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
id |
integer | ID kontak yang akan diperbarui. |
Request Body
Sama dengan request body Buat Kontak. Semua field bersifat opsional, hanya field yang dikirim akan diperbarui.
Contoh Request
curl -X POST "https://whats.sahabatmobile.com/external-api/contact/update/1" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "Joko Susilo (Updated)",
"tags": ["leads", "vip", "priority"]
}'
Contoh Response
{
"success": true,
"message": "Kontak berhasil diperbarui.",
"data": {
"id": 1,
"phone": "6281234567890",
"name": "Joko Susilo (Updated)",
"email": "joko@example.com",
"tags": ["leads", "vip", "priority"],
"custom_fields": {
"company": "PT Maju Jaya",
"city": "Jakarta"
},
"created_at": "2025-06-01T08:30:00.000000Z",
"updated_at": "2025-07-16T14:00:00.000000Z"
}
}
Hapus Kontak
Menghapus kontak berdasarkan ID secara permanen.
Endpoint
DELETE {base_url}/contact/delete/{id}
Path Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
id |
integer | ID kontak yang akan dihapus. |
Contoh Request
curl -X DELETE "https://whats.sahabatmobile.com/external-api/contact/delete/1" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Contoh Response
{
"success": true,
"message": "Kontak berhasil dihapus."
}
Penghapusan kontak bersifat permanen dan tidak dapat dibatalkan. Semua riwayat pesan terkait kontak tidak akan terpengaruh.
Catatan tentang Tag
Tag adalah label yang digunakan untuk mengelompokkan kontak. Berikut beberapa hal penting terkait tag:
- Tag bersifat case-insensitive — tag
VIPdanvipakan ditangani sebagai tag yang sama. - Setiap kontak dapat memiliki maksimal 50 tag.
- Panjang maksimal setiap tag adalah 50 karakter.
- Tag hanya boleh berisi huruf, angka, spasi, dan tanda hubung (
-). - Saat membuat kontak, tag akan otomatis dibuat jika belum ada di workspace.
- Mengirim array tag kosong (
[]) pada update akan menghapus semua tag dari kontak.
Custom Fields
Custom fields memungkinkan Anda menyimpan data tambahan pada kontak dalam bentuk key-value pair.
Cara Kerja
- Custom fields dikirim sebagai objek JSON (bukan array).
- Key harus berupa string tanpa spasi. Gunakan snake_case (e.g.
company_name). - Value dapat berupa string atau angka.
- Key maksimal 50 karakter, value maksimal 500 karakter.
Contoh Penggunaan
{
"phone": "6281234567890",
"name": "Joko Susilo",
"custom_fields": {
"company": "PT Maju Jaya",
"job_title": "Director",
"city": "Jakarta",
"lead_score": 85
}
}
Custom fields tidak memiliki skema yang didefinisikan sebelumnya. Anda bebas menambahkan key-value pair sesuai kebutuhan. Semua custom fields dari request sebelumnya akan ditimpa — kirimkan ulang semua field yang ingin dipertahankan saat melakukan update.
Format di Response
Custom fields akan dikembalikan sebagai objek JSON. Jika kontak tidak memiliki custom fields, field ini akan bernilai {} (objek kosong).
{
"id": 1,
"phone": "6281234567890",
"name": "Joko Susilo",
"custom_fields": {
"company": "PT Maju Jaya",
"job_title": "Director",
"city": "Jakarta",
"lead_score": 85
}
}