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

# Edit the messages of a running LinkedIn campaign

> Changes message steps and schedule on an active or paused LinkedIn campaign. Sent messages never change; steps people are already on cannot be removed.

Permission: `campaigns:edit-live`

[Read the recovery rules](https://docs.emailx.ai/en/api-reference/idempotency.md) before retrying a write. Keep the same key and body for the same logical operation.


## OpenAPI

````yaml openapi/emailx.en.json PUT /workspaces/{workspace_id}/campaigns/linkedin/{campaign_id}/live-sequence
openapi: 3.0.3
info:
  title: Emailx API
  version: 1.0.0-beta
  description: >-
    Customer and agency integrations for Emailx. Beta access is operator-issued.
    The v1 beta supports bounded People CSV/XLSX imports, saved email-template
    settings, selected email generation with explicit AI-credit confirmation,
    exact-message approval, reviewed email activation for native scheduled
    sending, and explicitly confirmed inbox replies bound to saved context when
    host capabilities permit. Inbox context is bounded and may be incomplete or
    stale; no provider refresh occurs. Manual LinkedIn imports, reviewed
    activation and reviewed resume of paused campaigns are separate gated
    workflows. Reply drafts, knowledge, team, infrastructure quotes with hosted
    checkout and agency administration are covered by separate scopes. Signed
    webhooks report durable operation outcomes. It does not support immediate
    batches or direct card charges.
servers:
  - url: https://app.emailx.ai/api/v1
    description: Emailx application · access must be enabled
security: []
tags:
  - name: Getting started
  - name: Workspaces
  - name: Contacts
  - name: Templates
  - name: Campaigns
  - name: Inbox
  - name: Senders
  - name: Team
  - name: Analytics
  - name: Imports
  - name: Operations
  - name: Knowledge
  - name: Infrastructure
  - name: Agency
paths:
  /workspaces/{workspace_id}/campaigns/linkedin/{campaign_id}/live-sequence:
    put:
      tags:
        - Run a live campaign
      summary: Edit the messages of a running LinkedIn campaign
      description: >-
        Changes message steps and schedule on an active or paused LinkedIn
        campaign. Sent messages never change; steps people are already on cannot
        be removed.


        Permission: `campaigns:edit-live`
      operationId: edit_api_linkedin_live_sequence
      parameters:
        - name: workspace_id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
          description: Emailx workspace (Clients) ID, not the agency workspace link ID.
        - name: campaign_id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
          description: Resource identifier.
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[A-Za-z0-9_.:/-]+$
          description: Unique per logical mutation. Same path and body replay for 24 hours.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditLiveLinkedinSequence'
            example:
              expected_revision: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
              steps:
                - label: Intro
                  message_template: >-
                    Thank them for connecting and ask one question about their
                    operations.
                  wait_days: 0
                - label: Follow-up
                  message_template: Share one short, relevant example.
                  wait_days: 4
      responses:
        '200':
          description: Success
          headers:
            X-Request-Id:
              schema:
                type: string
            Emailx-Api-Version:
              schema:
                type: string
            X-RateLimit-Limit:
              schema:
                type: string
            X-RateLimit-Remaining:
              schema:
                type: string
            X-RateLimit-Reset:
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/LiveLinkedinSequence'
                required:
                  - data
              example:
                data:
                  campaign_id: 1
                  revision: >-
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  steps: []
                  schedule: {}
                  prospects_rescheduled: 1
                  sent_history_changed: false
                  applies_to: future_messages
        '400':
          description: Request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Invalid, expired or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient scope or write permission
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Resource missing or inaccessible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict, concurrent request or uncertain original result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              schema:
                type: string
              description: Seconds to wait when present.
        '413':
          description: Request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited; respect Retry-After
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              schema:
                type: string
              description: Seconds to wait when present.
        '500':
          description: Request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: API disabled, request storage unavailable or feature not enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              schema:
                type: string
              description: Seconds to wait when present.
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X PUT
            "https://app.emailx.ai/api/v1/workspaces/123/campaigns/linkedin/456/live-sequence"
            \
              -H "Authorization: Bearer $EMAILX_API_KEY" \
              -H "Content-Type: application/json" \
              -H "Idempotency-Key: example-operation-001" \
              --data '{"expected_revision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","steps":[{"label":"Intro","message_template":"Thank them for connecting and ask one question about their operations.","wait_days":0},{"label":"Follow-up","message_template":"Share one short, relevant example.","wait_days":4}]}'
        - lang: Python
          source: |-
            import os, requests

            response = requests.put(
                "https://app.emailx.ai/api/v1/workspaces/123/campaigns/linkedin/456/live-sequence",
                headers={"Authorization": "Bearer " + os.environ["EMAILX_API_KEY"], "Idempotency-Key": "example-operation-001"},
                json={'expected_revision': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'steps': [{'label': 'Intro', 'message_template': 'Thank them for connecting and ask one question about their operations.', 'wait_days': 0}, {'label': 'Follow-up', 'message_template': 'Share one short, relevant example.', 'wait_days': 4}]},
                timeout=30,
            )
            response.raise_for_status()
            print(response.json())
        - lang: JavaScript
          source: >-
            const response = await
            fetch("https://app.emailx.ai/api/v1/workspaces/123/campaigns/linkedin/456/live-sequence",
            {
              method: "PUT",
              headers: { Authorization: `Bearer ${process.env.EMAILX_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": "example-operation-001" },
              body: JSON.stringify({"expected_revision": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "steps": [{"label": "Intro", "message_template": "Thank them for connecting and ask one question about their operations.", "wait_days": 0}, {"label": "Follow-up", "message_template": "Share one short, relevant example.", "wait_days": 4}]}),
              signal: AbortSignal.timeout(30000),
            });

            if (!response.ok) throw new Error(`Emailx: ${response.status}`);

            console.log(await response.json());
components:
  schemas:
    EditLiveLinkedinSequence:
      type: object
      properties:
        expected_revision:
          type: string
          pattern: ^[a-f0-9]{64}$
        steps:
          type: array
          minItems: 1
          maxItems: 5
          items:
            type: object
            properties:
              label:
                type: string
                maxLength: 200
              message_template:
                type: string
                minLength: 1
                maxLength: 8000
              wait_days:
                type: integer
                minimum: 0
                maximum: 14
                default: 3
            required:
              - message_template
            additionalProperties: false
        active_days:
          type: array
          minItems: 1
          items:
            type: string
            enum:
              - Mon
              - Tue
              - Wed
              - Thu
              - Fri
              - Sat
              - Sun
        time_start:
          type: string
          pattern: ^[0-2][0-9]:[0-5][0-9]$
        time_end:
          type: string
          pattern: ^[0-2][0-9]:[0-5][0-9]$
        user_timezone:
          type: string
          maxLength: 100
        daily_connection_limit:
          type: integer
          minimum: 1
          maximum: 30
        daily_message_limit:
          type: integer
          minimum: 1
          maximum: 100
        language:
          type: string
          maxLength: 50
      required:
        - expected_revision
        - steps
      additionalProperties: false
      description: >-
        Replaces message steps on an active or paused campaign. Steps needed by
        prospects already in the sequence cannot be removed; saved files stay
        attached by position.
    LiveLinkedinSequence:
      type: object
      properties:
        campaign_id:
          type: integer
          minimum: 1
        revision:
          type: string
          pattern: ^[a-f0-9]{64}$
        steps:
          type: array
          items:
            type: object
        schedule:
          type: object
        prospects_rescheduled:
          type: integer
          minimum: 0
        sent_history_changed:
          type: boolean
          enum:
            - false
        applies_to:
          type: string
          enum:
            - future_messages
      required:
        - campaign_id
        - revision
        - steps
        - schedule
        - prospects_rescheduled
        - sent_history_changed
        - applies_to
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            request_id:
              type: string
            details:
              type: object
              additionalProperties: true
          required:
            - code
            - message
            - request_id
      required:
        - error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        ex_test_ or ex_live_ key issued by an Emailx operator. Never use
        provider keys or session cookies.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.