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.