> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zexa.ao/llms.txt
> Use this file to discover all available pages before exploring further.

# Zexa FAQ: Accounts, Billing, Channels, and the API

> Find answers to the most common questions about using Zexa — covering accounts, billing, messaging channels, Sender IDs, templates, and the REST API.

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](mailto:suporte@zexa.ao).

***

## Account & Billing

<AccordionGroup>
  <Accordion title="How do I create a Zexa account?">
    Visit [https://app.zexa.ao/signup](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.
  </Accordion>

  <Accordion title="Do credits expire?">
    No. Zexa credits do **not** expire. Once purchased, your credit balance remains available indefinitely until you use it.

    <Tip>
      Keep an eye on your balance in **Billing > Overview** so campaigns are never interrupted unexpectedly.
    </Tip>
  </Accordion>

  <Accordion title="Can I get a refund for unused credits?">
    Credits are **non-refundable** once purchased, as stated in our [Terms of Use](https://app.zexa.ao/terms). If you have a billing concern or believe a charge was made in error, contact [suporte@zexa.ao](mailto:suporte@zexa.ao) and our team will review your case.
  </Accordion>

  <Accordion title="How do I receive an invoice?">
    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](https://app.zexa.ao).
  </Accordion>

  <Accordion title="What happens if my credit balance runs out?">
    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.

    <Warning>
      Top up before a campaign starts to avoid delivery gaps. You can set low-balance alerts in **Billing > Notifications**.
    </Warning>
  </Accordion>
</AccordionGroup>

***

## Channels & Messaging

<AccordionGroup>
  <Accordion title="Which channels does Zexa support?">
    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.
  </Accordion>

  <Accordion title="Can I send to international numbers?">
    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.
  </Accordion>

  <Accordion title="What is the maximum SMS message length?">
    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**.

    <Tip>
      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.
    </Tip>
  </Accordion>

  <Accordion title="Can I schedule messages?">
    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:

    ```json theme={null}
    {
      "scheduled_at": "2025-09-01T08:00:00Z"
    }
    ```

    Scheduled messages appear in **Campaigns > Scheduled** and can be edited or cancelled before the send time.
  </Accordion>

  <Accordion title="How do I handle opt-outs?">
    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.
  </Accordion>
</AccordionGroup>

***

## Sender IDs & Templates

<AccordionGroup>
  <Accordion title="What is a Sender ID?">
    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.
  </Accordion>

  <Accordion title="How long does Sender ID approval take?">
    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**.
  </Accordion>

  <Accordion title="Why was my Sender ID rejected?">
    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.
  </Accordion>

  <Accordion title="Do I need a template to send WhatsApp messages?">
    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**.
  </Accordion>
</AccordionGroup>

***

## API & Integrations

<AccordionGroup>
  <Accordion title="Where do I find my API key?">
    Navigate to **Settings > API Keys** in the dashboard at [app.zexa.ao](https://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.
  </Accordion>

  <Accordion title="What authentication does the API use?">
    The Zexa REST API uses **Bearer token authentication**. Include your API key in every request header:

    ```http theme={null}
    Authorization: Bearer <your-api-key>
    ```

    The base URL for all API endpoints is `https://api.zexa.ao/v1`.
  </Accordion>

  <Accordion title="Is there a rate limit on the API?">
    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.

    <Note>
      Contact [suporte@zexa.ao](mailto:suporte@zexa.ao) if your use case requires a higher rate limit; volume plans are available.
    </Note>
  </Accordion>

  <Accordion title="Can I receive delivery status updates?">
    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., `queued` → `delivered` or `failed`). Respond with an **HTTP 200** to acknowledge receipt.
  </Accordion>
</AccordionGroup>
