API publik
Autentikasi
- Buka Pengaturan → API (butuh akses Kelola API key) dan klik Buat key. Key berawalan
smt_live_dan hanya ditampilkan sekali; simpan di secret manager sistemmu. - Kirim di setiap request:
Authorization: Bearer smt_live_… - Key bisa dicabut kapan saja; request dengan key yang dicabut dibalas
401.
export SOCIOMILE_API_KEY="smt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Batas
- 60 request per menit per key. Header
X-RateLimit-LimitdanX-RateLimit-Remainingada di setiap respons; lewat batas dibalas429dengan headerRetry-After. - Daftar dibagi per halaman 50 item (
?page=2, dst.). Lihatmeta.has_more. - Waktu berformat ISO 8601 zona +07:00. Durasi dalam detik.
- Workspace Free atau Pro yang sudah berakhir dibalas
402 plan_required.
Endpoint
GET /api/v1/conversations
Daftar percakapan, terbaru dulu. Filter opsional: status (open, replied, solved, closed), channel (ID akun Threads), type (reply, mention), from & to (tanggal dibuat, YYYY-MM-DD), page.
curl -s "https://sociomile.sassly.ai/api/v1/conversations?status=open&page=1" \
-H "Authorization: Bearer $SOCIOMILE_API_KEY"
{
"data": [
{
"id": 1042,
"channel": {"id": 3, "username": "tokobudi"},
"type": "reply",
"status": "open",
"contact": {"username": "pelanggan.satu"},
"category": "Pertanyaan stok",
"labels": ["Penting"],
"tags": ["promo"],
"assignee": "Rina",
"first_response_secs": null,
"reopened_count": 0,
"tickets": [],
"created_at": "2026-10-07T10:00:00+07:00",
"last_message_at": "2026-10-07T10:00:00+07:00",
"solved_at": null,
"closed_at": null
}
],
"meta": {"page": 1, "per_page": 50, "total": 1, "has_more": false}
}
GET /api/v1/conversations/{id}
Satu percakapan lengkap: pesan (masuk/keluar, status kirim, lampiran), label, tag, kategori, catatan internal, tiket.
curl -s "https://sociomile.sassly.ai/api/v1/conversations/1042" \
-H "Authorization: Bearer $SOCIOMILE_API_KEY"
{
"data": {
"id": 1042,
"…": "field sama dengan daftar",
"context": {"text": "Promo akhir bulan…", "username": "tokobudi", "permalink": "https://www.threads.com/…"},
"messages": [
{"id": 1, "direction": "in", "author": "pelanggan.satu", "text": "Masih ada ukuran L?", "media_type": "TEXT_POST",
"attachments": [], "status": "received", "permalink": "https://www.threads.com/…", "posted_at": "2026-10-07T10:00:00+07:00"},
{"id": 2, "direction": "out", "author": "Rina", "text": "Masih ada kak.", "media_type": "TEXT_POST",
"attachments": [], "status": "published", "permalink": "https://www.threads.com/…", "posted_at": "2026-10-07T10:05:00+07:00"}
],
"notes": [{"body": "Kirim hari ini", "author": "Rina", "source": "manual", "ticket": null, "created_at": "…"}]
}
}
GET /api/v1/tickets
Daftar tiket, nomor terbesar dulu. Filter opsional: status (open, in_progress, waiting, resolved, closed), page.
curl -s "https://sociomile.sassly.ai/api/v1/tickets?status=open" \
-H "Authorization: Bearer $SOCIOMILE_API_KEY"
{
"data": [
{"number": 12, "code": "TKT-000012", "subject": "Cek stok", "status": "open", "priority": "high", "conversation_id": 1042,
"assignees": ["Tari"], "due_at": null, "created_at": "…", "resolved_at": null, "closed_at": null}
],
"meta": {"page": 1, "per_page": 50, "total": 1, "has_more": false}
}
GET /api/v1/tickets/{number}
Satu tiket beserta deskripsi dan diskusinya. {number} boleh angka (12) atau kode lengkap (TKT-000012).
curl -s "https://sociomile.sassly.ai/api/v1/tickets/TKT-000012" \
-H "Authorization: Bearer $SOCIOMILE_API_KEY"
GET /api/v1/reports/summary
Angka utama dengan rumus yang sama dengan Dashboard & Reports (Rumus laporan). Filter opsional: from, to (default 7 hari terakhir), channel (ID, boleh beberapa: channel=1,2), type.
curl -s "https://sociomile.sassly.ai/api/v1/reports/summary?from=2026-10-01&to=2026-10-08" \
-H "Authorization: Bearer $SOCIOMILE_API_KEY"
{
"data": {
"conversations": 5, "messages_in": 7, "replies_sent": 5, "replied": 3, "backlog": 3,
"solved": 1, "closed": 1, "escalated": 1, "reopened": 1,
"response_rate": 60, "solved_rate": 20, "escalation_rate": 20, "reopen_rate": 20,
"avg_frt_seconds": 700, "median_frt_seconds": 600,
"avg_resolution_seconds": 7200, "median_resolution_seconds": 7200,
"tickets": {"total": 1, "open": 0, "done": 1, "avg_resolve_seconds": 7200}
},
"filters": {"from": "2026-10-01", "to": "2026-10-07", "channels": null, "type": null}
}
Kode error
Semua error berbentuk {"error": {"code": "…", "message": "…"}}.
| HTTP | code | Arti |
|---|---|---|
| 401 | unauthorized | Header Authorization tidak ada, format key salah, atau key sudah dicabut. |
| 402 | plan_required | Workspace bukan Pro aktif. |
| 404 | not_found | Data atau endpoint tidak ada (data workspace lain juga 404). |
| 405 | method_not_allowed | API v1 hanya menerima GET. |
| 422 | validation_error | Parameter tidak valid, mis. tanggal bukan YYYY-MM-DD. |
| 429 | rate_limited | Lebih dari 60 request per menit; tunggu sesuai Retry-After. |
| 500 | server_error | Gangguan di server; aman diulang. |