# Sendora > Transactional email delivery hosted in Sweden: an HTTP API, SMTP submission, SDKs for TypeScript and Python, signed webhooks and a message log with every event. ## Docs - [Overview](https://sendora.se/docs.md): where things are, the SDKs, the API, SMTP submission and the dashboard, and every guide. - [Quickstart](https://sendora.se/docs/quickstart.md): Send your first message and read it in the log. - [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. - [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. - [Test servers](https://sendora.se/docs/test-servers.md): Send from staging and CI without delivering anything, and act out bounces and complaints. - [Messages and events](https://sendora.se/docs/messages.md): Statuses, timelines and searching the log. - [Inbound](https://sendora.se/docs/inbound.md): Receive mail on an inbound stream or on your own domain, and read it. - [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. - [SMTP submission](https://sendora.se/docs/smtp.md): Send from a system that only speaks SMTP, with the same key and rules. - [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. - [MCP server](https://sendora.se/docs/mcp.md): Give a coding agent Sendora's docs and tools, in Claude Code, Cursor, VS Code, Codex or Claude Desktop. - [Changelog](https://sendora.se/docs/changelog.md): What each release of the SDKs changed, and what to change in your code when you upgrade. - [API reference](https://sendora.se/docs/api.md): every route, field, constraint and error code, generated from the running code. - [OpenAPI document](https://sendora.se/docs/openapi.json): the same, as OpenAPI 3.1. - [Everything as one file](https://sendora.se/llms-full.txt): the guides and the reference in Markdown. ## API reference - [Send one message](https://sendora.se/docs/api/post-v1-email.md): POST /v1/email - [Send up to 100 messages](https://sendora.se/docs/api/post-v1-email-batch.md): POST /v1/email/batch - [List the broadcasts](https://sendora.se/docs/api/get-v1-broadcasts.md): GET /v1/broadcasts - [Send a broadcast](https://sendora.se/docs/api/post-v1-broadcasts.md): POST /v1/broadcasts - [Get a broadcast](https://sendora.se/docs/api/get-v1-broadcasts-id.md): GET /v1/broadcasts/{id} - [Cancel a broadcast](https://sendora.se/docs/api/post-v1-broadcasts-id-cancel.md): POST /v1/broadcasts/{id}/cancel - [Read a message](https://sendora.se/docs/api/get-v1-messages-id.md): GET /v1/messages/{id} - [Search the message log](https://sendora.se/docs/api/post-v1-messages-search.md): POST /v1/messages/search - [Search received messages](https://sendora.se/docs/api/post-v1-inbound-search.md): POST /v1/inbound/search - [Read a received message](https://sendora.se/docs/api/get-v1-inbound-id.md): GET /v1/inbound/{id} - [Download the raw message](https://sendora.se/docs/api/get-v1-inbound-id-raw.md): GET /v1/inbound/{id}/raw - [Download an attachment](https://sendora.se/docs/api/get-v1-inbound-id-attachments-attachmentid.md): GET /v1/inbound/{id}/attachments/{attachmentId} - [List the inbound domains](https://sendora.se/docs/api/get-v1-inbound-domains.md): GET /v1/inbound/domains - [Claim a domain for an inbound stream](https://sendora.se/docs/api/post-v1-inbound-domains.md): POST /v1/inbound/domains - [Read an inbound domain](https://sendora.se/docs/api/get-v1-inbound-domains-id.md): GET /v1/inbound/domains/{id} - [Remove an inbound domain](https://sendora.se/docs/api/delete-v1-inbound-domains-id.md): DELETE /v1/inbound/domains/{id} - [Check the records now](https://sendora.se/docs/api/post-v1-inbound-domains-id-verify.md): POST /v1/inbound/domains/{id}/verify - [List the streams](https://sendora.se/docs/api/get-v1-streams.md): GET /v1/streams - [Create a stream](https://sendora.se/docs/api/post-v1-streams.md): POST /v1/streams - [Read a stream](https://sendora.se/docs/api/get-v1-streams-id.md): GET /v1/streams/{id} - [Update a stream](https://sendora.se/docs/api/patch-v1-streams-id.md): PATCH /v1/streams/{id} - [Archive a stream](https://sendora.se/docs/api/post-v1-streams-id-archive.md): POST /v1/streams/{id}/archive - [Read this key's server](https://sendora.se/docs/api/get-v1-server.md): GET /v1/server - [List the servers](https://sendora.se/docs/api/get-v1-servers.md): GET /v1/servers - [Create a server](https://sendora.se/docs/api/post-v1-servers.md): POST /v1/servers - [Read a server](https://sendora.se/docs/api/get-v1-servers-id.md): GET /v1/servers/{id} - [Rename a server](https://sendora.se/docs/api/patch-v1-servers-id.md): PATCH /v1/servers/{id} - [Delete a server](https://sendora.se/docs/api/delete-v1-servers-id.md): DELETE /v1/servers/{id} - [List the keys of a server](https://sendora.se/docs/api/get-v1-servers-id-tokens.md): GET /v1/servers/{id}/tokens - [Create a key for a server](https://sendora.se/docs/api/post-v1-servers-id-tokens.md): POST /v1/servers/{id}/tokens - [Read a key of a server](https://sendora.se/docs/api/get-v1-servers-id-tokens-tokenid.md): GET /v1/servers/{id}/tokens/{tokenId} - [Revoke a key of a server](https://sendora.se/docs/api/delete-v1-servers-id-tokens-tokenid.md): DELETE /v1/servers/{id}/tokens/{tokenId} - [List the sending domains](https://sendora.se/docs/api/get-v1-domains.md): GET /v1/domains - [Add a sending domain](https://sendora.se/docs/api/post-v1-domains.md): POST /v1/domains - [Read a sending domain](https://sendora.se/docs/api/get-v1-domains-id.md): GET /v1/domains/{id} - [Remove a sending domain](https://sendora.se/docs/api/delete-v1-domains-id.md): DELETE /v1/domains/{id} - [Check the records now](https://sendora.se/docs/api/post-v1-domains-id-verify.md): POST /v1/domains/{id}/verify - [Erase a person](https://sendora.se/docs/api/post-v1-erasures.md): POST /v1/erasures - [Read an erasure](https://sendora.se/docs/api/get-v1-erasures-id.md): GET /v1/erasures/{id} - [List the suppressed addresses](https://sendora.se/docs/api/get-v1-suppressions.md): GET /v1/suppressions - [Lift a suppression](https://sendora.se/docs/api/post-v1-suppressions-delete.md): POST /v1/suppressions/delete - [List the webhooks](https://sendora.se/docs/api/get-v1-webhooks.md): GET /v1/webhooks - [Create a webhook](https://sendora.se/docs/api/post-v1-webhooks.md): POST /v1/webhooks - [Read a webhook](https://sendora.se/docs/api/get-v1-webhooks-id.md): GET /v1/webhooks/{id} - [Remove a webhook](https://sendora.se/docs/api/delete-v1-webhooks-id.md): DELETE /v1/webhooks/{id} - [List the deliveries of a webhook](https://sendora.se/docs/api/get-v1-webhooks-id-deliveries.md): GET /v1/webhooks/{id}/deliveries - [Replay a delivery](https://sendora.se/docs/api/post-v1-webhooks-id-deliveries-deliveryid-replay.md): POST /v1/webhooks/{id}/deliveries/{deliveryId}/replay - [Create a signing secret](https://sendora.se/docs/api/post-v1-webhooks-id-secrets.md): POST /v1/webhooks/{id}/secrets - [Delete a signing secret](https://sendora.se/docs/api/delete-v1-webhooks-id-secrets-secretid.md): DELETE /v1/webhooks/{id}/secrets/{secretId} - [List the keys](https://sendora.se/docs/api/get-v1-tokens.md): GET /v1/tokens - [Create a key](https://sendora.se/docs/api/post-v1-tokens.md): POST /v1/tokens - [Read a key](https://sendora.se/docs/api/get-v1-tokens-id.md): GET /v1/tokens/{id} - [Revoke a key](https://sendora.se/docs/api/delete-v1-tokens-id.md): DELETE /v1/tokens/{id} - [Webhook events](https://sendora.se/docs/api/webhook-events.md): what a webhook receives for each event, with its fields and an example. ## SDKs - `npm install @sendora/sdk`: TypeScript, zero dependencies, ESM, Node 20.19 or newer and any runtime with fetch and WebCrypto. The package ships a README with every call and error code and a skill file at `skills/sendora/SKILL.md`. - `pip install sendora`: Python 3.11 or newer, one dependency (httpx2), a regular and an async client for each kind of key. The package ships a README with every call and error code and a skill file at `sendora/skills/sendora/SKILL.md`. ## MCP server - `npx -y @sendora/mcp` over stdio, or hosted at https://mcp.sendora.se/mcp with a key as a bearer token and at https://mcp.sendora.se/docs without one: the documentation, and with a key the tools for its server or account. [How to install it](https://sendora.se/docs/mcp). ## Optional - [Pricing](https://sendora.se/pricing), the [terms](https://sendora.se/terms) and the [data processing agreement](https://sendora.se/dpa), in Swedish.