Amargi Reach
Last updated: 2026-05-17
Overview
Amargi Reach is a multi-channel messaging platform built on the WhatsApp Business Cloud API (Amargi is a verified Meta Tech Provider), plus Facebook Messenger, Instagram Direct, and email. Teams use it for:
- Sending transactional messages (OTPs, receipts, shipping alerts) over WhatsApp.
- Running marketing campaigns to segmented audiences.
- Supporting customers via the operator inbox (for human agents).
- Auto-replies (out-of-office, welcome, keyword triggers).
- Webhook integration so your systems consume inbound message events + delivery status changes.
Quickstart
- Sign up at Amargi Hub (see Hub docs). Open Reach from the launcher.
- Connect your WABA via Meta Embedded Signup: Settings → Channels → WhatsApp → Connect. The dialog handles everything (Facebook auth, portfolio selection, phone-number selection, system user creation).
- Send your first message from Send. For WhatsApp outside the 24h service window, you must use an approved template (UTILITY / AUTHENTICATION / MARKETING).
- Create a webhook subscription in Webhooks → New subscription. You receive message.inbound, message.status_changed, contact.opted_out events at your URL, signed with HMAC-SHA256.
- Open the operator inbox at Conversations. Inbound messages appear in real-time via SignalR.
Key concepts
WABA, phone number, template
A WhatsApp Business Account (WABA) is the entity that owns one or more phone numbers. Each phone number carries a quality rating (GREEN / YELLOW / RED) and a messaging tier (TIER_250 / TIER_1K / TIER_10K / TIER_100K / TIER_UNLIMITED) — these are managed by Meta based on user feedback. You use templates for any message outside the 24h service window (see below). Each template must be approved by Meta before it can be used (UTILITY is usually approved in a minute, MARKETING takes ~30 minutes).
24-hour Customer Service Window (CSW)
Meta's policy: after a user sends a message to your WABA, you can send any type of message (free-form text, media, etc.) for 24 hours without per-message billing. After this window closes, you must use an approved template, and the template price for the region is billed. Reach enforces this automatically — out-of-CSW messages without a template are rejected at the API.
Template categories
- UTILITY — Transactional notifications (order confirmation, shipping update, appointment reminder). Cheapest.
- AUTHENTICATION — OTPs and verification codes. Priced separately, optimized for fast delivery.
- MARKETING — Promotions, campaigns, retargeting. Most expensive; requires explicit recipient opt-in.
Consent and opt-out
Reach automatically enforces STOP/UNSUBSCRIBE keyword detection on inbound messages in 30+ languages (English, Arabic, Spanish, Portuguese, German, French, Indonesian, etc.). When a user sends STOP, their contact-consent row is appended with opt_out and future MARKETING messages to them are blocked at the API. UTILITY and AUTHENTICATION messages are still allowed (Meta + most regulations permit these as "transactional necessity").
Rate limiting + 429 retry
A sliding window per phone number is enforced by Reach (default: 80 messages/sec for TIER_1K, scales with tier). 429 responses from Meta are automatically retried with backoff (honoring Retry-After header, falling back to exponential with ±20% jitter).
Common tasks
Create a template
- Templates → New template
- Pick language, category (UTILITY/MARKETING/AUTHENTICATION), build components (header, body, buttons).
- Reach validates the components locally before submitting to Meta to avoid a rejection at their API.
- Click submit. Status flows: PENDING → APPROVED / REJECTED. Status updates flow in via Meta's webhook and are processed in real-time.
Run a campaign
- Define an audience in Audiences (segment based on contact attributes or upload a CSV).
- Create a campaign in Campaigns → New campaign. Link a template + audience.
- Schedule (schedule_at in the future) or launch immediately (/start).
- Monitor progress on the campaign page (queued / sent / delivered / read / failed).
Set up a webhook
- Webhooks → New subscription
- Enter your URL (HTTPS only), pick event types.
- Reach generates a signing secret. Copy it into your webhook server config.
- Verify the X-Reach-Signature header on every inbound request with HMAC-SHA256 of the payload body.
- Return 2xx within 5 seconds. Failure queues the event for retry (exponential backoff, max 5 attempts).
Reply from the inbox
- Conversations — opens the operator inbox. WhatsApp + Email + Messenger + Instagram messages appear with channel filters at the top.
- Pick a conversation. Type the reply in the composer.
- If inside the CSW: send directly. Outside: pick an approved template.
- Delivery status (sent → delivered → read) streams into the bubble in real-time.
API reference
All Reach endpoints sit under https://reach.amargicreative.com/api/v1/. Requests must carry either the amargi_hub_access cookie (browsers) or an Authorization: Bearer <api_key> header.
POST /api/v1/messages— Send a message. Idempotency key in the Idempotency-Key header.GET /api/v1/messages/:id— Retrieve a message by id.GET /api/v1/conversations— List conversations. Filter by state, channel_kind, assigned_user_id.GET /api/v1/conversations/:id/messages— Messages in a conversation.GET /api/v1/wabas— List visible WABAs.GET /api/v1/wabas/:id/templates— Templates for a given WABA.POST /api/v1/wabas/:id/templates— Submit a new template for Meta approval.GET /api/v1/campaigns— List campaigns.POST /api/v1/campaigns— Create a campaign (draft or scheduled).POST /api/v1/campaigns/:id/start— Launch a campaign immediately.GET /api/v1/webhook-subscriptions— List webhook subscriptions.POST /api/v1/webhook-subscriptions— Create a new webhook subscription.POST /api/v1/contacts/:id/consents— Manually record a consent update.GET /api/v1/reports/messaging— Messaging volume report (group_by=day|week).GET /api/v1/reports/billing— Billing cost report (group_by=day|category).
Webhook events
All outgoing events are signed with HMAC-SHA256; the secret rotates per-subscription (you can rotate manually any time). Event types:
message.inbound— A message arrived from the end-user.message.status_changed— sent → delivered → read → failed.conversation.assigned— A conversation was assigned to an operator.conversation.status_changed— open → pending → resolved → snoozed.contact.opted_out— A user sent STOP or UNSUBSCRIBE.template.status_changed— PENDING → APPROVED / REJECTED.phone_number.quality_changed— GREEN / YELLOW / RED + tier change.campaign.completed— A campaign finished.
SDKs
- TypeScript / Node.js —
@amargi/reach— Official client. Available on npm. - Python — Planned for Q3 2026.
- .NET — Planned for Q3 2026.
Getting help
- Email support: contact@amargicreative.com
- Privacy posture (Reach's BSP-specific stance): privacy posture.
- Subprocessors (Meta, 360dialog, etc.): subprocessors.