Return full draft subject+body for every lead in the batch.
Tenant-scope enforced via service.get_batch_drafts which calls
_load_campaign_owned(campaign_id, user_id) before any row read.
A user who passes another user’s batch_id gets a 404 because the
campaign_id is ownership-checked first — the batch filter is only
applied WITHIN an authorized campaign scope.
Intended usage from the UI: fetched once when the batch reaches
terminal-all (overall pending+running == 0), and on explicit “refresh
drafts” actions. NOT called on the 2s poll loop — the status endpoint
returns has_draft + subject_preview for that surface.
Documentation Index
Fetch the complete documentation index at: https://docs.bavlio.com/llms.txt
Use this file to discover all available pages before exploring further.
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Batch ID produced by POST /playground/generate.
Successful Response
Response model for GET /campaigns/:id/playground/drafts?batch_id=....
One-shot fetch — frontend calls this when the batch reaches terminal-all OR on explicit "refresh drafts" user action. Response size can legitimately be large (50 leads × 50KB body = 2.5MB) because it is user-initiated, not a polling endpoint.