Questions · Updated 2026-09-28

How many recipients can one email have?

One email on POST /emails has a fixed maximum of recipients in its to list, and the same maximum each in cc and bcc; a longer list is refused with invalid_parameter and a message that names the limit. Many separate emails go through POST /emails/batch, and a list of people goes through contacts, segments and POST /broadcasts.

One email can have up to 50 recipients in its to list on POST /emails, and up to 50 more in each of cc and bcc. Each field takes one address or a list. A longer list is refused with invalid_parameter, and the message names the list, the count it had and the limit: "to has … addresses, over the 50 limit." The same sentence, with cc, bcc or reply_to in place of to, covers the other lists. An email is not a mailing list, so a list of people goes through POST /broadcasts instead.

The lists

to is required and must hold at least one address; an empty list is refused with "to must contain at least one address." cc, bcc and reply_to are optional. Every one of these refusals is invalid_parameter with retryable false, so shorten or repair the list and send again. POST /emails/preflight takes the same body and returns the same code, message and fix without sending, which is the way to check a generated list before it costs anything. How each of those fields is set is on How do I set reply-to, cc and bcc on an email?

Before a domain is verified, the onboarding sender is narrower. The POST /emails summary says that path allows no cc, bcc, attachments, tracking or extra headers, and the refusal is onboarding_shape_refused, whose catalogue message is "The onboarding sender does not accept cc, bcc, attachments, tracking, or extra headers."

Many emails, not many recipients

When each person should get their own message, do not fill to; call POST /emails/batch. It takes a JSON array of send bodies, up to 500 of them, and each item has its own to list under the same per-list limit. The operation summary says "Each item succeeds or fails on its own — read data[i].status." One Idempotency-Key covers the whole array. The details are on How do I send many emails in one request?

curl -sS -X POST https://api.agentisend.com/emails/batch \
  -H "Authorization: Bearer $AGENTISEND_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
201
{
  "data": []
}
Response

Lists of people

POST /emails/lint scores a message without sending it and returns every finding with a fix. Its rule many_recipients_bcc says "More than 20 direct recipients reads as a blast to filters." and its fix is "Use segments and broadcasts for lists, or BCC carefully." Its rule no_unsubscribe_bulk fires on a list with no one-click unsubscribe, and its fix is "Send via POST /broadcasts, which adds RFC 8058 headers automatically."

That path is three calls. POST /contacts creates or updates a contact by email. POST /segments creates a segment; its summary is "Create a dynamic segment. Rules AND together over properties and status." POST /broadcasts drafts one message to that segment; its summary is "Draft a broadcast to a segment. Content comes from a template version or an inline body." A contact whose status is not active is skipped, and the Broadcasts guide says the detail page lists each address as sent, skipped with the reason, or bounced.

None of these is a route for addresses that never asked for mail. The Audience guide defines a contact as an address you already have a reason to write to, and there is no field on any endpoint here for a list of strangers.

Next