Referensi API

Integrasikan enuchat ke sistem Anda menggunakan Tenant API. Kelola percakapan, kirim pesan, dan akses data penagihan secara terprogram.

Autentikasi

Semua permintaan API diautentikasi menggunakan kunci API yang dikirim di header X-Api-Key.

Mendapatkan kunci API Anda

  1. Pergi ke Pengaturan → Kunci API di dasbor Anda
  2. Klik Buat Kunci API dan beri nama
  3. Salin kunci segera — itu hanya ditampilkan sekali
  4. Simpan dengan aman (variabel lingkungan, manajer rahasia)

Membuat permintaan

Sertakan kunci di setiap permintaan:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Semua respons adalah JSON. Respons sukses memiliki field data. Kesalahan memiliki field error dengan code dan message.

Keamanan: Kunci API di-hash (SHA-256) di database kami. Kami tidak pernah menyimpan kunci mentah. Perlakukan kunci Anda seperti kata sandi — jangan commit ke kode atau bagikan secara publik.

URL Dasar

https://api.enuchat.com/api/v1/tenant-api

Semua endpoint di bawah ini relatif terhadap URL dasar ini.

Endpoint

GET /widgets

Daftar semua widget untuk akun Anda.

Respons

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Daftar percakapan, diurutkan berdasarkan pesan terbaru.

Parameter Query

ParameterTipeDeskripsi
statusstringFilter berdasarkan status: open, pending, closed
widgetIdstringFilter berdasarkan UUID widget
limitintegerHasil maks (default 20, maks 100)
offsetintegerLewati N hasil

Contoh

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Respons

{'{'}
  "data": [
{'{'}
      "id": "019d6724-000e-...",
      "widgetId": "019d19c6-7e0b-...",
      "visitorId": "v-abc123",
      "visitorName": "John",
      "visitorEmail": "john{'@'}example.com",
      "visitorLanguage": "en",
      "status": "open",
      "assignedTo": null,
      "lastMessageAt": "2026-04-11T14:30:00+00:00",
      "startedAt": "2026-04-11T14:25:00+00:00"
    }
  ]
}

GET /conversations/{'{'}id}

Dapatkan percakapan dengan semua pesan.

Parameter Query

ParameterTipeDeskripsi
limitintegerPesan maks (default 50, maks 200)

Respons

{'{'}
  "data": {'{'}
    "id": "019d6724-000e-...",
    "visitorLanguage": "en",
    "status": "open",
    "messages": [
{'{'}
        "id": "019d6724-1234-...",
        "role": "visitor",
        "content": "Hello, how much does it cost?",
        "contentLanguage": "en",
        "translatedContent": "Cześć, ile to kosztuje?",
        "translatedLanguage": "pl",
        "isAutoReply": false,
        "createdAt": "2026-04-11T14:25:30+00:00"
      },
{'{'}
        "id": "019d6724-5678-...",
        "role": "ai",
        "content": "Our plans start at €19/month...",
        "isAutoReply": true,
        "createdAt": "2026-04-11T14:25:32+00:00"
      }
    ]
  }
}

POST /conversations/{'{'}id}/messages

Kirim pesan ke percakapan. Pesan akan dikirim ke pengunjung secara real-time melalui widget chat.

Body Permintaan

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
FieldTipeDeskripsi
contentstringWajib. Teks pesan.
rolestringsystem (default) atau operator

Respons (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

Perbarui status atau penugasan percakapan.

Body Permintaan

{'{'}
  "status": "closed"
}
FieldTipeDeskripsi
statusstringopen, pending, atau closed
assignedTostring|nullUUID operator untuk ditugaskan, atau null untuk membatalkan penugasan

GET /billing/balance

Dapatkan paket dan saldo kredit Anda saat ini.

Respons

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Penanganan Kesalahan

Kesalahan mengembalikan kode status non-2xx dengan body JSON:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
Status HTTPArti
401Kunci API tidak valid, kedaluwarsa, atau hilang
400Body permintaan atau parameter tidak valid
404Sumber daya tidak ditemukan (atau milik tenant berbeda)
500Kesalahan server

Kasus Penggunaan Umum

Integrasi CRM

Polling untuk percakapan baru dan sinkronkan data pengunjung (nama, email, bahasa) ke CRM Anda. Gunakan ID percakapan sebagai referensi eksternal.

Tindak Lanjut Otomatis

Setelah percakapan ditutup, kirim pesan tindak lanjut melalui API: "Terima kasih telah berbincang! Apakah ada hal lain yang dapat kami bantu?"

Alternatif Webhook

Sampai webhook keluar tersedia, polling endpoint percakapan secara berkala untuk mendeteksi pesan baru atau perubahan status.

Operasi Massal

Tutup semua percakapan yang lebih lama dari 7 hari, tugaskan percakapan ke operator berdasarkan logika eksternal, atau ekspor riwayat percakapan untuk analitik.

Batas Tarif

API memungkinkan hingga 60 permintaan per menit per kunci API. Jika Anda melebihi batas ini, Anda akan menerima respons 429 Too Many Requests. Tunggu dan coba lagi dengan backoff eksponensial.

Siap mengintegrasikan?

Buat akun gratis Anda dan hasilkan kunci API dalam hitungan menit.

Mulai Gratis