Transactional email from your own domain, with one API call.
Send password resets, receipts, verification codes and alerts the moment they happen, through a simple REST API. Cresca is a transactional email service and an AI email marketing platform in one account, so app email and campaigns share one plan.
Free for 30 days, no credit card. API included on every plan.
curl -X POST 'https://api.cresca.xyz/api/v1/emails' \
-H 'Authorization: Bearer cr_live_xxxxxxxxx' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: password-reset/user-123' \
-d '{
"from": "Acme <hello@acme.com>",
"to": "user@example.com",
"subject": "Reset your password",
"html": "<p>Click <a href=\"https://acme.com/reset?token=abc\">here</a> to reset your password.</p>"
}'{
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
}The basics
What is transactional email?
Transactional email is a message a person expects because of something they just did: they asked to reset a password, placed an order or signed up. It goes to one person, is triggered by your app, and needs to arrive within seconds.
Marketing email is different: newsletters and promotions sent to a list, which need consent and an unsubscribe link. Cresca handles both, and keeps the rules apart. A marketing unsubscribe never blocks a password reset.
- Password resets and sign-in codes
- Order confirmations and receipts
- Email address verification
- Account and security alerts
- Invoices with PDF attachments
- Invitations and welcome emails
How it works
A transactional email API that stays out of your way
Everything your app needs to send one-to-one email reliably, documented end to end.
A plain REST API
JSON over HTTPS at api.cresca.xyz/api/v1. Send one email or a batch of up to 100 per request, from any language that can make an HTTP call.
Read the docsYour own verified domain
Every email goes out from a sender on a domain you verified in Cresca, with SPF and DKIM in place.
Read the docsIdempotency keys
Send an Idempotency-Key header and a retried request returns the first result instead of a second email.
Read the docsTemplates with variables
Design an email in the template editor, publish it, and send it by alias with your own values. Every published version is kept.
Read the docsStatus for every email
The API returns each email’s latest status as last_event, and the dashboard shows its full event timeline.
Read the docsLimits that grow with your plan
Requests per second depend on the plan, and API email shares the plan’s monthly email allowance with your campaigns.
Read the docs
Also included: scheduled sends up to 30 days ahead, attachments, tags, custom headers, sending-access keys limited to one domain, and automatic bounce and complaint suppression.
Send email
Send transactional email in four steps
From a new account to a delivered email in a few minutes.
- 01
Verify a sending domain
Add your domain in Cresca and publish the DNS records it shows you, or let Cresca add them on Cloudflare.
- 02
Add a sender
Create a sender address on the verified domain, such as hello@yourdomain.com.
- 03
Create an API key
Choose sending access for production servers and keep the key in your server’s environment.
- 04
Send
Call POST /emails, then check the email’s status in the API or the dashboard.
Step-by-step: quickstart · how to send email with an API · sending domains
Limits and pricing
Rate limits that grow with your plan
API email shares your plan’s monthly email allowance with your campaigns. Each recipient counts as one email.
| Plan | API requests per second | Emails per month | Price |
|---|---|---|---|
| Free | 2 | 50 in 30 days | $0 for 30 days |
| Professional | 10 | 7,500 | $29/month |
| Premium | 20 | 30,000 | $49/month |
| Ultra | 50 | 65,000 | $99/month |
| Enterprise | 100 | Custom | Contact us |
Batch sending carries up to 100 emails per request. See pricing · Rate limits and quotas
One account
Marketing and transactional email, together
Your app’s email and your campaigns share one plan, one allowance and the same verified domains.
Templates your team can edit
Design transactional templates in the editor, mark variables, send a test, then publish. Your code only sends the alias and the values.
Email templates API guideAI-designed campaigns
For newsletters and promotions, describe the email and the AI agent designs it with your brand, then send it to your lists.
Email campaignsRules that fit each kind of email
Campaigns respect unsubscribes and add the unsubscribe link. API email skips only bounced, complained or manually suppressed addresses.
Suppression rules
- SPF and DKIM on your own domain
- 7,500 emails for $29/month
- Email support on every plan
Compare
Moving from another email API?
See how Cresca compares for transactional and marketing email.
FAQs
Transactional email questions
Transactional email is a one-to-one message a person expects because of something they did, such as a password reset, an order receipt, a verification code or a security alert. Your app sends it the moment the event happens.
Verify your domain, add a sender and create an API key in Cresca, then send a POST request to https://api.cresca.xyz/api/v1/emails with from, to, subject and html, or with a published template and its variables.
Yes. API email shares your plan’s monthly email allowance with your campaigns, and each recipient counts as one email. Professional is $29/month for 7,500 emails. Suppressed recipients and canceled emails do not count.
Requests per second depend on the plan and are shared by all of an account’s API keys: Free 2, Professional 10, Premium 20, Ultra 50 and Enterprise 100. A batch request carries up to 100 emails.
Every email has a status. The API returns the latest one as last_event (for example sent, delivered or bounced), and the Transactional page in the dashboard shows the full event timeline for each recipient.
No. An unsubscribe stops marketing email only, so password resets and receipts still arrive. Hard bounces, repeated soft bounces and spam complaints are suppressed for both.
Send your first transactional email today.
Free for 30 days, no credit card. Verify your domain, create an API key and send.