Reach for batch when…
Latency doesn't matter. The job is > 100 calls. You can wait minutes-to-hours for results. You care about cost.
Some workloads don't need answers in real time — overnight backfills, classification of months of records, summary generation across an archive. The Batch API lets you submit a list of message-create requests, walk away, and pick them up when the batch finishes. Cost is about 50% of synchronous calls.
Latency doesn't matter. The job is > 100 calls. You can wait minutes-to-hours for results. You care about cost.
The user is waiting. Total volume is tiny. You need to chain results together (one call's output feeds the next) — that's a synchronous loop.
custom_id you'll use to match results back.batch_id.ended.custom_id.custom_ids so you can rejoin to source records.