Introduction
kirim.dev is a developer platform for the WhatsApp API. You call a REST API from your own code to send messages, templates, and interactive replies, and to receive events over webhooks. It is infrastructure — not an inbox, broadcast tool, or CRM.
The request and response shapes are the WhatsApp Cloud API's, unchanged. What you send is forwarded to Meta byte for byte, so Meta's official reference describes every field — this documentation covers what's specific to kirim.dev: the base URL, authentication, and which endpoints are available.
1. Connect a number
In the dashboard, connect a WhatsApp number — onboard one through Embedded Signup, or bring your own WhatsApp Business account. Coexistence numbers are supported. Once the number isconnected, it can send.
2. Create an API key
Create a key in the dashboard under API Keys. Keys look like kd_live_… (orkd_test_… for testing). The key is shown once — store it somewhere safe. It authenticates every request; your Meta token stays encrypted in our vault and never touches your code.
3. Base URL
Send requests to https://api.kirim.dev. The path is the Cloud API path, including the version segment:
https://api.kirim.dev/v23.0/{PHONE_NUMBER_ID}/messagesThe version segment is Meta's, e.g. v23.0. Pin the version you tested against — kirim.dev forwards it to Meta unchanged and never rewrites it for you. It must be a full Cloud API version likev23.0, not a bare v1.
4. Authentication
Pass your kirim.dev API key as a bearer token. Do not send your Meta token — kirim.dev supplies that for you.
Authorization: Bearer kd_live_a1B2c3D4xY7z...Keys come in two modes. A kd_live_… key and a kd_test_… key authenticate and forward the same way — the mode is a label so you can separate keys used by your test and production code in the dashboard, not a sandbox. Both send real messages against the number they are used with.
5. Your first request
Send a text message:
curl -X POST https://api.kirim.dev/v23.0/{PHONE_NUMBER_ID}/messages \
-H "Authorization: Bearer $KIRIM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "62812XXXXXXX",
"type": "text",
"text": { "body": "Hello from kirim.dev 👋" }
}'Replace {PHONE_NUMBER_ID} with your connected number's phone number id (from the dashboard) and62812XXXXXXX with the recipient in international format (digits only, no +). A successful call returns the message id, exactly as Meta returns it.
Responses & limits
Responses are Meta's, forwarded byte for byte — status code, headers, and body. kirim.dev adds aRateLimit-Remaining header so you can pace yourself, and on a throttle a Retry-After. See Rate limits for the details.
A request body is capped at 100 MB, matching Meta's media limit; a larger body is refused with a413 before any call to Meta is made.
What's next
- Sending messages — text, media, interactive.
- Templates — create and send message templates.
- Media — upload and send images, documents, and more.
- Webhooks — receive inbound messages and status events.
- Rate limits — throughput tiers and throttle headers.
- Errors — how failures are reported.