# VaEmail as a SendGrid alternative for AI agents

SendGrid is the volume incumbent: seven official SDKs, a signed event webhook, inbound parsing, a public OpenAPI specification and a send endpoint rated for 10,000 requests per second. VaEmail is European email infrastructure whose guardrails live inside the API key: scopes, daily caps, allowed sender domains, a dry run that sends nothing, a per call audit log. If you send at industrial volume, or your agent must read incoming mail, stay on SendGrid. If a program holds the key, and duplicate sends, spending limits and a readable trail of what the agent did matter more than raw throughput, VaEmail is the better fit.

Facts checked against the VaEmail documentation on 7 September 2026. Competitor facts come from the official Twilio SendGrid documentation read the same day; URLs are cited.

## Where SendGrid is stronger

**Inbound.** The Inbound Parse Webhook receives mail on a subdomain of an authenticated domain and posts each message to your endpoint. The parse setting itself is creatable by API (twilio.com/docs/sendgrid/api-reference/settings-inbound-parse/create-a-parse-setting, read 07/09/2026), though the MX record pointing at `mx.sendgrid.net` remains a human DNS step, with up to 48 hours of propagation (twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook, 07/09/2026). VaEmail does not do this at all. Inbound exists only for prospecting sequences attached to a declared IMAP mailbox.

**Official libraries in seven languages**: Python, Node, Go, Java, C#, PHP and Ruby (twilio.com/docs/sendgrid/for-developers/sending-email/libraries, 07/09/2026). VaEmail has none of its own.

**A signed event webhook.** SendGrid signs each delivery with ECDSA, sending `X-Twilio-Email-Event-Webhook-Signature` and a timestamp header, the signature computed over SHA-256 of the timestamp concatenated with the raw body, and it can be combined with OAuth2 (twilio.com/docs/sendgrid/for-developers/tracking-events/getting-started-event-webhook-security-features, 07/09/2026). VaEmail's six webhook events are not signed with an asymmetric key.

**Throughput.** The v3 send endpoint accepts up to 10,000 requests per second, with a ceiling of 1,000 recipients per email (twilio.com/docs/sendgrid/api-reference/how-to-use-the-sendgrid-v3-api/rate-limits, 07/09/2026). VaEmail's transactional send limit is 60 requests per minute. If your agent fans out to a large list, this is not a close call.

**A sandbox that is genuinely better than a validator.** `mail_settings.sandbox_mode` validates the structure and types of a request without delivering, generates no webhook event and consumes no credit (twilio.com/docs/sendgrid/for-developers/sending-email/sandbox-mode, 07/09/2026). VaEmail's `POST /api/v1/messages/validate` returns more decision material, but SendGrid's sandbox is free, documented and has years of use behind it. This one is not a VaEmail advantage.

**A public OpenAPI specification**, 3.1.0, split per resource, published as `sendgrid/sendgrid-oai` on GitHub, currently marked Beta (github.com/sendgrid/sendgrid-oai, 07/09/2026).

## Where VaEmail is stronger for an agent

**Idempotency on the server.** SendGrid documents no idempotency header on `mail/send`, and no native deduplication mechanism: an agent that retries after a network timeout can send twice, and preventing that is left entirely to the caller. VaEmail memorises the response for the `Idempotency-Key` header for 24 hours and replays it identically with `Idempotent-Replay: true`. The same key with a different body is refused by a `409 IDEMPOTENCY_KEY_REUSED`, which points at a bug in your key derivation rather than a replay. Server errors (5xx) are not memorised, so retrying after one is safe.

