Skip to content
couryo

Transactional email API for developers and AI agents

Email that lands. Built for developers and their AI agents.

Send transactional and product email over the API or from your AI agent (SMTP coming soon). Couryo sets up your DNS, watches your sender reputation around the clock, and tells you in plain words what to fix.

3,000 emails per month, no credit card

  • No per-seat fees
  • MCP for Claude and Cursor
  • llms.txt and Markdown docs
  • Pay in USD or BRL
api.couryo.comExample
POST /v1/emails
Authorization: Bearer ck_live_••••
Idempotency-Key: order-1042
{
"from": "Shop <orders@shop.com>",
"to": "maria@gmail.com",
"subject": "Order 1042 confirmed"
}
202Accepted{ "id": "msg_9w2k7c1x0d4e5f6g", "status": "queued" }

Timelinemsg_9w2k7c1x0d

to maria@gmail.com
  1. Accepted14:02:07.118

    Queued. Only then does the API answer 202.

  2. Sent14:02:07.402

    Signed with shop.com's own DKIM key.

  3. Delivered14:02:08.931

    gmail-smtp-in.l.google.com answered 250 2.0.0 OK

In plain words: Gmail's server received and accepted Maria's email.

free emails per month, forever
3,000
free emails per month, forever
emails per batch request
100
emails per batch request
of protection against duplicate sends
24 h
of protection against duplicate sends
maximum time for a human review of a pause
1 business day
maximum time for a human review of a pause
per seat, on every plan
$0
per seat, on every plan

Built by people who run email for products in production. Wunka's own products (ViralRecast, Start Atende, Mentezinha and Linkezera) are the first to move to Couryo.

Quickstart

From zero to your first email in 5 minutes.

Three steps, one API call. Copy the example in your language.

  1. 1

    Connect your domain

    Connect Cloudflare and Couryo creates the records for you. Using another DNS provider? Every record is ready to copy and checked live.

  2. 2

    Create a key

    Scoped keys (send only, read only or admin), allowed IP lists and a test key that never delivers for real.

  3. 3

    Send

    One call to POST /v1/emails. A 202 only comes back once the email is in the queue. No fake success.

Read the quickstart
const res = await fetch("https://api.couryo.com/v1/emails", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.COURYO_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "order-1042-confirmation",
  },
  body: JSON.stringify({
    from: "Acme Store <orders@example.com>",
    to: ["maria@example.com"],
    subject: "Your order 1042 is confirmed",
    html: "<p>Thanks for your purchase, Maria!</p>",
    tags: { type: "order" },
  }),
});

const email = await res.json(); // { id: "msg_...", status: "queued" }

Deliverability agent (coming soon)

A deliverability expert watching your email around the clock.

The agent brings together DMARC reports, blocklists, Google Postmaster Tools, Microsoft SNDS, bounces and complaints. When something changes, it explains in plain words what happened, why, and what to do.

  • A weekly "Email health" digest
  • A warning before you cross Gmail, Yahoo and Microsoft thresholds
  • Every bounce with the receiving server's raw response, translated
  • At launch it reads and warns. It only acts with your permission

Deliverability agent

Reading the signalsAlert ready

Example
  • DMARC reports
  • Blocklists
  • Google Postmaster
  • Microsoft SNDS
  • Bounces
  • Complaints

Hotmail and OutlookWarning

Since yesterday at 2 pm, part of your email to Hotmail is being deferred with code 421 4.7.0.

Likely cause: a spike in bounces from the "win-back-october" campaign, sent to an old list.

What to do: pause that campaign and remove the addresses that bounced. Transactional email (passwords and billing) is unaffected.

Never in the dark

No pause without notice, without a reason, or without someone to listen.

The top complaint about email services is an account suspended out of nowhere. Here the rules are public, your limits show in the dashboard and in the API, and every decision comes with numbers.

Trust levels, in plain sight

