Connect a verified domain, create an API key, and send transactional email from your backend.
GoSend is designed for backend-triggered transactional email: signups, password resets, audit notifications, support tickets, and system alerts.
Open Domains, enter the domain you own, and GoSend will create an AWS SES identity for it. Copy the generated DKIM, SPF, MAIL FROM, and DMARC records into your DNS provider.
GoSend checks public DNS records and syncs SES identity status. A domain must be Verified before it can be used in the from address.
Create a live key for production or a test key for local development. Store the token in your server environment and never expose it in frontend code.
Call POST /api/v1/emails from your backend with a verified sender, recipient list, subject, and HTML body. The API returns a queued message id immediately.
Your sending domain must be verified before GoSend accepts production email from it. Domains can be hosted on any DNS provider.
| Record | Type | Purpose |
|---|---|---|
| DKIM | CNAME | Proves that GoSend is allowed to sign mail for your domain. |
| SPF | TXT | Allows AWS SES mail servers to send on behalf of your domain. |
| MAIL FROM | MX/TXT | Improves bounce handling and aligns the return-path domain. |
| DMARC | TXT | Tells receiving mailboxes how to handle unauthenticated messages. |
DNS propagation can take a few minutes or longer depending on the provider. GoSend checks public DNS and the SES identity status before allowing send requests.
Authenticate Email API requests with a bearer token. API keys belong to one user account and should only be used from trusted backend environments.
Authorization: Bearer gs_live_xxxxxxxxxxxxxxxxxxxxx
Use this endpoint to queue one transactional email. The from address must use a domain already verified in your account.
curl -X POST https://api.gosend.dev/api/v1/emails \
-H "Authorization: Bearer gs_live_xxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"from": "GoSend <noreply@gosend.dev>",
"to": ["user@gmail.com"],
"subject": "Welcome",
"html": "<h1>Hello</h1>"
}'{
"id": "msg_xxx",
"status": "queued"
}Email logs and webhooks use the same lifecycle language so your product can react to delivery outcomes consistently.
| Status | Description |
|---|---|
| Queued | The request passed validation and is waiting to be sent. |
| Sent | The provider accepted the message for delivery. |
| Delivered | A delivery event was received from the provider. |
| Bounce | The recipient mailbox rejected the message. |
| Complaint | The recipient or mailbox provider reported the message as unwanted. |
{
"event": "email.delivered",
"email": "user@gmail.com",
"message_id": "msg_xxx"
}GoSend validates sender ownership, API keys, and account quota before a message is queued.
| Error | Meaning |
|---|---|
| 401 Unauthorized | Missing, invalid, or revoked API key. |
| 403 Forbidden | The API key is valid, but the sender domain does not belong to this account. |
| 422 Unprocessable Entity | The request body is missing required fields or has invalid email addresses. |
| 429 Too Many Requests | The account has exceeded plan quota or rate limits. |