Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Dovemails Status API
description: '**Dovemails** is an email sending platform — a transactional and marketing
email API.
This page documents the **public, API-key surface**: sending, messages, events and
the marketing resources (contacts, segments, templates, broadcasts, automations).
Everything else the dashboard uses (analytics, webhooks, billing, admin) is
intentionally not published here.
### Base URL
All paths below are relative to your own install, e.g. `https://your-instance`.
### Authentication
Send an API key created in the dashboard (sidebar → **API Keys**, `/esp/api-keys`) as a
Bearer token. Every key starts with `sk_`; there is no separate live/test prefix — a
test key is one you created with the **sandbox** flag, and it looks identical:
```
Authorization: Bearer sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
Click **Authorize** above and paste the key to try any endpoint from this page.
A missing or malformed header returns `401 {"detail": "Missing API key"}`; a key that
is unknown, revoked or expired returns `401 {"detail": "Invalid API key"}`.
Some endpoints are reachable only with a **dashboard session** (the browser JWT) and
*cannot* be called with an API key — those are called out in their tag description.
### Correlating a request
Every response carries a `Dovemails-Request-Id` header — a short hex id for that one
call. Quote it in a support request: it is what ties the call to the per-recipient
record of what each address in it did or didn''t get queued, including a `422` that was
refused before the send ran.
The id is per HTTP call, so a retry gets a new one.
### Quickstart
```bash
curl -X POST https://your-instance/api/v1/send \n -H "Authorization: Bearer $DOVEMAILS_API_KEY" \n -H "Content-Type: application/json" \n -d ''{"from":"hello@yourdomain.com","to":"you@example.com",
"subject":"Hello from Dovemails","text":"It works."}''
```
Longer guides live in the repository: `docs/quickstart.md`, `docs/sending.md`,
`docs/webhooks.md`. The raw schema is at `/openapi.json`.'
version: 1.1.0
tags:
- name: Status
paths:
/healthz:
get:
tags:
- Status
summary: Healthz
description: 'Unauthenticated liveness for external uptime pingers (F0.1).
Mirrors the worker''s eligibility filter (worker.py:205) so a
scheduled-for-later send never reads as a stuck queue.'
operationId: healthz_healthz_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Health'
components:
schemas:
Health:
type: object
description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
x-ae-placeholder: true