Sendersy

Documentation

API reference, feature guides, deliverability best practices, tools — all in one place.

Quickstart

  1. 1. Sign up at sendersy.com
  2. 2. Add a domain and publish DKIM / SPF / DMARC records in DNS
  3. 3. Create an API key in /dashboard/api-keys
  4. 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 минут" }
  }'
templateEmailVariables
sendersy/otp-codeLogin codecode, expires_in
sendersy/email-verifyEmail verificationverify_url
sendersy/password-resetPassword resetreset_url, expires_in
sendersy/welcome-proWelcome
sendersy/onboarding-tipsGetting-started tips
sendersy/trial-endingTrial endingdays_left, pricing_url
sendersy/order-confirmedOrder confirmedorder_number, items, order_total, order_url
sendersy/payment-receivedPayment receivedamount, payment_method, paid_at, invoice_id, receipt_url
sendersy/payment-failedPayment failedamount, billing_url
sendersy/subscription-expiringSubscription expiringplan, expires_at, renew_url, promo_code
sendersy/order-shippedOrder shippedorder_number, tracking_number, tracking_url, delivery_date
sendersy/newsletter-proNewsletter
sendersy/sale-promoSale with promo code
sendersy/product-launchProduct launchvideo_url
sendersy/abandoned-cartAbandoned cartproduct_name, product_price, product_image, cart_url
sendersy/event-inviteEvent invitationevent_name, event_date, event_place, register_url
sendersy/tournament-resultTournament resultevent_name, place, points, results_url
sendersy/review-requestReview requestreview_url
sendersy/reengagementWe miss you
sendersy/referralRefer a friendreferral_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.delivered

Deliverability

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 →