> ## Documentation Index
> Fetch the complete documentation index at: https://ahasend.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> AhaSend stores all message data in the EU. See /facts.
> The API base URL is https://api.ahasend.com. Send the API key in the Authorization: Bearer header. See /api-reference/authentication.
> Use send.ahasend.com for SMTP. Ports 25, 587 and 2525 use STARTTLS. Port 465 is not supported. See /smtp.
> For send-only integrations, create an API Key v2 under Credentials → Add and scope it to messages:send:{your-domain}. See /send-api/credentials and /api-reference/scopes.

# Framework and Platform Email Guides

> Guides for sending transactional email with AhaSend from Node.js, Go, Next.js, Express, serverless platforms, and AI coding tools like Cursor.

AhaSend integration guides show how to send email from your framework, server runtime or AI-built app with the official SDKs and server-side credentials.

Already have a mailer in your framework, such as Nodemailer or ActionMailer? Point it at the [SMTP relay](https://ahasend.com/docs/smtp.md) instead: four settings, no new code. If your stack is not covered here at all, the [Quickstart](https://ahasend.com/docs/quickstart.md) shows the plain REST API, which works anywhere.

Use a **send-only key** from **Credentials → Add → API Key v2** with `messages:send:{your-domain}`. Use `messages:send:all` when sending from many domains. For management tasks such as creating a webhook, use a separate **full key** from **Account Settings → API Keys** with the needed [scopes](https://ahasend.com/docs/api-reference/scopes.md). See [send-only credentials](https://ahasend.com/docs/send-api/credentials.md) and [authentication](https://ahasend.com/docs/api-reference/authentication.md).

Keep credentials on the server. Use [sandbox mode](https://ahasend.com/docs/send-api/sandbox.md) for tests. Reuse a stable, business-event idempotency key only with the exact same payload; use different keys for sandbox and live sends. Check every recipient's status and return a failure when any item is `error`; HTTP 202 alone does not mean every recipient was accepted.

For webhooks, verify the raw request bytes using the full secret as the raw UTF-8 HMAC key, including its `aha-whsec-` or `aha-rsec-` prefix. Never base64-decode the secret. The AhaSend SDK verifiers handle this. These examples use a 30,000,000-byte webhook body limit; a hosting platform may impose a smaller limit. Acknowledge verified unknown event types with 2xx. See [verification](https://ahasend.com/docs/api-reference/webhooks/security.md) and [retry policy](https://ahasend.com/docs/api-reference/webhooks/retry-policy.md).

## Start with Your Language

> [card] [Node.js SDK](https://ahasend.com/docs/guides/nodejs-sdk.md)
>
> `@ahasend/sdk` gives you a typed client, automatic retries, idempotency keys, and webhook adapters for Express, Fastify, and Next.js.

> [card] [Go SDK](https://ahasend.com/docs/guides/go-sdk.md)
>
> `ahasend-go` gives you a typed client, built-in retries and idempotency, and a Standard Webhooks verifier for any `net/http` router.

## Framework Guides

> [card] [Express](https://ahasend.com/docs/guides/express.md)

> [card] [Fastify](https://ahasend.com/docs/guides/fastify.md)

> [card] [NestJS](https://ahasend.com/docs/guides/nestjs.md)

> [card] [Next.js](https://ahasend.com/docs/guides/nextjs.md)

> [card] [Nuxt](https://ahasend.com/docs/guides/nuxt.md)

> [card] [SvelteKit](https://ahasend.com/docs/guides/sveltekit.md)

> [card] [Hono](https://ahasend.com/docs/guides/hono.md)

> [card] [Koa](https://ahasend.com/docs/guides/koa.md)

> [card] [ElysiaJS](https://ahasend.com/docs/guides/elysiajs.md)

> [card] [Encore.ts](https://ahasend.com/docs/guides/encore.md)

> [card] [Remix / React Router](https://ahasend.com/docs/guides/remix.md)

> [card] [Astro](https://ahasend.com/docs/guides/astro.md)

> [card] [Vite](https://ahasend.com/docs/guides/vite.md)

> [card] [Gin (Go)](https://ahasend.com/docs/guides/gin.md)

> [card] [Echo (Go)](https://ahasend.com/docs/guides/echo.md)

> [card] [Fiber (Go)](https://ahasend.com/docs/guides/fiber.md)

> [card] [chi (Go)](https://ahasend.com/docs/guides/chi.md)

> [card] [gorilla/mux (Go)](https://ahasend.com/docs/guides/gorilla-mux.md)

## PHP, Python and CMS Guides

> [card] [WordPress](https://ahasend.com/docs/guides/wordpress.md)

> [card] [Drupal](https://ahasend.com/docs/guides/drupal.md)

> [card] [Symfony](https://ahasend.com/docs/guides/symfony.md)

> [card] [Laravel](https://ahasend.com/docs/guides/laravel.md)

> [card] [Django](https://ahasend.com/docs/guides/django.md)

> [card] [Flask](https://ahasend.com/docs/guides/flask.md)

## Runtimes and Deployment

The SDK runs on Node.js, Deno, Bun, Cloudflare workerd, and Vercel Edge. These guides cover what each platform changes: where secrets live, how deploys work, and what to watch for.

> [card] [Azure Functions (Node.js)](https://ahasend.com/docs/guides/azure-functions-nodejs.md)

> [card] [Azure Functions (Python)](https://ahasend.com/docs/guides/azure-functions-python.md)

> [card] [Cloud Run Functions (Node.js)](https://ahasend.com/docs/guides/google-cloud-functions-nodejs.md)

> [card] [Cloud Run Functions (Python)](https://ahasend.com/docs/guides/google-cloud-functions-python.md)

> [card] [AWS Lambda (Python)](https://ahasend.com/docs/guides/aws-lambda-python.md)

> [card] [Azure Functions (Go)](https://ahasend.com/docs/guides/azure-functions.md)

> [card] [Cloud Run Functions (Go)](https://ahasend.com/docs/guides/google-cloud-functions.md)

> [card] [Bun](https://ahasend.com/docs/guides/bun.md)

> [card] [Deno Deploy](https://ahasend.com/docs/guides/deno-deploy.md)

> [card] [Cloudflare Workers](https://ahasend.com/docs/guides/cloudflare-workers.md)

> [card] [AWS Lambda (Node.js)](https://ahasend.com/docs/guides/aws-lambda.md)

> [card] [Vercel](https://ahasend.com/docs/guides/vercel.md)

> [card] [Railway](https://ahasend.com/docs/guides/railway.md)

## AI Development Tools

AI agents write email code quickly and invent APIs just as quickly. These guides show how to give each tool the verified AhaSend SDK as standing context, then check the result in sandbox mode before it can send anything real.

> [card] [Bolt.new](https://ahasend.com/docs/guides/bolt-new.md)

> [card] [Claude](https://ahasend.com/docs/guides/claude.md)

> [card] [Cursor](https://ahasend.com/docs/guides/cursor.md)

> [card] [GitHub Copilot](https://ahasend.com/docs/guides/github-copilot.md)

> [card] [Lovable](https://ahasend.com/docs/guides/lovable.md)

> [card] [v0](https://ahasend.com/docs/guides/v0.md)

> [card] [Windsurf](https://ahasend.com/docs/guides/windsurf.md)

## Credentials and Tests

SMTP guides use [SMTP credentials](https://ahasend.com/docs/smtp/credentials.md). The released WordPress plugin uses legacy v1 keys; follow its specific setup steps.

**1. A Verified Sending Domain**

The `from` address must be on a domain you have verified. See [Domain Setup](https://ahasend.com/docs/domains.md) if you have not done this yet.

**2. An API Key with Send Scope**

For v2 API guides, create one in the [dashboard](https://dash.ahasend.com/account/-/transactional/credentials) with the `messages:send:{your-domain}` scope (`messages:send:all` for sending from many domains), or scope it to a single domain to limit the blast radius if it leaks. The guides read it from `AHASEND_API_KEY`, alongside `AHASEND_ACCOUNT_ID` and, for webhooks, `AHASEND_WEBHOOK_SECRET`.

**3. Sandbox Mode for Testing**

Add `sandbox: true` to any send request and the API validates and accepts it without delivering mail. Use `sandbox_result` to rehearse a bounce or a suppression. See [Sandbox Mode](https://ahasend.com/docs/send-api/sandbox.md).

## Reference

> [card] [API Reference](https://ahasend.com/docs/api-reference.md)
>
> Every endpoint, parameter, and response, including the webhook event payloads.

> [card] [CLI](https://ahasend.com/docs/cli.md)
>
> Send test messages and forward webhook events to localhost from your terminal while building an integration.

## Related Guides

* Before sending: [verify a domain](https://ahasend.com/docs/domains.md) and [create a send-only key](https://ahasend.com/docs/send-api/credentials.md).
* Other ways to send: [REST API](https://ahasend.com/docs/send-api/send-email.md), [SMTP](https://ahasend.com/docs/smtp.md), [CLI quickstart](https://ahasend.com/docs/cli/quickstart.md), [Node.js SDK](https://ahasend.com/docs/guides/nodejs-sdk.md) and [Go SDK](https://ahasend.com/docs/guides/go-sdk.md).
* Request rules: [API authentication](https://ahasend.com/docs/api-reference/authentication.md), [scopes](https://ahasend.com/docs/api-reference/scopes.md), [idempotency](https://ahasend.com/docs/api-reference/idempotency.md), [errors](https://ahasend.com/docs/api-reference/errors.md) and [rate limits](https://ahasend.com/docs/api-reference/rate-limits.md).
* Testing and events: [sandbox mode](https://ahasend.com/docs/send-api/sandbox.md), [CLI webhook testing](https://ahasend.com/docs/cli/webhook-testing.md), [event payloads](https://ahasend.com/docs/api-reference/webhooks.md), [signature verification](https://ahasend.com/docs/api-reference/webhooks/security.md) and [delivery retries](https://ahasend.com/docs/api-reference/webhooks/retry-policy.md).
* Data and limits: [retention](https://ahasend.com/docs/retention.md), [tracking](https://ahasend.com/docs/tracking/open-tracking.md) and [plans and feature availability](https://ahasend.com/docs/facts.md#plans-and-features).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.