How do I send transactional email from my app with SendFox?

Send login codes, receipts and notifications from your app with SendFox Transactional email: request access under More → Transactional, then send with one API call.

What is transactional email in SendFox?

Transactional emails are the one-to-one messages your app sends when someone does something: a login code, a password reset, a receipt, an invite. Instead of building them as campaigns, your code sends each one to SendFox in a single API request, and SendFox delivers it and shows you what happened.

  • On every plan, including Free. Each address an email goes to (in to, cc or bcc) counts as one send against your plan's usual allowance: 3,000 sends a month on Free, the 300,000-send pool on the $29 Lifetime deal, or your Pro tier's monthly limit. Transactional emails share those sends with your campaigns and automations; there is no separate transactional limit, daily cap or add-on.
  • Access is by request. You ask for access once from the Transactional page, and SendFox turns it on for your account.
  • It's in beta. Transactional is new, so it carries a Beta label in the app while it settles in.

How do I request access?

  1. In the top nav, click More and choose Transactional.
  2. On Transactional email from your app, optionally describe your emails under What will you send? (for example, login codes and receipts from your app).
  3. Click Request access.

The Transactional request page in SendFox: What will you send? box with Request access and Read the API docs buttons

The page then reads “Thanks, your request is in. We review every account by hand and will email you when yours is approved, usually within a business day.” When access is on, you get an email titled Transactional email is on for your SendFox account with a Send your first email button. If SendFox can't turn it on for your account, the Transactional page says so; write to support@sendfox.com with a line about what you'd send if you think that's a mistake.

How do I send my first transactional email?

Once you have access, More → Transactional opens the Setup tab and its checklist, Get to your first delivered email. You start on a sandbox sender, so there's nothing to set up before your first test.

  1. Your API key. If your account has no API key yet, SendFox creates one for you here. Click Show or Copy and store it in your app's environment: the page shows it for an hour, then hides it for good. If you already have keys, or the hour has passed, click Create a new key. Any SendFox API key works, and you manage them all under Settings → API tokens (the Manage API keys link).
  2. Send your first email. Copy the ready-made snippet (tabs cURL, Node, PHP and Python) into your app, or click Send this email to send it straight away. It goes to your SendFox account's email address and opens the email's page, where you can watch its timeline update.
  3. Send from your own domain. Click Add a domain, add your domain under Settings → Email domains, create its three CNAME records at your DNS provider, and click Verify. See how to validate your sending domain. Once it passes, the snippet switches to your domain.
  4. Get delivery events (optional). Add a webhook so your app hears about each delivery, bounce or complaint (see Webhooks below).

Sandbox vs. live sending

  • Sandbox: mail from onboarding@sendfoxmail.com needs no DNS, but it reaches only your own account email and four test addresses. The status line reads Sandbox until a domain is verified.
  • Test addresses: delivered@sendfoxmail.com, bounced@sendfoxmail.com, complained@sendfoxmail.com and suppressed@sendfoxmail.com act out each outcome so you can test your integration. They never reach a mailbox and never count toward your sends. Don't mix them with real recipients in one request.
  • Live: once a domain is verified, the status line reads Live sending on, and you can send to anyone from any address on that domain or on a subdomain of it (for example hello@mail.yourdomain.com). SendFox's own domains can't be used as a live sender.

Emails to your own address count as one send each, even from the sandbox; only the test addresses are free.

How do I send an email from my code?

Send a POST request to https://api.sendfox.com/transactional/emails with your API key as a Bearer token:

curl https://api.sendfox.com/transactional/emails \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme <hello@mail.acme.com>",
    "to": ["jane@example.com"],
    "subject": "Your login code",
    "html": "<p>Your code is <strong>483 920</strong>.</p>",
    "tag": "login_code"
  }'

SendFox answers right away with the email's id (it starts with tm_) and the status queued, then delivers it in the background. from, to and subject are required; send html, text or both. You can also add cc, bcc, reply_to, a tag, custom headers (for example one-click unsubscribe headers) and attachments.

Limits to know

  • Recipients: up to 10 addresses per email across to, cc and bcc, with at most 2 in bcc.
  • Requests: up to 5 a second and 300 a minute for your account. Over that, the API answers rate_limit_exceeded; wait and retry.
  • Batches: https://api.sendfox.com/transactional/emails/batch takes up to 100 emails in one request (5 MB of HTML and text in total). If your plan doesn't have enough sends left for the whole batch, none of it is sent.
  • Attachments: up to 10 files and 5 MB in total per email, sent as base64. Program and script files, HTML and SVG files, and links to files are refused, and the batch endpoint doesn't take attachments.
  • Safe retries: send an Idempotency-Key header and a retry within 24 hours returns the original email instead of sending a second one.

