> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.teekrr.com/llms.txt.
> For full documentation content, see https://docs.teekrr.com/llms-full.txt.

# Introduction

Teekrr is a multi-tenant **omnichannel messaging platform** for Malaysian businesses. With a single API key you can:

* **Send SMS** broadcasts via the Elfo gateway (shortcode `68100`)
* **Send WhatsApp** template messages via the META Cloud API
* **Send Email** broadcasts via AWS SES
* **Receive HMAC-signed webhooks** at your own URL when messages are delivered, fail, are billed, or bounce

Every endpoint is REST over JSON, returns standard HTTP status codes, and uses Bearer API-key auth.

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Send your first broadcast in under five minutes.
  </Card>

  <Card title="Authentication" icon="key" href="/authentication">
    Issue API keys, scopes, IP whitelists, and rotation.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference">
    Full endpoint reference with request/response schemas.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/webhooks-guide">
    Receive delivery events at your own URL with HMAC signatures.
  </Card>
</CardGroup>

## Base URLs

| Environment | URL                              |
| ----------- | -------------------------------- |
| Production  | `https://api.teekrr.com`         |
| Staging     | `https://api.staging.teekrr.com` |

## Response envelope

| Outcome | Shape                                                                    |
| ------- | ------------------------------------------------------------------------ |
| Success | `{ "data": <payload> }`                                                  |
| Error   | `{ "message": "...", "errors": [{ "field": "...", "message": "..." }] }` |

The `errors` array is only present on `400 Bad Request` validation failures.

## Billing model

* **Prepaid** clients: every broadcast atomically reserves credit on creation. Credit is **settled** when the provider accepts the message and **released** if delivery permanently fails.
* **Postpaid** clients: a per-cycle spending cap is enforced; broadcasts that would exceed the cap return `402 Payment Required`.

Per-channel rates (SMS / WhatsApp / Email) are visible on your in-app `/api-management` dashboard.

## Status lifecycle

| Channel      | Lifecycle                                                                               |
| ------------ | --------------------------------------------------------------------------------------- |
| **SMS**      | `pending → enqueued → send → [delivered \| failed]`                                     |
| **WhatsApp** | `pending → enqueued → sent → [delivered \| read \| failed]`                             |
| **Email**    | `pending → enqueued → send → [delivered \| failed]` (with `bounced` on hard SES bounce) |

Final status reaches your registered webhook URL — see the [Webhooks guide](/webhooks-guide).

## Rate limits

| Endpoint                                     | Limit                         |
| -------------------------------------------- | ----------------------------- |
| `POST /sms`, `POST /whatsapp`, `POST /email` | 10 requests / 15 min / client |
| `POST /whatsapp/test`                        | 5 requests / 15 min / client  |

Limits key on the client account that owns the API key. Exceeding them returns `429 Too Many Requests`.

## Need help?

* **Email:** [api-support@teekrr.com](mailto:api-support@teekrr.com)
* **Status:** [status.teekrr.com](https://status.teekrr.com)