Skip to content

API Guide

The Kirim.Email SMTP API provides programmatic access to email sending, domain management, credentials, logs, and more. All API requests are made over HTTPS to https://smtp-app.kirim.email.

All API requests require Basic Authentication with your API credentials. Your username serves as username, and the API key serves as password.

Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains" \
-u "username:your-api-key"

Replace your-api-key with your actual API key from the dashboard.

All API endpoints are relative to:

https://smtp-app.kirim.email

Retrieve all domains associated with your account.

Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains" \
-u "username:your-api-key"

Response:

{
"success": true,
"data": [
{
"id": "dm_xxxxx",
"domain": "example.com",
"status": "verified",
"created_at": "2024-01-15T10:30:00Z"
}
]
}

Add a new domain to your account.

Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains" \
-u "username:your-api-key" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com"}'

After creating a domain, you need to verify your DNS records:

Terminal window
# Verify mandatory DNS records (SPF, DKIM, MX)
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/verify-mx" \
-u "username:your-api-key"
# Setup and verify authentication domain (SPF, DKIM)
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/setup-auth" \
-u "username:your-api-key"
# Setup and verify tracking domain (CNAME for click/open tracking)
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/setup-tracking" \
-u "username:your-api-key"

SMTP credentials allow you to send emails through specific domains.

Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/credentials" \
-u "username:your-api-key"
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/credentials" \
-u "username:your-api-key" \
-H "Content-Type: application/json" \
-d '{"name": "My Application"}'

Response:

{
"success": true,
"data": {
"id": "cred_xxxxx",
"name": "My Application",
"username": "smtp_xxxxx",
"password": "generated-password-here",
"created_at": "2024-01-15T10:30:00Z"
}
}

Important: Save the password immediately - it won’t be shown again.

Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/credentials/cred_xxxxx/reset-password" \
-u "username:your-api-key"
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/send" \
-u "smtp_xxxxx:smtp-password" \
-d "subject=Hello World" \
-d "body=This is the email content"
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/send" \
-u "smtp_xxxxx:smtp-password" \
-F "subject=Hello with Attachment" \
-F "body=Please see the attached file" \
-F "attachment=@/path/to/file.pdf"
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/send-template" \
-u "smtp_xxxxx:smtp-password" \
-d "template=welcome-email" \
-d "variables[name]=John Doe"

Validate email addresses before sending to reduce bounce rates.

Terminal window
curl -X POST "https://smtp-app.kirim.email/api/validate/email" \
-u "username:your-api-key" \
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/validate/email/strict" \
-u "username:your-api-key" \
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/validate/email/batch" \
-u "username:your-api-key" \
-H "Content-Type: application/json" \

Monitor your email sending activity.

Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/logs" \
-u "username:your-api-key"
Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/logs/message_xxxxx" \
-u "username:your-api-key"
Terminal window
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/logs/stream" \
-u "username:your-api-key"

Manage suppressed email addresses (bounces, unsubscribes, whitelist).

Terminal window
# Get all suppressions
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/suppressions" \
-u "username:your-api-key"
# Get bounces only
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/suppressions/bounces" \
-u "username:your-api-key"
# Get unsubscribes only
curl -X GET "https://smtp-app.kirim.email/api/domains/example.com/suppressions/unsubscribes" \
-u "username:your-api-key"
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/suppressions/whitelist" \
-u "username:your-api-key" \
Terminal window
# Remove from unsubscribes
curl -X DELETE "https://smtp-app.kirim.email/api/domains/example.com/suppressions/unsubscribes" \
-u "username:your-api-key" \

Receive real-time notifications about email events.

Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/webhooks" \
-u "username:your-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/kirimemail",
"events": ["delivered", "bounced", "complained"]
}'

Available webhook events:

EventDescription
queuedEmail queued for delivery
deliveredEmail successfully delivered
bouncedEmail was bounced
complainedEmail marked as spam
clickedLink in email was clicked
openedEmail was opened
Terminal window
curl -X POST "https://smtp-app.kirim.email/api/domains/example.com/webhooks/webhook_xxxxx/test" \
-u "username:your-api-key"

Check your account’s sending limits and usage.

Terminal window
curl -X GET "https://smtp-app.kirim.email/api/quota" \
-u "username:your-api-key"

Response:

{
"success": true,
"data": {
"plan": "standard",
"limit": 1000,
"used": 450,
"remaining": 550,
"reset_at": "2024-01-31T23:59:59Z"
}
}
PlanLimit
Standard100 requests/minute
Enterprise1000 requests/minute

When rate limited, the API returns a 429 Too Many Requests response.

The API uses standard HTTP status codes for responses.

CodeMeaning
200Success
400Bad Request - Invalid parameters
401Unauthorized - Invalid API key
403Forbidden - Insufficient permissions
404Not Found - Resource doesn’t exist
429Too Many Requests - Rate limit exceeded
500Server Error - Something went wrong

Error Response Format:

{
"success": false,
"error": {
"code": "invalid_email",
"message": "The provided email address is not valid"
}
}
import requests
from requests.auth import HTTPBasicAuth
api_key = "your-api-key"
base_url = "https://smtp-app.kirim.email"
# List domains
response = requests.get(
f"{base_url}/api/domains",
auth=HTTPBasicAuth("username", api_key)
)
print(response.json())
const axios = require('axios');
const apiKey = 'your-api-key';
const baseUrl = 'https://smtp-app.kirim.email';
async function getDomains() {
const response = await axios.get(`${baseUrl}/api/domains`, {
auth: { username: 'username', password: apiKey }
});
console.log(response.data);
}
<?php
$apiKey = 'your-api-key';
$baseUrl = 'https://smtp-app.kirim.email';
$ch = curl_init("$baseUrl/api/domains");
curl_setopt($ch, CURLOPT_USERPWD, "username:$apiKey");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);