@wazapin/sdk itu klien resmi TypeScript buat API Wazapin. Mau kirim pesan pakai builder yang type-safe? Bisa. Biarin SDK yang nge-retry kalau gagal sementara? Beres. Paginasi pakai for await? Tinggal loop. Verifikasi signature webhook? Satu baris jadi. Semuanya jalan di fetch standar web — Node 20+, Bun, Deno, edge, semua masuk.
Builder yang type-safe
textMessage(), templateMessage(), dan helper lain ngembaliin input yang udah typed. Autocomplete di tiap field — nggak perlu ngintip docs terus.Response ke-typed rapi
error — kamu handle pas udah siap naik production aja.Aman buat di-retry
idempotencyKey buat pengiriman yang mungkin kamu retry.Paginasi async
listPaginated() buat channel, contact, dan template. Pakai for await, biarin SDK yang ngabisin pagenya buat kamu.Verifikasi webhook
@wazapin/sdk/webhooks ngecek signature Svix dan nge-parse payload event langsung di server kamu.Jalan di mana aja
fetch standar web. Node 20+, Bun, Deno, Cloudflare Workers, Vercel — mau pakai fetch custom juga bisa.Install
npm i @wazapin/sdkyarn add @wazapin/sdkpnpm add @wazapin/sdkbun add @wazapin/sdkButuh verifikasi webhook? Tambahin peer opsional svix:
npm install @wazapin/sdk svixSyarat: Node 20+, ESM atau CJS. Type-nya udah include di package.
Hello, world
import { WazapinClient, textMessage } from "@wazapin/sdk";
const wazapin = new WazapinClient({
apiKey: process.env.WAZAPIN_API_KEY!,
});
const { data: message } = await wazapin.messages.send(
textMessage({
channel_id: "wzp_ch_123",
to: "6281234567890",
body: "Hello from @wazapin/sdk",
}),
);
console.log(message.id, message.status);Udah, sesimpel itu: bikin client, pilih channel_id kamu, panggil method resource-nya.
Tata letak resource
Di Wazapin, hampir semua urusan kirim pesan itu scope-nya per channel (nomor WhatsApp kamu yang udah connect). Kasih channel_id tiap mau ngirim; list channel sekali di awal terus cache ID-nya.
wazapin ← root client
├── wazapin.messages ← send, get, status, read, react
├── wazapin.channels ← list, get, status
├── wazapin.contacts ← list, create, lookup, getByPhone
├── wazapin.templates ← list, get, sync
├── wazapin.media ← upload, list, delete
├── wazapin.webhooks ← endpoints, deliveries, test
├── wazapin.apiKeys ← list, create, delete
├── wazapin.system ← health, version
└── wazapin.api ← raw OpenAPI client buat yang butuh advancedContoh yang sering kepake
// List channel yang udah connect — copy ID-nya buat integrasi kamu
const { data: channels } = await wazapin.channels.list({ limit: 20 });
// Kirim notifikasi pakai template
import { templateMessage } from "@wazapin/sdk";
await wazapin.messages.send(
templateMessage({
channel_id: "wzp_ch_123",
to: "6281234567890",
name: "order_shipped",
language: "id",
components: [{ type: "body", parameters: [{ type: "text", text: "ORD-42" }] }],
}),
);
// Paginasi contact — nggak perlu ngurus page manual
for await (const contact of wazapin.contacts.listPaginated({ limit: 50 })) {
console.log(contact.id);
}Konfigurasi
new WazapinClient({
apiKey: "wzp_...", // wajib — atau set WAZAPIN_API_KEY
baseUrl: "https://api.wazapin.com", // opsional — atau WAZAPIN_BASE_URL
timeoutMs: 30_000, // opsional, default 30s
maxRetries: 3, // opsional, default 3 (429 / 5xx)
fetch: customFetch, // opsional, default globalThis.fetch
});Mau lanjut ke mana?
Quickstart
Install, cari channel ID kamu, kirim pesan pertama — 5 menit jadi.
Messages
Teks, tombol, list, katalog — plus read, react, dan status pengiriman.
Templates
List, sync, dan kirim template WhatsApp yang udah di-approve.
Webhooks
Atur endpoint dan verifikasi pengiriman yang udah di-sign.
Utilities
Builder, pagination, error handling, dan low-level API client.
Referensi API
Semua endpoint HTTP plus playground interaktif.
Bahasa lain
cURL, Python, dan Go kalau kamu nggak pakai TypeScript.