Bab 13 · Developer API
API Pelanggan (Members)
Endpoint /members: profil pelanggan, level member, saldo dan mutasi poin, serta riwayat belanja per pelanggan.
Data pelanggan berisi informasi pribadi — nama, alamat, nomor telepon, nomor identitas, tanggal lahir. Perlakukan sesuai kebijakan privasi toko Anda: simpan hanya yang perlu, batasi siapa yang bisa membacanya, dan jangan teruskan ke pihak ketiga tanpa dasar yang jelas.
GET /members
curl -H "Authorization: Bearer $KEY" \
"$BASE/members?updated_since=2026-08-01T00:00:00Z&include_deleted=true"
{
"id": 511,
"branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
"name": "Budi Santoso",
"identity_number": "3173xxxxxxxxxxxx",
"telephone_number": "0812xxxxxxx",
"address": "Jl. Merdeka 1",
"birthday": "17-08-1990",
"gender": "MALE",
"email": "budi@example.com",
"member_level": { "id": 1, "name": "Gold" },
"point_balance": 1200,
"memo": null,
"created_at": "2025-01-10T03:00:00.000Z",
"updated_at": "2026-08-13T05:30:12.000Z",
"deleted_at": null
}
| Field | Tipe | Catatan |
|---|---|---|
id | int | Kunci upsert |
branch | objek / null | Cabang tempat pelanggan didaftarkan |
name | string | Nama pelanggan |
identity_number | string / null | Nomor KTP atau identitas lain, apa adanya |
telephone_number | string / null | Nomor telepon, apa adanya — belum dinormalkan |
address | string / null | Alamat |
birthday | string / null | String DD-MM-YYYY, bukan tanggal ISO |
gender | enum / null | MALE, FEMALE, atau null |
email | string / null | Surel |
member_level | objek / null | Level keanggotaan, misalnya Gold |
point_balance | int | Saldo poin saat request dijalankan |
memo | string / null | Catatan bebas |
Dua field yang sering bikin bingung:
birthdayadalah teks, bukan tanggal. Di database memang tersimpan sebagai stringDD-MM-YYYY, dan API meneruskannya apa adanya alih-alih berpura-pura itu tanggal. Kalau Anda butuh pengingat ulang tahun, urai sendiri formatnya dan siapkan penanganan untuk nilai yang tidak lengkap.telephone_numberbelum dinormalkan. Bisa berbentuk0812...,+62812..., atau mengandung spasi dan tanda hubung, tergantung cara staf mengetiknya. Normalkan di sisi Anda sebelum dipakai untuk WhatsApp blast.
Peringatan penting soal saldo poin
point_balance dihitung ulang setiap request dari penjumlahan mutasi poin — tidak ada kolom saldo di database.
Konsekuensinya: perubahan poin tidak mengubah updated_at pelanggan. Polling updated_since tidak akan mengirim ulang pelanggan yang hanya berubah poinnya. Kalau Anda melacak poin, pilih salah satu:
- poll
/members/{id}/point-logsuntuk pelanggan yang Anda pantau, atau - lakukan full refresh
/memberssecara berkala, misalnya mingguan, atau - jangan simpan saldo poin sama sekali — ambil langsung saat dibutuhkan.
GET /members/{id}
Satu pelanggan, bentuk sama persis. 404 not_found kalau tidak ada atau sudah dihapus.
GET /members/{id}/sales
Riwayat belanja pelanggan tersebut. Bentuk objek, parameter, dan paginasinya sama persis dengan /sales — ini memang /sales yang sudah disaring ke satu pelanggan.
Berguna untuk halaman profil pelanggan di CRM Anda. Untuk analitik massal, lebih hemat menarik /sales sekali lalu mengelompokkan sendiri berdasarkan customer.id.
GET /members/{id}/point-logs
Riwayat mutasi poin. Saldo pelanggan sama dengan jumlah seluruh baris ini.
{
"id": 8801,
"amount": 150,
"is_manual": false,
"memo": null,
"sale_payment_id": 44211,
"branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
"created_at": "2026-08-13T05:30:12.000Z",
"updated_at": "2026-08-13T05:30:12.000Z",
"deleted_at": null
}
| Field | Arti |
|---|---|
amount | Positif berarti poin bertambah, negatif berarti poin dipakai atau dikurangi |
is_manual | true bila disesuaikan manual oleh staf, false bila otomatis dari transaksi |
sale_payment_id | Pembayaran yang memicu mutasi; null untuk penyesuaian manual |
memo | Alasan penyesuaian manual |
Yang tidak tersedia di v1
Riwayat pemeriksaan mata, resep kacamata, dan rekam medis pelanggan tidak diekspos — itu data kesehatan, kelas paling sensitif dalam sistem, dan menunggu dukungan scoped key. Begitu juga riwayat pesan WhatsApp atau email dan umpan balik pelanggan. Detailnya di Batasan, Versi & Rencana.

