# Pindah dari API lama ke API v2.

API lama tetap berjalan, dan jawabannya membawa header `Deprecation` dengan `Link` ke halaman ini. Pindah ke API v2 untuk satu kunci di semua nomor WhatsApp, kunci tes, Idempotency-Key, dan error yang seragam.

Sumber: https://klikflow.id/docs/api/pindah-ke-v2

## Langkah

- Buat Kunci API tes di Pengaturan › API & Webhook, dengan izin yang dibutuhkan dan saluran nomor yang dulu dipakai kunci lama.
- Ubah kode kirim sesuai tabel di bawah, lalu uji ke nomor uji.
- Buat kunci Live, pasang di server, dan pastikan kiriman berjalan.
- Cabut kunci lama di menu tempat kunci itu dibuat.

## Padanan endpoint

- `POST /api/v1/send-text` → `POST /api/v2/messages` dengan `channel: "whatsapp_qr"`, `type: "text"`, `text.body`.
- `POST /api/v1/send-media` → `POST /api/v2/messages` dengan `type` `image`, `video`, `audio`, atau `document`, dan `media` (`url` atau `base64` + `mime`, `filename`, `caption`).
- `GET /api/v1/messages/{requestId}` → `GET /api/v2/messages/{id}` (`id` dari jawaban kirim).
- `POST /api/v1/waba/send-text` dan `send-media` → `POST /api/v2/messages` dengan `channel: "whatsapp_official"`.
- `POST /api/v1/waba/send-template` → `POST /api/v2/messages` dengan `type: "template"`; kode OTP dengan `type: "otp"`.
- API Integrasi: kontak dan percakapan → `GET /api/v2/contacts`, `GET /api/v2/conversations`, `POST /api/v2/conversations/{id}/messages`. Laporan dan balasan draf tetap di API Integrasi.

## Perubahan field

- `phone` → `to`; `message` → `text.body`.
- Perangkat kunci lama → `from` (id perangkat atau id nomor dari `GET /api/v2/channels`), atau batasi Kunci API ke nomor itu.
- `template`, `variables`, `headerVariables`, `mediaUrl`, `buttonUrl`, `couponCode` → objek `template` dengan `name`, `variables`, `header_variables`, `media_url`, `button_url`, `coupon_code`.
- `code` (OTP) → `otp.code` dengan `otp.template`.
- Header `X-API-Key` → `Authorization: Bearer kf_live_…`.

## Jawaban dan error

Jawaban berhasil API v2 selalu `{ "data": … }`; daftar menambah `next_cursor` untuk halaman berikutnya. Error selalu `{ "error": { "type", "code", "message", "param", "doc_url", "request_id" } }` dengan kode huruf kecil, misalnya `invalid_phone` (dulu `INVALID_PHONE`). Daftar lengkap ada di halaman Error.

## Webhook

Webhook kunci lama tetap dikirim selama kunci lama aktif. Webhook v2 diatur per bisnis di Pengaturan › API & Webhook › Webhook, dengan lebih banyak event, kirim ulang otomatis, dan log. Setelah webhook v2 berjalan, cabut kunci lama agar event tidak diterima dua kali.

- `send.result` → `message.status` (status setiap pesan keluar).
- `messages` → `message.received`; `statuses` → `message.status`.
- Isi `data` berbeda: lihat panduan Event webhook.
