Remote MCP server for Lightmeter outbound campaign workspaces
Lightmeter MCP lets AI agents interact with your Lightmeter account and outbound campaign workspaces using your regular Lightmeter login. All actions are tracked (labelled 'MCP') and visible in the Activity Log of your account.
Get setup by searching for the 'Lightmeter' app in ChatGPT or Codex, or pointing your AI agent at this documentation page, which contains all the info required for the agent to gain access.
Each MCP POST request is limited to 64 MiB, including any batch envelope. Send Revenue reads in a separate request from other tools; mixed batches are rejected before any tool runs.
OAuth sign-in with your Lightmeter account. You do not need to copy or store an API key. Grant read for discovery and read-only tools; grant both read and write for tools that change data or send messages. Workspace role checks still apply.
MCP can access all workspaces that your Lightmeter login supports.
| Field | Value |
|---|---|
| Display name | Lightmeter |
| Server URL | https://mcp.lightmeter.io/mcp |
| Authentication | OAuth sign-in with your Lightmeter account |
| OAuth issuer | https://auth.lightmeter.io/oauth/2.1 (discovered automatically by MCP clients) |
Native agreement tools use a user-bound access_id. Open the linking page returned by onboarding_native_agreement_get, sign in with the same account as your assistant, and connect the invitation privately. Email codes stay on that page. Linked access retains the invitation's original or representative scope and can be disconnected there. Checkout and payment confirmation keep their existing original-contact restrictions. The public invitation API remains available with its existing browser capability contract.
Workspace credential actions use the same browser-completion workflow in every MCP client. A result with status: user_action_required means the requested change is still pending: open the returned authenticated settings page, complete the action there, then use metadata readers to inspect the saved configuration. Confirm secret rotation or private setup-link creation in the browser. These eight tools accept workspace_id only, plus provider for CRM; legacy payload and resource arguments are rejected. They retain the write OAuth scope and the existing workspace permission requirements even though the handoff call itself makes no change. Never paste API keys, CRM credentials or private setup links into a conversation. The public API and browser retain their existing credential contracts.
Connected clients can use these tools after you authorize access.
Binding agreement acceptance, Checkout creation/recovery and payment reconciliation are available through the existing website and API, not MCP. This restriction applies to the shared MCP catalog for every client. MCP retains agreement and payment status reads, exact document access and existing paid-service operations; it does not return a payment handoff link.
| Tool | Purpose |
|---|---|
workspaces_list |
List workspaces available to the signed-in account. |
workspace_settings_general_get | Read the workspace's customer-visible general settings. See the public API contract. |
workspace_reply_forwarding_recipient_add | Add one forwarding address using payload.email, preserving existing recipients. The limit is 20 additional workspace-wide addresses; existing workspace defaults and mailbox-specific destinations do not count. Supply a fresh operation_id UUID for the test email. |
workspace_reply_forwarding_recipient_remove | Remove only payload.email from workspace forwarding. |
workspace_forwarding_destination_update | Update and verify the reply-forwarding destination. Requires a fresh operation_id UUID and is limited to five verification emails per workspace per hour. |
workspace_reply_forwarding_mode_update | Choose off, all replies, or positive replies for reply forwarding. |
workspace_campaign_url_tracking_update | Enable or disable campaign click tracking for new campaigns or for new and existing campaigns. |
workspace_campaign_url_tracking_check | Request a deduplicated background sending-domain readiness check without changing tracking policy. |
workspace_walkin_tracking_update | Update walk-in tracking, UTM-source capture, or the workspace default destination with an enabled, enable_utm_source, and/or default_redirect_url payload. Default destination changes apply only to domains following the workspace default; custom destinations stay unchanged. |
workspace_identity_generation_update | Replace the market, profile weights, and given-name style used for generated mailbox identities. |
workspace_domain_generation_update | Replace the industry keywords used for generated sending-domain suggestions. |
workspace_identity_samples_generate | Generate six non-persistent identity samples for proposed identity settings. The payloads for these settings tools match the public settings API. |
workspace_infrastructure_domain_walkin_get | Read an owned domain's destination, participation, UTM label, recent reachability and update capability using domain_uuid. |
workspace_infrastructure_domain_walkin_update | With a write grant and manager role, update the domain using a partial payload with redirect_url, enabled and/or utm_campaign. Domain participation affects configured tags and tracking eligibility; issued personalized destinations are unchanged. |
workspace_infrastructure_domains_walkin_update | With a write grant and manager role, atomically set enabled for 1–200 owned active domain_uuids. These are direct tool arguments, alongside workspace_id. Duplicate UUIDs are applied once; any invalid domain or failed commit rejects the whole request. Other domain settings are preserved. |
workspace_walkin_report_get | Read observed, estimated, automated, unknown and non-navigation request counts with the public report filters. Optional include_retired=true includes only this workspace's captured history. There is no recipient identity or verified-human verdict. Results exceeding 128 KiB return an explicit error; narrow the dates/domain or use the API. |
workspace_activity_events_list | Read paged activity events, up to 100 per call and 20 values per filter list. |
workspace_billing_overview_get | Read customer-visible balance, invoice amounts/status/documents and billing settings. Payment links are omitted; this tool does not make a charge. |
workspace_webhooks_list | List webhook configurations without signing secrets. |
workspace_webhook_create | Return the authenticated workspace Webhooks page to create a webhook and receive its signing secret privately. Reports user_action_required; the MCP call does not create the webhook. |
workspace_webhook_delete | Delete one workspace-owned webhook configuration. |
workspace_webhook_signing_secret_rotate | Return the authenticated workspace Webhooks page to rotate a signing secret and receive it privately. Reports user_action_required; the existing secret stays active until browser completion. |
workspace_webhook_test_send | Send sample events to a saved configuration and record delivery history. Requires webhook_id and a fresh operation_id. |
workspace_webhook_preview_test_send | Send sample events to an unsaved public HTTPS destination without saving a configuration or delivery row. Private destinations and redirects are blocked. Test tools share the public API's 20-calls-per-workspace-per-hour and 24-hour replay limits. Inspect delivery history or the receiver after an uncertain result before using another ID. |
workspace_webhook_deliveries_list | Read paged webhook delivery history, up to 100 per call. |
workspace_team_members_list | Read the workspace team and visible role capabilities. |
workspace_team_member_create | Return the authenticated workspace Team page to add a member and share their setup link privately. Reports user_action_required; the MCP call does not add the member. |
workspace_team_member_role_update | As Admin or Owner, replace an existing member's role. |
workspace_team_member_access_remove | As Admin or Owner, remove an existing member's workspace access. |
workspace_team_member_setup_link_create | As Admin or Owner, open the authenticated workspace Team page to create and share a setup link privately. Reports user_action_required; no setup capability is returned through MCP. |
workspace_webhook_delivery_get | Read one workspace-owned delivery and its attempts. |
workspace_api_keys_list | Read API-key metadata when the signed-in member has key-management access; no token values are returned. |
workspace_api_key_create | As Admin or Owner, open the authenticated workspace API settings page to create and receive a key privately. Reports user_action_required; no key is created until browser completion. |
workspace_api_key_update | As Admin or Owner, update a workspace key's name or expiration. |
workspace_api_key_delete | As Admin or Owner, permanently delete a workspace key. |
workspace_agreements_list | Read customer-visible agreement metadata without changing legal state, including retained native acceptances. See the agreement API and MCP contract. |
workspace_agreement_pdf_chunk_get | Read a 128 KiB or smaller Base64 chunk of a customer-owned issued or executed agreement PDF. Use agreement_id, document and zero-based chunk_index; assemble the chunks in order and verify the total byte length and SHA-256. Each read requires current workspace access. No reusable document link is issued, and repeating a chunk read is safe. |
onboarding_native_agreement_get | Omit access_id to list your linked agreements and get the private linking page. After connecting the original invitation in the browser, supply its access_id to review the frozen offer and exact acceptance statement. The ID works only for the signed-in user who linked it; workspace membership alone grants no agreement authority. |
onboarding_native_agreement_verification_code_send | Send an email verification code; supply agreement_id, email in payload. |
onboarding_native_agreement_email_verify | Check whether the accepting email has been verified in the private browser page. Supply access_id; enter the email code only in the browser. An unverified result requires browser completion. |
onboarding_native_agreement_acceptance_status | Resolve the original agreement_id, request_id without accepting. Definite non-acceptance fences that UUID; a deliberate retry uses a new UUID. |
onboarding_native_agreement_delegate | Email a separate acceptance-only link using agreement_id, name, email. The original contact retains payment/setup access. |
onboarding_native_agreement_copies_retry | Retry failed or unknown retained-PDF copies with an empty payload. An unknown send can duplicate a copy, never the contract. |
onboarding_native_agreement_pdf_chunk_get | Read retained issued/accepted PDF chunks with access_id, document, chunk_index. Assemble in order and verify total bytes and SHA-256. Current linked invitation authority is checked on every read. |
workspace_crm_hubspot_get | Read HubSpot sync state without refreshing provider metadata. |
workspace_crm_close_get | Read Close sync state without refreshing provider metadata. |
workspace_crm_discover | Open the selected CRM settings page to connect privately and inspect account metadata. Reports user_action_required; do not supply credentials to MCP. |
workspace_crm_create | Open the selected CRM settings page to connect HubSpot or Close using its browser flow. Reports user_action_required; do not supply credentials to MCP. |
workspace_crm_update | Replace saved CRM mapping settings. |
workspace_crm_validate | Validate the saved CRM credential and provider connection. |
workspace_crm_conversation_preview | Preview the CRM conversation setup test without sending it. |
workspace_crm_conversation_test_start | Start one durable conversation test with a new operation_id UUID and the preview values. |
workspace_crm_conversation_test_get | Read a durable conversation-test result by operation UUID. Check this before any retry after an uncertain result. |
workspace_crm_conversation_retry | Queue a retry for one CRM conversation UUID. |
workspace_crm_blocklist_preview | Preview blocklist synchronization against the selected CRM. |
workspace_crm_blocklist_approve | Approve the latest reviewed blocklist synchronization preview. |
workspace_crm_activate | Activate the configured CRM integration. |
workspace_crm_capability_activate | Activate one configured CRM capability. |
workspace_crm_capability_disable | Disable one configured CRM capability. |
workspace_crm_token_rotate | Open the selected CRM settings page to replace its credential privately. Reports user_action_required; the saved credential is not changed by the MCP call. |
workspace_crm_disable | Disable the CRM integration and its synchronization capabilities. |
workspace_crm_oauth_disconnect | Disconnect the current OAuth grant. Supply the current oauth_grant_revision; Close also requires configuration_revision. |
workspace_crm_revenue_setup_get | Read customer-visible Revenue attribution setup and provider metadata. |
workspace_crm_revenue_setup_update | With a write grant and Admin or Owner role, save Revenue attribution setup through the public customer contract. |
workspace_billing_platform_notice_get | Read the customer-visible billing platform notice and invoice document link. Payment links are omitted. |
campaigns_list |
List campaigns in a workspace, with filters for status, search, deletion state, and completion deadline state. |
campaigns_get |
Retrieve one campaign, its sequence details, canonical lifecycle projection, and identity-aware related actions. |
campaign_activation_readiness_get |
Evaluate the browser's current campaign Ready state and actionable blockers. |
campaign_sequences_list |
List saved campaign steps, variants, and current subject lines. |
campaign_sequence_reorderability_get |
Read the current step order and whether the campaign can reorder it. |
campaign_mailbox_allocation_policy_get |
Read the customer-visible overlap-allowed flag without staff-only routing details. |
campaign_link_tracking_update |
Set enabled for one workspace-owned campaign. Preserves the workspace creation default, immutable prepared messages, issued redirects and history. Journals the actor/source and before/after through the public campaign service. |
campaign_schedule_update |
Set an IANA timezone and weekly sending windows for a campaign in the selected workspace. |
campaign_duplicate |
Copy reusable campaign content and settings into a new unsent draft. By default, sending mailboxes and routing are not copied. Reviewed sharing accepts share_infrastructure=true, infrastructure_sharing_review_fingerprint and acknowledge_shared_infrastructure_risks=true; it does not launch sending. |
campaign_infrastructure_sharing_preview |
Read current infrastructure owners, eligible mailboxes, review fingerprint, and shared reputation/capacity warnings for a workspace campaign. Creation reviews the source; assignment reviews the destination. Available to all workspace users. |
campaign_leads_move_preview, campaign_leads_move |
Review eligibility, then move selected campaign leads into an existing, new cloned, or new blank campaign. A move removes source participation. New destinations can deliberately share eligible source infrastructure with the current fingerprint and explicit risk acknowledgement. Existing destinations retain their infrastructure. |
campaign_follow_up_preview, campaign_follow_up_create |
Review eligibility, then create a follow-up draft while retaining the leads in the source. Infrastructure sharing is optional, starts off, and requires the current sharing fingerprint and risk acknowledgement. |
campaign_mailboxes_assign |
Set the complete active mailbox assignment list for a campaign. Retain every existing mailbox that should stay assigned; an empty list removes all assignments subject to continuity checks. Using infrastructure assigned to other campaigns requires allow_shared_infrastructure=true, the current sharing fingerprint, and explicit risk acknowledgement. This does not change mailbox sending limits or launch sending. |
campaign_sending_pools_get, campaign_sending_pool_mailboxes_list, campaign_sending_pool_mailboxes_add |
Inspect current sending pools, assigned mailboxes and mailbox candidates, then add reviewed mailbox choices to the named boxhost target's sending pool with its current expected_revision. Occupied infrastructure requires explicit sharing consent and review. Existing clients can still call campaign_boxhost_routing_get as a compatibility alias for campaign_sending_pools_get; the alias is omitted from tool discovery. See the public API contract. |
campaign_delete |
Soft-delete an ended or draft campaign with confirm: true; stop an active campaign first. |
campaign_restore |
Restore a deleted campaign after current name and domain ownership checks. |
campaign_test_email_send |
Send to 1–50 specified test addresses from an active physical mailbox assigned to this campaign and workspace, with at most 100 total messages per request. Requires confirm_send: true and makes real outbound sends; variant_label requires step_number. Supports the browser's Creative snapshot choices. Versioned body/subject selections send the current draft before Ready without approving it. Optional preview_rendering replays preview RANDOM choices; variables.email and sender names preserve preview personalization. Stale versions are refused before mail. Omitted additive context retains existing behavior. |
campaign_lifecycle_get |
Retrieve canonical status, pause reason, identity-aware available actions, sendability and readiness blockers, and any pending lifecycle operation. |
campaign_pause |
Pause an active campaign using a client-generated operation UUID. |
campaign_resume |
Resume a paused campaign after full readiness checks. Available to authenticated workspace users. |
campaign_end |
Deliberately stop an active or paused campaign, then poll lifecycle state until ending becomes ended. |
campaign_fast_forward |
Send at most the next queued message to each eligible lead, then complete an eligible campaign. Available while sending is enabled and at least 95% complete. |
campaign_reopen |
Reopen an ended campaign or reactivate a completed campaign into paused review without changing lead states, mailbox assignments, history, replies, or results. This never resumes sending. |
campaign_paused_lead_recovery_preview |
Preview the complete all-or-nothing recovery plan for paused leads on a Sending (lifecycle status active) or Paused campaign. Sending recovery is limited to the current mailbox-change obligation. For leads that already received campaign emails, the response's continuity_requirements reports each previous mailbox, affected leads, remaining campaign emails, required recipient mailbox-host sending pools, eligible replacement mailboxes, and exact ineligibility reasons. |
campaign_paused_lead_recovery_apply |
Apply an unchanged reviewed recovery plan atomically while preserving the campaign's Sending (lifecycle status active) or Paused status. Resume is a separate command. |
campaign_paused_lead_recovery_defer |
Explicitly defer the current mailbox-change recovery obligation with a required reason and the exact obligation ID and revision from lifecycle state or preview. The campaign's status is preserved; Resume is a separate command. |
campaign_email_preview | Use the same campaign email preview contract as the public API. Render current draft templates, or preserve approved templates for Ready display. Tracking-on returns already-working anonymous links without approving Creative, sending mail or collecting engagement. Repeated identical destinations reuse links; unavailable domain tracking returns an actionable error. Regenerated RANDOM choices return a non-authorizing render_seed for the optional current-draft test rendering context. Text-only previews require no redirect host. |
campaign_creative_get |
Retrieve target-labelled Default Creative, every sparse adaptation document including inactive history, step settings, and the server-owned adaptations_activated capability. It is not a request flag or response filter; non-Default writes require it to be exactly true. |
workspace_creative_quality_assess |
Assess submitted subject and body text with the same read-only advisory checks as the Creative editor and public API. The response includes six metrics, guidance, and matched-text findings with UTF-16 offsets. Use an empty subject for threaded steps. RANDOM options use expected word counts and worst-alternative spam-trigger scoring. Each field is limited to 64 KiB, nesting to 32 levels, total RANDOM alternatives to 1024, and the result to 256 findings; excessive input is rejected rather than truncated. This does not save, approve, or send Creative. |
campaign_creative_update |
Write Default Creative and optionally update Default-owned step settings. When adaptations_activated is exactly true, the tool can also Adapt sparse fields for Google, Microsoft, and SEGs or reset an adaptation to inherit Default. Existing fields require overwrite_existing=true. |
campaign_creative_approve |
Approve Default Creative as an immutable snapshot and mark it Ready for future sends. When the server-owned adaptations_activated capability is exactly true, the snapshot also includes all active sparse adaptations; inactive history remains visible through Get. |
campaign_creative_generation_capability_get, campaign_creative_generate, campaign_creative_generated_draft_apply |
Read revision and quota, generate or regenerate a transient draft from text or PDF, then explicitly apply it to the editable working copy. Approval and sending remain separate. |
campaign_creative_workspace_get, campaign_creative_checkpoint_create, campaign_creative_checkpoint_restore |
Read documents, comments, checkpoints, and revision; save a manual checkpoint or restore one document using the current revision. |
campaign_creative_snapshots_list, campaign_creative_snapshot_restore |
List retained full-workspace recovery snapshots and restore one with a revision check. |
campaign_creative_comment_add, campaign_creative_comment_reply, campaign_creative_comment_resolve, campaign_creative_comment_reopen, campaign_creative_comment_delete |
Add agent-attributed review comments, manage resolution, and soft-delete threads. |
campaign_subject_pause_set |
Enable or disable one current subject on the Ready Creative without editing or reapproving its shared body. At least one subject for the body remains enabled. |
campaign_analytics_lifetime_get |
Retrieve lifetime totals, rates, rate context, and drilldowns for one campaign, including click_tracking estimated unique leads, classified visit evidence and send coverage. The object matches the public analytics API. |
campaign_analytics_timeseries_get |
Retrieve date-grained campaign analytics by day, week, month, or total. |
campaign_analytics_sequence_get |
Retrieve date-grained performance by step, shared-body variant, and stable subject revision, including its source Creative document ID when available, current enabled or disabled state, and retired history with sends. |
campaign_visit_history_get |
Read retained campaign visit history in an explicit scope, including deleted campaigns. This read does not recreate leads or authorize sending. |
campaign_analytics_leads_list |
List lead-level campaign analytics with sorting and pagination. Optional click_evidence is tracked, estimated, automated, unknown, or non_navigation, using the same accepted-send cohort as the public API. |
campaign_lead_activity_list |
List chronological activity for one campaign lead. |
campaign_replies_list |
List qualified human reply excerpts and classifications for a campaign and date range. |
unibox_compose_leads_list |
Find existing workspace leads by name or email before composing a message. Only a stored lead can receive one. |
unibox_compose_sent_steps_list |
List campaign steps actually sent to a selected lead, including their email Message-IDs. The returned thread reference is for the signed-in Unibox; prepare compose context to obtain a canonical conversation UUID. |
unibox_lead_compose_context_prepare |
Create or find the selected lead's canonical conversation without sending email. Returns a conversation UUID and current latest Message-ID for attachments and stale-message checks. |
unibox_threads_list |
List Unibox threads with filters for answer status, campaign, mailbox, conversation classification, reply primary category, reply subcategory, and latest message time (latest_message_after inclusive, latest_message_before exclusive, RFC 3339). |
unibox_thread_get |
Retrieve one Unibox thread with chronological messages, original To/Cc headers for group replies, sent attachment IDs and metadata for each message, current answer status, classification evidence, and reply context. Attachment IDs remain discoverable here after they leave the recent list. |
unibox_observed_message_content_get |
Read one accepted CRM message's provider plain text and sanitized HTML with OAuth read. First use unibox_thread_get, then pass the accessible workspace_id, thread_id, and the message's exact observed_event_id, observation_id and positive observation_revision. Integration thread bodies are empty and subject placeholders are not returned as body excerpts. Returns the content object under content, up to 1 MiB combined, with Cache-Control: no-store. Existing tenant, Unibox access, account, credential and accepted-source checks apply. A changed message returns unibox_observed_message_changed; reload thread detail. Missing accepted messages return unibox_observed_message_not_found; provider failures return generic service_unavailable. This read performs bounded provider I/O outside a database transaction and does not change reply admission or retain bodies. See the public API content contract. |
unibox_reply_attachment_stage |
Stage a supported file up to 1 MiB through base64 for an accessible thread. The draft is owned by the MCP user, expires after 24 hours, and does not send mail. |
unibox_reply_attachment_recent_list |
List up to five confirmed recent workspace attachments available for reuse after checking access to the requested thread. |
unibox_reply_attachment_reuse |
Copy a confirmed recent attachment into an owned, thread-bound draft without sending mail. |
unibox_reply_attachment_delete |
Remove an owned unsent draft. Sent attachments remain available in the thread. |
unibox_reply_attachment_read |
Read a sent attachment as 32 KiB base64 chunks, carrying its content hash on continuation. |
unibox_thread_reply_personalize |
Preview text and HTML template values, missing variables, and UI-compatible annotations for an accessible Unibox thread without sending email. |
unibox_thread_classification_impact_get |
Preview the current credit effect of changing a thread's primary reply category. This read-only tool does not submit a correction or change credits. |
unibox_thread_reply_send |
Send a validated plaintext reply in an existing canonical conversation with optional staged attachment_ids, stale-message checks, idempotency, attachment budgets, and rate-limit feedback. Set stop_campaign_steps: true to request a stop after sending; the selected Lead must be the sole To recipient, with optional CC and BCC. Omission continues the campaign. Inspect stop_campaign_steps_applied: false means the email was sent but the stop could not be applied. Idempotent replay preserves this result. |
unibox_lead_message_send |
Send to an existing lead who has received a campaign step, including leads who have never replied. Set reply_parent_message_id for a reply to the selected step, or new_message, context_message_id, and subject for a separate conversation. Use prepared compose context for the latest Message-ID and attachment staging. The selected step determines the sender; omitted to uses the Lead's current stored email. Set stop_campaign_steps: true to request a stop after sending; the selected Lead must be the sole To recipient, with optional CC and BCC. Omission continues the campaign. Inspect stop_campaign_steps_applied: false means the email was sent but the stop could not be applied. Idempotent replay preserves this result. A step already handed to its mail provider may still complete. An unsubscribed Lead requires an explicit decision before setting acknowledge_unsubscribed: true; this sends one manual email without re-subscribing or restarting a campaign. Separate new emails are paced to one per Lead per 30 seconds. |
unibox_thread_lead_unsubscribe |
Unsubscribe the campaign lead from a Unibox thread, record activity, and blocklist its email. Workspace owner/admin or Lightmeter staff access is required. |
unibox_thread_lead_email_blocklist |
Blocklist the lead email represented by a Unibox thread. |
unibox_thread_lead_domain_blocklist |
Blocklist the lead email domain represented by a Unibox thread. |
unibox_thread_forward_send |
Send an unthreaded forward to explicit recipients using an active workspace sender. A committed idempotency claim prevents repeat delivery after an uncertain outcome. A confirmed first send attempts a best-effort IMAP Sent-folder copy. |
workspace_reply_snippets_list |
List shared reply snippets for an accessible workspace, 50 per page by default and up to 100. Large pages are shortened to fit the MCP response budget; follow pagination.next_cursor until has_more is false. Snippet bodies above 8 KiB return identity fields with body_omitted: true; fetch their bodies in chunks. |
workspace_reply_snippets_content_get |
Read a snippet's stored text and HTML in bounded chunks. Continue with the returned UTF-8 byte offsets and pass the first content_hash as expected_content_hash; a changed snippet is rejected instead of mixing versions. |
workspace_reply_snippets_create |
Create a shared reply snippet with plain text, sanitized HTML, or both, up to 16 KiB combined before and after trimming and sanitization. This external-write limit does not change the existing UI editor. |
workspace_reply_snippets_update |
Replace one shared reply snippet by ID. |
workspace_reply_snippets_delete |
Delete one shared reply snippet by ID. |
campaign_lead_quality_diagnostics_get |
Retrieve lead-quality diagnostics for a campaign, including email verification counts and unavailable signals. The matching public API is GET /api/v1/campaigns/{campaign_id}/analytics/lead-quality. |
workspace_analytics_overview_get |
Retrieve workspace-level analytics for a date range. |
workspace_report_summary_get |
Retrieve the workspace summary report for a date range. |
workspace_report_campaigns_get |
Retrieve the workspace campaigns report. |
workspace_report_campaign_performance_get |
Retrieve campaign performance segmentation from the reports surface. |
workspace_report_engagement_performance_get |
Retrieve engagement performance trends for a date range. |
workspace_report_engagement_reply_breakdown_get |
Retrieve categorized reply breakdowns and examples for a date range. |
workspace_report_deliverability_get |
Retrieve deliverability, list quality, bounce, and box-host report data for a date range. |
workspace_report_volume_get |
Retrieve volume, planned capacity, and utilization report data for a date range. |
workspace_report_stocks_get |
Retrieve current lead stock and runway report data. |
campaign_send_timeline_get |
Retrieve the campaign send timeline projection shown in the campaign editor, including campaign-timezone completion instants when available.
The projection applies the sender's steady mailbox cadence and full eligible sending windows. A late launch has fewer planned sends today; unused elapsed-window allowance is not banked for catch-up. Urgent priority uses more suitable mailboxes without bypassing cadence or volume limits.
The same public API response includes optional pacing_policy_version and campaign-timezone pacing_ready_at on today_plan.mailboxes records. This is cadence readiness; other prerequisites can still delay sending.
At the response root and on each steps item, provider_acceptance_timing_basis identifies the provider_acceptance_at_projected_handoff_v1 calculation when present: simulated sends are assumed accepted by their mailbox's sending service at the projected handoff instant, and projected rolling-window expiry is calculated from that instant.
provider_acceptance_timing_dependent is true exactly when that object's projected milestones rely on the calculation, including a step that inherits the timing from an earlier step in the same lead chain.
provider_acceptance_timing_first_used_at is the earliest projected RFC3339 instant at which the calculation influences that object and is omitted when dependency is false.
Future capacity assumes prompt confirmation from each mailbox's sending service. Delays can move the projection later.
|
campaigns_submit |
Create a draft campaign for review. Use preview_only to inspect existing lead corrections before creating it, then apply with the returned review token and any required preserve/overwrite decision. Inspect row_outcomes for partial success. See campaign import review. The result uses campaign_status=draft; legacy status=created describes the completed create operation. |
workspace_infrastructure_domains_list, workspace_infrastructure_mailboxes_list, workspace_infrastructure_distribution_list |
Read the same workspace inventory, health, and distribution projections as the Infrastructure API. These lists accept limit (1 to 100) and the returned opaque page.next_cursor for tenant-scoped traversal. Keep filters unchanged; a changed projection returns a restart error. Use compact=true to omit large nested campaign/member arrays, then traverse the assignment tool below. Every infrastructure MCP structured result remains limited to 128 KiB. Mailbox maintenance credentials are excluded. |
workspace_infrastructure_campaign_assignments_list |
Traverse active Campaign mailbox assignments in pages of 1 to 100 (default 100, including cursor continuations). Each assignment includes campaign, mailbox, and domain identifiers plus domain_campaign_visible; use this with compact domain, mailbox, and distribution pages to recover their nested relationships. |
workspace_infrastructure_onboarding_build_status_get |
Read aggregate domain and mailbox onboarding build progress for an accessible workspace. exists=false means no current onboarding build. |
workspace_infrastructure_ramp_up_domains_list, workspace_infrastructure_ramp_up_domain_mailboxes_list, workspace_infrastructure_domain_mail_server_sent_counts_get, workspace_infrastructure_ramp_up_mailbox_get |
Read the customer-visible domain and mailbox health, ramp-up evidence, and mail-server sent-count projections documented in the Infrastructure API. The domain list and per-domain sent-count result accept bounded limit/cursor traversal. For a domain with too many nested mailboxes, list domain rows with include_mailboxes=false, then page its mailbox rows by domain_uuid; compact=true omits oversized campaign arrays, which assignment pages recover. |
workspace_infrastructure_ramp_up_automation_set |
Lightmeter staff only, with a write grant. Switch 1–500 active workspace mailboxes to Automatic (enabled=true) or Manual (enabled=false) ramp-up management. Select them by up to 500 mailbox_ids or by every active mailbox in up to 100 domain_uuids, not both; duplicates are applied once, and a selection resolving to more than 500 mailboxes changes nothing. Automatic adopts each mailbox's current daily limit without reducing it or resetting earned progress, and repeating it preserves state. Every limit must be within the mailbox's ramp-up floor and ceiling, otherwise nothing changes. Manual stops automatic limit management and keeps the current limit. The result gives mailbox_count, enabled_count and disabled_count; Activity records the change as MCP. |
workspace_infrastructure_capacity_get |
Read the compact workspace capacity summary from the Infrastructure API capacity read: daily capacity, subscribed amount, sent and unused per day, loaded-lead runway, ramp-up stages and, for a new workspace, warm_up. Set include_days=true for the daily series over horizon_days (21 or 42). Lightmeter staff also receive staff_recommendation. |
capacity_allocation_get |
Read capacity allocation from the Infrastructure API: capacity in campaigns, Available, Reserve and Recovering, each campaign's capacity, sends, leads and completion date, and Needs attention. Set include_days=true (optionally with history_from) for the daily series. Lightmeter staff also receive labelling_dry_run, the counts of what automatic labeling would change; nothing is written. Review and apply the changes with capacity_labelling_review_get and capacity_labelling_apply. |
capacity_plan_preview |
Read-only. Preview a capacity plan with the same body and result as POST /api/v1/infrastructure/capacity-plans/preview: whole Available domains (or reserve domains with use_reserve) for campaigns with overlap and provider routing, and returns from completed, ended or paused campaigns at either overlap setting. Keep the result's fingerprint to apply it. |
capacity_plan_apply |
Lightmeter staff only, with a write grant. Apply a previewed plan: pass the same plan and its fingerprint. Beam recomputes the plan and changes nothing if it differs. It assigns each picked domain's mailboxes to the campaign, adds each mailbox to every sending pool it is healthy for, returns domains through the mailbox change flow (removing them from every sending pool, and moving a finished campaign's returned mailboxes out of In Use), and records "Capacity plan applied" in Activity. There is no Undo; release an added domain like any other assignment. |
capacity_labelling_review_get |
Lightmeter staff only. Read-only. List what automatic labeling would change now for mailboxes not in a campaign, as in Infra › Allocation › Review and apply: Available to Recovering, Recovering to Available, and whole domains between Available and Backup to keep backups at the Subscribed target. Each suggestion has an id, the mailbox or domain, from_status and to_status (mailbox lifecycle codes; not_in_use is Available), per_day and reason. Optional change lists one kind of change, and limit (1 to 200, default 200) bounds the list; total_suggestions and truncated say whether more exist, and counts always cover every suggestion. |
capacity_labelling_apply |
Lightmeter staff only, with a write grant. Apply suggestions by suggestion_ids (1 to 2,000 ids from capacity_labelling_review_get). The suggestions are recomputed in one transaction, and only the selected ones that are still suggested change; the others come back in skipped with no_longer_suggested, and one whose mailbox status changed while applying comes back with mailbox_status_refused and a detail. A domain change applies to every mailbox of the domain or none. The result lists applied_ids, mailboxes_relabelled, skipped_count and skipped (at most 500 listed). Each mailbox's new label goes through the same lifecycle status change as a manual one and appears in Activity with the reason, for example "Labeling review: unhealthy for every target". Automatic labeling itself stays report-only. |
workspace_infrastructure_mailbox_send_log_list |
Page through campaign sends for one workspace mailbox with the filters and snapshot cursor contract in the Infrastructure API. Warming sends are staff-only. |
workspace_infrastructure_domains_export, workspace_infrastructure_mailboxes_export |
Return selected inventory as customer CSV. Traverse the bounded domain or mailbox list first, then export selected UUIDs in batches. Each call requires 1 to 500 selected UUIDs and accepts at most 256 KiB of encoded arguments; CSV generation stops at 128 KiB. Set compact=true if one row has too many campaign names: its campaigns cell is blank, while status is preserved and assignment pages supply the relationships. Mailbox login credentials are excluded. A single all-inventory export requires the public API and an organization API key. |
workspace_report_deliverability_detail_get |
Select overall, list-quality, bounce-breakdown, boxhost, boxhost-trends, or campaigns for the corresponding public report. The optional granularity argument applies only to boxhost-trends. |
workspace_report_speed_to_lead_get |
Read the speed-to-lead report for an accessible workspace. Omit both dates for the default seven-day window, or provide both for a custom range. |
workspace_report_revenue_availability_get, workspace_report_revenue_get |
Read conditional Revenue availability and report data after the same CRM account, grant, currency, and stage checks as the browser. |
workspace_blocklist_values_add |
Add up to 500 email addresses or domains to an active workspace blocklist. Requires workspace owner/admin access or Lightmeter staff access. Returns added, duplicate, and invalid outcomes per value. The serialized result is limited to 128 KiB; a result_too_large response rolls back the add, so submit smaller batches. See the public API contract. |
workspace_blocklist_values_list |
Search active email or domain blocks with source, sort, and page filters. Requires workspace owner/admin or Lightmeter staff access. See the public API contract. |
workspace_blocklist_values_remove |
Remove up to 500 blocks and receive per-row removed, not_found, duplicate, or invalid outcomes. Requires workspace owner/admin or Lightmeter staff access. See the public API contract. |
workspace_blocklist_import_preview |
Preview up to 2,000 CSV rows and 1 MiB of encoded arguments without writing. Uses the public blocklist import contract. |
workspace_blocklist_import_apply |
Add inactive values from up to 2,000 CSV rows in one transaction, returning duplicate and invalid counts. Uses the public blocklist import contract. |
workspace_blocklist_values_export |
Return a spreadsheet-safe CSV page of up to 200 active blocks in canonical order. Each page has a header and can be imported separately. To combine pages, retain the first header and append only data rows from later pages. Continue with next_cursor and unchanged filters while has_more is true. total is the first page's count and remains fixed across that cursor chain; concurrent blocklist changes can alter later rows. Reduce limit if the result exceeds 128 KiB. If one value alone exceeds the MCP bound, use the public API full CSV stream. |
workspace_audiences_list, workspace_audience_get, workspace_audience_leads_list |
List customer-owned static audiences and active members, with pages of at most 100. Audience and member lists may return fewer than requested to stay under the 128 KiB result cap; use next_offset while has_more is true. An unusually large stored description may be omitted with descriptions_omitted=true on a list page or description_truncated=true on get. A large member may be returned by ID only with fields_omitted; retrieve full details through the public API. |
workspace_audience_create, workspace_audience_delete |
Create an audience from 1–2,000 existing workspace lead IDs, or delete an audience while retaining its leads. Deletion requires confirm_name matching the current audience name. |
workspace_audience_csv_preview, workspace_audience_csv_apply |
Preview CSV mappings and the reviewed import plan, then create the audience with the unchanged CSV and required review_token. Explicitly choose decision=preserve or overwrite when existing lead details would change; preserve keeps populated values. Set row_offset, campaign_offset, and row_limit (1–50) to re-preview later detail pages. Review-required errors also include row and campaign totals and continuation flags. Apply returns final counts and one outcome page; do not repeat it for pagination. A single unusually large value may produce a compact preview or apply receipt with details_truncated=true; use the public API to inspect that CSV's row details. MCP arguments are limited to 1 MiB and 100,000 CSV data rows; results are limited to 128 KiB. |
campaign_audience_import_preview, campaign_audience_import_apply |
Preview dedupe, blocklist, and send eligibility, then import an audience into a customer-owned campaign. Preview and apply reject campaigns that no longer accept leads. To change its dedupe policy, pass the same lead_dedupe_scope in both preview and apply. |
workspace_leads_import_preview |
Preview creation, protected or replaced standard and custom attributes, invalid rows, and optional audience assignments for up to 2,000 structured leads in one transaction. |
workspace_leads_import_apply |
Apply the unchanged reviewed lead import with a client-generated operation UUID. Explicit confirmation is required when the selected policies replace existing values. |
workspace_leads_list, workspace_lead_reply_history_get |
Search active workspace leads in pages of up to 1,000 and inspect one lead's campaign and qualified reply history with pagination. Tag filters require UUIDs; reply cursors accept up to 4,096 bytes. The lead list includes total_count on the first page only. If a list exceeds the MCP result limit, compacted, compaction_level, and omitted_fields identify omitted attributes or an identifiers-only page; member IDs and pagination remain available. |
workspace_leads_csv_export |
Export up to 100 filtered active leads per CSV page, with at most 10 MiB of CSV content in an 80 MiB JSON result envelope that allows escaping and cursor overhead. Pass the opaque next_cursor unchanged with the same sort options until has_more=false. Restart from page one if an edited lead invalidates the cursor boundary. total_count appears on the first page only. |
workspace_leads_bulk_delete |
Soft-delete up to 1,000 selected workspace lead UUIDs after setting confirm_delete=true. |
workspace_leads_csv_preview, workspace_leads_csv_impact, workspace_leads_csv_apply |
Use the browser's CSV column preview, impact review, and one-transaction apply contract. CSV content may be 10 MiB; JSON-encoded tool arguments are capped at 64 MiB to allow escaping and mappings, while the generated multipart request is capped at 11 MiB. Apply requires unchanged expected_impact, an operation_id UUID for retry, and explicit overwrite confirmation when needed. |
workspace_lead_imports_list, workspace_lead_import_undo, workspace_leads_csv_template_get |
Inspect reversible import history, attempt a conflict-aware undo with confirm_undo=true, or retrieve the CSV template. |
workspace_qualification_prompt_templates_list, workspace_qualification_prompt_template_get, workspace_qualification_prompt_template_default_get |
Read the accessible workspace's saved qualification prompt templates or its default. A cross-workspace ID is unavailable. |
workspace_qualification_prompt_template_create, workspace_qualification_prompt_template_update |
Create or fully replace a prompt template using the Qualification API fields. Supply is_default explicitly when replacing. Each tool call accepts at most 128 KiB of arguments. |
workspace_qualification_prompt_template_default_set, workspace_qualification_prompt_template_delete |
Choose the workspace default or delete a nondefault template. Set another default before deleting the current one. |
workspace_qualification_cost_estimate |
Return the Beam qualification preview counts and estimated USD processing options for a saved template name and 1 to 250 companies. Read-only: no paid job is started. See the public API contract. |
workspace_qualification_job_start, workspace_qualification_jobs_list, workspace_qualification_job_progress, workspace_qualification_job_cancel |
Start a paid qualification job with a stable operation UUID and maximum estimated USD cost, list external jobs, poll progress, or request cancellation. A stale running job reports interrupted with its reservation retained for operator reconciliation; identical retries never replay provider work. The start tool mirrors the public qualification job contract and accepts at most 128 KiB of arguments. |
workspace_qualification_job_results, workspace_qualification_job_export |
Read stored results in pages of up to 100 rows, or assemble a CSV export from base64 chunks using next_offset. Only jobs started through API or MCP are available. |
campaign_leads_add |
Add leads to an existing campaign, with a read-only import review and per-row outcomes. Use preview_only, then the returned review_token and an explicit decision for changes shared with other unfinished campaigns. See campaign import review. |
campaign_leads_list, campaign_lead_removal_reasons_list |
Page and filter current campaign leads, then inspect active removal reasons. Each lead page is at most 100 members and each MCP result is at most 128 KiB. If a page is too large, custom attributes are omitted; for an oversized text field, the same page returns every campaign lead ID and status with fields_omitted. Continue with the original page and page size. |
campaign_leads_remove_preview, campaign_leads_remove, campaign_lead_remove |
Preview a selected or filtered removal without changing data, then remove with an active reason code, any required reason text, and confirm_removal=true. A preview does not reserve the selection. Single and bulk removal affect campaign membership and history and cannot be undone by these tools. Large filtered removals return removed_count and removed_lead_ids_omitted=true when the ID list exceeds the MCP result limit. |
campaign_lead_personalization_update, campaign_leads_top_up_csv |
Edit allowed lead identity and custom attributes, or preview and apply a CSV top-up with a matching review token and explicit preserve/overwrite decision when shared values change. Successful personalization edits journal the MCP actor and changed field categories without copying values. CSV tool arguments are limited to 1 MiB and results to 128 KiB. Page large previews with review_offset and review_limit; the response reports the next offset and total count. A large successful apply returns summary counts with omission markers instead of per-row details. Use the public API for full large-CSV outcomes. |
The detailed deliverability, speed-to-lead, and Revenue MCP report tools return a complete structured result capped at 128 KiB, including the summary and workspace metadata. An oversized result returns an error; the public report API provides the full response for organization API-key clients. OAuth-only MCP clients cannot continue a rejected unpaged report. Date filters can reduce some detailed views and the speed-to-lead report; the detailed campaigns view remains unpaged.
Creative MCP tools follow the same contract as the Campaigns API Creative endpoints. Use MCP when you want OAuth sign-in through a connected client; use the public API directly when you want API-key access.
Call workspace_blocklist_values_add with workspace_id, type (email or domain), and 1–500 values. MCP uses your signed-in role; workspace owners and admins can add blocks, and Lightmeter staff can manage workspaces they can access. Each call is limited to 256 KiB of arguments. Use separate calls for email addresses and domains.
The result reports each input position and its canonical value. A repeat call returns duplicate for an active block. Invalid values are reported individually while valid values are added. This blocks future sends across the workspace; it does not change lead subscription status or reopen leads previously skipped by a campaign. The same operation is available to API-key clients at POST /api/v1/blocklists/values.
Use workspace_blocklist_values_list for readback and workspace_blocklist_values_remove to reverse a block. The list returns at most 200 values per page. Removal accepts 1–500 values and is limited to 256 KiB of arguments; a repeated removal reports not_found. Both tools use the same workspace role rule as add, and API-key clients have matching public API operations.
For CSV, call workspace_blocklist_import_preview and then workspace_blocklist_import_apply with the same workspace_id, type, and csv text. Each tool accepts at most 2,000 rows and 1 MiB of arguments. Preview is read-only; apply adds inactive blocks in one transaction. Use workspace_blocklist_values_export with limit and each returned next_cursor to assemble a bounded CSV export. Keep the original filters for every page. Each page includes a header and can be imported separately; to combine pages, retain the first header and append only data rows from later pages. If a result exceeds 128 KiB, retry that page with a smaller limit. If limit=1 still exceeds the bound, use the public API CSV stream for that workspace. Signed-in owner/admin access is required for all three.
Call unibox_thread_lead_unsubscribe, unibox_thread_lead_email_blocklist, or unibox_thread_lead_domain_blocklist with an active workspace_id and canonical thread_id UUID. Your signed-in role must be workspace owner or admin, or Lightmeter staff. Each tool accepts up to 4 KiB of arguments.
Unsubscribe updates the campaign lead, records unsubscribe activity, and blocks its email. Blocklist actions only block the email or domain. Repeated calls do not duplicate an active block. API-key clients can use the same Unibox public API contract.
Use lifecycle tools instead of attempting to write raw campaign status values. campaigns_list accepts either exact status or one of the broad lifecycle_scope values below, never both. Use status=active for the exact sending-enabled subset. Omit both to list all nondeleted campaigns.
| Lifecycle scope | Included statuses |
|---|---|
unfinished |
draft, submitted, active, paused, and ending |
finished |
completed and ended |
all |
Every supported nondeleted lifecycle state, including legacy archived campaigns |
campaign_lifecycle_get and use its identity-aware available_actions rather than assuming an action from a status label.campaign_end, poll campaign_lifecycle_get until the campaign leaves ending. Match pending_operation.id to the command's operation UUID while shutdown is in progress. Ending and ended campaigns accept no future sends or lead additions; unfinished leads are held as paused for reviewed recovery.campaign_fast_forward only when it appears in available_actions. It is distinct from End: it may send at most one next queued message to each eligible lead, then completes the remaining leads and campaign, and cannot be undone.campaign_reopen to move ended or completed to paused with reason reopened_for_review. The command preserves campaign data and never resumes sending. Add new leads only after a completed campaign has been reactivated.continuity_requirements, choose an eligible replacement for the previous mailbox used on earlier campaign emails, then apply the unchanged plan with the returned review token. Sending campaigns (returned as lifecycle status active) continue sending other eligible leads; paused campaigns require a separate Resume command. Leads awaiting email verification wait individually and do not block Resume; unsendable leads remain excluded. A stale plan is rejected atomically.campaign_paused_lead_recovery_defer with the exact obligation ID and revision plus a nonblank reason. Deferral applies only to the affected paused leads; unrelated paused leads can still block Resume.Replacement mailbox diagnostics: A requirement's remaining_send_count counts one campaign email for each distinct future sequence step after each affected lead's current step that has at least one runtime-sendable variant. A threaded variant remains sendable even when marked paused; a non-threaded variant must be unpaused. Each sending pool's mailbox_count counts current campaign assignments before health and eligibility filtering; eligible_replacement_mailbox_count counts mailboxes that pass every health check and belong to every required pool. Ineligible mailboxes include exact ineligibility_reasons: mailbox_not_found, mailbox_inactive, mailbox_domain_inactive, mailbox_lifecycle_missing, mailbox_lifecycle_not_in_use, not_in_required_sender_pool, or not_assigned_to_campaign.
Sendable describes eligibility for future sends under the current lifecycle state. It does not promise that a provider will accept or deliver a message. Deliverable remains reserved for analyzed email-address classification and deliverability reporting.
The lead import tools mirror the Leads API. They create valid missing leads by default and preserve existing standard and custom attribute values by default. This makes enrichment additive unless you deliberately select overwrite, preview the exact replacements, and confirm them during apply.
Workspace lead management tools share the same workspace-scoped browser handlers for listing, reply history, CSV import, history, and undo. CSV MCP tools accept UTF-8 text in csv_content, up to 10 MiB and 10,000 rows. Review the impact before apply; CSV apply requires unchanged expected_impact and an operation_id UUID for safe retry. Campaign assignments in CSV are outside this workspace import path.
source_ref per row. Report every missing or repeated ref as a detailed client preflight failure, exclude those rows, and keep unrelated valid rows. Then split the remainder into stable chunks of at most 2,000 records.(source_ref, effective audience ref) pairs after per-lead overrides. If either complete-source limit is exceeded, do not preview or apply any chunk.workspace_leads_import_preview for every chunk before applying any chunk. The first preview using an audience ref returns its plan_token; include that same ref, definition, and token in every later preview that uses it.identity_refs and resolved lead_id into transitive components across the whole source. Stop without applying anything if a component spans chunks; repartition every row in that component into one chunk, then preview the complete source again. This catches indirect overlaps such as one row containing identity A, another A and X, and another X.review_token, every returned audience plan_token, and a new operation_id in workspace_leads_import_apply.You may use default_audience_refs for the common case and override them with per-lead audience_refs, so one operation can put different leads into different audiences. Include only the audience definitions used by each chunk; later chunks repeat the same definition and first preview's plan_token. An explicit empty per-lead audience_refs array opts that lead out. Membership is additive and does not remove existing memberships.
Omitting an attribute leaves it untouched. This version does not clear attributes with null or an empty string. Each MCP call accepts at most 2,000 rows and 10 MiB of encoded arguments, and its complete result is limited to 10 MiB. The stable arguments_too_large and result_too_large errors mean you must repartition the source into smaller deterministic chunks and preview every chunk again before any apply. The public API and MCP now share the 2,000-row atomic import limit. Larger sources still require separate reviewed transactions.
Call campaign_creative_get first. It always returns target-labelled Creative documents, including inactive adaptation history, and separately reports the server-owned adaptations_activated capability. That value is not a client request flag or response filter. Non-Default writes are enabled only when it is exactly true; when false, do not present an Adapt action or send adaptation_target or adaptation_active.
When adaptation capability is enabled, campaign_creative_update can save sparse adaptations for Google, Microsoft, and SEGs. Omitting adaptation_target makes only that submitted field Default; it does not conceal other adaptations from Get. A target-specific subject or body can be adapted independently; every missing target field inherits Default. Omitting adaptation_active preserves an existing adaptation's lifecycle state, while true explicitly reactivates it. An update does not approve content or change the Ready snapshot. campaign_creative_approve always approves Default and includes active adaptations only while the capability is enabled.
For AI-assisted drafting, call campaign_creative_generation_capability_get to read the current revision and quota, then campaign_creative_generate with a fresh operation UUID, audience, offer, and one text or base64 PDF source. Generation consumes included quota and returns a transient draft; it does not save or send. Use campaign_creative_generated_draft_apply with the returned draft and revision to replace the working copy, then approve separately when ready. The completed operation ID cannot replay the transient draft.
campaign_creative_workspace_get returns current documents, checkpoints, comment threads, and the workspace revision. campaign_creative_checkpoint_create saves manual document checkpoints; campaign_creative_checkpoint_restore restores one with the expected revision. campaign_creative_snapshots_list lists retained recovery snapshots; campaign_creative_snapshot_restore requires the expected current revision and creates a pre-restore snapshot. Use campaign_creative_comment_add, campaign_creative_comment_reply, campaign_creative_comment_resolve, campaign_creative_comment_reopen, and campaign_creative_comment_delete for agent-attributed review comments and thread cleanup. Browser cursor presence and real-time editing leases remain in the signed-in UI collaboration protocol.
adaptations_activated Is Trueadaptations_activated Is Truevariant_number starts at 1; the app may display that as Variant A.subject_number orders subjects within one body variant. Omit it for Subject 1; body documents always use 1. After an update, each subject set must be contiguous from 1 with no gaps. A complete batch may list those numbered subjects in any array order. Up to 26 subjects are accepted.field_type must be subject or body.adaptation_target only after campaign_creative_get returns adaptations_activated=true. It accepts google_workspace, microsoft_365, or seg; omit it for Default. There is no Other adaptation because Other, Unknown, and unmanaged routes use Default.adaptation_active=false is an idempotent, recoverable reset. It retains target history while the effective field inherits Default. Use true to explicitly reactivate changed content. Omitting the field creates a new adaptation as active but preserves an existing adaptation's lifecycle state. Content exactly equal to Default also collapses to inheritance without creating redundant target content.is_disabled plans whether it will be eligible when the working copy is approved and marked Ready. Omitting it preserves an existing subject's planned state and enables a new subject by default.is_threaded is true, the step replies to the previous step and subject text is cleared for that threaded step.overwrite_existing=true; first-time imports into empty fields do not.extension_behavior: append_only or append_and_reconcile.append_and_reconcile to reopen eligible completed leads on an Active, Paused, or Completed campaign. Repeating continuation preserves prior sends and sender affinity; replied and other terminal leads remain excluded.