# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for Live Direct Marketing Online Campaigns API version: 1.0.0 extends: openapi/live-direct-marketing-online-campaigns-api-openapi.yml actions: - target: $.info update: x-apievangelist-phrasing: method: generated generated: '2026-10-01' generator: build-phrasing.py label: Generated by API Evangelist operations: 41 - target: $.paths['/api/campaigns/{id}/test-task'].post update: x-apievangelist-phrasing: intent: Create a test send task for a campaign effect: write questions: - Can I send a test of a campaign to one intended recipient before launching it? - Is there a way to create a test-send task for a campaign with an idempotency key so retries don't duplicate it? instructions: - text: Create a test-send task for campaign {id} with idempotency key {key}. slots: id: path.id key: header.idempotency-key - text: Start a campaign test task on {id} addressed to intended recipient {recipient}, idempotency key {key}. slots: id: path.id recipient: requestBody.intendedRecipientId key: header.idempotency-key method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/test-task/{taskId}'].get update: x-apievangelist-phrasing: intent: Check a campaign test-send task effect: read questions: - What happened to the test send I queued for my campaign? - Can I look up a specific campaign test task by its task id? instructions: - text: Show test task {taskId} for campaign {id}. slots: taskId: path.taskId id: path.id - text: Check whether test-send task {taskId} on campaign {id} has finished. slots: taskId: path.taskId id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/conveyor-health'].get update: x-apievangelist-phrasing: intent: Check campaign conveyor health effect: read questions: - Which of my campaigns have due emails ready but aren't actually sending? - Is the campaign sending conveyor healthy for my tenant right now? instructions: - text: Show the campaign conveyor health report for my tenant. - text: List campaigns flagged as not sending despite having due READY emails. method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns'].get update: x-apievangelist-phrasing: intent: List campaigns effect: read questions: - How do I see all my email campaigns page by page? - Can I list only the campaigns with a given status, like paused ones? instructions: - text: List my campaigns with status {status}, page {page}, {limit} per page. slots: status: query.status page: query.page limit: query.limit - text: Show page {page} of my campaigns. slots: page: query.page method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns'].post update: x-apievangelist-phrasing: intent: Create an email campaign effect: write questions: - How do I set up a new outreach campaign? - Can I create a campaign where I render the emails myself instead of the platform's AI? - Which render modes can a new campaign use? instructions: - text: Create a new campaign named {name}. slots: name: requestBody.name - text: Create campaign {name} in {renderMode} render mode using brief {briefId}. slots: name: requestBody.name renderMode: requestBody.renderMode briefId: requestBody.briefId - text: Set up a campaign called {name} with creatives {creativeIds}. slots: name: requestBody.name creativeIds: requestBody.creativeIds method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/backfill-historic-unsubscribes'].post update: x-apievangelist-phrasing: intent: Backfill historic unsubscribes into campaigns effect: write questions: - Can I mark campaign recipients as unsubscribed if their address is already on the suppression list? - Is there a dry run to preview which recipients a historic unsubscribe backfill would change? instructions: - text: Run the historic unsubscribe backfill across campaigns with dry run set to {dryRun}. slots: dryRun: query.dryRun - text: Preview which campaign recipients would be marked unsubscribed from past suppressions. method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/overview'].get update: x-apievangelist-phrasing: intent: Get a campaigns overview for the dashboard effect: read questions: - What does the mailings widget summary look like for my campaigns? - Can I get a dashboard overview of campaigns limited to certain statuses? instructions: - text: Give me the campaigns dashboard overview for statuses {statuses}. slots: statuses: query.statuses - text: Show the mailings widget overview of my active campaigns. method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}'].get update: x-apievangelist-phrasing: intent: Get a campaign effect: read questions: - How do I pull up the full settings of one campaign? - Can I fetch a single campaign by its id? instructions: - text: Get campaign {id}. slots: id: path.id - text: Show the configuration of campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}'].delete update: x-apievangelist-phrasing: intent: Delete a campaign effect: destructive questions: - Can I permanently delete a campaign and its recipients? - Why can't I delete an active campaign without pausing it first? instructions: - text: Delete campaign {id}. slots: id: path.id - text: Remove campaign {id} along with all its recipients. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}'].patch update: x-apievangelist-phrasing: intent: Update a campaign's settings effect: write questions: - How do I change the creative pool or routing on an existing campaign? - Can I edit just part of a campaign's send window without resetting the rest? - Can I move a campaign into a campaign group after creating it? instructions: - text: Rename campaign {id} to {name}. slots: id: path.id name: requestBody.name - text: Update the send window on campaign {id} to {sendWindow}. slots: id: path.id sendWindow: requestBody.sendWindow - text: Move campaign {id} into group {groupId}. slots: id: path.id groupId: requestBody.groupId method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/geo-risk'].get update: x-apievangelist-phrasing: intent: Review a campaign's geo channel-policy risk effect: read questions: - Which countries in my campaign's audience carry channel-policy risk? - Can I see a geographic risk breakdown of a campaign's recipients before sending? instructions: - text: Show the geo risk breakdown for campaign {id}. slots: id: path.id - text: Report recipient geo channel-policy warnings on campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/metrics'].get update: x-apievangelist-phrasing: intent: Get campaign performance metrics effect: read questions: - How many emails in my campaign were sent, delivered, opened and bounced? - How is the delivered count estimated for a campaign? instructions: - text: Show metrics for campaign {id}. slots: id: path.id - text: Give me delivery and engagement numbers for campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/send-series'].get update: x-apievangelist-phrasing: intent: Chart a campaign's sending speed over time effect: read questions: - Can I see how many emails a campaign sent per day or per week? - What timezone are campaign send-speed buckets counted in? instructions: - text: Chart daily sends for campaign {id} from {from} to {to} in timezone {tz}, bucketed by {bucket}. slots: id: path.id from: query.from to: query.to tz: query.tz bucket: query.bucket - text: Show the weekly send series for campaign {id} between {from} and {to}. slots: id: path.id from: query.from to: query.to method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/send-readiness'].get update: x-apievangelist-phrasing: intent: Dry-run a campaign's send gates effect: read questions: - Why isn't my campaign sending — which send gate is blocking it? - Can I check every send gate on a campaign without actually sending anything? instructions: - text: Dry-run all send gates for campaign {id}. slots: id: path.id - text: Check whether campaign {id} is ready to send right now. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/operational-status'].get update: x-apievangelist-phrasing: intent: See what a campaign is doing right now effect: read questions: - What is happening with my campaign at this moment — running, waiting or stuck? - Can I see a campaign's lifecycle status separately from its operational state? instructions: - text: Show the operational status of campaign {id}. slots: id: path.id - text: Tell me what campaign {id} is doing right now, {limit} items at a time. slots: id: path.id limit: query.limit method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/task-history'].get update: x-apievangelist-phrasing: intent: Page through a campaign's delivery-task history effect: read questions: - Where can I see the durable delivery tasks a campaign has run? - Is there a paginated history of campaign delivery tasks? instructions: - text: List delivery-task history for campaign {id}. slots: id: path.id - text: Show the next page of delivery tasks for campaign {id} after cursor {cursor}. slots: id: path.id cursor: query.cursor method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/hard-report'].get update: x-apievangelist-phrasing: intent: Get a campaign quality snapshot effect: read questions: - Can I get a deterministic quality report on a campaign, including its auditor configuration? - What does the hard report show about a campaign's configured versus effective auditor? instructions: - text: Generate the hard quality report for campaign {id}. slots: id: path.id - text: Show the auditor configuration snapshot for campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/activity'].get update: x-apievangelist-phrasing: intent: Read a campaign's activity feed effect: read questions: - Can I see a chronological feed of everything that happened to a campaign's recipients? - Can I filter a campaign's event feed to one recipient or one stage? instructions: - text: Show the activity feed for campaign {id}. slots: id: path.id - text: Show campaign {id} events for recipient {recipientId} since {since}. slots: id: path.id recipientId: query.recipientId since: query.since - text: List {type} events in campaign {id}'s feed. slots: type: query.type id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients'].get update: x-apievangelist-phrasing: intent: List a campaign's recipients effect: read questions: - Which recipients in my campaign failed, and why? - Can I search a campaign's recipients by stage or failure reason? - How do I sort campaign recipients by when they were sent? instructions: - text: List recipients of campaign {id} in stage {stage}. slots: id: path.id stage: query.stage - text: Find recipients in campaign {id} matching {search}. slots: id: path.id search: query.search - text: Show campaign {id} recipients that failed with reason {failureReason}. slots: id: path.id failureReason: query.failureReason method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/move-stage'].post update: x-apievangelist-phrasing: intent: Move campaign recipients to a canvas stage effect: write questions: - Can I move selected recipients to a different canvas stage without sending to them? - Is it possible to shift a batch of campaign recipients between canvas stages by filter? instructions: - text: Move recipients {recipientIds} in campaign {id} to canvas stage {toStage}. slots: recipientIds: requestBody.recipientIds id: path.id toStage: requestBody.toStage - text: Shift campaign {id} recipients matching {filter} to stage {toStage}. slots: id: path.id filter: requestBody.filter toStage: requestBody.toStage method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/rerender'].post update: x-apievangelist-phrasing: intent: Re-render unsent campaign recipients effect: write questions: - Can I throw away generated emails for unsent recipients and render them again? - Does forcing a re-render give my recipients a new paid audit attempt? instructions: - text: Re-render unsent recipients in campaign {id}. slots: id: path.id - text: Reset recipients {recipientIds} in campaign {id} for a fresh render with force {force}. slots: recipientIds: requestBody.recipientIds id: path.id force: requestBody.force method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/repair-unsubscribe'].post update: x-apievangelist-phrasing: intent: Repair missing unsubscribe blocks in rendered emails effect: write questions: - Some rendered emails are missing the unsubscribe block — can I fix them without paying for a re-render? - Can I recover recipients that failed on a body hash mismatch? instructions: - text: Repair the unsubscribe block for rendered recipients in campaign {id}. slots: id: path.id - text: Fix unsubscribe blocks for campaign {id} recipients in stages {stages}. slots: id: path.id stages: requestBody.stages method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/retry-ai-failures'].post update: x-apievangelist-phrasing: intent: Retry AI rendering failures in a campaign effect: write questions: - Can I retry recipients whose emails failed AI generation using my current AI model? - Why did retrying AI failures reset zero recipients? instructions: - text: Retry the AI render failures in campaign {id}. slots: id: path.id - text: Send campaign {id}'s CREATIVE_FAILED recipients back through AI generation. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/reconcile-from-dialogs'].post update: x-apievangelist-phrasing: intent: Reconcile campaign recipients from dialogs effect: write questions: - Can I rebuild campaign recipient records from existing email dialogs as a one-time migration? - Is there a dry run before reconciling a campaign from its dialogs? instructions: - text: Reconcile campaign {id} from existing dialogs with dry run {dryRun} and link creatives {linkCreatives}. slots: id: path.id dryRun: query.dryRun linkCreatives: query.linkCreatives - text: Preview reconciling campaign {id} recipients from dialogs, dry run {dryRun}. slots: id: path.id dryRun: query.dryRun method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/pour'].post update: x-apievangelist-phrasing: intent: Add recipients to a campaign from a list effect: write questions: - How do I fill a campaign with recipients from one of my contact lists? - Can I pour a company list or all my contacts into a campaign? instructions: - text: Pour contact list {listId} into campaign {id}. slots: listId: requestBody.listId id: path.id - text: Pour company list {companyListId} into campaign {id}. slots: companyListId: requestBody.companyListId id: path.id - text: Add all my contacts to campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/push'].post update: x-apievangelist-phrasing: intent: Push contacts directly into a campaign effect: write questions: - Can a form webhook push new contacts straight into a running campaign? - Is there a way to add individual contact rows to a campaign without a list? instructions: - text: Push these contact rows {rows} into campaign {id}. slots: rows: requestBody.rows id: path.id - text: Add the submitted form contacts {rows} directly to campaign {id}. slots: rows: requestBody.rows id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/pour-from-leads'].post update: x-apievangelist-phrasing: intent: Add CRM leads to a campaign by filter effect: write questions: - Can I add leads from a CRM pipeline stage into a campaign? - Do leads with only bounced email channels get poured into a campaign? instructions: - text: Pour leads from pipeline {pipelineId}, stage {stageId} into campaign {id}. slots: pipelineId: requestBody.pipelineId stageId: requestBody.stageId id: path.id - text: Add up to {limit} leads with interest status {interestStatus} to campaign {id}. slots: limit: requestBody.limit interestStatus: requestBody.interestStatus id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/screen'].post update: x-apievangelist-phrasing: intent: Screen new campaign recipients against suppressions effect: write questions: - How are new campaign recipients checked against the suppression and stop lists? - What step comes between pouring recipients and preparing emails? instructions: - text: Screen the new recipients in campaign {id}. slots: id: path.id - text: Run suppression and stop-list screening on campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/content'].post update: x-apievangelist-phrasing: intent: Submit self-rendered email content effect: write questions: - If I write the emails myself, how do I submit the subject and body for each recipient? - How many self-rendered emails can I submit in one batch, and how large can the HTML be? instructions: - text: Submit these rendered emails {items} for campaign {id}. slots: items: requestBody.items id: path.id - text: Upload my own subject and HTML body per recipient {items} to campaign {id}. slots: items: requestBody.items id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/{rid}/manual'].patch update: x-apievangelist-phrasing: intent: Manually edit a campaign recipient's email effect: write questions: - Can an operator hand-edit one recipient's subject, body or scheduled time? - Why do API keys get a human_only error when editing a recipient by hand? instructions: - text: Manually edit recipient {rid} in campaign {id}. slots: rid: path.rid id: path.id - text: Change the scheduled time for recipient {rid} of campaign {id} by hand. slots: rid: path.rid id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/{recipientId}/attachment-link'].get update: x-apievangelist-phrasing: intent: Refresh a recipient's personal PDF link effect: read questions: - Can I get a fresh signed link to a recipient's personal PDF without regenerating it? - When does a recipient's PDF attachment link expire? instructions: - text: Refresh the PDF attachment link for recipient {recipientId} in campaign {id}. slots: recipientId: path.recipientId id: path.id - text: Get a new signed attachment link for recipient {recipientId} on campaign {id}. slots: recipientId: path.recipientId id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/preparations'].post update: x-apievangelist-phrasing: intent: Queue a background campaign preparation effect: write questions: - Can I prepare a campaign's emails as a background job instead of waiting synchronously? - Which preparation method is better for AI-generated emails with personal PDFs? instructions: - text: Queue a preparation run for campaign {id}. slots: id: path.id - text: Start a background preparation of up to {limit} recipients for campaign {id}. slots: limit: requestBody.limit id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/preparations/{generationId}'].get update: x-apievangelist-phrasing: intent: Check a campaign preparation job effect: read questions: - Has my queued campaign preparation finished yet? - Why did a background preparation operation fail? instructions: - text: Check preparation {generationId} for campaign {id}. slots: generationId: path.generationId id: path.id - text: Show the result of preparation job {generationId} on campaign {id}. slots: generationId: path.generationId id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/prepare'].post update: x-apievangelist-phrasing: intent: Prepare and audit a batch of recipients now effect: write questions: - Can I synchronously render and audit a batch of campaign recipients? - What does the limit on a campaign prepare call actually control? instructions: - text: Prepare and audit {limit} recipients in campaign {id} right now. slots: limit: query.limit id: path.id - text: Synchronously prepare a batch of {limit} emails for campaign {id}. slots: limit: query.limit id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/dispatch'].post update: x-apievangelist-phrasing: intent: Assign senders and schedule ready recipients effect: write questions: - How do I assign sender accounts and send times to recipients that are ready? - Can I override the schedule for specific recipients of a campaign? instructions: - text: Dispatch {limit} ready recipients in campaign {id}. slots: limit: query.limit id: path.id - text: Assign senders and schedule up to {limit} READY recipients of campaign {id}. slots: limit: query.limit id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/send'].post update: x-apievangelist-phrasing: intent: Send dispatched campaign emails effect: write questions: - How do I actually send the emails that have been dispatched? - Can I hand dispatched recipients to the mail outbox for a first test send? instructions: - text: Send the dispatched emails for campaign {id}. slots: id: path.id - text: Hand campaign {id}'s dispatched READY recipients to the outbox. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/sync-events'].post update: x-apievangelist-phrasing: intent: Sync opens, clicks and bounces into a campaign effect: write questions: - How do opens, clicks and bounces from email dialogs get back onto campaign recipients? - Does a hard bounce add the address to the global stop list? instructions: - text: Sync open, click and bounce events for campaign {id}. slots: id: path.id - text: Pull dialog engagement events back into campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/restore-infra-failed'].post update: x-apievangelist-phrasing: intent: Restore a paused campaign and recover AI failures effect: write questions: - Can I reset a tripped circuit breaker on a paused campaign? - Does restoring a paused campaign also retry its AI failures? instructions: - text: Restore campaign {id} by resetting its circuit breaker. slots: id: path.id - text: Dry-run restoring paused campaign {id}, dry run {dryRun}. slots: id: path.id dryRun: requestBody.dryRun method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/resume'].post update: x-apievangelist-phrasing: intent: Resume a paused campaign effect: write questions: - How do I resume sending on a campaign I paused? - Can I restart a paused campaign with a single call? instructions: - text: Resume campaign {id}. slots: id: path.id - text: Start sending again on paused campaign {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/pause'].post update: x-apievangelist-phrasing: intent: Pause an active campaign effect: write questions: - How do I stop an active campaign from sending? - Will a paused campaign resume on its own later? instructions: - text: Pause campaign {id}. slots: id: path.id - text: Pause campaign {id} with reason {reason}. slots: id: path.id reason: requestBody.reason method: generated generated: '2026-10-01' - target: $.paths['/api/campaigns/{id}/recipients/{rid}'].get update: x-apievangelist-phrasing: intent: Get a campaign recipient and its event log effect: read questions: - Can I see every send attempt and event for one campaign recipient? - What is the difference between a recipient's send attempts and retired sends? instructions: - text: Show recipient {rid} in campaign {id} with its event log. slots: rid: path.rid id: path.id - text: Get the send attempt history for recipient {rid} of campaign {id}. slots: rid: path.rid id: path.id method: generated generated: '2026-10-01'