**A key that cannot overspend.** SendGrid's API keys come in three levels, Full Access, Restricted Access with granular per endpoint scopes, and Billing Access (twilio.com/docs/sendgrid/ui/account-and-settings/api-keys, 07/09/2026). The scopes are real and fine grained, which puts SendGrid ahead of most of the field. What is missing is the other half: no documented volume cap per key, and no way to restrict which sender domains a given key may use. IP Access Management exists but gates the whole account, interface, API and SMTP together, by IP allow list, not key by key (twilio.com/docs/sendgrid/ui/account-and-settings/ip-access-management, 07/09/2026). A VaEmail key carries 8 scopes (`email.send`, `email.read_status`, `domain.read`, `domain.write`, `contacts.read`, `contacts.write`, `analytics.read`, `billing.read`), a `max_emails_per_day`, a `max_recipients_per_email` and an `allowed_domains` list. Out of scope calls return 403 `INSUFFICIENT_SCOPE`, naming the missing scope and the ones the key holds. `GET /api/v1/usage` returns what remains, so a program can decide to stop from the service's number rather than from a counter of its own. A compromised or looping agent stops at the key, not at the invoice.

**An audit log of the calls, not of the messages.** SendGrid's Email Activity API tracks messages: status, recipient, template, a truncated `api_key_id`. It is not an audit of API calls or of who did what, its default retention is a few days, extending it to 30 days is a paid add-on, and it is itself rate limited to 6 requests per minute (twilio.com/docs/sendgrid/for-developers/sending-email/getting-started-email-activity-api, 07/09/2026). `GET /api/v1/audit-logs` returns one line per call: which key, which agent, which operation, which parameters, which result, how many emails engaged. Message bodies, attachments and merge variables never appear in it. When an agent runs unattended, the question after the fact is what it did, not only what arrived.

**Status of one message, without an add-on.** SendGrid can filter its activity feed by message ID and return the most recent events for it (twilio.com/docs/sendgrid/api-reference/email-activity/filter-messages-by-message-id, 07/09/2026), but that sits behind the same retention add-on. `GET /api/v1/messages/{id}` is a plain read, with `status` among `queued`, `sent`, `delivered`, `failed`, `suppressed`, `held`, `cancelled`.

**Deliverability diagnosis in one call.** SendGrid's Domain Authentication sets up SPF and DKIM through DNS records and offers a verify endpoint, with DMARC documented as recommended rather than handled, and monitoring available through a Valimail partnership (twilio.com/docs/sendgrid/ui/account-and-settings/how-to-set-up-domain-authentication and twilio.com/docs/sendgrid/ui/sending-email/dmarc, 07/09/2026). `GET /api/v1/deliverability/diagnose?domain=example.com` returns SPF, DKIM and DMARC verdicts together, the issues found and the recommended actions, in a shape an agent can act on. See [ai-agent-email-deliverability](https://vaemail.fr/ai-agent-email-deliverability).

**Europe without an assembly.** SendGrid does offer EU data residency, on `https://api.eu.sendgrid.com/`, but it requires a paid account, an EU subuser with an EU provisioned dedicated IP that cannot be mixed with global IPs, and it excludes Marketing Campaigns (twilio.com/docs/sendgrid/data-residency, 07/09/2026). VaEmail runs its servers in Germany and sends in Europe, for every account, with nothing to assemble.

**An MCP server that exists.** There is no SendGrid specific MCP server. The Twilio Alpha MCP Server is a generic multi product server in public beta that exposes two tools for searching and retrieving across 1,800 Twilio endpoints, with SendGrid email announced as future support (twilio.com/en-us/blog/introducing-twilio-alpha-mcp-server, 07/09/2026). VaEmail ships 18 tools over stdio, installed in one line.

## The send loop, end to end

