> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enginy.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a single campaign

> Retrieve a specific campaign as the public simplified sequence plus campaign settings. Use this when you need a readable campaign in the supported public step model, not the full internal editor graph.

Responses include direct Enginy app URLs when available. Responses include an `appUrl` that opens the campaign overview in Enginy. MCP agents should return those URLs to users whenever they are present in the response.

    > **Required scope:** `CAMPAIGNS_READ`
    >
    > **Rate limit:** 100 requests per minute



## OpenAPI

````yaml https://openapi.enginy.ai/definitions.json get /v1/campaign/{campaignId}
openapi: 3.1.0
info:
  title: Enginy API
  version: 1.0.0
  description: Public API for Enginy platform
servers:
  - url: https://openapi.enginy.ai
    description: Configured server
security: []
tags:
  - name: AI Variables
    description: >-
      Manage AI variables and discover the entity fields you can reference in
      prompts and entity requests.
  - name: Inbox
    description: >-
      Inbox endpoints for listing contact threads, reading thread messages,
      managing tags, and sending manual replies.
  - name: Workflows
    description: >-
      Build, validate, publish, run, and inspect advanced (graph) workflows,
      plus the block/condition catalog needed to author a workflow plan.
paths:
  /v1/campaign/{campaignId}:
    get:
      tags:
        - Campaigns
      summary: Get a single campaign
      description: >-
        Retrieve a specific campaign as the public simplified sequence plus
        campaign settings. Use this when you need a readable campaign in the
        supported public step model, not the full internal editor graph.


        Responses include direct Enginy app URLs when available. Responses
        include an `appUrl` that opens the campaign overview in Enginy. MCP
        agents should return those URLs to users whenever they are present in
        the response.

            > **Required scope:** `CAMPAIGNS_READ`
            >
            > **Rate limit:** 100 requests per minute
      parameters:
        - schema:
            type: string
            description: The campaign ID
          required: true
          description: The campaign ID
          name: campaignId
          in: path
      responses:
        '200':
          description: Campaign retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      name:
                        type: string
                        minLength: 1
                        description: Campaign name.
                      description:
                        type:
                          - string
                          - 'null'
                        description: Optional campaign description.
                      identityId:
                        type:
                          - integer
                          - 'null'
                        exclusiveMinimum: 0
                      shouldAutomaticallySend:
                        type: boolean
                      shouldSendTrackingPixel:
                        type: boolean
                      shouldTrackEmailLinks:
                        type: boolean
                      excludeContactedLeads:
                        type: boolean
                      allowedEmails:
                        type: array
                        items:
                          type: string
                        description: Allowed sender email addresses for this campaign.
                      steps:
                        type: array
                        items:
                          oneOf:
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - email
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                subject:
                                  type: string
                                  description: >-
                                    Email subject when present. Draft emails may
                                    omit this until configured, and reply emails
                                    may inherit it from an earlier thread.
                                content:
                                  type: string
                                  description: >-
                                    Email body when present. Draft emails may
                                    omit this until configured.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: email
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_message
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                content:
                                  type: string
                                  description: LinkedIn message body when present.
                                attachment:
                                  type: string
                                  description: >-
                                    URL or storage key of the file to send when
                                    present.
                                attachmentName:
                                  type: string
                                  description: >-
                                    Display name for the attachment when
                                    present.
                                contentType:
                                  type: string
                                  enum:
                                    - AUDIO
                                    - IMAGE
                                    - FILE
                                    - VIDEO
                                  description: >-
                                    Attachment kind when an attachment is
                                    already configured.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_message
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_message_bundle
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                messages:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      content:
                                        type: string
                                        description: >-
                                          Text body of the bundle message when
                                          present.
                                      attachment:
                                        type: string
                                        description: >-
                                          URL or storage key of the file to send
                                          when present.
                                      attachmentName:
                                        type: string
                                        description: >-
                                          Display name for the attachment when
                                          present.
                                      contentType:
                                        type: string
                                        enum:
                                          - AUDIO
                                          - IMAGE
                                          - FILE
                                          - VIDEO
                                        description: >-
                                          Attachment kind when an attachment is
                                          already configured.
                                    additionalProperties: false
                                  description: >-
                                    Ordered list of messages sent back-to-back
                                    as a single bundle when already configured.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_message_bundle
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_voice_message
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                content:
                                  type: string
                                  description: >-
                                    Text body when the voice message is
                                    configured in TTS mode. May be omitted for
                                    draft or non-TTS modes.
                                voiceId:
                                  type: string
                                  description: >-
                                    Voice ID when configured for TTS mode. May
                                    be omitted for pre-recorded audio messages.
                                attachment:
                                  type: string
                                  description: >-
                                    URL or storage key for a pre-recorded audio
                                    message.
                                attachmentName:
                                  type: string
                                  description: >-
                                    Display name for the audio file when
                                    present.
                                contentType:
                                  type: string
                                  enum:
                                    - AUDIO
                                  description: Audio attachment content type when present.
                                voiceSettings:
                                  type: object
                                  properties:
                                    voiceSpeed:
                                      type: number
                                      minimum: 0.5
                                      maximum: 2
                                      description: >-
                                        Speech rate multiplier. Range 0.5–2.0.
                                        Defaults are applied server-side when
                                        omitted.
                                    voiceStability:
                                      type: number
                                      minimum: 0
                                      maximum: 100
                                      description: >-
                                        Voice stability percentage (0–100).
                                        Higher is steadier, lower is more
                                        expressive.
                                    backgroundNoise:
                                      type: string
                                      minLength: 1
                                      description: >-
                                        Optional background noise preset (e.g.
                                        `none`, `office`). Server defaults to
                                        `none`.
                                    backgroundVolume:
                                      type: number
                                      minimum: 0
                                      maximum: 100
                                      description: >-
                                        Background noise volume (0–100). Ignored
                                        when `backgroundNoise` is `none`.
                                  additionalProperties: false
                                  description: Voice fine-tuning settings when set.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_voice_message
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_inmail
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                subject:
                                  type: string
                                  description: InMail subject when present.
                                content:
                                  type: string
                                  description: InMail body when present.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_inmail
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_visit_profile
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_visit_profile
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_like_last_post
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                                reactionType:
                                  type: string
                                  minLength: 1
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_like_last_post
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - whatsapp_message
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                content:
                                  type: string
                                  description: WhatsApp message body when present.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: whatsapp_message
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - condition
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                condition:
                                  oneOf:
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - has_linkedin_profile
                                          description: Lead has a LinkedIn profile.
                                        field:
                                          type: string
                                          enum:
                                            - linkedinProfileUrl
                                            - linkedInProfileId
                                          description: >-
                                            Stored lead field to check. Defaults to
                                            `linkedinProfileUrl`.
                                      required:
                                        - type
                                      additionalProperties: false
                                      title: has_linkedin_profile
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - has_professional_email
                                          description: Lead has a professional email.
                                        verificationStatuses:
                                          type: array
                                          items:
                                            type: string
                                          description: >-
                                            Optional email verification statuses to
                                            include when matching.
                                        includeEmpty:
                                          type: boolean
                                          description: >-
                                            Whether empty professional email values
                                            match.
                                      required:
                                        - type
                                      additionalProperties: false
                                      title: has_professional_email
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - is_already_connected
                                          description: Lead is already a LinkedIn connection.
                                      required:
                                        - type
                                      additionalProperties: false
                                      title: is_already_connected
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - has_been_contacted
                                          description: Lead has already been contacted.
                                      required:
                                        - type
                                      additionalProperties: false
                                      title: has_been_contacted
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - has_whatsapp_account
                                          description: Lead has a WhatsApp account.
                                      required:
                                        - type
                                      additionalProperties: false
                                      title: has_whatsapp_account
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - email_opened
                                          description: >-
                                            Branch on whether the preceding email is
                                            opened within `waitFor`.
                                        waitFor:
                                          type: object
                                          properties:
                                            value:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: Wait amount.
                                            unit:
                                              type: string
                                              enum:
                                                - seconds
                                                - minutes
                                                - hours
                                                - days
                                              description: Wait unit.
                                          required:
                                            - value
                                            - unit
                                          additionalProperties: false
                                          description: >-
                                            How long to wait for the lead to open
                                            the preceding email. Required.
                                      required:
                                        - type
                                        - waitFor
                                      additionalProperties: false
                                      title: email_opened
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - email_clicked
                                          description: >-
                                            Branch on whether a link in the
                                            preceding email is clicked within
                                            `waitFor`.
                                        waitFor:
                                          type: object
                                          properties:
                                            value:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: Wait amount.
                                            unit:
                                              type: string
                                              enum:
                                                - seconds
                                                - minutes
                                                - hours
                                                - days
                                              description: Wait unit.
                                          required:
                                            - value
                                            - unit
                                          additionalProperties: false
                                          description: >-
                                            How long to wait for the lead to click a
                                            link in the preceding email. Required.
                                      required:
                                        - type
                                        - waitFor
                                      additionalProperties: false
                                      title: email_clicked
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - task_completed
                                          description: >-
                                            Branch on whether the preceding task is
                                            marked complete within `waitFor`.
                                        waitFor:
                                          type: object
                                          properties:
                                            value:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: Wait amount.
                                            unit:
                                              type: string
                                              enum:
                                                - seconds
                                                - minutes
                                                - hours
                                                - days
                                              description: Wait unit.
                                          required:
                                            - value
                                            - unit
                                          additionalProperties: false
                                          description: >-
                                            How long to wait for the task to be
                                            marked complete. Required.
                                      required:
                                        - type
                                        - waitFor
                                      additionalProperties: false
                                      title: task_completed
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - connection_accepted
                                          description: >-
                                            Branch on whether the lead accepts a
                                            previous LinkedIn connection request.
                                        waitFor:
                                          type: object
                                          properties:
                                            value:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: Wait amount.
                                            unit:
                                              type: string
                                              enum:
                                                - seconds
                                                - minutes
                                                - hours
                                                - days
                                              description: Wait unit.
                                          required:
                                            - value
                                            - unit
                                          additionalProperties: false
                                          description: >-
                                            How long to wait for the lead to accept
                                            the previous LinkedIn connection
                                            request. Required.
                                      required:
                                        - type
                                        - waitFor
                                      additionalProperties: false
                                      title: connection_accepted
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          enum:
                                            - lead_field
                                          description: Branch on a lead field value.
                                        field:
                                          type: string
                                          minLength: 1
                                          description: >-
                                            Built-in column name (e.g.
                                            `professionalEmail`, `mobilePhone`) or
                                            custom field name.
                                        operator:
                                          type: string
                                          enum:
                                            - EQUALS
                                            - NOT_EQUALS
                                            - CONTAINS
                                            - NOT_CONTAINS
                                            - GREATER_THAN
                                            - LESS_THAN
                                            - GREATER_THAN_OR_EQUALS
                                            - LESS_THAN_OR_EQUALS
                                            - IS_EMPTY
                                            - IS_NOT_EMPTY
                                          description: >-
                                            Comparison operator. `IS_EMPTY` and
                                            `IS_NOT_EMPTY` ignore `value`; all
                                            others require it.
                                        value:
                                          anyOf:
                                            - type: string
                                            - type: number
                                            - type: boolean
                                            - type: array
                                              items:
                                                type: string
                                            - type: array
                                              items:
                                                type: number
                                            - type: array
                                              items:
                                                type: boolean
                                          description: >-
                                            Comparison value. Required for every
                                            operator except `IS_EMPTY` and
                                            `IS_NOT_EMPTY`.
                                      required:
                                        - type
                                        - field
                                        - operator
                                      additionalProperties: false
                                      title: lead_field
                                  description: >-
                                    Condition evaluated at this point in the
                                    sequence. Supported `condition.type` values
                                    are `has_linkedin_profile`,
                                    `has_professional_email`,
                                    `is_already_connected`,
                                    `has_been_contacted`,
                                    `has_whatsapp_account`, `email_opened`,
                                    `email_clicked`, `task_completed`,
                                    `connection_accepted`, and `lead_field`. The
                                    email, task, and connection-accepted
                                    variants require a `waitFor` object with
                                    `value` and `unit`. The `lead_field` variant
                                    requires `field` and `operator`, and a
                                    `value` for every operator except `IS_EMPTY`
                                    and `IS_NOT_EMPTY`.
                                onTrue:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      type:
                                        type: string
                                        description: Nested branch step type.
                                    required:
                                      - type
                                    additionalProperties: {}
                                    description: >-
                                      Nested branch step. Use the same step
                                      payload shape as top-level `steps` items.
                                  minItems: 1
                                  description: >-
                                    Steps to run when the condition matches. If
                                    provided, it must contain at least one step.
                                    Use `{ "type": "end" }` to stop that branch
                                    explicitly.
                                onFalse:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      type:
                                        type: string
                                        description: Nested branch step type.
                                    required:
                                      - type
                                    additionalProperties: {}
                                    description: >-
                                      Nested branch step. Use the same step
                                      payload shape as top-level `steps` items.
                                  minItems: 1
                                  description: >-
                                    Steps to run when the condition does not
                                    match. If provided, it must contain at least
                                    one step. Use `{ "type": "end" }` to stop
                                    that branch explicitly.
                              required:
                                - type
                                - condition
                              additionalProperties: false
                              title: condition
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - linkedin_connection
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                                content:
                                  type: string
                                  description: Connection note when already configured.
                                waitForAcceptance:
                                  type: object
                                  properties:
                                    value:
                                      type: integer
                                      minimum: 1
                                      description: >-
                                        whole number of days to wait. Minimum 1
                                        day.
                                    unit:
                                      type: string
                                      enum:
                                        - days
                                      description: Connection wait unit. Must be `days`.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                                  description: >-
                                    How long to wait for an acceptance before
                                    evaluating branches. Days only. Omitted for
                                    fire-and-forget campaigns that send the
                                    request without an inline acceptance check.
                                onAccepted:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      type:
                                        type: string
                                        description: Nested branch step type.
                                    required:
                                      - type
                                    additionalProperties: {}
                                    description: >-
                                      Nested branch step. Use the same step
                                      payload shape as top-level `steps` items.
                                  minItems: 1
                                  description: >-
                                    Steps to run when the connection is
                                    accepted. If provided, it must contain at
                                    least one step. Use `{ "type": "end" }` to
                                    stop that branch explicitly.
                                onNotAccepted:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      type:
                                        type: string
                                        description: Nested branch step type.
                                    required:
                                      - type
                                    additionalProperties: {}
                                    description: >-
                                      Nested branch step. Use the same step
                                      payload shape as top-level `steps` items.
                                  minItems: 1
                                  description: >-
                                    Steps to run when the connection is not
                                    accepted in time. If provided, it must
                                    contain at least one step. Use `{ "type":
                                    "end" }` to stop that branch explicitly.
                              required:
                                - type
                              additionalProperties: false
                              title: linkedin_connection
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - task
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                taskType:
                                  type: string
                                  description: >-
                                    Task type identifier when already
                                    configured. For HubSpot this is one of CALL,
                                    EMAIL, or TODO.
                                title:
                                  type: string
                                  description: >-
                                    Task title shown to the assignee when
                                    present.
                                note:
                                  type: string
                                  description: Optional task note shown in the UI.
                                ownerId:
                                  type:
                                    - string
                                    - 'null'
                                  description: Task owner ID when one is assigned.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                              additionalProperties: false
                              title: task
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - add_to_another_campaign
                                  description: >-
                                    Routes the lead into another campaign owned
                                    by the same workspace, then ends this
                                    branch.
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                                campaignId:
                                  type: integer
                                  exclusiveMinimum: 0
                                  description: >-
                                    ID of a campaign owned by the same client as
                                    the API key making the request.
                                delay:
                                  type: object
                                  properties:
                                    value:
                                      type: number
                                      minimum: 0
                                      description: Delay amount.
                                    unit:
                                      type: string
                                      enum:
                                        - seconds
                                        - minutes
                                        - hours
                                        - days
                                      description: Delay unit.
                                  required:
                                    - value
                                    - unit
                                  additionalProperties: false
                              required:
                                - type
                                - campaignId
                              additionalProperties: false
                              title: add_to_another_campaign
                            - type: object
                              properties:
                                type:
                                  type: string
                                  enum:
                                    - end
                                stepId:
                                  type: string
                                  description: >-
                                    Stable identifier for this step within the
                                    campaign. Pass as `stepId` to `GET
                                    /v1/campaign/{campaignId}/step-analytics`.
                                connectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge feeding this step
                                    from its predecessor. Pass as `targetEdgeId`
                                    to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph in immediately
                                    before this step.
                                nextConnectionId:
                                  type: string
                                  description: >-
                                    Frontend ID of the edge leaving this step.
                                    Pass as `targetEdgeId` to `POST
                                    /v1/campaign/{campaignId}/steps/clone` to
                                    splice a cloned subgraph immediately after
                                    this step. Absent on terminal steps (`end`,
                                    `add_to_another_campaign`).
                              required:
                                - type
                              additionalProperties: false
                              title: end
                        minItems: 1
                        description: >-
                          Ordered campaign draft steps. Read responses may omit
                          step fields that are still incomplete in a draft
                          campaign.
                      id:
                        type: number
                        description: Unique identifier for the campaign
                      appUrl:
                        type: string
                        format: uri
                        description: Direct Enginy app URL for opening the campaign.
                      status:
                        type: string
                        enum:
                          - DRAFT
                          - PENDING
                          - ACTIVE
                          - COMPLETED
                          - DELETED
                        description: Status of the campaign
                      createdBy:
                        type: object
                        properties:
                          id:
                            type: number
                            description: ID of the user who created the campaign
                          name:
                            type:
                              - string
                              - 'null'
                            description: Name of the user who created the campaign
                        required:
                          - id
                          - name
                      crmOwnerId:
                        type:
                          - string
                          - 'null'
                        description: CRM owner associated with the campaign
                      senderIdentity:
                        type:
                          - object
                          - 'null'
                        properties:
                          id:
                            type: number
                            description: ID of the sender identity
                          name:
                            type: string
                            description: Name of the sender identity
                        required:
                          - id
                          - name
                        description: Sender identity associated with the campaign
                      folderId:
                        type:
                          - number
                          - 'null'
                        description: Folder ID containing the campaign, when assigned
                      createdAt:
                        type: string
                        format: date-time
                        description: Date and time when the campaign was created
                      updatedAt:
                        type: string
                        format: date-time
                        description: Date and time when the campaign was last updated
                    required:
                      - name
                      - steps
                      - id
                      - appUrl
                      - status
                      - createdBy
                      - crmOwnerId
                      - senderIdentity
                      - folderId
                      - createdAt
                      - updatedAt
                    additionalProperties: false
                required:
                  - status
                  - message
                  - data
        '400':
          description: Bad request - invalid campaign ID
        '404':
          description: Campaign not found
        '422':
          description: Campaign sequence cannot be represented in the simplified format
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````