Send transactional WhatsApp

Connect a WABA and send templates or in-window replies

Resent provides a multi-tenant WhatsApp Cloud API layer. Each business connects its own WhatsApp Business Account (WABA) through Meta Embedded Signup, then sends messages from the dashboard or a hashed developer API key.

Meta Business Verification and App Review Advanced Access are required before unrestricted customer onboarding. Until then, only Meta app admins / testers can complete Embedded Signup.

Connect in the dashboard

  1. Open WhatsApp in the Resent dashboard.
  2. Click Connect WhatsApp and complete Meta Embedded Signup.
  3. Open Templates — create a template in Resent (submitted to Meta for review) or sync existing ones from Meta.
  4. Create a WhatsApp developer API key under WhatsApp → API keys.

Templates are created on the currently connected WhatsApp Business Account. After Meta approves, sync again if status still shows pending, then send from the composer.

Authenticate

Authorization: Bearer wa_live_xxxxxxxx

Base path on the Resent API host:

POST /api/v1/whatsapp/messages
GET /api/v1/whatsapp/messages/{id}

Send an approved template

curl -X POST https://resent.one/api/v1/whatsapp/messages \
-H "Authorization: Bearer wa_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-123-shipped" \
-d '{
"type": "template",
"to": "+15551234567",
"template": {
"name": "hello_world",
"language": { "code": "en_US" }
}
}'

Body variables must match the template’s {{1}}, {{2}}, … placeholders exactly.

Send a text reply (24-hour window)

Free-form text is only allowed after an inbound customer message opens the Meta customer service window (24 hours). Outside that window, use an approved template.

curl -X POST https://resent.one/api/v1/whatsapp/messages \
-H "Authorization: Bearer wa_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "text",
"to": "+15551234567",
"text": { "body": "Happy to help — what do you need?" }
}'

Check delivery status

curl https://resent.one/api/v1/whatsapp/messages/{id} \
-H "Authorization: Bearer wa_live_xxx"

Statuses move through accepted → sent → delivered → read, or failed when Meta rejects the message. Webhooks keep these timestamps up to date.