Documentation
API reference, feature guides, deliverability best practices, tools — all in one place.
Getting started
Product features
API + integration
Deliverability + compliance
Quickstart
- 1. Sign up at sendersy.com
- 2. Add a domain and publish DKIM / SPF / DMARC records in DNS
- 3. Create an API key in /dashboard/api-keys
- 4. Send your first email:
curl https://api.sendersy.com/v1/emails \
-H "Authorization: Bearer sk_live_•••" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hi@yourcompany.com>",
"to": "user@example.com",
"subject": "Welcome",
"html": "<p>Hi there 👋</p>"
}'POST /v1/emails
Resend-compatible endpoint. Returns 200 + message_id.
{
"from": "Acme <noreply@acme.com>", // required
"to": ["user@example.com"], // string or array
"cc": ["..."], // optional
"bcc": ["..."], // optional
"subject": "...", // required (or use template_id)
"html": "<p>...</p>", // either html or text required
"text": "...", //
"template_id": "abc-…", // OR template_id + variables
"variables": { "name": "Alex" }, // interpolated into template
"headers": { "X-Custom": "value" }, // custom headers
"tags": [{ "name": "category", "value": "welcome" }],
"scheduled_at": "2026-01-01T10:00:00Z" // optional ISO 8601
}Using templates
Build a template via the Visual builder, then reference it via template_id:
await sendersy.emails.send({
from: 'Acme <noreply@acme.com>',
to: user.email,
template: 'welcome', // slug шаблона или template_id: '<uuid>'
variables: {
name: user.name,
verify_url: `https://acme.com/verify/${token}`,
},
})Supports {{name}}, {{name|fallback}}, {{#if var}}…{{else}}…{{/if}}, {{#unless var}}…{{/unless}} and {{#each items}}…{{/each}}. {{company}} comes from your brand kit. Works the same in POST /v1/emails/batch.
Built-in Sendersy templates
Don’t want to design emails? Use a built-in template. It picks up the colours and logo from Settings → Brand kit; language via locale: "ru" or "en". Change the style with a suffix: --minimal, --premium, --gaming, --shop, --saas.
curl -X POST https://api.sendersy.com/v1/emails \
-H "Authorization: Bearer sk_live_..." -H "Content-Type: application/json" \
-d '{
"from": "Acme <noreply@acme.com>",
"to": "user@example.com",
"template": "sendersy/otp-code--saas",
"locale": "ru",
"variables": { "code": "482915", "expires_in": "10 минут" }
}'| template | Variables | |
|---|---|---|
| sendersy/otp-code | Login code | code, expires_in |
| sendersy/email-verify | Email verification | verify_url |
| sendersy/password-reset | Password reset | reset_url, expires_in |
| sendersy/welcome-pro | Welcome | |
| sendersy/onboarding-tips | Getting-started tips | |
| sendersy/trial-ending | Trial ending | days_left, pricing_url |
| sendersy/order-confirmed | Order confirmed | order_number, items, order_total, order_url |
| sendersy/payment-received | Payment received | amount, payment_method, paid_at, invoice_id, receipt_url |
| sendersy/payment-failed | Payment failed | amount, billing_url |
| sendersy/subscription-expiring | Subscription expiring | plan, expires_at, renew_url, promo_code |
| sendersy/order-shipped | Order shipped | order_number, tracking_number, tracking_url, delivery_date |
| sendersy/newsletter-pro | Newsletter | |
| sendersy/sale-promo | Sale with promo code | |
| sendersy/product-launch | Product launch | video_url |
| sendersy/abandoned-cart | Abandoned cart | product_name, product_price, product_image, cart_url |
| sendersy/event-invite | Event invitation | event_name, event_date, event_place, register_url |
| sendersy/tournament-result | Tournament result | event_name, place, points, results_url |
| sendersy/review-request | Review request | review_url |
| sendersy/reengagement | We miss you | |
| sendersy/referral | Refer a friend | referral_code, referral_url, bonus |
Events & automations
Send events from your app — they start automations with an “event” trigger, take the contact out of a flow when the event is its goal (e.g. purchase), and are available in segments (“event within N days”). Event properties are available in the flow’s emails as {{plan}}.
POST https://api.sendersy.com/v1/events
Authorization: Bearer sk_live_...
{
"email": "user@example.com",
"name": "signed_up", // [A-Za-z0-9_.:-], до 80 символов
"properties": { "plan": "pro" }, // до 8 КБ
"first_name": "Анна" // необязательно
}
→ { "object": "event", "name": "signed_up", "enrolled": 1, "exited": 0 }Broadcasts: timing, A/B, language
Broadcasts go out at 1,000 emails per minute. You can deliver at the same local time for each recipient (contact field timezone), test subjects on part of the audience — the rest automatically get the winner — and add an English version for contacts with locale = en. A/B and the English version are set up in the broadcast editor.
POST https://api.sendersy.com/v1/broadcasts/{id}/send
{ "scheduled_at": "2026-11-01T07:00:00Z" } // в определённый момент
{ "local_time": "10:00", "fallback_timezone": "Europe/Moscow" } // в 10:00 по часам получателяA new domain sends bulk emails with an hourly cap during its first week (100 → 4,000) so mailbox providers get used to the sender. Transactional emails via POST /v1/emails are not capped.
Webhooks
Subscribe to events at /dashboard/webhooks. Sendersy sends POST with an HMAC-signed payload.
// Payload shape
{
"type": "email.delivered" | "email.opened" | "email.clicked"
| "email.bounced" | "email.complained",
"data": {
"email_id": "…",
"from": "noreply@acme.com",
"to": ["user@example.com"],
"subject": "Welcome",
"tags": [...]
},
"created_at": "2026-01-01T10:00:00Z"
}
// Headers
X-Sendersy-Signature: t=1735718400,v1=<hex-sha256>
X-Sendersy-Event: email.deliveredDeliverability
When you add a domain, Sendersy generates an RSA-2048 DKIM keypair, ready-to-paste SPF/DMARC/MTA-STS/TLS-RPT values and hosts the MTA-STS endpoint. You publish 5-6 DNS records at your registrar (we hand you the exact values), and we verify in one click. List-Unsubscribe + One-Click is added on every send. Check your domain for free:
Open the DMARC checker →