$ docs
Send your first email in 60 seconds.
Two paths in, no SDK to install. Everything here is plain HTTP or plain SMTP, and every example is runnable as written.
curl -X POST https://api.pharos.email/v1/send \
-H "Authorization: Bearer $PHAROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "receipts@yourapp.com",
"to": "customer@example.com",
"subject": "Your receipt from Acme",
"html": "<p>Thanks for your order.</p>"
}' # change the host, change nothing else
MAIL_HOST=smtp.pharosinfra.net
MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_USERNAME=$PHAROS_SMTP_USER
MAIL_PASSWORD=$PHAROS_SMTP_PASS
# 250 2.0.0 Ok — signed, aligned, queued // no SDK required
await fetch("https://api.pharos.email/v1/send", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PHAROS_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ from, to, subject, html })
}); # no SDK required
import os, requests
requests.post(
"https://api.pharos.email/v1/send",
headers={"Authorization": f"Bearer {os.environ['PHAROS_API_KEY']}"},
json={
"from": "receipts@yourapp.com",
"to": "customer@example.com",
"subject": "Your receipt from Acme",
"html": "<p>Thanks for your order.</p>",
},
) // no SDK required
$ch = curl_init("https://api.pharos.email/v1/send");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("PHAROS_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode($message),
CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch); 202 Accepted · queued, signed and aligned
Start here
-
Quickstart
Verify a domain, create a key, send one message. Ten minutes, most of it DNS propagation.
-
Authentication
Bearer keys scoped per domain, rotated independently. Shown once, never again.
-
SMTP relay
Five credentials in your existing mailer at smtp.pharosinfra.net:587. No code change, same events as the API.
Reference
- Send a message The one endpoint most integrations ever call. POST /v1/send
- Look up a message Current status and the receiving server's own response. GET /v1/messages
- Sender domains Add a domain, read the records to publish, trigger verification. /v1/domains
- Templates Send by template name with variables instead of a rendered body. /v1/templates
- Suppressions Read, export, and remove addresses you know are fixed. /v1/suppressions
- Webhooks Event payloads, the signature scheme, and the retry policy. /v1/webhooks
Endpoints without a link are implemented but not yet documented. Ask on support@pharos.email and we will send you the shape before the page exists.