Docs Home Beam MCP APIs

Lightmeter MCP

Remote MCP server for Lightmeter outbound campaign workspaces

How to Connect to MCP

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.

Server Endpoint

MCP
https://mcp.lightmeter.io/mcp

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.

Authentication

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.

Workspace Access

MCP can access all workspaces that your Lightmeter login supports.

Connection Details

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)

Available Tools

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_getRead the workspace's customer-visible general settings. See the public API contract.
workspace_reply_forwarding_recipient_addAdd 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_removeRemove only payload.email from workspace forwarding.
workspace_forwarding_destination_updateUpdate 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_updateChoose off, all replies, or positive replies for reply forwarding.
workspace_campaign_url_tracking_updateEnable or disable campaign click tracking for new campaigns or for new and existing campaigns.
workspace_campaign_url_tracking_checkRequest a deduplicated background sending-domain readiness check without changing tracking policy.
workspace_walkin_tracking_updateUpdate 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_updateReplace the market, profile weights, and given-name style used for generated mailbox identities.
workspace_domain_generation_updateReplace the industry keywords used for generated sending-domain suggestions.
workspace_identity_samples_generateGenerate six non-persistent identity samples for proposed identity settings. The payloads for these settings tools match the public settings API.
workspace_infrastructure_domain_walkin_getRead an owned domain's destination, participation, UTM label, recent reachability and update capability using domain_uuid.
workspace_infrastructure_domain_walkin_updateWith 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_updateWith 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_getRead 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_listRead paged activity events, up to 100 per call and 20 values per filter list.
workspace_billing_overview_getRead customer-visible balance, invoice amounts/status/documents and billing settings. Payment links are omitted; this tool does not make a charge.
workspace_webhooks_listList webhook configurations without signing secrets.
workspace_webhook_createReturn 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_deleteDelete one workspace-owned webhook configuration.
workspace_webhook_signing_secret_rotateReturn 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_sendSend sample events to a saved configuration and record delivery history. Requires webhook_id and a fresh operation_id.
workspace_webhook_preview_test_sendSend 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_listRead paged webhook delivery history, up to 100 per call.
workspace_team_members_listRead the workspace team and visible role capabilities.
workspace_team_member_createReturn 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_updateAs Admin or Owner, replace an existing member's role.
workspace_team_member_access_removeAs Admin or Owner, remove an existing member's workspace access.
workspace_team_member_setup_link_createAs 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_getRead one workspace-owned delivery and its attempts.
workspace_api_keys_listRead API-key metadata when the signed-in member has key-management access; no token values are returned.
workspace_api_key_createAs 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_updateAs Admin or Owner, update a workspace key's name or expiration.
workspace_api_key_deleteAs Admin or Owner, permanently delete a workspace key.
workspace_agreements_listRead customer-visible agreement metadata without changing legal state, including retained native acceptances. See the agreement API and MCP contract.
workspace_agreement_pdf_chunk_getRead 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_getOmit 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_sendSend an email verification code; supply agreement_id, email in payload.
onboarding_native_agreement_email_verifyCheck 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_statusResolve the original agreement_id, request_id without accepting. Definite non-acceptance fences that UUID; a deliberate retry uses a new UUID.
onboarding_native_agreement_delegateEmail a separate acceptance-only link using agreement_id, name, email. The original contact retains payment/setup access.
onboarding_native_agreement_copies_retryRetry 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_getRead 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_getRead HubSpot sync state without refreshing provider metadata.
workspace_crm_close_getRead Close sync state without refreshing provider metadata.
workspace_crm_discoverOpen the selected CRM settings page to connect privately and inspect account metadata. Reports user_action_required; do not supply credentials to MCP.
workspace_crm_createOpen 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_updateReplace saved CRM mapping settings.
workspace_crm_validateValidate the saved CRM credential and provider connection.
workspace_crm_conversation_previewPreview the CRM conversation setup test without sending it.
workspace_crm_conversation_test_startStart one durable conversation test with a new operation_id UUID and the preview values.
workspace_crm_conversation_test_getRead a durable conversation-test result by operation UUID. Check this before any retry after an uncertain result.
workspace_crm_conversation_retryQueue a retry for one CRM conversation UUID.
workspace_crm_blocklist_previewPreview blocklist synchronization against the selected CRM.
workspace_crm_blocklist_approveApprove the latest reviewed blocklist synchronization preview.
workspace_crm_activateActivate the configured CRM integration.
workspace_crm_capability_activateActivate one configured CRM capability.
workspace_crm_capability_disableDisable one configured CRM capability.
workspace_crm_token_rotateOpen 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_disableDisable the CRM integration and its synchronization capabilities.
workspace_crm_oauth_disconnectDisconnect the current OAuth grant. Supply the current oauth_grant_revision; Close also requires configuration_revision.
workspace_crm_revenue_setup_getRead customer-visible Revenue attribution setup and provider metadata.
workspace_crm_revenue_setup_updateWith a write grant and Admin or Owner role, save Revenue attribution setup through the public customer contract.
workspace_billing_platform_notice_getRead 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_previewUse 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.

