Notify Africa

Get Started

Prepare WhatsApp in the Portal, authenticate, and make the first WABA Developer API request.

Prerequisites

  • Notify Africa account with active WhatsApp access.
  • Meta business account eligible for WhatsApp Business.
  • WhatsApp Business Account and phone number connected in the Notify Africa Portal.
  • Connection marked ready in the Portal.
  • API key authorized for WABA.
  • Server environment that can protect the API key.
  • HTTPS callback URL for webhook events.

Complete Portal Setup

Before calling the Developer API:

  1. Open WhatsApp setup in the Notify Africa Portal.
  2. Complete Meta Embedded Signup.
  3. Select the business, WhatsApp Business Account, and phone number.
  4. Resolve every readiness blocker shown in the Portal.
  5. Create an API key with WABA access enabled.
  6. Copy the key when shown and store it in a secret manager.

Do not call Portal account-management operations from your integration. The Developer API uses the connection selected for the account that owns the API key.

Configure Environment

export NOTIFY_API_BASE_URL="https://api.notify.africa"
export NOTIFY_WABA_API_KEY="ntfy_your_api_key"

Use the base URL assigned to your environment when it differs from the production example.

Required Headers

Authorization: Bearer ntfy_your_api_key
Content-Type: application/json

Content-Type is required for requests with a JSON body.

First Request

List the account's WhatsApp templates:

curl --request GET \
  "$NOTIFY_API_BASE_URL/v1/waba-api/templates?channel=whatsapp&currentPage=1&pageSize=10" \
  --header "Authorization: Bearer $NOTIFY_WABA_API_KEY"

Example response:

{
  "status": 200,
  "message": "Success",
  "timestamp": "2026-09-09T10:00:00.000Z",
  "path": "/v1/waba-api/templates?channel=whatsapp&currentPage=1&pageSize=10",
  "data": [],
  "pagination": {
    "total": 0,
    "currentPage": 1,
    "totalPages": 0,
    "pageSize": 10
  }
}

First-Message Requirements

Choose one send path:

Send typeRequirement
TemplateTemplate exists for the connected WABA and Meta reports it as approved
TextRecipient has an open conversation with qualifying inbound activity during the preceding 24 hours

Template sends are the correct first-contact path.

First Template Send

curl --request POST \
  "$NOTIFY_API_BASE_URL/v1/waba-api/messages/template" \
  --header "Authorization: Bearer $NOTIFY_WABA_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "to": "255700000001",
    "template_name": "order_update",
    "language": "en",
    "template_parameters": {
      "body": {
        "1": "Jane",
        "2": "ORD-1001"
      }
    },
    "idempotency_key": "order-1001-update"
  }'

Example accepted response:

{
  "status": 200,
  "message": "Success",
  "timestamp": "2026-09-09T10:01:00.000Z",
  "path": "/v1/waba-api/messages/template",
  "data": {
    "results": [
      {
        "to": "255700000001",
        "success": true,
        "messageId": "d9b54c80-8a63-4f8b-83c8-71f2439f5429",
        "status": "processing",
        "error": null
      }
    ]
  }
}

success: true means Notify Africa queued the recipient result. It does not mean Meta accepted or delivered the message. A provider wamid can be absent at this stage.

Observe Delivery

  1. Configure a developer webhook in the Portal.
  2. Subscribe to message.status.updated.
  3. Verify every callback signature using the raw request body.
  4. Match data.messageId or data.wamid to the send result.
  5. Deduplicate callbacks by eventId.

Checklist

  • Portal shows the connection as ready.
  • API key starts with ntfy_ and has WABA access.
  • Requests use Bearer authentication.
  • Template is approved before sending.
  • Recipient values use one consistent international format.
  • Webhook secret is stored separately from the API key.
  • Send responses are treated as asynchronous acceptance.

On this page