Web API

JSON over HTTPS. Authentication via API key. Idempotent sends, batch endpoints and signed webhooks.

Base URL & authentication

Send your API key in the Api-Key header on every request.

SettingValue
Base URLhttps://api.sendorx.com/v1
Auth headerApi-Key: YOUR_KEY
Content-Typeapplication/json
Rate limit600 requests/min on Starter, scales with plan

Send a transactional email

POST /v1/email — returns a messageId you can correlate with webhook events.

curl -X POST https://api.sendorx.com/v1/email \
  -H "Api-Key: $SENDORX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from":    {"email": "sender@yourdomain.com", "name": "Your App"},
    "to":      [{"email": "recipient@example.com"}],
    "subject": "Welcome to Your App",
    "html":    "<h1>Hello</h1><p>Thanks for signing up.</p>",
    "tags":    ["welcome", "v2"]
  }'
$payload = [
    'from'    => ['email' => 'sender@yourdomain.com', 'name' => 'Your App'],
    'to'      => [['email' => 'recipient@example.com']],
    'subject' => 'Welcome to Your App',
    'html'    => '<h1>Hello</h1>',
];

$ch = curl_init('https://api.sendorx.com/v1/email');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Api-Key: ' . getenv('SENDORX_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);
$response = curl_exec($ch);
import os, requests

resp = requests.post(
    'https://api.sendorx.com/v1/email',
    headers={'Api-Key': os.environ['SENDORX_API_KEY']},
    json={
        'from':    {'email': 'sender@yourdomain.com', 'name': 'Your App'},
        'to':      [{'email': 'recipient@example.com'}],
        'subject': 'Welcome to Your App',
        'html':    '<h1>Hello</h1>',
    },
)
print(resp.json()['messageId'])
const resp = await fetch('https://api.sendorx.com/v1/email', {
  method: 'POST',
  headers: {
    'Api-Key': process.env.SENDORX_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    from: { email: 'sender@yourdomain.com', name: 'Your App' },
    to:   [{ email: 'recipient@example.com' }],
    subject: 'Welcome to Your App',
    html: '<h1>Hello</h1>',
  }),
});
const { messageId } = await resp.json();

Endpoints overview

The full reference lives in your dashboard once you sign in.

MethodPathPurpose
POST/v1/emailSend a transactional email
POST/v1/email/batchSend up to 1,000 messages in one call
POST/v1/campaignsCreate a marketing campaign
GET/v1/messages/{id}Look up delivery status of a message
GET/v1/contactsList contacts (paginated)
POST/v1/contactsCreate or upsert a contact
POST/v1/webhooksSubscribe to event types