Choose Shared Campaign Infrastructure

All workspace users can use these tools. Call campaign_infrastructure_sharing_preview for the source campaign when creating a draft, or the destination when assigning mailboxes. Review the named campaigns and warnings before setting share_infrastructure=true for creation or allow_shared_infrastructure=true for assignment. Supply the returned review_fingerprint as infrastructure_sharing_review_fingerprint, and set acknowledge_shared_infrastructure_risks=true only after the user deliberately accepts those risks. A stale review is rejected; refresh before applying again.

Campaigns sharing a domain share its reputation: spam complaints in one can affect the others, even with different mailboxes. Campaigns sharing a physical mailbox share its limits, cooldown and pacing, so concurrent sending can slow the original campaign. Sharing adds no capacity, launches no campaign, and provides no automatic sequential handoff. Keep a new draft or a paused campaign stopped until you deliberately launch or resume it. Sequential use still shares domain reputation.

Sharing mutation requests are limited to 1 MiB. Moving leads changes source participation; follow-up retains it. Draft creation is not idempotent: if its response is lost, inspect campaigns before retrying. Existing calls to campaign_duplicate without sharing options keep creating unsent drafts without source mailboxes. New or changed tool definitions may take time to appear in a directory client while its provider reviews metadata; a custom connection reads the deployed server's current tools.

Adding blocklist values

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.

{"workspace_id":"your-workspace-id","type":"email","values":["lead@example.com"]}

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.

Applying Unibox lead actions

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.

{"workspace_id":"your-workspace-id","thread_id":"your-thread-uuid"}

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.

Campaign Lifecycle

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
  1. Call campaign_lifecycle_get and use its identity-aware available_actions rather than assuming an action from a status label.
  2. Generate one operation UUID for a write. Reuse it only when retrying the same logical command after an ambiguous outcome.
  3. After 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.
  4. Use 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.
  5. Use 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.
  6. If recovery is offered, preview the complete paused-lead plan. For each entry in 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.
  7. If the current mailbox-change obligation will be handled later, use 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.
  8. Resume remains a separate full-readiness operation. Authenticated workspace users and public API keys may invoke it for their workspace; readiness failures leave the campaign Paused.

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.

Lead Import and Enrichment

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.

  1. Inventory the complete source before chunking and require one non-empty, stable 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.
  2. Before previewing any chunk, inventory all audience definitions, defaults, and each lead's effective refs across the complete source. Require one identical definition for each audience ref, at most 100 distinct audience refs across one logical import, and at most 10,000 lead-to-audience assignment edges across that complete source. Count unique (source_ref, effective audience ref) pairs after per-lead overrides. If either complete-source limit is exceeded, do not preview or apply any chunk.
  3. Call 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.
  4. Combine each preview item's returned 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.
  5. Review failed rows, protected values, planned replacements, and audience effects.
  6. Repeat the unchanged input with the returned review_token, every returned audience plan_token, and a new operation_id in workspace_leads_import_apply.
  7. Keep one operation UUID per chunk and reuse it only when retrying an ambiguous outcome. A recovered response returns the original committed result without duplicating history.

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.

Preview Example

{ "workspace_id": "workspace-uuid", "source_name": "CRM enrichment 1/8", "leads": [ { "source_ref": "crm:prospect-0042", "standard_attributes": { "work_email": "alex@example.edu" }, "custom_attributes": { "peer_accounts": "North Academy; Lakeside School", "peer_account_sentence": "We work with North Academy and Lakeside School." } } ] }

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.

Creative Writeback

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.

Update Example When adaptations_activated Is True

{ "workspace_id": "workspace-uuid", "campaign_id": "campaign-uuid", "overwrite_existing": true, "documents": [ { "step_number": 1, "variant_number": 1, "field_type": "subject", "subject_number": 1, "plain_text": "Quick question for {{first_name}}" }, { "step_number": 1, "variant_number": 1, "field_type": "subject", "subject_number": 2, "is_disabled": true, "plain_text": "An idea for {{company_name}}" }, { "step_number": 1, "variant_number": 1, "field_type": "body", "subject_number": 1, "plain_text": "Hi {{first_name}}, noticed your work at {{company_name}}..." }, { "step_number": 1, "variant_number": 1, "field_type": "body", "subject_number": 1, "adaptation_target": "google_workspace", "adaptation_active": true, "plain_text": "Hi {{first_name}}, a shorter note for {{company_name}}..." } ], "step_settings": [ { "step_number": 2, "wait_days": 3, "is_threaded": true } ] }

Reset One Adaptation to Default When adaptations_activated Is True

{ "workspace_id": "workspace-uuid", "campaign_id": "campaign-uuid", "overwrite_existing": true, "documents": [ { "step_number": 1, "variant_number": 1, "field_type": "body", "subject_number": 1, "adaptation_target": "google_workspace", "adaptation_active": false, "plain_text": "Hi {{first_name}}, a shorter note for {{company_name}}..." } ] }

Related Documentation