Send mail (SendGrid v3 dialect)
Drop-in for SendGrid's POST /v3/mail/send. Authenticate as SendGrid does, with Authorization: Bearer <sendly key> (the legacy x-api-key-token header is also read). A pk_ send-only key is accepted. The key must hold emails:send.
Each personalizations entry is translated to one native send. The whole fan-out is validated, and content review runs over it, before any send runs; the sends themselves then run in order, so a later send that fails can leave the earlier ones queued. At most 100 personalizations are accepted per request, as on the native batch; more answers 400 and nothing is sent. Success is 202 with an EMPTY body and an X-Message-Id header carrying the first queued email id — the semantics @sendgrid/mail expects. There is no Idempotency-Key support on this route.
A feature the vendor offers that Sendly has no equivalent for is refused with its own status (code COMPAT_UNSUPPORTED) rather than silently dropped.
Authorization
ApiKeyAuth API key authentication. Use a sk_* (FULL) or pk_* (SENDING_ONLY) key as the bearer token. Public keys (pk_*) are restricted to the email-send endpoints and the self-serve list subscribe/unsubscribe pair; every other endpoint — event tracking included — answers 403 for them. In scope terms (used by /api/v1/* operations): FULL keys hold every scope; SENDING_ONLY keys hold only emails:send.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
A SendGrid v3 mail/send body.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/compat/sendgrid/v3/mail/send" \ -H "Content-Type: application/json" \ -d '{ "personalizations": [ { "to": [ { "email": "string" } ] } ], "from": { "email": "string" }, "content": [ { "type": "string", "value": "string" } ] }'{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}{
"errors": [
{
"message": "string",
"field": null,
"help": null
}
]
}