# Rasket > Rasket is an email API: send transactional mail and broadcasts, manage domains, contacts and automations, and hear what happened through webhooks — over REST, the Node SDK or MCP. The API base is https://api.rasket.com; until that host is attached, the identical routes answer at https://www.rasket.com/api/v1. The OpenAPI document is https://www.rasket.com/openapi.json and the MCP endpoint is https://api.rasket.com/mcp. Every page below is Markdown, and https://www.rasket.com/llms-full.txt is all of them in one file. ## Guides - [Overview](https://www.rasket.com/docs.md): What exists today, and what does not. - [Quickstart](https://www.rasket.com/docs/quickstart.md): Key, domain, first send — in that order. - [Authentication](https://www.rasket.com/docs/authentication.md): Bearer keys, the mandatory User-Agent, and what each refusal means. - [Errors](https://www.rasket.com/docs/errors.md): The whole vocabulary, with the status each name carries. - [Idempotency](https://www.rasket.com/docs/idempotency.md): Retry a send without sending it twice. - [Pagination](https://www.rasket.com/docs/pagination.md): Cursors are item IDs, not page numbers. - [Rate limits](https://www.rasket.com/docs/rate-limits.md): Ten a second per team, and the headers that tell you where you are. - [Events](https://www.rasket.com/docs/events.md): Every event a webhook can carry, with one real payload each. - [Tracking](https://www.rasket.com/docs/tracking.md): Opens and clicks: one record, two toggles, and what an open really means. - [Receiving](https://www.rasket.com/docs/receiving.md): Inbound mail, and the Inbox: a webhook fires, you read it, you answer it. - [Node SDK](https://www.rasket.com/docs/sdk/node.md): The rasket package: typed from the API's own document, retries only what is safe. - [Python SDK](https://www.rasket.com/docs/sdk/python.md): The rasket package on PyPI: the Node client's methods, in snake_case, over httpx. - [MCP server](https://www.rasket.com/docs/mcp.md): Let an assistant act on your account: ten tools, your scopes, no key. - [AI assist](https://www.rasket.com/docs/ai.md): Subject lines, drafts and diagnosis — in the dashboard and over the API, off until you allow it. - [Agents](https://www.rasket.com/docs/agents.md): Let an AI agent set Rasket up: the skill, the rules file, MCP, and the recipe they share. - [OAuth](https://www.rasket.com/docs/oauth.md): Let another app act for a team: register, authorize with PKCE, exchange, refresh. - [Single sign-on](https://www.rasket.com/docs/sso.md): OIDC login for your team, a domain proved by DNS, enforcement and break-glass. - [Integrations](https://www.rasket.com/docs/integrations.md): Vercel, Netlify and Cloudflare: a key in the environment, or an OAuth app. ## API reference - [Emails](https://www.rasket.com/docs/api-reference/emails.md): Send, batch, retrieve, list, reschedule, cancel, attachments. - [Domains](https://www.rasket.com/docs/api-reference/domains.md): Add a domain, publish its records, verify it. - [API keys](https://www.rasket.com/docs/api-reference/api-keys.md): Create, list, rename and revoke credentials. - [Webhooks](https://www.rasket.com/docs/api-reference/webhooks.md): Payloads, signature verification, retries and replay. - [Suppressions](https://www.rasket.com/docs/api-reference/suppressions.md): Addresses we will not send to, and why. - [Logs](https://www.rasket.com/docs/api-reference/logs.md): Every request made with this team's credentials. - [Metrics](https://www.rasket.com/docs/api-reference/metrics.md): Delivery, bounce, complaint and engagement counts. - [Templates](https://www.rasket.com/docs/api-reference/templates.md): Versioned email content with typed variables, addressed by ID or alias. - [Contacts](https://www.rasket.com/docs/api-reference/contacts.md): Your audience: contacts, their typed properties, segments and topic choices. - [Segments](https://www.rasket.com/docs/api-reference/segments.md): Audiences defined by a filter, by hand, or both. - [Topics](https://www.rasket.com/docs/api-reference/topics.md): What contacts subscribe to, and the preference page's list. - [Broadcasts](https://www.rasket.com/docs/api-reference/broadcasts.md): One message to a segment: the draft, the gate, the send and the results. - [Imports](https://www.rasket.com/docs/api-reference/imports.md): CSV uploads: column mapping, conflicts and counts. - [Automations](https://www.rasket.com/docs/api-reference/automations.md): Workflows that run per contact: the graph, its versions, and every run. - [Custom events](https://www.rasket.com/docs/api-reference/events.md): The names your product fires, and what starts a workflow. - [Receiving](https://www.rasket.com/docs/api-reference/receiving.md): Mail sent to you: the message, its attachments, its raw source. - [OAuth](https://www.rasket.com/docs/api-reference/oauth.md): Client registration, the token endpoint, and the grants a team has given. - [Team](https://www.rasket.com/docs/api-reference/team.md): The team a credential belongs to: its plan, sender identity, AI flag and members. - [Billing](https://www.rasket.com/docs/api-reference/billing.md): Plan, usage, invoices and add-ons, and the hosted pages where a customer pays. - [AI helpers](https://www.rasket.com/docs/api-reference/ai.md): Subject lines, a first draft, and why an email did what it did. ## Blog - [How to send email from Django with an API, a Celery task and a webhook view](https://www.rasket.com/blog/send-email-django.md): Send email from Django with an API: the key in settings, a Celery task that retries with one idempotency key, and a CSRF-exempt webhook view for the events. - [How to send email from Rails with an API, a service object, Active Job and a webhook](https://www.rasket.com/blog/send-email-rails.md): Send email from Rails with an API and no gem: a Net::HTTP service object, an Active Job that retries with one idempotency key, and a webhook controller. - [How to send email from Laravel with an API: the Http facade, a queued job and a webhook](https://www.rasket.com/blog/send-email-laravel.md): Send email from Laravel with an API: the key in config/services.php, a queued job that retries with one idempotency key, and a webhook route excluded from CSRF. - [How to send email from Go with net/http: a client, typed errors, retries and webhooks](https://www.rasket.com/blog/send-email-go.md): Send email from Go with net/http: a client with a timeout, a typed error per refusal, retries that keep the idempotency key, and webhooks checked by hand. - [DMARC policy none quarantine reject: what receivers do with each, and when to move up](https://www.rasket.com/blog/dmarc-policy-none-quarantine-reject.md): What p=none, p=quarantine and p=reject each ask a receiver to do, how pct, sp and rua shape the policy, how to read reports, and the safe order to move up. - [Custom return path: the envelope address that makes SPF align and bounces come home](https://www.rasket.com/blog/custom-return-path.md): What the return path is, how it differs from the From header, why putting it on your own subdomain makes SPF align under DMARC, and the two records that do it. - [Double opt in email: how the confirmation flow works, and why the friction is worth it](https://www.rasket.com/blog/double-opt-in-email.md): How a double opt in email flow works: sign a confirmation link, verify the click, record the consent on the contact, and never mail anyone who did not confirm. - [Newsletter API: how to send a broadcast from your code, from consent to the report](https://www.rasket.com/blog/newsletter-api.md): Send a newsletter over an API in six calls: create a topic, add contacts with consent, build a segment, create the broadcast, pass the gate and read the report. - [How to schedule email API sends: a chosen time, a reschedule and a cancel](https://www.rasket.com/blog/schedule-email-api.md): Schedule an email over the API: an ISO 8601 scheduled_at up to 30 days out, a PATCH to move it, a cancel, and the time-zone mistakes to avoid. - [Email API rate limits explained: the headers, the 429, and backoff that keeps the key](https://www.rasket.com/blog/email-api-rate-limits.md): Email API rate limits at Rasket: 10 requests a second per team, the four headers, a 429 retried with the same key, and the quotas that are not rate limits. - [Email template variables done right: declared, typed, versioned and escaped](https://www.rasket.com/blog/email-template-variables.md): How email template variables should work: declared with a type and a fallback, checked at send, versioned so each email records what it said, and HTML-escaped. - [Email suppression list: what goes on it, why it matters, and how to manage it over the API](https://www.rasket.com/blog/email-suppression-list.md): What an email suppression list holds, how bounces and complaints add to it, why a suppressed send still answers 200, and how to import a list from elsewhere. - [How to send email from Next.js with a route handler or a server action](https://www.rasket.com/blog/send-email-nextjs.md): Send email from Next.js without leaking your API key: a route handler, a server action, the client-component trap, and a webhook that records what happened. - [DKIM SPF DMARC explained: the three records that decide whether your mail arrives](https://www.rasket.com/blog/dkim-spf-dmarc-explained.md): What SPF, DKIM and DMARC each prove, the records to publish, how alignment ties them together, and what the large mailbox providers now require of senders. - [The best transactional email API in 2026: seven providers, every cell sourced](https://www.rasket.com/blog/best-transactional-email-api.md): Seven transactional email APIs compared on inbound, broadcasts, webhooks, idempotency and price, with every competitor cell linked to the vendor's own page. - [Email API vs SMTP: what each one costs you, and when to pick which](https://www.rasket.com/blog/email-api-vs-smtp.md): SMTP is a conversation; an email API is one request. What each gives you on retries, idempotency, events and firewalls, and how to move from one to the other. - [Email webhooks explained: the events, the payload, and verifying the signature](https://www.rasket.com/blog/email-webhooks-explained.md): What an email webhook is, the delivery events and what fires each, the payload shape, verifying the signature, and handling retries and out-of-order events. - [Hard bounce vs soft bounce: the difference, and what to do with each one](https://www.rasket.com/blog/hard-bounce-vs-soft-bounce.md): A hard bounce is permanent, a soft bounce is temporary. What causes each, what the reply code tells you, when to retry, and when to suppress an address. - [How to receive email with a webhook and parse inbound mail](https://www.rasket.com/blog/receive-email-webhook.md): Point a domain's MX record at Rasket and incoming mail arrives as a signed JSON event: publishing the record, reading the payload, attachments and routing. - [An email deliverability guide for developers: authentication, reputation and hygiene](https://www.rasket.com/blog/email-deliverability-guide.md): Delivered is not the same as inboxed. Authentication, domain reputation, list hygiene, the headers bulk senders need, and the numbers worth watching every week. - [How to send email from Python with an API instead of smtplib](https://www.rasket.com/blog/send-email-python.md): Send email from Python without an SMTP conversation: the client library, a plain requests call, where the send belongs in Django and FastAPI, and retries. - [How to let an AI agent send email with MCP, without pasting a key](https://www.rasket.com/blog/ai-agent-send-email-mcp.md): Connect an assistant to an email API over MCP: what the server exposes, the scopes it asks for, the first call it makes, and the guardrails that keep it safe. - [Idempotent email sends: how one key stops a retry becoming a second message](https://www.rasket.com/blog/idempotent-email-sends.md): A timeout does not tell you whether the send happened. What an idempotency key is, how the 24-hour window behaves, how to choose keys, and what a batch does. - [Email domain verification: the records to publish and the traps to avoid](https://www.rasket.com/blog/email-domain-verification.md): What verifying a sending domain proves, which DNS records to publish, the name-suffix trap that catches everyone, and what to do when a record will not verify. - [How to send email from Node.js: API vs SMTP vs Nodemailer](https://www.rasket.com/blog/send-email-nodejs.md): Three ways to send email from Node.js — an HTTP API, SMTP and Nodemailer — what each one costs you, and a working send with retries and webhooks. - [Transactional email vs marketing email: the differences, and how to send each](https://www.rasket.com/blog/transactional-vs-marketing-email.md): What separates transactional email from marketing email — the trigger, consent, unsubscribe headers and reputation — and how to send both from one API. ## Optional - [Setup skill](https://www.rasket.com/skills/rasket-setup/SKILL.md): The setup recipe as a Claude Code skill: key, domain, DNS, first send, webhook. - [Node SDK](https://www.rasket.com/docs/sdk/node.md): The `rasket` package on npm. - [Python SDK](https://www.rasket.com/docs/sdk/python.md): The `rasket` package on PyPI.