---
title: "Get Sequence Publish Diff"
method: GET
path: "/api/sequences/{sequence_id}/publish/diff"
tags: ["sequences"]
---

# Get Sequence Publish Diff

`GET /api/sequences/{sequence_id}/publish/diff`

## Request

- Base URL: `https://platform.verbiflow.com/api/bridge`
- URL: `https://platform.verbiflow.com/api/bridge/api/sequences/{sequence_id}/publish/diff`
- Auth: one of:
  - HTTP bearer and API key in header `x-flage-org-id`
  - HTTP bearer and API key in header `x-flage-org-slug`

## Path parameters

- `sequence_id` string, required

## Query parameters

- `include_workflows` boolean

## Response `200`

Successful Response

- SequencePublishDiffPayload: Structured difference between the editable draft and published campaign revision.
  - `changes` SequenceRevisionDiffChangePayload[]: Semantic unpublished changes.
    - `description` string, required: Explanation of the semantic change.
    - `details` SequenceDiffDetailPayload[]: Field-level values associated with the change.
      - `from_value` string, nullable: Short rendering of the previous value, when safe to display inline.
      - `label` string, required: Human-readable field label.
      - `to_value` string, nullable: Short rendering of the new value, when safe to display inline.
    - `kind` 'settings_changed' | 'step_added' | 'step_removed' | 'step_changed' | 'path_changed' | 'layout_changed', required: Typed change category.
    - `node_id` string, nullable: Affected workflow node id, when the change is node-specific.
    - `title` string, required: Short human-readable change title.
  - `draft_id` string, required: Editable draft id.
  - `draft_version` integer, required: Editable draft version.
  - `from_workflow` WorkflowPayloadOutput: Complete campaign workflow graph.
    - `edges` WorkflowEdgePayload[]: Directed workflow edges connecting the nodes.
      - `data` WorkflowEdgeDataPayload: Optional presentation metadata for a workflow edge.
        - `label` string, nullable: Human-readable branch label shown on the workflow edge.
      - `id` string, required: Stable workflow edge id.
      - `source` string, required: Upstream workflow node id.
      - `source_handle` string, nullable: Optional named branch emitted by the source node.
      - `target` string, required: Downstream workflow node id.
      - `target_handle` string, nullable: Optional named input on the target node.
    - `nodes` WorkflowNodePayloadOutput[]: Typed workflow nodes.
      - `data` WorkflowNodeDataPayloadOutput, required: Typed configuration carried by one campaign workflow node.
        - `activation_conditions` ActivationConditionGroupPayloadOutput[], nullable: Runtime eligibility conditions for an action node.
          - `chain` 'and' | 'or', required: Whether every rule or any rule must match.
          - `id` string, required: Stable condition-group id used by the workflow editor.
          - `label` string, required: Human-readable condition-group label.
          - `rules` ConditionRulePayloadOutput[]: Predicates evaluated inside this condition group.
            - `attribute` string, required: Audience or runtime attribute evaluated by this rule.
            - `negate` boolean: Whether to invert this rule after evaluating it.
            - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'matches' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in' | 'not_in' | 'is_true' | 'is_false' | 'before' | 'after' | 'in_last_n_days' | 'in_next_n_days', required: Typed comparison applied to the selected attribute.
            - `rule_id` string, nullable: Optional stable rule id retained across editor revisions.
            - `value` union: Recursive JSON value: object, array, string, integer, number, boolean, or null.
              - …
        - `branch_sender_selections` object: Per-variant sender selections keyed by branch or variant id.
        - `conditions` FilterConditionGroupPayloadOutput[], nullable: Filter branches evaluated by a filter node.
          - `chain` 'and' | 'or', required: Whether every rule or any rule must match.
          - `id` string, required: Stable condition-group id used by the workflow editor.
          - `label` string, required: Human-readable condition-group label.
          - `rules` ConditionRulePayloadOutput[]: Predicates evaluated inside this condition group.
            - `attribute` string, required: Audience or runtime attribute evaluated by this rule.
            - `negate` boolean: Whether to invert this rule after evaluating it.
            - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'matches' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in' | 'not_in' | 'is_true' | 'is_false' | 'before' | 'after' | 'in_last_n_days' | 'in_next_n_days', required: Typed comparison applied to the selected attribute.
            - `rule_id` string, nullable: Optional stable rule id retained across editor revisions.
            - `value` union: Recursive JSON value: object, array, string, integer, number, boolean, or null.
              - …
          - `sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
            - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
              - …
            - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
              - …
        - `else_sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
          - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
          - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
        - `enabled_branches` string[], nullable: Action branch ids eligible for weighted selection.
        - `ingresses` AudienceIngressPayloadOutput[]: Operational audience ingresses attached to the source node.
          - `archived_at` string, date-time, nullable: Time when the ingress was disconnected, if applicable.
          - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audiences produced by this ingress.
            - `created_at` string, date-time, nullable: Time when this audience reference was created.
            - `ingress_id` string, nullable: Operational source ingress that produced this audience reference.
            - `lead_list_id` string, required: Lead-list id containing the materialized audience rows.
            - `list_name` string, nullable: Human-readable name of the materialized lead list.
            - `metadata` object: Source-owned provenance and completeness metadata.
            - `row_count` integer, nullable: Number of rows recorded for this audience materialization.
            - `source_run_id` string, nullable: Source execution that produced the lead list.
          - `config` union, required: Typed source-adapter configuration.
            - ManualSourceConfigPayloadOutput: Manual audience source populated by explicit uploads or staged artifacts.
              - …
            - CrmSourceConfigPayloadOutput: CRM-backed source that acquires contacts, companies, or deals.
              - …
            - WebhookSourceConfigPayloadOutput: Webhook source whose signed deliveries append campaign audience rows.
              - …
            - LinkedInNetworkSourceConfigPayloadOutput: Connected-sender LinkedIn network source.
              - …
            - JobPostingSourceConfigPayloadOutput: Hiring-signal source that turns recent job postings into campaign contacts.
              - …
            - LinkedInPostReactorsSourceConfigPayloadOutput: Public LinkedIn activity source that finds people who reacted to matched posts.
              - …
            - LumaEventsSourceConfigPayloadOutput: Lu.ma event audience source.
              - …
            - ConferenceAttendeesSourceConfigPayloadOutput: Conference-attendee recipe source derived from bounded LinkedIn interactions.
              - …
            - IncubatorSourceConfigPayloadOutput: Incubator-company source expanded to target contacts.
              - …
            - TargetedSearchSourceConfigPayloadOutput: Targeted people search constrained by current or past role and company facts.
              - …
            - SalesNavUrlSourceConfigPayloadOutput: LinkedIn Sales Navigator URL source executed through one connected sender.
              - …
          - `created_at` string, date-time, nullable: Time when the ingress was created.
          - `dedupe_key` string: Stable source identity key used to adopt equivalent ingresses.
          - `display_name` string, nullable: Human-readable source label.
          - `ingress_id` string, required: Stable operational source-ingress id.
          - `ingress_kind` 'manual' | 'crm' | 'webhook' | 'linkedin_network' | 'job_posting' | 'linkedin_post_reactors' | 'luma_events' | 'conference_attendees' | 'incubator' | 'targeted_search' | 'sales_nav_url', required: Source adapter kind owned by this ingress.
          - `ingress_order` integer: Stable display and execution order within the source node.
          - `metadata` object: Ingress provenance that does not control provider execution.
        - `label` string, nullable: Optional workflow-editor label for the node.
        - `sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
          - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
          - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
        - `settings` CampaignNodeSettingsOutput: Block-specific editor settings. The node type selects which fields are meaningful.
          - `ai_filter_prompt` string, nullable: Qualification prompt for an AI-filter block.
          - `attachments` CampaignAttachment[]: Top-level attachment references used by the editor for single-variant actions.
            - `content_type` string: Attachment MIME type.
            - `filename` string: Recipient-facing attachment filename.
            - `kind` 'pdf' | 'video' | 'email_attachment': Delivery attachment kind; channel validation applies when saving and sending.
            - `s3_key` string: Opaque attachment storage locator returned by upload_attachment; preserve it unchanged.
            - `size_bytes` integer: Attachment byte count.
          - `body` string, nullable: Body for email and reply_email actions.
          - `duration` number: Positive delay amount for a delay block, interpreted with unit.
          - `message` string, nullable: Message for linkedin_message and linkedin_inmail actions.
          - `note` string, nullable: Connection note for linkedin_connection actions.
          - `subject` string, nullable: Subject for email or linkedin_inmail; top-level copy mirrors the first variant.
          - `unit` 'hours' | 'days': Delay time unit; use hours or days as supported by the block editor.
          - `variants` CampaignActionVariant[]: Complete action variants, including ids, copy, weights, and attachments.
            - `attachments` CampaignAttachment[]: Uploaded attachment references for this variant.
              - …
            - `body` string: Reviewed message body; editor serialization maps it to the action channel.
            - `id` string: Campaign variant identity used by CampaignCopyBinding.campaign_variant_id; omit only to create a new variant.
            - `subject` string, nullable: Email or InMail subject; null for actions without a subject.
            - `weight` integer: Relative allocation weight for this variant.
        - `source_config` union: Legacy inline source config accepted only on supported source blocks.
          - ManualSourceConfigPayloadOutput: Manual audience source populated by explicit uploads or staged artifacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'manual': Discriminator selecting the manual source adapter.
          - CrmSourceConfigPayloadOutput: CRM-backed source that acquires contacts, companies, or deals.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `data_type` 'contacts' | 'companies' | 'deals': CRM object grain acquired by the source.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `filters` CampaignCrmPropertyFilterOutput[]: Primary CRM object filters.
              - …
            - `include_properties` string[]: Additional CRM properties requested on returned objects.
            - `list_id` string, nullable: Provider list id used when selection_mode is list.
            - `list_name` string, nullable: Display name retained for the selected provider list.
            - `max_per_company` integer, nullable: Maximum contacts retained for each matched company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `provider` 'hubspot' | 'attio' | 'salesforce': CRM provider queried by the source.
            - `related_filters` CampaignCrmRelatedFilterOutput[]: Filters applied through related CRM objects.
              - …
            - `salesforce_object` 'contact' | 'lead' | 'both', nullable: Salesforce person object kinds included by this source.
            - `selection_mode` 'filters' | 'list': Whether the source uses filters or one saved CRM list.
            - `source_kind` 'crm': Discriminator selecting the CRM source adapter.
            - `target_titles_tags` string[]: Contact titles used when a company-grain source expands to people.
          - WebhookSourceConfigPayloadOutput: Webhook source whose signed deliveries append campaign audience rows.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `auto_sync` boolean, nullable: Whether accepted webhook rows should automatically materialize into the audience.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'webhook': Discriminator selecting the webhook source adapter.
            - `webhook_id` string, nullable: Stable webhook identity associated with this source.
          - LinkedInNetworkSourceConfigPayloadOutput: Connected-sender LinkedIn network source.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `role_filter_tags` string[]: Role tags used to qualify network members.
            - `sender_account_ids` string[]: Connected LinkedIn sender accounts whose networks are included.
            - `source_kind` 'linkedin_network': Discriminator selecting the LinkedIn network source adapter.
          - JobPostingSourceConfigPayloadOutput: Hiring-signal source that turns recent job postings into campaign contacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `days` integer, nullable: Lookback window in days for job postings.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `include_hiring_manager` boolean: Whether to include a discovered hiring manager when available.
            - `job_title_tags` string[]: Job-posting titles used to match hiring companies.
            - `location_tags` string[]: Locations used to qualify matched job postings.
            - `max_per_company` integer, nullable: Maximum contacts retained for each hiring company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'job_posting': Discriminator selecting the job-posting source adapter.
            - `target_title_tags` string[]: Contact titles requested at each hiring company.
          - LinkedInPostReactorsSourceConfigPayloadOutput: Public LinkedIn activity source that finds people who reacted to matched posts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `interaction_types` string[]: Reaction types that qualify a person for the audience.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `query` string: Public post research query.
            - `source_kind` 'linkedin_post_reactors': Discriminator selecting the LinkedIn post-reactor adapter.
          - LumaEventsSourceConfigPayloadOutput: Lu.ma event audience source.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `event_name` string: Event name or identifier used for attendee acquisition.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `role` string: Attendee role used to qualify event people.
            - `source_kind` 'luma_events': Discriminator selecting the Lu.ma event adapter.
          - ConferenceAttendeesSourceConfigPayloadOutput: Conference-attendee recipe source derived from bounded LinkedIn interactions.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `direction` 'sent' | 'received' | 'both': Whether sent, received, or both interaction directions are included.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `exclude_verbiflow_managed` boolean: Whether to exclude interactions already managed by Verbiflow.
            - `from_date` string: Inclusive lower date bound for qualifying interactions.
            - `keyword_tags` string[]: Conference keywords used to identify relevant interactions.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `sender_account_ids` string[]: Connected senders whose interaction histories are examined.
            - `source_kind` 'conference_attendees': Discriminator selecting the conference-attendee adapter.
            - `to_date` string: Inclusive upper date bound for qualifying interactions.
          - IncubatorSourceConfigPayloadOutput: Incubator-company source expanded to target contacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `batch_id` string: Legacy single incubator batch id.
            - `batch_ids` string[]: Exact incubator batch ids included by the source.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `incubator_name` string: Incubator catalog name.
            - `max_per_company` integer, nullable: Maximum contacts retained for each portfolio company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'incubator': Discriminator selecting the incubator adapter.
            - `target_title_tags` string[]: Contact titles requested at each portfolio company.
          - TargetedSearchSourceConfigPayloadOutput: Targeted people search constrained by current or past role and company facts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `company_linkedin_urls` string[]: Current-company LinkedIn URLs used as exact constraints.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `job_title_tags` string[]: Current job titles used to qualify people.
            - `location_tags` string[]: Locations used to qualify people.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `past_company_linkedin_urls` string[]: Past-company LinkedIn URLs used as exact constraints.
            - `past_job_title_tags` string[]: Past job titles used to qualify people.
            - `source_kind` 'targeted_search': Discriminator selecting the targeted-search adapter.
          - SalesNavUrlSourceConfigPayloadOutput: LinkedIn Sales Navigator URL source executed through one connected sender.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `max_profiles` integer, nullable: Maximum profiles admitted from the search.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `sender_account_id` string: Connected LinkedIn sender used to access the search.
            - `source_kind` 'sales_nav_url': Discriminator selecting the Sales Navigator URL adapter.
            - `url` string: Complete Sales Navigator search URL.
      - `id` string, required: Stable node id referenced by edges and runtime state.
      - `position` CampaignCanvasPosition, required: Editor canvas coordinates; they do not change execution order.
        - `x` number, required: Horizontal canvas coordinate.
        - `y` number, required: Vertical canvas coordinate.
      - `type` string, required: Registered campaign block type.
  - `has_published_revision` boolean, required: Whether a published comparison base exists.
  - `is_current` boolean, required: Whether draft and published revision are identical.
  - `published_revision_id` string, nullable: Current published revision id.
  - `published_revision_number` integer, nullable: Current published revision number.
  - `sequence_id` string, required: Campaign whose draft was compared.
  - `summary` string, required: Human-readable summary of unpublished changes.
  - `to_workflow` WorkflowPayloadOutput: Complete campaign workflow graph.
    - `edges` WorkflowEdgePayload[]: Directed workflow edges connecting the nodes.
      - `data` WorkflowEdgeDataPayload: Optional presentation metadata for a workflow edge.
        - `label` string, nullable: Human-readable branch label shown on the workflow edge.
      - `id` string, required: Stable workflow edge id.
      - `source` string, required: Upstream workflow node id.
      - `source_handle` string, nullable: Optional named branch emitted by the source node.
      - `target` string, required: Downstream workflow node id.
      - `target_handle` string, nullable: Optional named input on the target node.
    - `nodes` WorkflowNodePayloadOutput[]: Typed workflow nodes.
      - `data` WorkflowNodeDataPayloadOutput, required: Typed configuration carried by one campaign workflow node.
        - `activation_conditions` ActivationConditionGroupPayloadOutput[], nullable: Runtime eligibility conditions for an action node.
          - `chain` 'and' | 'or', required: Whether every rule or any rule must match.
          - `id` string, required: Stable condition-group id used by the workflow editor.
          - `label` string, required: Human-readable condition-group label.
          - `rules` ConditionRulePayloadOutput[]: Predicates evaluated inside this condition group.
            - `attribute` string, required: Audience or runtime attribute evaluated by this rule.
            - `negate` boolean: Whether to invert this rule after evaluating it.
            - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'matches' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in' | 'not_in' | 'is_true' | 'is_false' | 'before' | 'after' | 'in_last_n_days' | 'in_next_n_days', required: Typed comparison applied to the selected attribute.
            - `rule_id` string, nullable: Optional stable rule id retained across editor revisions.
            - `value` union: Recursive JSON value: object, array, string, integer, number, boolean, or null.
              - …
        - `branch_sender_selections` object: Per-variant sender selections keyed by branch or variant id.
        - `conditions` FilterConditionGroupPayloadOutput[], nullable: Filter branches evaluated by a filter node.
          - `chain` 'and' | 'or', required: Whether every rule or any rule must match.
          - `id` string, required: Stable condition-group id used by the workflow editor.
          - `label` string, required: Human-readable condition-group label.
          - `rules` ConditionRulePayloadOutput[]: Predicates evaluated inside this condition group.
            - `attribute` string, required: Audience or runtime attribute evaluated by this rule.
            - `negate` boolean: Whether to invert this rule after evaluating it.
            - `operator` 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'matches' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in' | 'not_in' | 'is_true' | 'is_false' | 'before' | 'after' | 'in_last_n_days' | 'in_next_n_days', required: Typed comparison applied to the selected attribute.
            - `rule_id` string, nullable: Optional stable rule id retained across editor revisions.
            - `value` union: Recursive JSON value: object, array, string, integer, number, boolean, or null.
              - …
          - `sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
            - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
              - …
            - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
              - …
        - `else_sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
          - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
          - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
        - `enabled_branches` string[], nullable: Action branch ids eligible for weighted selection.
        - `ingresses` AudienceIngressPayloadOutput[]: Operational audience ingresses attached to the source node.
          - `archived_at` string, date-time, nullable: Time when the ingress was disconnected, if applicable.
          - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audiences produced by this ingress.
            - `created_at` string, date-time, nullable: Time when this audience reference was created.
            - `ingress_id` string, nullable: Operational source ingress that produced this audience reference.
            - `lead_list_id` string, required: Lead-list id containing the materialized audience rows.
            - `list_name` string, nullable: Human-readable name of the materialized lead list.
            - `metadata` object: Source-owned provenance and completeness metadata.
            - `row_count` integer, nullable: Number of rows recorded for this audience materialization.
            - `source_run_id` string, nullable: Source execution that produced the lead list.
          - `config` union, required: Typed source-adapter configuration.
            - ManualSourceConfigPayloadOutput: Manual audience source populated by explicit uploads or staged artifacts.
              - …
            - CrmSourceConfigPayloadOutput: CRM-backed source that acquires contacts, companies, or deals.
              - …
            - WebhookSourceConfigPayloadOutput: Webhook source whose signed deliveries append campaign audience rows.
              - …
            - LinkedInNetworkSourceConfigPayloadOutput: Connected-sender LinkedIn network source.
              - …
            - JobPostingSourceConfigPayloadOutput: Hiring-signal source that turns recent job postings into campaign contacts.
              - …
            - LinkedInPostReactorsSourceConfigPayloadOutput: Public LinkedIn activity source that finds people who reacted to matched posts.
              - …
            - LumaEventsSourceConfigPayloadOutput: Lu.ma event audience source.
              - …
            - ConferenceAttendeesSourceConfigPayloadOutput: Conference-attendee recipe source derived from bounded LinkedIn interactions.
              - …
            - IncubatorSourceConfigPayloadOutput: Incubator-company source expanded to target contacts.
              - …
            - TargetedSearchSourceConfigPayloadOutput: Targeted people search constrained by current or past role and company facts.
              - …
            - SalesNavUrlSourceConfigPayloadOutput: LinkedIn Sales Navigator URL source executed through one connected sender.
              - …
          - `created_at` string, date-time, nullable: Time when the ingress was created.
          - `dedupe_key` string: Stable source identity key used to adopt equivalent ingresses.
          - `display_name` string, nullable: Human-readable source label.
          - `ingress_id` string, required: Stable operational source-ingress id.
          - `ingress_kind` 'manual' | 'crm' | 'webhook' | 'linkedin_network' | 'job_posting' | 'linkedin_post_reactors' | 'luma_events' | 'conference_attendees' | 'incubator' | 'targeted_search' | 'sales_nav_url', required: Source adapter kind owned by this ingress.
          - `ingress_order` integer: Stable display and execution order within the source node.
          - `metadata` object: Ingress provenance that does not control provider execution.
        - `label` string, nullable: Optional workflow-editor label for the node.
        - `sender_selection` SequenceSenderSelectionPayload: Campaign sender-account selection split by outreach channel.
          - `email` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
          - `linkedin` SequenceSenderChannelSelectionPayload: Connected sender accounts available for one outreach channel.
            - `sender_account_ids` string[]: Exact sender-account ids available to the channel.
        - `settings` CampaignNodeSettingsOutput: Block-specific editor settings. The node type selects which fields are meaningful.
          - `ai_filter_prompt` string, nullable: Qualification prompt for an AI-filter block.
          - `attachments` CampaignAttachment[]: Top-level attachment references used by the editor for single-variant actions.
            - `content_type` string: Attachment MIME type.
            - `filename` string: Recipient-facing attachment filename.
            - `kind` 'pdf' | 'video' | 'email_attachment': Delivery attachment kind; channel validation applies when saving and sending.
            - `s3_key` string: Opaque attachment storage locator returned by upload_attachment; preserve it unchanged.
            - `size_bytes` integer: Attachment byte count.
          - `body` string, nullable: Body for email and reply_email actions.
          - `duration` number: Positive delay amount for a delay block, interpreted with unit.
          - `message` string, nullable: Message for linkedin_message and linkedin_inmail actions.
          - `note` string, nullable: Connection note for linkedin_connection actions.
          - `subject` string, nullable: Subject for email or linkedin_inmail; top-level copy mirrors the first variant.
          - `unit` 'hours' | 'days': Delay time unit; use hours or days as supported by the block editor.
          - `variants` CampaignActionVariant[]: Complete action variants, including ids, copy, weights, and attachments.
            - `attachments` CampaignAttachment[]: Uploaded attachment references for this variant.
              - …
            - `body` string: Reviewed message body; editor serialization maps it to the action channel.
            - `id` string: Campaign variant identity used by CampaignCopyBinding.campaign_variant_id; omit only to create a new variant.
            - `subject` string, nullable: Email or InMail subject; null for actions without a subject.
            - `weight` integer: Relative allocation weight for this variant.
        - `source_config` union: Legacy inline source config accepted only on supported source blocks.
          - ManualSourceConfigPayloadOutput: Manual audience source populated by explicit uploads or staged artifacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'manual': Discriminator selecting the manual source adapter.
          - CrmSourceConfigPayloadOutput: CRM-backed source that acquires contacts, companies, or deals.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `data_type` 'contacts' | 'companies' | 'deals': CRM object grain acquired by the source.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `filters` CampaignCrmPropertyFilterOutput[]: Primary CRM object filters.
              - …
            - `include_properties` string[]: Additional CRM properties requested on returned objects.
            - `list_id` string, nullable: Provider list id used when selection_mode is list.
            - `list_name` string, nullable: Display name retained for the selected provider list.
            - `max_per_company` integer, nullable: Maximum contacts retained for each matched company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `provider` 'hubspot' | 'attio' | 'salesforce': CRM provider queried by the source.
            - `related_filters` CampaignCrmRelatedFilterOutput[]: Filters applied through related CRM objects.
              - …
            - `salesforce_object` 'contact' | 'lead' | 'both', nullable: Salesforce person object kinds included by this source.
            - `selection_mode` 'filters' | 'list': Whether the source uses filters or one saved CRM list.
            - `source_kind` 'crm': Discriminator selecting the CRM source adapter.
            - `target_titles_tags` string[]: Contact titles used when a company-grain source expands to people.
          - WebhookSourceConfigPayloadOutput: Webhook source whose signed deliveries append campaign audience rows.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `auto_sync` boolean, nullable: Whether accepted webhook rows should automatically materialize into the audience.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'webhook': Discriminator selecting the webhook source adapter.
            - `webhook_id` string, nullable: Stable webhook identity associated with this source.
          - LinkedInNetworkSourceConfigPayloadOutput: Connected-sender LinkedIn network source.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `role_filter_tags` string[]: Role tags used to qualify network members.
            - `sender_account_ids` string[]: Connected LinkedIn sender accounts whose networks are included.
            - `source_kind` 'linkedin_network': Discriminator selecting the LinkedIn network source adapter.
          - JobPostingSourceConfigPayloadOutput: Hiring-signal source that turns recent job postings into campaign contacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `days` integer, nullable: Lookback window in days for job postings.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `include_hiring_manager` boolean: Whether to include a discovered hiring manager when available.
            - `job_title_tags` string[]: Job-posting titles used to match hiring companies.
            - `location_tags` string[]: Locations used to qualify matched job postings.
            - `max_per_company` integer, nullable: Maximum contacts retained for each hiring company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'job_posting': Discriminator selecting the job-posting source adapter.
            - `target_title_tags` string[]: Contact titles requested at each hiring company.
          - LinkedInPostReactorsSourceConfigPayloadOutput: Public LinkedIn activity source that finds people who reacted to matched posts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `interaction_types` string[]: Reaction types that qualify a person for the audience.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `query` string: Public post research query.
            - `source_kind` 'linkedin_post_reactors': Discriminator selecting the LinkedIn post-reactor adapter.
          - LumaEventsSourceConfigPayloadOutput: Lu.ma event audience source.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `event_name` string: Event name or identifier used for attendee acquisition.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `role` string: Attendee role used to qualify event people.
            - `source_kind` 'luma_events': Discriminator selecting the Lu.ma event adapter.
          - ConferenceAttendeesSourceConfigPayloadOutput: Conference-attendee recipe source derived from bounded LinkedIn interactions.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `direction` 'sent' | 'received' | 'both': Whether sent, received, or both interaction directions are included.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `exclude_verbiflow_managed` boolean: Whether to exclude interactions already managed by Verbiflow.
            - `from_date` string: Inclusive lower date bound for qualifying interactions.
            - `keyword_tags` string[]: Conference keywords used to identify relevant interactions.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `sender_account_ids` string[]: Connected senders whose interaction histories are examined.
            - `source_kind` 'conference_attendees': Discriminator selecting the conference-attendee adapter.
            - `to_date` string: Inclusive upper date bound for qualifying interactions.
          - IncubatorSourceConfigPayloadOutput: Incubator-company source expanded to target contacts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `batch_id` string: Legacy single incubator batch id.
            - `batch_ids` string[]: Exact incubator batch ids included by the source.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `incubator_name` string: Incubator catalog name.
            - `max_per_company` integer, nullable: Maximum contacts retained for each portfolio company.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `source_kind` 'incubator': Discriminator selecting the incubator adapter.
            - `target_title_tags` string[]: Contact titles requested at each portfolio company.
          - TargetedSearchSourceConfigPayloadOutput: Targeted people search constrained by current or past role and company facts.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `company_linkedin_urls` string[]: Current-company LinkedIn URLs used as exact constraints.
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `job_title_tags` string[]: Current job titles used to qualify people.
            - `location_tags` string[]: Locations used to qualify people.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `past_company_linkedin_urls` string[]: Past-company LinkedIn URLs used as exact constraints.
            - `past_job_title_tags` string[]: Past job titles used to qualify people.
            - `source_kind` 'targeted_search': Discriminator selecting the targeted-search adapter.
          - SalesNavUrlSourceConfigPayloadOutput: LinkedIn Sales Navigator URL source executed through one connected sender.
            - `acquisition_filters` SourceAcquisitionFilterGroupPayloadOutput[]: Qualification groups applied during source acquisition.
              - …
            - `audience_refs` SourceAudienceRefPayloadOutput[]: Materialized audience generations already produced by the source.
              - …
            - `enrichment_steps` SourceEnrichmentStepPayloadOutput[]: Stored enrichment-step configuration. Current source execution does not consume this field; use explicit enrichment SDK operations on acquired rows.
              - …
            - `max_profiles` integer, nullable: Maximum profiles admitted from the search.
            - `metadata` object: Adapter-owned configuration provenance that does not control execution.
            - `sender_account_id` string: Connected LinkedIn sender used to access the search.
            - `source_kind` 'sales_nav_url': Discriminator selecting the Sales Navigator URL adapter.
            - `url` string: Complete Sales Navigator search URL.
      - `id` string, required: Stable node id referenced by edges and runtime state.
      - `position` CampaignCanvasPosition, required: Editor canvas coordinates; they do not change execution order.
        - `x` number, required: Horizontal canvas coordinate.
        - `y` number, required: Vertical canvas coordinate.
      - `type` string, required: Registered campaign block type.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract.md) - [All operations](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract/llms.txt) - [OpenAPI document](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract/revisions/c80e903ef8f3?raw)
