Send email
Send an email to one or more recipients. Equivalent to AWS SES
SendEmail.
POST /api/v1/partner/email/sendPOST
/api/v1/partner/email/sendSend an email to one or more recipients.curl -X POST "https://apis.splashifypro.com/api/v1/partner/email/send" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY"
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
from | string | yes | Sender address. Must be on a verified identity. Format: "name <addr@example.com>" or just addr@example.com |
to | string[] | yes | Up to 50 recipients (combined to + cc + bcc) |
cc | string[] | no | Carbon copy |
bcc | string[] | no | Blind carbon copy |
reply_to | string | no | Sets the Reply-To: header |
subject | string | yes | Subject line |
html_body | string | conditional | HTML body. One of html_body or text_body is required |
text_body | string | conditional | Plaintext body. Auto-derived from HTML if omitted |
configuration_set_name | string | no | Routes events to this config set’s destinations |
customer_id | string (uuid) | no | Optional partner-side downstream customer attribution |
category | string | no | transactional (default) or marketing |
tags | object | no | Arbitrary key-value pairs that ride on mail.tags in webhooks |
Response
{
"success": true,
"results": [
{
"recipient": "customer@example.com",
"message_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
}
]
}results carries one entry per recipient — to + cc + bcc
are flattened.
| Field | Notes |
|---|---|
recipient | Lowercase + trimmed |
message_id | Use this on GET /emails/:message_id to poll status |
status | queued or rejected |
reason | Present when status: rejected — typically "suppressed" |
cURL
curl https://apis.splashifypro.com/api/v1/partner/email/send \
-H "Authorization: Bearer $SPLASHIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@yourcompany.com",
"to": ["customer@example.com"],
"subject": "Welcome",
"html_body": "<h1>Welcome</h1>",
"text_body": "Welcome."
}'Node
const res = await fetch(
"https://apis.splashifypro.com/api/v1/partner/email/send",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPLASHIFY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "hello@yourcompany.com",
to: ["customer@example.com"],
subject: "Welcome",
html_body: "<h1>Welcome</h1>",
}),
}
);
const data = await res.json();Python
import requests, os
r = requests.post(
"https://apis.splashifypro.com/api/v1/partner/email/send",
headers={"Authorization": f"Bearer {os.environ['SPLASHIFY_API_KEY']}"},
json={
"from": "hello@yourcompany.com",
"to": ["customer@example.com"],
"subject": "Welcome",
"html_body": "<h1>Welcome</h1>",
},
)Attachments
/send accepts an attachments[] array of base64-encoded files.
PDFs, images, documents, spreadsheets, ZIPs are all supported.
{
"from": "billing@yourcompany.com",
"to": ["customer@example.com"],
"subject": "Your invoice",
"html_body": "<p>Invoice attached.</p>",
"attachments": [
{
"filename": "invoice.pdf",
"content_type": "application/pdf",
"content_base64": "<base64 of file bytes>"
}
]
}Caps: 20 files, 10 MiB total per message. Executable / script
extensions (.exe, .bat, .js, .ps1, .sh, …) are blocked.
See Send with attachments
for the full reference, inline-image (CID) handling, and per-language
code samples.
Common errors
| Status | Code | Meaning |
|---|---|---|
| 400 | INVALID_REQUEST | Missing required field; read message |
| 400 | INVALID_ATTACHMENT | Attachment failed validation — see Send with attachments |
| 400 | FROM_NOT_VERIFIED | Verify your domain at POST /identities |
| 400 | TOO_MANY_RECIPIENTS | Split into multiple sends |
| 402 | INSUFFICIENT_BALANCE | Recharge wallet |
| 403 | SANDBOX_QUOTA_REACHED | Daily 200/day cap hit — request production access |
| 403 | SENDING_PAUSED | Account paused — contact support |
| 429 | RATE_LIMITED | Per-second cap exceeded — back off |