# Autentikasi

> Setiap request Public API memakai Business ID dan Secret Key bisnis Anda.


Public API CSKU memakai dua nilai milik bisnis Anda: **Business ID** dan **Secret Key**. Keduanya dikirim di setiap request. Tidak ada token yang kedaluwarsa, jadi satu pasang kredensial berlaku sampai Anda membuat Secret Key baru.

## Syarat

- Paket Anda punya fitur **API**. Tanpa fitur ini menu Secret Key tidak muncul, dan endpoint pesan menolak request. Lihat [Berlangganan & kredit](https://docs.csku.ai/panduan/berlangganan).
- Anda punya akses ke email akun yang login, karena membuat Secret Key butuh kode OTP.

## Ambil kredensial

1. Buka **Pengaturan → Informasi Bisnis**. Salin **Business ID**.
2. Buka **Pengaturan → Secret Key**, lalu klik **Buat Secret Key Baru**.
3. Masukkan kode OTP yang dikirim ke email. Kode berlaku 5 menit. Setelah 3 kali salah, Anda harus menunggu 5 menit.
4. Secret Key ditampilkan **sekali saja**. Salin dan simpan di tempat aman sebelum menutup jendela.

> **Peringatan: Secret Key lama langsung tidak berlaku**
>
> Membuat Secret Key baru membatalkan yang lama saat itu juga. Semua integrasi yang memakai secret lama, termasuk pengecekan header di [webhook](https://docs.csku.ai/webhook/keamanan-retry), harus diperbarui.

## Cara mengirim kredensial

Pilih salah satu cara. Keduanya setara.

### Cara 1: header Business dan Secret

```http
Business: BIZ_ID_ANDA
Secret: SECRET_ANDA
```

### Cara 2: Authorization Bearer

Gabungkan `BIZ_ID:SECRET` (dipisah titik dua), encode dengan Base64, lalu kirim sebagai Bearer token.

```bash
TOKEN=$(printf '%s' "BIZ_ID_ANDA:SECRET_ANDA" | base64)
curl https://api.csku.ai/v1/conversation/need-human/total \
  -H "Authorization: Bearer $TOKEN"
```

Header `Authorization` hanya dibaca jika header `Secret` kosong.

> **Tips**
>
> Nilai yang ditampilkan dashboard saat membuat Secret Key sudah dalam format Base64 `BIZ_ID:SECRET`. Nilai itu bisa langsung dipakai sebagai Bearer token.

## Contoh lengkap

```js
const res = await fetch('https://api.csku.ai/v1/message', {
  method: 'POST',
  headers: {
    Business: process.env.CSKU_BUSINESS_ID,
    Secret: process.env.CSKU_SECRET,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ conversation_id: 'CO_01J…', text: 'Halo kak' }),
})
const data = await res.json()
```

## Keamanan

- Simpan Business ID dan Secret Key di server (variabel lingkungan atau secret manager). Jangan taruh di aplikasi mobile, JavaScript browser, atau repository.
- Secret Key memberi akses penuh ke API bisnis Anda. Jika bocor, buat Secret Key baru segera.
- API tidak menerapkan batas request (rate limit), tapi tetap kirim request secukupnya dan antrekan pengiriman massal di sisi Anda.

## Error autentikasi

| Pesan `error_msg` | Penyebab |
|---|---|
| `Data tidak valid. Mohon periksa kembali parameter dan header` | Format Bearer salah (bukan Base64 `BIZ_ID:SECRET`) |
| `business not found` / `biz not found` | Business ID tidak dikenal |
| `secret not valid ` | Secret salah atau sudah diganti |
| `Anda belum memiliki paket aktif.` | Paket tidak aktif |
| `Paket user tidak memiliki fitur API.` | Paket aktif, tapi tanpa fitur API |

Lihat [Format respons & error](https://docs.csku.ai/api/respons) untuk bentuk lengkap respons error.
