---
title: Introduction
description: "What ZevSend is, how it's organised, and what you need to send your first message."
---

ZevSend is a transactional messaging API. Deliver application
email the way Resend, Postmark, or SendGrid do — your codebase
owns the body, we handle deliverability, signing, and the
lifecycle events your app reacts to. Reach the same customers on
SMS and WhatsApp through one auth, one response envelope, and one
webhook signing scheme.

## How it's organised

A handful of concepts show up everywhere in the API. Knowing what
each one does upfront makes the rest of the documentation read
fast.

### Teams

A **team** is the unit of billing and isolation. Every API key,
domain, template, and message belongs to one team. If you work with
collaborators, invite them to your team rather than sharing keys.

### API keys

API keys authenticate every request. Keys are scoped to a single
team and look like `sk_live_…` or `sk_test_…`. See
[Authentication](/api/auth) for how to pass them.

### Domains

A **domain** is the brand identity your messages send from. After
you verify ownership with DNS records, we use it as the `from`
address for email and as the brand context for SMS and WhatsApp.
See [Domains and brand identity](/guide/domains).

### Templates

A **template** is the pre-approved content of a message. Templates
declare which variables they accept and which channel they target.
You reference them by id (`tpl_…`) when you send. See
[Templates](/guide/templates).

### Messages

A **message** is one delivery attempt. Every send returns a public
id (`eml_…`, `sms_…`, `wam_…`) that you can use to look up state
or correlate webhooks.

## Lifecycle at a glance

Every channel uses the same lifecycle vocabulary so you can write
one set of handlers and they'll work everywhere:

| State       | Meaning                                            |
| ----------- | -------------------------------------------------- |
| `queued`    | We accepted the send and it's waiting to dispatch. |
| `sending`   | Handed off; awaiting acceptance from the network.  |
| `sent`      | Accepted by the network and in transit.            |
| `delivered` | Confirmed at the recipient's device.               |
| `read`      | Recipient opened the message (WhatsApp only).      |
| `bounced`   | Permanent delivery failure (email only).           |
| `complained`| Recipient flagged as spam (email only).            |
| `failed`    | Rejected at submit or permanent delivery failure.  |

## Sandbox vs live

Every team starts in **sandbox**. In sandbox mode you can send
real API calls and see them flow through the dashboard without
risking real recipients. When you're ready, request a live
upgrade from your dashboard. Read
[Sandbox and live mode](/guide/sandbox-and-live) for the full
picture.

## Next step

If you have an account, go straight to the [Quickstart](/guide/quickstart).