> ## 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.

# Update campaign status

> Update campaign status to DRAFT, PENDING, ACTIVE, COMPLETED, or DELETED. There is no PAUSED status. Setting status to ACTIVE launches the campaign: it assigns identities and emails to conversations and starts sending. Setting status to DRAFT does not immediately stop outreach — it is a soft, best-effort pause: conversations that are already running keep progressing and in-flight messages can still go out until each conversation next re-evaluates campaign status, so it should not be relied on to instantly halt sends. To reliably stop outreach to one contact right now, use `pause_a_contact_in_a_campaign` instead, which pauses only that contact's conversation rather than the whole campaign. Setting status to COMPLETED or DELETED is terminal: conversations are marked completed or deleted and the campaign cannot move back to DRAFT, PENDING, or ACTIVE afterward (a COMPLETED campaign can only move to DELETED).

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

    > **Required scope:** `CAMPAIGNS_WRITE`
    >
    > **Rate limit:** 30 requests per minute



## OpenAPI

````yaml https://openapi.enginy.ai/definitions.json patch /v1/campaign/{campaignId}/status
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}/status:
    patch:
      tags:
        - Campaigns
      summary: Update campaign status
      description: >-
        Update campaign status to DRAFT, PENDING, ACTIVE, COMPLETED, or DELETED.
        There is no PAUSED status. Setting status to ACTIVE launches the
        campaign: it assigns identities and emails to conversations and starts
        sending. Setting status to DRAFT does not immediately stop outreach — it
        is a soft, best-effort pause: conversations that are already running
        keep progressing and in-flight messages can still go out until each
        conversation next re-evaluates campaign status, so it should not be
        relied on to instantly halt sends. To reliably stop outreach to one
        contact right now, use `pause_a_contact_in_a_campaign` instead, which
        pauses only that contact's conversation rather than the whole campaign.
        Setting status to COMPLETED or DELETED is terminal: conversations are
        marked completed or deleted and the campaign cannot move back to DRAFT,
        PENDING, or ACTIVE afterward (a COMPLETED campaign can only move to
        DELETED).


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

            > **Required scope:** `CAMPAIGNS_WRITE`
            >
            > **Rate limit:** 30 requests per minute
      parameters:
        - schema:
            type: string
            description: The campaign ID to update
          required: true
          description: The campaign ID to update
          name: campaignId
          in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum:
                    - DRAFT
                    - PENDING
                    - ACTIVE
                    - COMPLETED
                    - DELETED
                  description: >-
                    Target campaign status. There is no PAUSED value: DRAFT is a
                    soft, best-effort pause that does not immediately stop
                    in-flight conversations — use
                    `pause_a_contact_in_a_campaign` to reliably stop one contact
                    right now. COMPLETED and DELETED are terminal (a COMPLETED
                    campaign can only move to DELETED).
              required:
                - status
      responses:
        '200':
          description: Campaign status updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      id:
                        type: number
                      appUrl:
                        type: string
                        format: uri
                        description: Direct Enginy app URL for opening the campaign.
                      status:
                        type: string
                    required:
                      - id
                      - appUrl
                      - status
                required:
                  - status
                  - message
                  - data
        '400':
          description: Bad request - validation error or invalid status transition
        '404':
          description: Campaign not found
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````