Documentation
Everything you need to start sending emails with AISend.
Quick Start
From signup to your first 201 Created with zero DNS setup. Your first send works immediately; emailing your own users adds one domain step.
- Create a free account at aisend.app/signup (or call
POST /api/v1/auth/agent-signupif you're an AI agent) - Click the link in the verification email — sending is blocked until you do
- Copy your API key (format
re_*) and send your first email now — fromonboarding@aisend.appto your own account email. It works with no DNS setup - To reach your users, add and verify your sending domain (one DNS step; 1 included free), then send from
you@yourdomain.comto anyone
Already using Resend?
AISend speaks the same request format. To migrate, change one base URL and swap your key — no code rewrite. The endpoint also works without the /api/v1 prefix (POST /emails) so a Resend client only needs its base URL pointed at AISend.
# Resend
- https://api.resend.com/emails
# AISend (same body, same Bearer auth)
+ https://api.aisend.app/emailsInstallation
npm install aisend-emailpnpm add aisend-emailyarn add aisend-emailSend Your First Email
Node.js / TypeScript
import { AISend } from 'aisend-email';
const aisend = new AISend('re_your_api_key');
// Works on your first call — no domain setup. Sends to your own inbox.
const { id, status } = await aisend.emails.send({
from: 'onboarding@aisend.app',
to: 'you@youraccount.com', // your account email on the shared address
subject: 'Hello from AISend',
html: '<p>Your first email!</p>',
});
console.log('Sent:', id, status);
// To email your users, verify your domain (1 free) and send from it:
// from: 'you@yourdomain.com', to: anyonecURL
# Works on your first call — no domain setup. Sends to your own inbox.
curl -X POST https://api.aisend.app/api/v1/emails \
-H "Authorization: Bearer re_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "onboarding@aisend.app",
"to": "you@youraccount.com",
"subject": "Hello from AISend",
"html": "<p>Your first email!</p>"
}'Python
import requests
# Works on your first call — no domain setup. Sends to your own inbox.
response = requests.post(
"https://api.aisend.app/api/v1/emails",
headers={
"Authorization": "Bearer re_your_api_key",
"Content-Type": "application/json",
},
json={
"from": "onboarding@aisend.app",
"to": "you@youraccount.com",
"subject": "Hello from AISend",
"html": "<p>Your first email!</p>",
},
)
print(response.json())REST API Reference
Base URL: https://api.aisend.app (use /emails or /api/v1/emails)
Authentication
All requests require a Bearer token in the Authorization header.
Authorization: Bearer re_your_api_keyEndpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/emails | Send an email |
| GET | /api/v1/emails/:id | Get email status |
| GET | /api/v1/emails | List emails |
| POST | /api/v1/api-keys | Create API key |
| GET | /api/v1/api-keys | List API keys |
| DELETE | /api/v1/api-keys/:id | Revoke API key |
| POST | /api/v1/email-validation/validate | Validate email address |
| POST | /api/v1/auth/agent-signup | AI agent signup |
Send Email — Request Body
{
"from": "hello@yourdomain.com", // Required. An address on a domain you verified
"to": "user@example.com", // Required. String or array of strings
"subject": "Email subject", // Required
"html": "<p>HTML body</p>", // html or text required
"text": "Plain text body" // html or text required
}Send Email — Response
A successful send returns 201 Created with the email ID. Use GET /api/v1/emails/:id to fetch full status and delivery details.
{
"id": "em_abc123"
}Idempotency
Include an Idempotency-Key header to prevent duplicate sends.
Idempotency-Key: unique-request-id-123Custom Domains
To send from your own domain, add it in the dashboard and configure DNS records. AISend automatically generates SPF and DKIM records. Domain verification typically takes under 5 minutes once DNS propagates.
Webhooks
Receive real-time delivery events via HTTP webhooks. Configure endpoints in the dashboard.
Event Types
email.sentemail.deliveredemail.openedemail.clickedemail.bouncedemail.complainedWebhook Payload
{
"type": "email.delivered",
"data": {
"email_id": "em_abc123",
"to": "user@example.com",
"timestamp": "2026-03-21T00:00:00.000Z"
}
}Verify webhook signatures using the x-webhook-signature header (HMAC-SHA256).
Email Validation
Validate email addresses before sending to reduce bounces.
// Request
{ "email": "user@example.com" }
// Response
{
"email": "user@example.com",
"valid": true,
"checks": {
"format": true,
"mx": true,
"disposable": false,
"role": false
},
"risk": "low"
}AI Agent Signup
AI agents can create an account and get an API key with a single request — no browser or email verification needed.
// Request
{ "name": "My AI Agent" }
// Response
{
"token": "eyJhbG...",
"apiKey": "re_abc123...",
"userId": "550e8400-...",
"email": "my-ai-agent-a1b2c3@agent.aisend.app",
"expiresAt": "2027-03-21T00:00:00.000Z"
}Use the returned apiKey as a Bearer token to send emails. Agent accounts start on the free tier (3,000 emails/month).
MCP Server (Claude Integration)
Give Claude Desktop, Claude Code, or any MCP-compatible AI assistant the ability to send emails, check delivery status, validate addresses, and manage API keys — all through natural language.
Quick Setup
Add this to your claude_desktop_config.json or project .mcp.json:
{
"mcpServers": {
"aisend": {
"command": "npx",
"args": ["-y", "aisend-mcp"],
"env": {
"AISEND_API_KEY": "re_your_api_key"
}
}
}
}Available Tools
| Tool | Description |
|---|---|
| send_email | Send an email (from, to, subject, html/text) |
| get_email_status | Check delivery status of a sent email |
| list_emails | List recently sent emails with status |
| validate_email | Validate an email address before sending |
| list_api_keys | List all API keys |
| create_api_key | Create a new API key |
| list_domains | List verified and pending domains |
| agent_signup | Create a new AISend account (no API key needed) |
Zero-Config Agent Signup
Don't have an API key? The MCP server includes an agent_signup tool. Just ask Claude: "Sign up for AISend and send an email to..." — it will create an account, get credentials, and send the email automatically.
Example Prompts for Claude
Error Handling
AISend uses standard HTTP status codes. Error responses include a JSON body with an error field.
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad request — check your parameters |
| 401 | Unauthorized — invalid or missing API key |
| 404 | Not found |
| 422 | Validation error — check required fields |
| 429 | Rate limited — check Retry-After header |
| 500 | Server error — retry with exponential backoff |
Ready to Start Sending?
3,000 emails/month free. No credit card required.