Cukup siapin API key dan nomor WhatsApp yang udah terhubung — langsung bisa kirim!
Yang perlu kamu siapin
- Base URL:
https://api.wazapin.com - API key (
X-Api-Key) - channel_id WhatsApp yang udah terhubung
Kirim pesan teks pertamamu
curl -X POST "https://api.wazapin.com/v1/messages" \
-H "X-Api-Key: <wazapin-api-key>" \
-H "Content-Type: application/json" \
-d '{
"channel_id": "<channel-id>",
"to": "<recipient-phone>",
"type": "text",
"content": {"body": "Hello from Wazapin"}
}'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: "<channel-id>",
to: "<recipient-phone>",
body: "Hello from Wazapin",
}),
);import os
import requests
resp = requests.post(
"https://api.wazapin.com/v1/messages",
headers={
"X-Api-Key": os.environ["WAZAPIN_API_KEY"],
"Content-Type": "application/json",
},
json={
"channel_id": "<channel-id>",
"to": "<recipient-phone>",
"type": "text",
"content": {"body": "Hello from Wazapin"},
},
timeout=30,
)
resp.raise_for_status()
message = resp.json()package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"channel_id": "<channel-id>",
"to": "<recipient-phone>",
"type": "text",
"content": {
"body": "Hello from Wazapin"
}
}`)
req, err := http.NewRequest(http.MethodPost, "https://api.wazapin.com/v1/messages", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("X-Api-Key", os.Getenv("WAZAPIN_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.StatusCode, string(out))
}<?php
$payload = '{
"channel_id": "<channel-id>",
"to": "<recipient-phone>",
"type": "text",
"content": {
"body": "Hello from Wazapin"
}
}';
$ch = curl_init("https://api.wazapin.com/v1/messages");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-Api-Key: " . getenv("WAZAPIN_API_KEY"),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
echo $httpCode . "\n" . $response . "\n";import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SendMessage {
public static void main(String[] args) throws Exception {
String body = """
{"channel_id": "<channel-id>", "to": "<recipient-phone>", "type": "text", "content": {"body": "Hello from Wazapin"}}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.wazapin.com/v1/messages"))
.header("X-Api-Key", System.getenv("WAZAPIN_API_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
System.out.println(response.statusCode());
System.out.println(response.body());
}
}require "net/http"
require "uri"
uri = URI("https://api.wazapin.com/v1/messages")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["X-Api-Key"] = ENV["WAZAPIN_API_KEY"]
request.body = '{"channel_id": "<channel-id>", "to": "<recipient-phone>", "type": "text", "content": {"body": "Hello from Wazapin"}}'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
# 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
puts response.code
puts response.bodyusing System.Net.Http;
using System.Text;
var body = "{\"channel_id\": \"<channel-id>\", \"to\": \"<recipient-phone>\", \"type\": \"text\", \"content\": {\"body\": \"Hello from Wazapin\"}}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Api-Key", Environment.GetEnvironmentVariable("WAZAPIN_API_KEY"));
var response = await client.PostAsync(
"https://api.wazapin.com/v1/messages",
new StringContent(body, Encoding.UTF8, "application/json"));
// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());Simpen id dari responsnya — bakal kepake di langkah selanjutnya.
Cek status pesan
curl -sS "https://api.wazapin.com/v1/messages/{messageID}" \
-H "X-Api-Key: <wazapin-api-key>" \
-H "Accept: application/json"const { data: message } = await wazapin.messages.get("MESSAGE_ID");import os
import requests
resp = requests.get(
"https://api.wazapin.com/v1/messages/MESSAGE_ID",
headers={"X-Api-Key": os.environ["WAZAPIN_API_KEY"]},
timeout=30,
)
resp.raise_for_status()
message = resp.json()Tinggal ganti {messageID} / MESSAGE_ID dengan UUID yang kamu dapat dari respons tadi.
Terima event otomatis (recommended)
Pasang URL webhook di dashboard biar pesan masuk dan update status pengiriman langsung kecatat — nggak perlu polling manual. Cek contoh payload webhook.
You should see
API mengembalikan respons 201 dengan objek pesan yang berisi id. ID ini
dipakai untuk mengecek status pesan atau mencocokkan event webhook.
What just happened
Wazapin menerima pesan untuk dikirim lewat channel WhatsApp yang terhubung. Pengiriman berjalan asynchronous, jadi statusnya dilacak lewat ID pesan atau webhook.
Next step
Pasang webhook status pengiriman supaya update masuk otomatis tanpa polling.