Getting started
Quickstart: send your first message
Go from zero to a delivered message in about five minutes with the WeZend API.
This guide sends your first message in about five minutes.
1. Get your API key
Sign in to the dashboard, open Settings → API keys, and create a key. It authenticates every request you send and should never be exposed in a browser or mobile app — call it from your own backend.
Confirm your email address before your first send. Click the link in the welcome email WeZend sent when you signed up. Until someone on the account has confirmed, every send is rejected: the message is created with status
suppressedand a reason, and it is not queued — confirming afterwards does not deliver it, you send again. One confirmed user covers the whole account,transactional: truedoes not bypass it, and accounts created before 15 August 2026 are unaffected. Lost the email? Resend it from Settings → Security, or callPOST /v1/auth/send-verify-emailwith{ "email": "you@example.com" }; the link is valid for 24 hours.
2. Send a message
curl https://api.wezend.com/v1/messages/send \
-H "X-API-Key: $WEZEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+4512345678",
"channel": "sms",
"message": "Hello from WeZend"
}'
The example deliberately sends without a sender field, so the message uses your account's default sender — which works on a fresh account as soon as your email address is confirmed. A custom sender (your brand name) must be approved under Settings → Sender IDs first; an unapproved value is rejected with 403.
A successful call returns 201 with the message record:
{
"message_id": "3fa1e2c0-...",
"status": "queued",
"channel": "sms",
"to": "+4512345678",
"cost": 0.045,
"currency": "EUR",
"created_at": "2026-07-08T10:00:00.000Z"
}
3. Check delivery
Poll GET /v1/messages/:message_id, or — better at any real volume — pass a webhook_url in the send request and receive delivery updates as they happen. See Webhooks.
Before your first real email: verify your domain
The send above goes out under WeZend's shared default sender. To send as your own domain — and to stay out of spam — add it under Settings → Domains first (GET /v1/account/email-domains). WeZend generates the exact records for your account: an SPF include:, a DKIM CNAME under WeZend's own selector, and a recommended DMARC starting at p=none.
Publish the DKIM record under the selector WeZend gives you — not one your mailbox host already uses for its own mail. They are different keys, and only WeZend's selector matches the signature we apply. Then call POST /v1/account/email-domains/:id/verify; the checks object says per record what passed and, if not, why. Keep DMARC at p=none until DKIM verifies, then tighten it. Full walkthrough: Email: domains, DNS & sending.
What needs enabling
Not everything is self-serve, and it's better to know now than to debug it later.
| Capability | What it takes |
|---|---|
| Sending at all, on a new account | Confirm your email address (step 1). Until then every send is suppressed. |
| Email under your own domain | Verify the domain (above). Until then, the shared default sender is used. |
| SMS, RCS, WhatsApp, voice | A sender ID and routing, provisioned with you during onboarding — not self-serve. |
| Inbound email (replies to a campaign) | Enabled per reply-subdomain during onboarding. |
| AI subject lines and rewrites | On every plan. Degrades gracefully if the AI backend is unavailable. |
| AI Email Writer, Performance Coach | Paid add-ons — enable them in Billing. |
| Predictive scores (churn, CLV, propensity) | Business and above. Heuristic scores work immediately; no training data needed. |
Next steps
- Authentication — API keys vs. dashboard sessions
- Sending messages — every field
/v1/messages/sendaccepts, and channel fallback - Rate limits — the real, current limits per endpoint
Build the request
Fill in the fields you need and copy the request in cURL, Node, Python or PHP — this builds the code, it does not send anything.
On SMS and RCS this must be a sender ID approved under Settings → Sender IDs — an unapproved value is rejected with 403. Leave it empty to use your account default, which always works.
Empty fields are left out of the request. Email-only fields appear when the channel is email.
curl https://api.wezend.com/v1/messages/send \
-H "X-API-Key: $WEZEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+4512345678",
"channel": "sms",
"message": "Hello from WeZend"
}'One platform. Every customer interaction.
Replace your patchwork of messaging APIs, CDP and automation tools with a single engagement platform built for scale.
No credit card required · EU data residency · 99.99% uptime SLA