## Run a batch transactional pipeline
1. Chunk your send queue into groups of at most 100 emails per batch request. That is the hard limit; the 101st mail needs a second request. Docs: https://resend.com/docs/dashboard/emails/batch-sending
2. Give each email in the batch its own recipients, subject, and content. Batch is for unique transactional mail like receipts and notifications, not for one message to many people; for one message to many, use broadcasts.
3. Do not attach files on the batch endpoint; attachments are not supported there yet. If a receipt needs a PDF, send it as an individual email or link to a hosted file instead.
4. Map the response ids by index: entry 0 in the returned data array is the email id for entry 0 of your payload. Store that mapping; it is how you reconcile deliveries and webhook events back to your orders.
5. Validate every email before adding it to the batch. One invalid email fails the entire request, so a single bad address can block 99 good receipts. Pre-validate addresses and required fields.
6. Remember each email in the batch is processed independently once accepted; there is no shared template rendering. Render personalization per email on your side before batching.
7. Key the whole batch with one idempotency key, for example `receipts/batch_2026_09_26_001`. A retried batch call returns the original ids instead of resending 100 receipts.
8. Monitor per-email webhook events after the batch. A batch that returns ids can still contain individual bounces; your bounce handler processes those the same as single sends.