Sendora is a transactional email API, run in Sweden. Start with the Quickstart, which takes you from an approved account to a delivered message.
Every code sample comes in cURL, TypeScript, Python and PHP. Pick a language on any sample, and every page shows that language. Sendora's tests run every sample's request against the real API, so each works as written.
Domains: Verify a sending domain with two DNS records.
Keys: The two kinds of API key, and how to rotate one.
SSO and SCIM: Sign your organisation's people in through its own identity provider, by SAML or OpenID Connect, and keep the account's users in step with SCIM.
API: https://api.sendora.se, HTTPS and JSON. The OpenAPI document is at /docs/openapi.json.
SMTP: smtp.sendora.se on port 465 (TLS) or 587 (STARTTLS), with a server key as user name and password.
TypeScript SDK: npm install @sendora/sdk, with no dependencies, for Node 20.19 or newer and any runtime with fetch.
Python SDK: pip install sendora, with one dependency, for Python 3.11 or newer.
PHP SDK: composer require sendora/sendora-php, with no package beyond ext-curl and ext-json, for PHP 8.2 or newer.
Dashboard: https://app.sendora.se, where keys, domains, webhooks and the message log live.
For agents: /llms.txt indexes these pages, and /llms-full.txt holds them all in one Markdown file.
# Documentation
Sendora is a transactional email API, run in Sweden. Start with the [Quickstart](https://sendora.se/docs/quickstart.md), which takes you from an approved account to a delivered message.
Every code sample comes in cURL, TypeScript, Python and PHP. Pick a language on any sample, and every page shows that language. Sendora's tests run every sample's request against the real API, so each works as written.
## Get started
- [Quickstart](https://sendora.se/docs/quickstart.md): Send your first message and read it in the log.
- [Test servers](https://sendora.se/docs/test-servers.md): Send from staging and CI without delivering anything, and act out bounces, complaints, opens and clicks.
## Sending
- [Sending](https://sendora.se/docs/sending.md): Single sends, batches, attachments, headers and idempotency.
- [Streams](https://sendora.se/docs/streams.md): Keep kinds of mail apart, each with its own suppression list.
- [Broadcasts](https://sendora.se/docs/broadcasts.md): One message to many recipients, each with their own unsubscribe link.
## After sending
- [Messages and events](https://sendora.se/docs/messages.md): Statuses, timelines and searching the log.
- [Webhooks](https://sendora.se/docs/webhooks.md): Events pushed to your endpoint, how to verify them, and retries and replays.
- [Suppressions](https://sendora.se/docs/suppressions.md): Addresses a stream no longer sends to, why they are there, and how to lift one, and the list of addresses a server never tracks.
## Receiving
- [Inbound](https://sendora.se/docs/inbound.md): Receive mail on an inbound stream or on your own domain, and read it.
## Account
- [Domains](https://sendora.se/docs/domains.md): Verify a sending domain with two DNS records.
- [Keys](https://sendora.se/docs/keys.md): The two kinds of API key, and how to rotate one.
- [SSO and SCIM](https://sendora.se/docs/sso.md): Sign your organisation's people in through its own identity provider, by SAML or OpenID Connect, and keep the account's users in step with SCIM.
## Tools
- [SMTP submission](https://sendora.se/docs/smtp.md): Send from a system that only speaks SMTP, with the same key and rules.
- [Move from Microsoft 365](https://sendora.se/docs/microsoft-365.md): Move a system that sends through a Microsoft 365 mailbox with a password to Sendora's SMTP.
- [MCP server](https://sendora.se/docs/mcp.md): Connect claude.ai, ChatGPT, Claude Code, Cursor, VS Code, Codex or Claude Desktop to Sendora's docs and tools.
## Reference
- [API reference](https://sendora.se/docs/api.md): Every route, with its fields, responses and error codes.
- [Errors](https://sendora.se/docs/errors.md): The error body, every error code, and what stops an account from sending.
- [Limits](https://sendora.se/docs/limits.md): Every limit an account meets, and its number.
- [Changelog](https://sendora.se/docs/changelog.md): What each release of the SDKs changed, and what to change in your code when you upgrade.
## Where things are
- API: `https://api.sendora.se`, HTTPS and JSON. The OpenAPI document is at [/docs/openapi.json](https://sendora.se/docs/openapi.json).
- SMTP: `smtp.sendora.se` on port 465 (TLS) or 587 (STARTTLS), with a server key as user name and password.
- TypeScript SDK: `npm install @sendora/sdk`, with no dependencies, for Node 20.19 or newer and any runtime with `fetch`.
- Python SDK: `pip install sendora`, with one dependency, for Python 3.11 or newer.
- PHP SDK: `composer require sendora/sendora-php`, with no package beyond ext-curl and ext-json, for PHP 8.2 or newer.
- Dashboard: `https://app.sendora.se`, where keys, domains, webhooks and the message log live.
- For agents: [/llms.txt](https://sendora.se/llms.txt) indexes these pages, and [/llms-full.txt](https://sendora.se/llms-full.txt) holds them all in one Markdown file.