Every field, error and code sample is in the SendFox API reference (the API docs link at the top of the Transactional page). If you've connected an AI assistant to SendFox, it can send and look up transactional emails too, under the same rules, except for attachments.

How do I see what happened to an email?

  • Feed: every email you've sent, newest first. Filter by status (such as Delivered, Bounced or Failed) or search by recipient or subject. Rejected requests lists the API calls SendFox refused before sending, each with how to fix it.
  • The email's page: click an email to see its Preview (Desktop, Mobile, Text and Raw request), its Timeline and its Details. Resend sends it again as a new email. Email content is kept for 30 days, after which it's removed and the email can't be resent; emails with attachments can't be resent either.
  • Tags: add a tag to each API call (for example receipt or password_reset) to see delivery for each kind of email. Open and click tracking is off by default and set per tag: open a tag, switch on Track opens or Track clicks, and click Save. Tracking always stays off for login, reset and verification emails, because security scanners open their links and would use up one-time codes.
  • Usage: your daily volume and this month's outcomes, plus Turn on digest for one summary email each morning after a day with sends.

Suppressions

The Suppressions tab lists addresses your transactional email won't go to. Hard bounces and spam complaints are added automatically, and a request that includes a suppressed address is refused with recipient_suppressed. You can add an address yourself with Suppress address, and Remove hard bounces and addresses you added. A spam complaint can only be removed by SendFox support. This list is separate from your marketing contacts.

Webhooks

On the Webhooks tab, add one HTTPS URL and pick the events you want: sent, delivered, delayed, bounced, complained and failed. SendFox posts a signed JSON event to it each time, and retries a failed delivery 4 more times over about 20 hours. Copy the Signing secret when it's shown (it's shown only once; Make a new secret replaces it), check your setup with Send test event, and use Send again on any recent delivery under Deliveries.

Switching from Resend

If your app already sends through Resend (the email service), you can keep your code. Set RESEND_BASE_URL=https://api.sendfox.com/transactional/resend and RESEND_API_KEY to your SendFox API key, then verify your domain. Sending, batch sending and looking up an email work; an email can have up to 10 addresses, attachments work except links to files and inline images, and scheduled sends aren't supported yet. Under Webhooks, choose the Resend format so your existing webhook handler keeps working.

What happens if my account is paused or restricted?

While your SendFox account is paused or restricted, Transactional disappears from the More menu and every transactional API request is refused with account_restricted, so your app's emails stop too. See why an account is paused or restricted. If only transactional sending is paused, the Transactional page shows Transactional sending paused; contact support@sendfox.com.

Troubleshooting

My email is refused with sandbox_recipient_not_allowed or domain_not_verified

  • sandbox_recipient_not_allowed: the sandbox sender only delivers to your own account email and the test addresses. Verify your domain to send to anyone else.
  • domain_not_verified: the from address uses a domain that isn't verified on your account. Check it under Settings → Email domains, or send from the sandbox sender while you test.

My requests fail with monthly_quota_exceeded

Your plan's sends are used up, for campaigns and transactional email alike. Upgrade from Settings → Plan & billing (or the Upgrade link in the top nav), or wait until your monthly sends reset. The $29 Lifetime pool doesn't reset.

One address keeps getting refused with recipient_suppressed

That address hard-bounced, complained or was added by you, so it's on your Suppressions list and the whole request is refused. Take it out of the request, or Remove it from the list if it can receive mail again (spam complaints need support).

I don't see Transactional under More

Transactional is hidden while your account is paused or restricted; check Account status in the account menu and see why an account is paused or restricted.

Still stuck? Search the Help Center at help.sendfox.com or email support@sendfox.com.

Frequently Asked Questions

Do transactional emails count toward my send limit?

Yes. Every address an email goes to counts as one send against your plan's usual allowance, the same sends your campaigns and automations use. Emails to the four sandbox test addresses don't count.

Can I use transactional email on the Free plan?

Yes. Transactional email works on every plan once your access request is approved. On Free, your emails draw on the same 3,000 sends a month as your campaigns.

Can I attach files to a transactional email?

Yes, when you send one email at a time through the API: up to 10 files and 5 MB in total, sent as base64. The batch endpoint doesn't take attachments.

Does SendFox track opens and clicks on transactional emails?

Only if you turn it on. Tracking is off by default and set per tag on the Tags tab, and it can't be turned on for login, password reset or verification emails.

Still need help? Contact Us Contact Us