# Quickstart

> Send your first email with Couryo in 5 minutes, from sign-up to the message timeline.

Source: https://couryo.com/en/docs/quickstart

In 5 minutes you create an account, verify a domain, get a key and send your first email.

## 1. Create your account

Sign in at [app.couryo.com](https://app.couryo.com) with your Google account. Every account starts on the Free plan and at **level 0 (sandbox)**: up to 25 emails per day, only to the account's own addresses, which is enough to test your integration (before verifying a domain, use the `teste@sandbox.couryo.com` sender). See [trust levels](https://couryo.com/en/docs/limits.md).

## 2. Add and verify your domain

In the dashboard, under **Domains**, add the domain your email will come from (for example, `example.com`).

- **Using Cloudflare?** Click **Connect Cloudflare**. Couryo creates the records for you.
- **Another DNS provider?** Copy each record shown on screen. The status of each one updates live.

Once DKIM, return path and DMARC are correct, the domain becomes `verified` and your account moves to level 1 (100 per day). Your root domain's SPF stays untouched. The Free plan allows 1 domain. Details in [Domains and DNS](https://couryo.com/en/docs/domains.md).

## 3. Create an API key

Under **Keys**, create a key with the `send` scope. The full key is shown **only once**: store it in your secrets manager or `.env`.

```bash title="Terminal"
export COURYO_API_KEY="ck_live_..."
```

Want to test without delivering anything? Use a `ck_test_` key. See [Test mode](https://couryo.com/en/docs/test-mode.md).

## 4. Send

```bash title="cURL"
curl https://api.couryo.com/v1/emails \
  -H "Authorization: Bearer $COURYO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: welcome-usr-123" \
  -d '{
    "from": "Example <hi@example.com>",
    "to": ["you@example.com"],
    "subject": "Hello from Couryo",
    "html": "<p>It works!</p>",
    "text": "It works!"
  }'
```

```js title="Node.js"
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": "welcome-usr-123",
  },
  body: JSON.stringify({
    from: "Example <hi@example.com>",
    to: ["you@example.com"],
    subject: "Hello from Couryo",
    html: "<p>It works!</p>",
    text: "It works!",
  }),
});
console.log(res.status, await res.json());
```

The response is `202 Accepted`:

```json title="Response"
{ "id": "msg_9w2k7c1x0d4e5f6g", "status": "queued" }
```

## 5. Follow the delivery

A `send` key can only send. To read the timeline, use a key with the `read` scope (or open the email in the dashboard):

```bash title="cURL"
curl https://api.couryo.com/v1/emails/msg_9w2k7c1x0d4e5f6g \
  -H "Authorization: Bearer $COURYO_READ_KEY"
```

The `events` field lists every step (`accepted`, `queued`, `sent`, `delivered`...) with time, receiving server, SMTP code and a plain-language explanation. See [Events and timeline](https://couryo.com/en/docs/events.md).

## Next steps

- Get events in your system with [webhooks](https://couryo.com/en/docs/webhooks.md).
- Avoid duplicate sends with [idempotency](https://couryo.com/en/docs/sending.md#idempotency).
- Use Couryo from your AI agent with the [MCP server](https://couryo.com/en/docs/mcp.md).
- Rather not touch code? [SMTP](https://couryo.com/en/docs/smtp.md) is coming soon.

> Official Node and PHP SDKs are on the way. Until then, any HTTP client works, as in the examples above.
