Skip to main content

API Documentation

Everything you need to send emails via our REST API

Quick Start

  1. Create an account
  2. Create an API key with your SMTP credentials in the Dashboard
  3. Copy the API key (starts with rk_) - shown only once!
  4. Make HTTP POST requests to send emails

Base URL: https://2smtp.com

How It Works

1

You send HTTP request

POST to our API with your email data

2

We relay via YOUR SMTP

Using the credentials you configured

3

Email is delivered

Sent from your own mail server

Credit Counting

Each recipient counts as one credit, regardless of message size.

Example:

  • 1 TO recipient = 1 credit
  • 1 TO + 2 CC = 3 credits
  • 5 TO + 3 CC + 2 BCC = 10 credits

Authentication

API Key (for sending emails)

Use your API key to send emails:

X-API-Key: rk_your_api_key

Session Token (for key management)

Get a session token by logging in, then use it to manage API keys:

Authorization: Bearer your_session_token

Key types: API keys (rk_) are for sending emails. Master keys (mk_) are for programmatic account management.

Send Email API

Requires API key (X-API-Key header).

POST /api_fe/send_email_fe

Send an email using your API key.

Request Body

json
{
  "to_chirho": ["recipient@example.com"],     // Required: array of recipient emails
  "cc_chirho": ["cc@example.com"],            // Optional: array of CC emails
  "bcc_chirho": ["bcc@example.com"],          // Optional: array of BCC emails
  "reply_to_chirho": "replyto@example.com",   // Optional: reply-to address
  "subject_chirho": "Email Subject",          // Required: email subject
  "body_text_chirho": "Plain text body",      // Optional*: plain text version
  "body_html_chirho": "<p>HTML body</p>"      // Optional*: HTML version
}

// * At least one of body_text_chirho or body_html_chirho is required

Success Response (200)

json
{
  "status_chirho": "sent_chirho",
  "emails_remaining_chirho": 9999
}

Error Response (4xx/5xx)

json
{
  "error_chirho": "Invalid API key"
}
POST /api_fe/send_test_email_fe

Send a test email to verify your configuration.

GET /api_fe/usage_fe

Get current usage statistics for your API key.

json
{
  "emails_remaining_chirho": 9999,
  "emails_sent_chirho": 1
}

Key Management API

Requires session token authentication (Authorization: Bearer).

POST /api_fe/keys_fe

Create a new API key with SMTP configuration.

bash
curl -X POST https://2smtp.com/api_fe/keys_fe \
  -H "Authorization: Bearer your_session_token" \
  -H "Content-Type: application/json" \
  -d '{
    "smtp_host_chirho": "smtp.gmail.com",
    "smtp_port_chirho": 587,
    "smtp_user_chirho": "your-email@gmail.com",
    "smtp_pass_chirho": "your-app-password",
    "smtp_tls_chirho": true,
    "from_email_chirho": "your-email@gmail.com",
    "label_chirho": "Production"
  }'
GET /api_fe/keys_fe

List all API keys with details.

bash
curl https://2smtp.com/api_fe/keys_fe \
  -H "Authorization: Bearer your_session_token"
PATCH /api_fe/update_key_label_fe

Update the label for an API key.

POST /api_fe/deactivate_key_fe

Deactivate an API key permanently.

POST /api_fe/test_smtp_fe

Test SMTP connection before creating a key.

Credits & Usage API

Requires session token authentication.

GET /api_fe/credits_fe

Get credit pool balance.

bash
curl https://2smtp.com/api_fe/credits_fe \
  -H "Authorization: Bearer your_session_token"
GET /api_fe/usage_stats_fe

Get daily and per-key usage statistics.

json
{
  "total_credits_chirho": 10000,
  "used_credits_chirho": 500,
  "remaining_credits_chirho": 9500,
  "total_emails_sent_chirho": 500
}
GET /api_fe/history_fe

Get email send history (last 100 sends).

POST /api_fe/checkout_fe

Create a Stripe checkout session to purchase credits.

Master Keys API

Master keys allow programmatic management of your 2SMTP account for automation and AI integration.

POST /api_fe/master_keys_fe

Create a new master key with optional scopes and expiration.

GET /api_fe/master_keys_fe

List all master keys (shows preview only, not full key).

DELETE /api_fe/master_keys_fe

Revoke a master key by its preview.

Code Examples

cURL

bash
curl -X POST https://2smtp.com/api_fe/send_email_fe \
  -H "X-API-Key: rk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "to_chirho": ["recipient@example.com"],
    "subject_chirho": "Hello from 2SMTP!",
    "body_text_chirho": "This is a plain text email.",
    "body_html_chirho": "<h1>Hello!</h1><p>This is an HTML email.</p>"
  }'

JavaScript / TypeScript

javascript
const response = await fetch('https://2smtp.com/api_fe/send_email_fe', {
  method: 'POST',
  headers: {
    'X-API-Key': 'rk_your_api_key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    to_chirho: ['recipient@example.com'],
    subject_chirho: 'Hello from 2SMTP!',
    body_text_chirho: 'This is a plain text email.',
    body_html_chirho: '<h1>Hello!</h1><p>This is an HTML email.</p>'
  })
});

const data = await response.json();
console.log(data.status_chirho); // "sent_chirho"
console.log(data.emails_remaining_chirho); // 9999

Python

python
import requests

response = requests.post(
    'https://2smtp.com/api_fe/send_email_fe',
    headers={
        'X-API-Key': 'rk_your_api_key',
        'Content-Type': 'application/json'
    },
    json={
        'to_chirho': ['recipient@example.com'],
        'subject_chirho': 'Hello from 2SMTP!',
        'body_text_chirho': 'This is a plain text email.',
        'body_html_chirho': '<h1>Hello!</h1><p>This is an HTML email.</p>'
    }
)

data = response.json()
print(data['status_chirho'])  # "sent_chirho"
print(data['emails_remaining_chirho'])  # 9999

Rate Limits

Important: Rate limits protect your SMTP server's reputation. Sending too fast can trigger spam filters and blacklisting.

  • 50 emails per minute per API key
  • 1,000 recipients per single request (TO + CC + BCC combined)
  • Rate limit headers are included in responses

Rate Limit Headers

X-RateLimit-Remaining-Chirho: 95 X-RateLimit-Reset-Chirho: 1735200000

Error Codes

StatusMeaning
400Bad request - invalid parameters
401Unauthorized - invalid or missing API key
403Forbidden - no credits remaining or key lacks required scope
404Resource not found
429Rate limit exceeded
500Server error

Common SMTP Providers

When creating an API key, you'll need your SMTP credentials. Here are settings for popular providers:

Gmail / Google Workspace

Host:smtp.gmail.com Port:587 (TLS) or 465 (SSL) Username:your-email@gmail.com Password:App Password (not your regular password)

Outlook / Microsoft 365

Host:smtp.office365.com Port:587

Amazon SES

Host:email-smtp.[region].amazonaws.com Port:587

SendGrid

Host:smtp.sendgrid.net Port:587 Username:apikey Password:Your SendGrid API key

OpenAPI Specification

Full machine-readable API documentation in OpenAPI 3.0.3 format.

View OpenAPI Spec

MCP Integration (Coming Soon)

MCP server integration for AI assistants like Claude Desktop is planned.

  • remail_send_email - Send an email via API key
  • remail_list_keys - List all API keys
  • remail_get_usage - View usage statistics

Need Help?

Having trouble integrating? Check our pricing page for FAQs or contact us for support.