Live Direct Marketing · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for Live Direct Marketing Online Campaigns API

42 actions 42 updates phrasing extends openapi/live-direct-marketing-online-campaigns-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Live Direct Marketing's API. It is a proposal applied on top of the contract, not a document Live Direct Marketing publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 42 · first 16 shown; the file carries all of them

$.info
$.paths['/api/campaigns/{id}/test-task'].post
$.paths['/api/campaigns/{id}/test-task/{taskId}'].get
$.paths['/api/campaigns/conveyor-health'].get
$.paths['/api/campaigns'].get
$.paths['/api/campaigns'].post
$.paths['/api/campaigns/backfill-historic-unsubscribes'].post
$.paths['/api/campaigns/overview'].get
$.paths['/api/campaigns/{id}'].get
$.paths['/api/campaigns/{id}'].delete
$.paths['/api/campaigns/{id}'].patch
$.paths['/api/campaigns/{id}/geo-risk'].get
$.paths['/api/campaigns/{id}/metrics'].get
$.paths['/api/campaigns/{id}/send-series'].get
$.paths['/api/campaigns/{id}/send-readiness'].get
$.paths['/api/campaigns/{id}/operational-status'].get

OpenAPI Overlay

Raw ↑
# 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'