Skip to main content
Zexa is Angola’s omnichannel business messaging platform, supporting SMS, WhatsApp, Telegram, Email, and Slack. Whether you are just getting started or integrating the REST API, the answers below cover the most common questions our customers ask. If you do not find what you need here, reach out to suporte@zexa.ao.

Account & Billing

Visit https://app.zexa.ao/signup to register. You will need:
  • A valid Angolan company NIF (Número de Identificação Fiscal) or a personal Bilhete de Identidade
  • An active email address
  • A working phone number
After submitting your details, verify your email address to activate your account.
No. Zexa credits do not expire. Once purchased, your credit balance remains available indefinitely until you use it.
Keep an eye on your balance in Billing > Overview so campaigns are never interrupted unexpectedly.
Credits are non-refundable once purchased, as stated in our Terms of Use. If you have a billing concern or believe a charge was made in error, contact suporte@zexa.ao and our team will review your case.
Invoices are generated automatically after every credit purchase. You can download them at any time from Billing > Invoices in the dashboard at app.zexa.ao.
Message sending is paused immediately when your balance reaches zero. Any campaign in progress will stop at that point. Once you top up your balance, paused campaigns will resume automatically from where they left off.
Top up before a campaign starts to avoid delivery gaps. You can set low-balance alerts in Billing > Notifications.

Channels & Messaging

Zexa currently supports the following messaging channels:
  • SMS — local and international
  • WhatsApp — template and session messages
  • Telegram — bot-based messaging
  • Email — transactional and marketing
  • Slack — workspace notifications
You can enable and configure each channel under Settings > Channels in the dashboard.
Yes. Zexa supports international destinations. International rates are higher than local Angolan rates and vary by destination country. Before launching an international campaign, review the per-country rate card in Billing > Rates in the dashboard to estimate your costs accurately.
A single SMS supports up to 160 characters using standard GSM-7 encoding. If your message exceeds 160 characters, Zexa automatically splits it into multiple parts (concatenated SMS). Each segment consumes one credit.
Use the character counter in the campaign composer to track length before sending. Special characters (e.g. emoji, accented letters) switch the encoding to UCS-2, reducing the per-segment limit to 70 characters.
Yes. When creating a campaign in the dashboard or making an API request, set the scheduled_at field to an ISO 8601 timestamp in UTC. For example:
{
  "scheduled_at": "2025-09-01T08:00:00Z"
}
Scheduled messages appear in Campaigns > Scheduled and can be edited or cancelled before the send time.
Zexa processes opt-outs automatically:
  • SMS: when a recipient replies STOP, they are removed from future sends on that Sender ID.
  • Email: when a recipient clicks the unsubscribe link, they are added to your suppression list immediately.
You can view and manage your suppression list under Contacts > Opt-Outs. You must not send further marketing messages to contacts who have opted out.

Sender IDs & Templates

A Sender ID is the name or number displayed in the “From” field of your messages — for example, MyBrand for SMS or a verified phone number for WhatsApp. For SMS and WhatsApp, you must register each Sender ID and receive approval before you can use it to send messages.
Sender ID review typically takes 1–3 business days. You will receive an email notification when your Sender ID is approved or if further information is required. You can check the current status at any time in Settings > Sender IDs.
The most common rejection reasons are:
  • Impersonation — the ID resembles a bank, government body, or well-known brand you are not authorised to represent.
  • Too long — SMS alphanumeric Sender IDs must be 11 characters or fewer.
  • Invalid characters — spaces and special characters are not permitted in most Sender IDs.
Review the rejection reason in Settings > Sender IDs, correct the issue, and resubmit.
It depends on the message context:
  • Outside a 24-hour service window — yes, you must use a pre-approved WhatsApp message template.
  • Inside a 24-hour service window (i.e., replying to a recipient who messaged you first within the last 24 hours) — you can send free-form session messages without a template.
Submit templates for review in Settings > Templates.

API & Integrations

Navigate to Settings > API Keys in the dashboard at app.zexa.ao. Click Generate New Key, give it a descriptive name, and copy it immediately — the full key is shown only once for security. Store it in a secrets manager or environment variable; never commit it to source control.
The Zexa REST API uses Bearer token authentication. Include your API key in every request header:
Authorization: Bearer <your-api-key>
The base URL for all API endpoints is https://api.zexa.ao/v1.
Yes. Rate limits are enforced per account. When you exceed the limit, the API returns an HTTP 429 Too Many Requests response. Implement exponential backoff in your retry logic — wait a short interval, then retry, doubling the wait time on each subsequent failure.
Contact suporte@zexa.ao if your use case requires a higher rate limit; volume plans are available.
Yes. Configure a webhook endpoint in Settings > Webhooks in the dashboard, or via the API, to receive real-time delivery status callbacks. Zexa sends a POST request to your endpoint each time a message status changes (e.g., queueddelivered or failed). Respond with an HTTP 200 to acknowledge receipt.