Minimal batch
Response shape
Batch always returns HTTP 200 — even when some rows fail. The response tells you exactly which succeeded and which didn’t:success is a convenience boolean — true only when every row succeeded. Your code should branch on failed > 0 to handle partial success gracefully.Per-row idempotency
Each message can carry its ownidempotency_key, scoped per row:
Batch with templates
Use a shared template at the batch level, override variables per row:Scheduled batch
Schedule every message in the batch for the same time:Limits
If you need more than 1000 in one go, chunk into multiple calls with a small jitter between them:
1/s against the rate limiter.