# Cloudflare Email Service (slim) > Cloudflare Email Service sends transactional email through a REST API, a Workers binding or SMTP, and routes inbound mail to Workers or verified addresses. Email Sending is in public beta and needs the Workers Paid plan for arbitrary recipients. - Full: https://www.anchorterminal.com/tools/cloudflare-email-service.md (~9,000 tokens) · this version ~1,980 tokens · JSON https://www.anchorterminal.com/tools/cloudflare-email-service.json · canonical https://www.anchorterminal.com/tools/cloudflare-email-service - Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · Updated: 2026-10-08 **B · 67.3/100 · rank #212 of 722 · #4 in Email delivery APIs · not agent-ready · confidence medium** Assessment: Cloudflare API tokens can be limited to sending, given an expiry and restricted by IP address, and a public OpenAPI file covers 29 Email Sending operations. Sending is still in beta, with no SLA, no idempotency key and no published daily quota, and it needs a domain on Cloudflare DNS and the Workers Paid plan. ## Facts - Kind: HTTP API · vendor: Cloudflare · category: Email delivery APIs · legal entity: Cloudflare, Inc. · provenance 95/100 - Endpoint: `https://api.cloudflare.com/client/v4` (HTTP) - Auth: API key · pricing: Pay per use · x402: no · licence: Proprietary service under Cloudflare's Self-Serve Subscription Agreement and Developer Platform service-specific terms. The official `cloudflare` SDK on npm is Apache-2.0 - Probe metrics: not measured yet (probes haven't run) - Status: Email Sending is in public beta (since 16 April 2026). Email Routing is generally available on Free and Paid plans - API: REST under `https://api.cloudflare.com/client/v4`. `POST /accounts/{account_id}/email/sending/send` for structured mail and `/send_raw` for a MIME message, plus suppressions, sending subdomains and their DNS records, limits and reputation. 29 sending operations in the OpenAPI 3.0.3 file - Workers binding: `send_email` binding with a `send()` method that returns one `messageId`. A binding can be limited with `destination_address`, `allowed_destination_addresses` or `allowed_sender_addresses` - SMTP: `smtp.mx.cloudflare.net` port 465, implicit TLS only, AUTH PLAIN or LOGIN, username `api_token`, password an API token. 50 recipients a session - Credentials: Cloudflare API token, account-owned or user-owned, with optional expiry and IP address filter. Send and read are separate permissions - Limits: 50 recipients per email across to, cc and bcc, 5 MiB per message, 32 attachments, 16 KB of custom headers, 998 characters in a subject. Daily quota per account with no published number. Cloudflare API limit of 1,200 requests per five minutes per token - Free allowance: 3,000 emails a month included on Workers Paid. Sends to verified destination addresses in the account are free on every plan - Domains: The domain must use Cloudflare DNS. Onboarding adds MX, SPF, DKIM and DMARC records, and up to 30 domains per zone can be configured - Inbound: Email Routing forwards mail to verified addresses or passes it to a Worker's `email()` handler, which can forward, reply or reject. 200 rules per domain, 25 MiB per inbound message - Suppressions: Account-wide or per sending domain since 25 September 2026. Hard bounces suppress for seven days or with no expiry, soft bounces for 24 hours. Bulk import of 1,000 entries, 10 requests a minute - Logs: Activity log in the dashboard for up to 30 days, the same events in the GraphQL Analytics API for 31 days, message previews kept about seven days, and account audit logs for configuration changes kept 18 months - Events: Delivered, deferred, bounced and rejected events per sending domain go to Cloudflare Queues. No HTTP webhook found - Templates: None found - SDKs: Cloudflare's general API SDKs for Node (`cloudflare` 7.3.0 on npm, 3 October 2026), Python (`cloudflare` 5.9.0 on PyPI, 3 October 2026) and Go - Prices: Outbound email $0.35 per 1,000 emails; Workers Paid plan $5 per month (plan) - Scores: Reliability 51, Performance pending, Schema & documentation 89, Agent ergonomics 72, Security & auth 77, Payments & pricing 30, Task success pending, Maintenance & community 81, Transparency & trust 76 · total over the 7 assessed categories - Why: Reliability, Graded on the hosted Email Sending REST API with the hosted lines. · Schema & documentation, Cloudflare's public OpenAPI 3.0.3 file has 29 operations under `/email/sending` and 46 under `/email/routing` (25). · Agent ergonomics, A send returns a small object grouping recipients into delivered, queued and bounced. · Security & auth, Cloudflare API tokens are revocable and scoped by permission, with separate send and read permissions, an optional expiry and an IP address… · Payments & pricing, No x402, MPP or L402 on the Email Sending endpoints (0). · Maintenance & community, Read for a closed service. · Transparency & trust, Closed service under the Self-Serve Subscription Agreement and service-specific terms with an Email Service section updated on 28 September… - Sources: 39, open questions: 10, both in the full twin - Capabilities: email.send, email.inbound, email.domains, email.analytics - JSON: https://www.anchorterminal.com/api/v1/tools/cloudflare-email-service.json - Verify (for the vendor): the badge `https://www.anchorterminal.com/badges/cloudflare-email-service.svg` or a link to https://www.anchorterminal.com/tools/cloudflare-email-service from a page on cloudflare.com or one of its subdomains, then `POST https://www.anchorterminal.com/api/v1/verify` `{"slug", "url"}` or `verify_listing` at /mcp; re-checked weekly, no effect on the grade. Snippets in the full twin. ## Before you call it 1. POST to `https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send` with `Authorization: Bearer `. The body needs `to`, `from`, `subject` and one of `html` or `text` 2. Don't retry a timed-out send blindly. There is no idempotency key, so look for the message in the `emailSendingAdaptive` GraphQL dataset first 3. On 429 (code 10004) wait for the `retry-after` header. On 409 `sending_not_ready` the domain setup is unfinished and nothing was sent 4. Read `result.delivered`, `result.queued` and `result.permanent_bounces` in the response. A 200 does not mean every recipient was accepted 5. Keep to 50 recipients across to, cc and bcc, and 5 MiB per message including attachments 6. For SMTP use `smtp.mx.cloudflare.net` on port 465 with implicit TLS, username `api_token` and the API token as password. Port 587 is not supported 7. By default one suppressed recipient fails the whole send. Turn on Drop suppressed recipients for the domain to send to the rest ## Connect ```bash curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send" \ --header "Authorization: Bearer " \ --header "Content-Type: application/json" \ --data '{"to":"recipient@example.com","from":"welcome@yourdomain.com","subject":"Welcome to our service!","html":"

Welcome!

Thanks for signing up.

","text":"Welcome! Thanks for signing up."}' ``` Full config and headless snippets are in the full page. Through letme (picks today, calling later): https://letme.dev/cloudflare-email-service ## Similar tools | Tool | Grade | Score | Shared capabilities | Slim | | --- | --- | --- | --- | --- | | Amazon SES | BB | 75.1 | email.send, email.inbound, email.domains, email.analytics | https://www.anchorterminal.com/tools/amazon-ses.min.md | | Resend API + MCP | BB | 75.1 | email.send, email.inbound, email.domains, email.analytics | https://www.anchorterminal.com/tools/resend.min.md | | AgentMail API + MCP | BB | 74.9 | email.send, email.inbound, email.domains, email.analytics | https://www.anchorterminal.com/tools/agentmail.min.md | | MailerSend | B | 69.5 | email.send, email.inbound, email.domains, email.analytics | https://www.anchorterminal.com/tools/mailersend.min.md | | Mailtrap Email API + MCP | B | 66.8 | email.send, email.inbound, email.domains, email.analytics | https://www.anchorterminal.com/tools/mailtrap.min.md | ## Panel reviews (0, desk reviews from public material, no calls made)