Example
  1. Level 0

    Sandbox

    How you get there

    Account created

    Limit

    25 per day, only to the account's own addresses

  2. Level 1

    New

    How you get there

    Domain verified (DKIM, return path and DMARC)

    Limit

    100 per day, 3,000 per month

  3. Level 2

    Verified

    How you get there

    7 clean days and a verified company ID or card

    Limit

    1,000 to 10,000 per day

  4. Level 3

    Trusted

    How you get there

    30 clean days on a paid plan

    Limit

    Your plan's volume

You move up on your own, and the dashboard shows what is missing. For example: "4 more clean days to reach level 2". On the Free plan, the cap is 100 per day at any level.

If something looks wrong, the pause is gradual

  1. 1Marketing email is paused.
  2. 2Critical transactional email (password, login and billing) keeps going, with up to 30 per day.
  3. 3You get the reason, the numbers and what to fix, by email and in the dashboard.

A full stop only happens on clear fraud, such as phishing or a purchased list.

Marketing email pausedExample
Reason
bounce rate above 3% over the last 24 hours
Numbers
sent, bounced and rate, with the time of each measurement
How to fix
remove the addresses that bounced and confirm where the list came from
Transactional
still active, with a lower limit

Disagree? Request a review

Right away

An AI agent reviews the request against your account data and decides clear cases immediately.

Within 1 business day

If there is still doubt, a person on the team reviews it and replies with the reason.

Read the acceptable use and suspension policy

Automatic DNS

DKIM, return path and DMARC without opening a tutorial.

Connect Cloudflare and Couryo creates the records. Anywhere else, every record is ready to copy, with live status and an explanation of what is missing. Your domain's SPF stays as it is. Coming soon, the agent follows your reports and takes DMARC to the strongest policy when it is safe.

The agent will walk your DMARC up (coming soon)

  1. p=none

    observe and collect reports

  2. p=quarantine

    spoofed email goes to spam

  3. p=reject

    spoofed email is refused

example.comExample
  • DKIMCNAMEWaiting for DNSCheckingVerified

    couryo1._domainkey → couryo1.7h2kq9w4x1abcdef.dkim.couryo.com

    Signs every email with a key of your own domain.

  • DKIMCNAMEWaiting for DNSCheckingVerified

    couryo2._domainkey → couryo2.7h2kq9w4x1abcdef.dkim.couryo.com

    Second selector: keys rotate without you touching DNS.

  • Return pathCNAMEWaiting for DNSCheckingVerified

    bounces → rp.couryo.com

    Aligns SPF without touching your domain's SPF, and brings bounces back.

  • DMARCTXTWaiting for DNSCheckingVerified

    _dmarc → v=DMARC1; p=none; rua=mailto:dmarc@couryo.com; adkim=r; aspf=r

    _dmarc → v=DMARC1; p=quarantine; rua=mailto:dmarc@couryo.com; adkim=r; aspf=r

    _dmarc → v=DMARC1; p=reject; rua=mailto:dmarc@couryo.com; adkim=r; aspf=r

    Tells mailbox providers what to do with spoofed email.

Built for AI

Your coding agent already knows how to use Couryo.

Markdown docs, llms.txt in English and Portuguese, pricing readable by agents, and a remote MCP server for Claude, Cursor, Claude Code and the OpenAI API, with your API key. OAuth for the Claude and ChatGPT connectors is coming soon.

Your AI agentExample

Why did the email to maria@company.com bounce?

asking Couryoanswer received

couryo · why_bounced("msg_9w2k7c1x0d")

It bounced because that mailbox no longer exists: the company's server answered 550 5.1.1 (unknown user). The address is already on your suppression list, so we will not try again. If Maria has a new address, update her record.

For developers

Everything you expect from an email API. Plus what was missing.

