Documentation

Everything you need to start sending emails with AISend.

Quick Start

From signup to your first 201 Created in under 30 seconds. No DNS setup required — use our shared sandbox sender to skip domain verification while testing.

  1. Create a free account at aisend.app/signup (or call POST /api/v1/auth/agent-signup if you're an AI agent)
  2. Copy your API key (format re_*)
  3. Send a test email from hello@send.aisend.app — no domain setup needed
  4. When you're ready for production, add and verify your own domain for branded send addresses

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/emails

Installation

npm
npm install aisend-email
pnpm
pnpm add aisend-email
yarn
yarn add aisend-email

Send Your First Email

Node.js / TypeScript

send-email.ts
import { AISend } from 'aisend-email';

const aisend = new AISend('re_your_api_key');

const { id, status } = await aisend.emails.send({
  from: 'hello@send.aisend.app',  // shared sandbox sender — no DNS setup needed
  to: 'user@example.com',
  subject: 'Hello from AISend',
  html: '<p>Your first email!</p>',
});

console.log('Sent:', id, status);

cURL

Terminal
curl -X POST https://api.aisend.app/api/v1/emails \
  -H "Authorization: Bearer re_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@send.aisend.app",
    "to": "user@example.com",
    "subject": "Hello from AISend",
    "html": "<p>Your first email!</p>"
  }'

Python

send_email.py
import requests

response = requests.post(
    "https://api.aisend.app/api/v1/emails",
    headers={
        "Authorization": "Bearer re_your_api_key",
        "Content-Type": "application/json",
    },
    json={
        "from": "hello@send.aisend.app",
        "to": "user@example.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_key

Endpoints

MethodEndpointDescription
POST/api/v1/emailsSend an email
GET/api/v1/emails/:idGet email status
GET/api/v1/emailsList emails
POST/api/v1/api-keysCreate API key
GET/api/v1/api-keysList API keys
DELETE/api/v1/api-keys/:idRevoke API key
POST/api/v1/email-validation/validateValidate email address
POST/api/v1/auth/agent-signupAI agent signup

Send Email — Request Body

POST /api/v1/emails
{
  "from": "hello@send.aisend.app",  // Required. Verified sending address (or shared sandbox)
  "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.

201 Created
{
  "id": "em_abc123"
}

Idempotency

Include an Idempotency-Key header to prevent duplicate sends.

Idempotency-Key: unique-request-id-123

Custom 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.complained

Webhook 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.

POST /api/v1/email-validation/validate
// 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.

POST /api/v1/auth/agent-signup
// 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:

.mcp.json
{
  "mcpServers": {
    "aisend": {
      "command": "npx",
      "args": ["-y", "aisend-mcp"],
      "env": {
        "AISEND_API_KEY": "re_your_api_key"
      }
    }
  }
}

Available Tools

ToolDescription
send_emailSend an email (from, to, subject, html/text)
get_email_statusCheck delivery status of a sent email
list_emailsList recently sent emails with status
validate_emailValidate an email address before sending
list_api_keysList all API keys
create_api_keyCreate a new API key
list_domainsList verified and pending domains
agent_signupCreate 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

>"Send an email to team@example.com with a summary of today's meeting notes"
>"Check if the last email I sent was delivered"
>"Validate these email addresses before I send the newsletter: ..."
>"Create a new API key called 'production' and show me the key"
>"List all emails I sent today and show which ones bounced"

Error Handling

AISend uses standard HTTP status codes. Error responses include a JSON body with an error field.

StatusMeaning
200Success
400Bad request — check your parameters
401Unauthorized — invalid or missing API key
404Not found
422Validation error — check required fields
429Rate limited — check Retry-After header
500Server error — retry with exponential backoff

Ready to Start Sending?

3,000 emails/month free. No credit card required.