Skip to main content
Send mail, verify domains, read inboxes, and tail events from your terminal. The Dairo CLI is built for scripts, CI pipelines, and coding agents. It uses the same API key as the SDKs and keeps complaint safety on by default.

Install

Native binaries ship for macOS (arm64/x64), Linux (arm64/x64), and Windows (x64).

Authenticate

Sign in with your browser, or set a key directly. Either way the credential is the same one the SDKs use — see Authentication.
The CLI checks DAIRO_API_KEY first, then a local config file.
Add --json to most commands for machine-readable output — ready to pipe into jq or parse in a script or agent.

Send your first email

A send that is blocked because a recipient reported your mail as spam returns an error; pass --ignore-complaints only to override it deliberately. See Land in the inbox.

Command reference

Account and usage

dairo whoami identifies your key and project and returns the plan, limits, usage, billing period, storage, and the key’s allowedIps (an IP allowlist, or null for any IP). Check it before a large send to see your headroom.

Domains

dairo domain recheck re-reads your DNS records and reports whether the domain is verified.

Inboxes

Sending

At least one --to and one body (--text, --html, or --react-source) are required. Add --attachment ./file.pdf (repeatable) and --attachment-delivery attachment|auto|link. Use --ignore-complaints only to deliberately override complaint suppression. --send-at takes an RFC 3339 timestamp with an explicit timezone offset (for example 2026-07-01T09:00:00Z or 2026-07-01T11:00:00+02:00), in the future and at most 30 days out. A scheduled send returns status: scheduled with a scheduledAt timestamp; cancel it with dairo outbound cancel <messageId>.

Track delivery

Each email carries a status (including scheduled and canceled) plus scheduledAt and canceledAt timestamps when set. dairo outbound get returns the email with its full delivery timeline; dairo outbound events lists only the events. dairo outbound cancel works only while the email is still scheduled — once it is no longer scheduled (already sent, queued, or canceled) it returns a 409 conflict.

Physical mail (letters)

Fairo turns a PDF into a real, posted letter. Reads use letters:read; sending and canceling use letters:send. Cancel works only while the letter has not been dispatched yet.

Messages, threads, attachments

Webhooks

API keys

Pass --scope once per scope. Add --allowed-ip (repeatable, up to 50) to lock a key to specific source IPs or ranges; omit it to allow any IP. A correct secret presented from an unlisted IP is rejected with 403. The allowlist shows up in dairo api-key list, dairo whoami, and the create output.

Audiences

dairo audiences add adds or updates members; dairo audiences import-csv bulk-imports from a CSV. dairo audiences send runs the same outbound pipeline as dairo send, fanning out to every member of the list with complaint suppression applied automatically. Listing and reading use audiences:read; creating a list and adding members use audiences:write; dairo audiences send requires messages:send.

Templates

Author versioned React-email templates (scopes templates:read and templates:write), then send with one by passing a template reference ({ id, version?, variables }) instead of an inline body.

Wait for one-time codes

Give an inbox a schema so incoming mail arrives as clean fields, or register a wait that resolves with the extracted code the moment a matching email lands. See Wait for one-time codes.

The event stream

Pull, tail, and replay your event stream. Reading uses events:read; replay uses events:write. See The event stream.

Agents, reputation, budgets

Signed agent identities, fleet send-health, and per-agent send ceilings. Reads use agents:read and budgets:read; changes use the matching :write scope; provenance verification is public.

Compliance

Erasure jobs use compliance:read and compliance:write; residency and audit-log reads use account:read.

MCP install

See the MCP server.

Scripting example

A CI script that waits for a domain to verify, then sends a build notification:

Next steps

Build reliable mail agents with the patterns in Why Dairo is agent-native. For the same surface as copy-paste agent tool calls, see MCP recipes.