Dry run, send with an idempotency key, then read the status ([curl example](https://github.com/vaemail/examples)).

```bash
curl -X POST https://app.vaemail.fr/api/v1/messages/validate \
  -H "api-key: $VAEMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"client@example.com","subject":"Your invoice","html":"<p>Hello</p>"}'

curl -X POST https://app.vaemail.fr/api/v1/transactional/send \
  -H "api-key: $VAEMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invoice-2412" \
  -d '{"to":"client@example.com","subject":"Your invoice","html":"<p>Hello</p>"}'
```

The send answers `202`:

```json
{ "success": true, "data": { "id": 2841, "status": "queued" } }
```

Accepted, not delivered. Only `GET /api/v1/messages/{id}` settles that.

## Honest gaps

- No inbox created on the fly, and no inbound parsing. An agent that must receive a verification code needs SendGrid or a dedicated inbox product.
- Throughput is two orders of magnitude below SendGrid: 60 transactional requests per minute.
- A Python SDK (`pip install vaemail`). Brevo clients also work against the `/v3` compatible API; everything else is HTTP.
- Webhooks are not signed with an asymmetric key, where SendGrid signs with ECDSA and can add OAuth2.
- Six webhook events: sent, delivered, bounce, complaint, opened, clicked.
- Documentation is partly in French. The agent facing material (`/agents`, the skill, `llms-full.txt`) is English.
- Young product, run by an agency, not a funded company. SendGrid has more than a decade of volume sending behind it.
- Prices are public on https://vaemail.fr/tarifs/. SendGrid publishes one: a 60 day free trial at 100 emails per day, then Essentials from $19.95 per month and Pro from $89.95 per month, with Premier on quote (twilio.com/en-us/products/email-api/pricing, 07/09/2026).

## When not to switch

Stay on SendGrid if you send at high volume, if your agent reads incoming mail, if a per language SDK carries your integration, or if a cryptographically signed webhook is a requirement you cannot move. Switch when the key is held by a program rather than a person: a send that cannot be duplicated by a retry, a key that cannot exceed its daily budget or borrow a sender domain, a log that says what the agent did, and data that stays in Germany without an EU subuser to assemble. Related reading: [email-api-for-ai-agents](https://vaemail.fr/email-api-for-ai-agents), [autonomous-agent-email](https://vaemail.fr/autonomous-agent-email), [mcp-email-server](https://vaemail.fr/mcp-email-server).

## Copy this to your agent

```
Replace SendGrid with VaEmail as the outbound email provider in this project.

Documentation for agents: https://vaemail.fr/llms.txt
OpenAPI specification: https://app.vaemail.fr/openapi.json
Capabilities, no key needed: https://app.vaemail.fr/api/v1/capabilities

Rules:
- The API key is in VAEMAIL_API_KEY. Do not ask for it, never write it to a versioned file.
- Base URL https://app.vaemail.fr/api/v1, header "api-key". The Brevo-compatible /v3
  endpoints exist if the code already speaks that dialect.
- Before any real send, call POST /api/v1/messages/validate and stop if "sendable" is false.
- Put an Idempotency-Key header on every send, derived from the business action.
- A 202 means accepted, not delivered: read GET /api/v1/messages/{id} before reporting
  a delivery.
- Inbound mail is not supported. If the project parses incoming email, say so and stop
  instead of improvising.
- Publishing DNS records, creating an account or paying are human steps: name them,
  never declare them done.

Start with `npx vaemail init` and tell me what it reports.
```

MCP install:

```bash
claude mcp add vaemail --env VAEMAIL_API_KEY=swm_your_key -- npx -y vaemail mcp
```

## Links

- Agent page: https://vaemail.fr/agents
- Full documentation in one file: https://vaemail.fr/llms-full.txt
- Index for language models: https://vaemail.fr/llms.txt
- Quickstart: https://vaemail.fr/docs/quickstart.md
- Security and guardrails: https://vaemail.fr/docs/security.md
- Error codes: https://vaemail.fr/docs/errors.md
- MCP server and CLI: https://vaemail.fr/docs/mcp.md
- Deliverability: https://vaemail.fr/docs/deliverability.md
- API reference: https://vaemail.fr/docs/api.md
- OpenAPI 3.1: https://app.vaemail.fr/openapi.json
- Capabilities, no key: https://app.vaemail.fr/api/v1/capabilities
- Full comparison table: https://vaemail.fr/compare/index.md
- Agent skill: https://github.com/vaemail/skills
- Examples: https://github.com/vaemail/examples
- MCP server source: https://github.com/vaemail/vaemail-mcp
