Lewati ke konten
Developer

WhatsApp API yang rapi, cepat diintegrasikan

Kirim notifikasi transaksi, OTP, dan pesan massal dari aplikasi Anda. Dokumentasi jelas, error dalam Bahasa Indonesia, dan contoh kode siap pakai.

POST /api/v2/messages
curl -X POST https://app.kirimpesan.id/api/v2/messages \
  -H "Authorization: Bearer kp_live_xxxxxxxxxxxx" \
  -H "Idempotency-Key: 7c0e2f4a-order-2041" \
  -H "Content-Type: application/json" \
  -d '{ "deviceId": 12, "to": "6281234567890", "content": { "type": "text", "text": "Halo {{nama}}, pesanan Anda sudah dikirim 🚚" } }'
Respons
201 Created
HTTP/1.1 201 Created
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 599

{
  "id": 98231,
  "deviceId": 12,
  "direction": "outbound",
  "peer": "6281234567890",
  "type": "text",
  "status": "queued",
  "createdAt": "2026-10-12T03:15:22.000Z"
}
Dirancang untuk produksi

Hal-hal yang biasanya baru terasa setelah go-live

API key ber-scope

Satu key per integrasi, izin seperlunya, bisa dicabut kapan saja.

Idempotent

Header Idempotency-Key mencegah pesan ganda saat retry jaringan.

Rate limit transparan

Header X-RateLimit-* di setiap respons, 429 + Retry-After saat penuh.

Webhook andal

JSON bertanda tangan HMAC-SHA256, retry eksponensial sampai 24 jam.

OpenAPI

Spesifikasi lengkap untuk Postman, Insomnia, atau generator SDK.

Kompatibel API lama

Integrasi versi lama tetap jalan 1:1 tanpa ubah kode.

Endpoint

Semua yang Anda butuhkan, di satu API

  • POST/messages
  • GET/messages/:id
  • POST/messages/bulk
  • POST/otp
  • POST/otp/verify
  • GET/devices
  • POST/devices
  • GET/devices/:id/qr
  • POST/devices/:id/pairing-code
  • GET/devices/:id/groups
  • POST/numbers/check
  • GET/contacts
Lihat referensi lengkap
Webhook

Tahu saat pesan dibaca, detik itu juga

  • message.receivedPesan masuk ke salah satu perangkat Anda.
  • message.statusPerubahan status pesan keluar: sent, delivered, read, failed, …
  • device.connectedPerangkat berhasil terhubung / tersambung kembali.
  • device.disconnectedPerangkat terputus (logout, sesi kedaluwarsa, dll.).
  • campaign.completedSeluruh penerima campaign selesai diproses.
import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.KIRIMPESAN_WEBHOOK_SECRET;

// Penting: gunakan raw body, bukan JSON yang sudah di-parse.
app.post("/hooks/wa", express.raw({ type: "application/json" }), (req, res) => {
  const header = req.get("X-KirimPesan-Signature") ?? "";
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);

  // Tolak jika selisih waktu > 5 menit (mencegah replay)
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return res.sendStatus(400);

  const expected = crypto
    .createHmac("sha256", SECRET)
    .update(`${t}.${req.body.toString("utf8")}`)
    .digest("hex");

  const ok =
    typeof parts.v1 === "string" &&
    parts.v1.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
  if (!ok) return res.sendStatus(401);

  const event = JSON.parse(req.body.toString("utf8"));
  // … proses event.event / event.data
  res.sendStatus(200);
});

Integrasi pertama Anda, selesai sore ini

Daftar gratis, buat API key, lalu kirim pesan pertama lewat API dalam hitungan menit.