Built like the best APIs: predictable, idempotent and honest about what happened to every message.

  • Real idempotency

    The same Idempotency-Key returns the same response for 24 hours. A different body returns 409.

  • Test mode

    ck_test_ keys never deliver: the email is kept in the dashboard for your team to review.

  • Signed webhooks

    Standard Webhooks, retries for up to 3 days and delivery history. Missed one? List them at /v1/events.

  • Timeline with the raw response

    Every event with time, receiving server, SMTP code and the original response, translated.

  • Batch and scheduling

    Up to 100 emails per request with per-item results, and scheduled_at to send later.

  • Per-stream suppression

    A marketing unsubscribe never blocks a password email. Hard bounces and complaints apply everywhere.

  • Errors that explain

    Stable code, the offending field, a link to the docs and a message in English or Portuguese.

  • SMTP toocoming soon

    smtp.couryo.com on ports 587, 465 and 2525, for when you do not want to touch code.

  • Scoped keys

    Send only, read only or admin, with allowed IP lists.

  • Pre-send checks

    Domain, shortened links, oversized HTML and bill attachments, scored 0 to 100, in CI.

Built in Brazil

Ready for the world, at home in Brazil.

If your company is in Brazil, Couryo bills in reais with a local invoice. Everywhere else, in US dollars.

Pricing

Simple, volume-based pricing.

No per-seat fees. Prices locked for 12 months after any change.

Free

For testing and small projects. Forever.

$0/mo

3,000 emails per month

  • 3,000 emails per month (up to 100 per day)
  • 1 domain
  • 7 days of logs
  • REST API and webhooks (SMTP coming soon)
Start for free
Most popular

Pro

For products in production.

$19/mo

50,000 emails per month

Overage: $0.35 per 1,000

  • 50,000 emails per month included
  • Up to 10 domains
  • 30 days of logs
  • Unlimited users, no per-seat fees
Choose Pro

Scale

For high volume and larger teams.

$59/mo

200,000 emails per month

Overage: $0.28 per 1,000

  • 200,000 emails per month included
  • Everything in Pro
  • Up to 50 domains
  • 90 days of logs
Choose Scale

Enterprise

For teams that need a contract and guarantees.

Custom

  • Custom volume
  • Unlimited domains
  • Dedicated IP
  • SSO
Talk to us

Frequently asked questions

Still have a question? Write to contato@couryo.com.

Is the free plan really forever?

Yes. 3,000 emails per month (up to 100 per day) and 1 domain, written into the terms of use. It is not a trial and needs no card.

How much does it cost?

Free: 3,000 emails per month (up to 100 per day) and 1 domain, no card. Pro: US$ 19 per month with 50,000 emails and US$ 0.35 per extra 1,000. Scale: US$ 59 per month with 200,000 emails and US$ 0.28 per extra 1,000. Enterprise: custom. Companies in Brazil pay in reais: Pro R$ 99 (R$ 1,80 per extra 1,000) and Scale R$ 299 (R$ 1,40 per extra 1,000). No per-seat fees on any plan.

Can my account be suspended without warning?

No. Pauses are gradual and come with the reason, the numbers and what to fix. You can request a review: an AI agent decides clear cases right away and a person reviews within 1 business day. An immediate stop only happens on clear fraud, such as phishing.

What happens if I go over my quota?

On Free, sending stops at the monthly limit and resumes next month, with no charge. On paid plans, overage is billed per 1,000 emails ($0.35 on Pro and $0.28 on Scale). If you set a spending limit, sending stops when overage reaches it, and nothing is charged above the cap.

Do I need to know DNS?

No. With Cloudflare, Couryo creates the records itself. Anywhere else, you copy and paste each record and see its live status, with an explanation of what is missing.

Does it work with my AI agent?

Yes. The docs are available as Markdown, there is an llms.txt in English and Portuguese, and the remote MCP server (mcp.couryo.com) already works in Claude Code, Claude Desktop, Cursor and through the OpenAI API, with your API key. OAuth, for the Claude and ChatGPT connectors, is coming soon.

Can I test without sending real email?

Yes. With a ck_test_ key nothing is delivered: the email is captured in the dashboard, with a link your team can review.

Where is my data stored?

Couryo's infrastructure is currently in the United States. The privacy policy lists our subprocessors by category, the log retention of each plan, and how to reach our data protection officer.

What about marketing email?

Supported, in a stream separate from transactional email, with the one-click unsubscribe that Gmail and Yahoo require. Password emails never share reputation with campaigns.

Send your first email today.

Start on the Free plan. When you need more, pricing stays simple.

3,000 emails per month, no credit card. Cancel anytime.