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

# Update Outbound Communication Campaign



## OpenAPI

````yaml https://spec.speakeasy.com/syllable/syllable/syllable-sdk-oas-with-code-samples put /api/v1/outbound/campaigns/{campaign_id}
openapi: 3.1.0
info:
  title: SyllableSDK
  description: >

    # Syllable Platform SDK


    Syllable SDK gives you the power of awesome AI agentry. 🚀


    ## Overview


    The Syllable SDK provides a comprehensive set of tools and APIs to integrate
    powerful AI

    capabilities into your communication applications. Whether you're building
    phone agents, chatbots,

    virtual assistants, or any other AI-driven solutions, Syllable SDK has got
    you covered.


    ## Features


    - **Agent Configuration**: Create and manage agents that can interact with
    users across various 

    channels.

    - **Channel Management**: Configure channels like SMS, web chat, and more to
    connect agents with 

    users.

    - **Custom Messages**: Set up custom messages that agents can deliver as
    greetings or responses.

    - **Conversations**: Track and manage conversations between users and
    agents, including session 

    management.

    - **Tools and Workflows**: Leverage tools and workflows to enhance agent
    capabilities, such as data 

    processing and API calls.

    - **Data Sources**: Integrate data sources to provide agents with additional
    context and 

    information.

    - **Insights and Analytics**: Analyze conversations and sessions to gain
    insights into user 

    interactions.

    - **Permissions and Security**: Manage permissions to control access to
    various features and 

    functionalities.

    - **Language Support**: Define language groups to enable multilingual
    support for agents.

    - **Outbound Campaigns**: Create and manage outbound communication campaigns
    to reach users 

    effectively.

    - **Session Labels**: Label sessions with evaluations of quality and
    descriptions of issues 

    encountered.

    - **Incident Management**: Track and manage incidents related to agent
    interactions.
  version: 0.0.3
servers:
  - url: https://api.syllable.cloud
    description: API server
security: []
tags:
  - name: agents
    description: >-
      Operations related to agent configuration. When a user interacts with
      the           Syllable system, they do so by communicating with an
      agent.           An agent is linked to a prompt, a custom message, and one
      or more channel targets to           define its behavior and capabilities.
      For more information, see           [Console
      docs](https://docs.syllable.ai/workspaces/Agents).
  - name: agents.test
    description: >-
      Operations for testing agents with live text.           These endpoints
      allow sending messages to an agent and receiving its responses.
  - name: channels
    description: >-
      Operations related to channel configuration.           A channel is an
      organization-level point of communication, like a phone number or a
      web           chat. A channel can be associated with an agent by creating
      a channel target linking           them.
  - name: channels.twilio
    description: Operations related to Twilio channel configuration.
  - name: channels.twilio.numbers
    description: >-
      Operations related to setting up phone numbers in Twilio for use
      in           channels.
  - name: channels.targets
    description: >-
      Operations related to channel target configuration. A channel
      target           links a channel to an agent, allowing users to
      communicate with the agent through that           channel. For more
      information, see           [Console
      docs](https://docs.syllable.ai/Resources/Channels).
  - name: conversations
    description: >-
      Operations related to conversations.           A conversation is a record
      of messages between a user and an agent, and is composed of           one
      or more sessions.
  - name: custom_messages
    description: >-
      Operations related to custom message configuration.           A custom
      message is a pre-configured message delivered by an agent as a greeting at
      the           beginning of a conversation. Multiple agents can use the
      same custom mesasage. A custom           message has one or more rules
      defined, which allow for different messages to be           dynamically
      selected and delivered at runtime based on the current time and
      either           date or day of the week. For more information,
      see           [Console docs](https://docs.syllable.ai/Resources/Messages).
  - name: dashboards
    description: >-
      Operations related to dashboards. Currently the API/SDK           only
      supports fetching basic information about dashboards.
  - name: data_sources
    description: >-
      Operations related to data sources. A data source is a blob of text
      that           can be made available to an agent's general info tools to
      provide more context to the           agent when generating its responses.
      For more information, see           [Console
      docs](https://docs.syllable.ai/Resources/DataSources).
  - name: directory
    description: Operations related to directory
  - name: events
    description: >-
      Operations related to events. An event represents a specific
      occurrence           during a session. Currently the API/SDK only supports
      fetching logged events.
  - name: incidents
    description: Operations related to incidents.
  - name: insights
    description: >-
      Operations related to insights results. An insight is a tool that
      processes          conversation data to extract information and generate
      reports.
  - name: insights.folders
    description: >-
      Operations related to insights upload folders. An insight folder is
      used          to upload call recordings for insight workflow analysis.
  - name: insights.tools
    description: >-
      Operations related to insights tool configurationss. An insight is a
      tool           that processes conversation data to extract information and
      generate reports.
  - name: insights.workflows
    description: >-
      Operations related to insights workflows. An workflow is series of
      tool           invocations that processes conversation data to extract
      information and generate           reports.
  - name: language_groups
    description: >-
      Operations related to language groups. A language group is a          
      collection of language, voice, and DTMF configuration that can be linked
      to an agent to           define the languages and voices it supports. For
      more information, see           [Console
      docs](https://docs.syllable.ai/Resources/LanguageGroups).
  - name: organizations
    description: Operations related to organizations.
  - name: outbound.campaigns
    description: Operations related to outbound message campaigns
  - name: outbound.batches
    description: Operations related to outbound campaign batches
  - name: permissions
    description: >-
      Operations related to permissions. A permission is a specific          
      capability or access level granted to a user within the Syllable
      system.           Permissions are used to control access to various
      features and functionalities.
  - name: prompts
    description: >-
      Operations related to prompts. A prompt defines the behavior of
      an           agent by delivering instructions to the LLM about how the
      agent should behave.           A prompt can be linked to one or more
      agents. A prompt can also be linked to tools to           allow an agent
      using the prompt to use them. For more information, see           [Console
      docs](https://docs.syllable.ai/Resources/Prompts).
  - name: roles
    description: >-
      Operations related to roles. A role is a collection of
      permissions           that can be assigned to users to control their
      access to various features within the           Syllable system.
  - name: services
    description: >-
      Operations related to service configuration. A service is a collection
      of           tools. You can specify an authentication method and values on
      a service, and any linked           tools will use that auth information
      to generate headers for HTTP calls.
  - name: sessions
    description: >-
      Operations related to sessions. A session is a building block of
      a           conversation. For more information, see           [Console
      docs](https://docs.syllable.ai/workspaces/Sessions).
  - name: session_labels
    description: >-
      Operations related to labeling sessions with evaluations of quality
      and           descriptions of issues the user encountered or other
      details. For more information, see           [Console
      docs](https://docs.syllable.ai/workspaces/Sessions).
  - name: tools
    description: >-
      Operations related to tool configuration. A tool is a function that
      an           agent can call to perform actions like accessing databases,
      making API calls, or           processing data. For an agent to have
      access to a tool, the prompt associated with that           agent should
      be linked to the tool and include instructions to use it. For
      more           information, see [Console
      docs](https://docs.syllable.ai/Resources/Tools).
paths:
  /api/v1/outbound/campaigns/{campaign_id}:
    put:
      tags:
        - outbound.campaigns
      summary: Update Outbound Communication Campaign
      operationId: outbound_campaign_update
      parameters:
        - name: campaign_id
          in: path
          required: true
          schema:
            type: integer
            title: Campaign Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OutboundCampaignInput'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutboundCampaign'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
      x-codeSamples:
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { SyllableSDK } from "syllable-sdk";

            const syllableSDK = new SyllableSDK({
              apiKeyHeader: process.env["SYLLABLESDK_API_KEY_HEADER"] ?? "",
            });

            async function run() {
              const result = await syllableSDK.outbound.campaigns.update({
                campaignId: 679645,
                outboundCampaignInput: {
                  campaignName: "Outbound Campaign 1",
                  description: "This is a test campaign",
                  mode: "voice",
                  smsSessionTtl: 720,
                  labels: [
                    "test",
                    "demo",
                  ],
                  campaignVariables: {
                    "key": "value",
                    "key2": "value2",
                  },
                  dailyStartTime: "09:00:00",
                  dailyEndTime: "17:00:00",
                  source: "+19032900844",
                  callerId: "19995551234",
                  hourlyRate: 25,
                  maxDailyCalls: 2500,
                  retryCount: 1,
                  retryInterval: "30m",
                  activeDays: [
                    "mon",
                    "tue",
                    "wed",
                    "thu",
                    "fri",
                  ],
                  voicemailDetection: {
                    voicemailDetectionOverallTimeout: 30,
                    voicemailDetectionPreSpeechTimeout: 3.5,
                    voicemailDetectionPostSpeechTimeout: 1.75,
                  },
                  allowedLineTypes: [
                    "mobile",
                    "voip",
                  ],
                  targetFilters: {
                    match: "any",
                    rules: [
                      {
                        field: "line_type",
                        op: "in",
                        values: [
                          "landline",
                          "fixedVoip",
                          "nonFixedVoip",
                        ],
                      },
                      {
                        field: "carrier_name",
                        op: "in",
                        values: [
                          "Onvoy, LLC - Sinch",
                        ],
                      },
                    ],
                  },
                  webhooks: [
                    {
                      triggerStatuses: [
                        "COMPLETED",
                      ],
                      url: "https://example.com/hooks/syllable",
                      requestMethod: "POST",
                    },
                  ],
                },
              });

              console.log(result);
            }

            run();
        - lang: python
          label: Python (SDK)
          source: |-
            import os
            from syllable_sdk import SyllableSDK, models


            with SyllableSDK(
                api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""),
            ) as ss_client:

                res = ss_client.outbound.campaigns.update(campaign_id=187717, outbound_campaign_input=models.OutboundCampaignInput(
                    campaign_name="Outbound Campaign 1",
                    description="This is a test campaign",
                    mode="voice",
                    sms_session_ttl=720,
                    labels=[
                        "test",
                        "demo",
                    ],
                    campaign_variables={
                        "key": "value",
                        "key2": "value2",
                    },
                    daily_start_time="09:00:00",
                    daily_end_time="17:00:00",
                    source="+19032900844",
                    caller_id="19995551234",
                    hourly_rate=25,
                    max_daily_calls=2500,
                    retry_count=1,
                    retry_interval="30m",
                    active_days=[
                        models.DaysOfWeek.MON,
                        models.DaysOfWeek.TUE,
                        models.DaysOfWeek.WED,
                        models.DaysOfWeek.THU,
                        models.DaysOfWeek.FRI,
                    ],
                    voicemail_detection=models.VoicemailDetectionConfig(
                        voicemail_detection_overall_timeout=30,
                        voicemail_detection_pre_speech_timeout=3.5,
                        voicemail_detection_post_speech_timeout=1.75,
                    ),
                    allowed_line_types=[
                        models.LineTypeBucket.MOBILE,
                        models.LineTypeBucket.VOIP,
                    ],
                    target_filters=models.TargetFilters(
                        match=models.Match.ANY,
                        rules=[
                            models.TargetFilterRule(
                                field="line_type",
                                op=models.FilterOp.IN,
                                values=[
                                    "landline",
                                    "fixedVoip",
                                    "nonFixedVoip",
                                ],
                            ),
                            models.TargetFilterRule(
                                field="carrier_name",
                                op=models.FilterOp.IN,
                                values=[
                                    "Onvoy, LLC - Sinch",
                                ],
                            ),
                        ],
                    ),
                    webhooks=[
                        models.OutboundCampaignWebhookInput(
                            trigger_statuses=[
                                models.ChannelManagerStatus.COMPLETED,
                            ],
                            url="https://example.com/hooks/syllable",
                            request_method="POST",
                        ),
                    ],
                ))

                # Handle response
                print(res)
components:
  schemas:
    OutboundCampaignInput:
      properties:
        campaign_name:
          type: string
          title: Campaign Name
          description: Human readable name of campaign
          examples:
            - Outbound Campaign 1
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Description of campaign
          examples:
            - This is a test campaign
        mode:
          anyOf:
            - type: string
            - type: 'null'
          title: Mode
          description: Mode of the campaign (e.g. voice, sms, email)
          examples:
            - voice
            - sms
            - email
        sms_session_ttl:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sms Session Ttl
          description: Time to live for SMS session in minutes
          examples:
            - 720
        label:
          anyOf:
            - type: string
            - type: 'null'
          title: Label
          description: Label for campaign (DEPRECATED - use labels instead)
          deprecated: true
          examples:
            - test
            - demo
        labels:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Labels
          description: Labels for campaign
          examples:
            - - test
              - demo
        campaign_variables:
          additionalProperties:
            type: string
          type: object
          title: Campaign Variables
          description: Variables for campaign
          examples:
            - key: value
              key2: value2
        daily_start_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Daily Start Time
          description: Start time of campaign each day
          examples:
            - '09:00:00'
        daily_end_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Daily End Time
          description: End time of campaign each day
          examples:
            - '17:00:00'
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
          description: Source phone number, email, or SMS number
          examples:
            - '+19032900844'
            - account@email.com
        caller_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Caller Id
          description: Caller ID for call
          examples:
            - 19995551234
        hourly_rate:
          type: integer
          maximum: 3600
          minimum: 1
          title: Hourly Rate
          description: Target number of outreach calls per hour
          default: 1
          examples:
            - 25
        max_daily_calls:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Daily Calls
          description: Maximum number of outreach calls per day
          examples:
            - 2500
        retry_count:
          type: integer
          title: Retry Count
          description: Number of retries per target
          default: 0
          examples:
            - 1
        retry_interval:
          anyOf:
            - type: string
            - type: 'null'
          title: Retry Interval
          description: How long to wait before retrying
          examples:
            - 30m
            - 12h
            - 7d
        active_days:
          items:
            $ref: '#/components/schemas/DaysOfWeek'
          type: array
          title: Active Days
          description: Days of the week when campaign is active
          examples:
            - '["mon", "tue", "wed", "thu", "fri"]'
        voicemail_detection:
          anyOf:
            - $ref: '#/components/schemas/VoicemailDetectionConfig'
            - type: 'null'
          description: >-
            Config for voicemail detection for voice campaigns. Set to None to
            disable.
          examples:
            - voicemail_detection_overall_timeout: 30
              voicemail_detection_post_speech_timeout: 1.75
              voicemail_detection_pre_speech_timeout: 3.5
        allowed_line_types:
          anyOf:
            - items:
                $ref: '#/components/schemas/LineTypeBucket'
              type: array
            - type: 'null'
          title: Allowed Line Types
          description: >-
            Line-type buckets this campaign is allowed to dial. Empty or omitted
            means no filter (all line types are dialed).
          examples:
            - - mobile
              - voip
        include_unknown_line_types:
          type: boolean
          title: Include Unknown Line Types
          description: >-
            When a line-type filter is active, whether to also dial numbers
            whose line type is unknown or could not be classified. Has no effect
            when allowed_line_types is empty.
          default: true
          examples:
            - true
        target_filters:
          anyOf:
            - $ref: '#/components/schemas/TargetFilters'
            - type: 'null'
          description: >-
            Generic target filter (a flat rule list over request enrichment
            attributes such as line_type, carrier_name, mcc, mnc). When set,
            takes precedence over allowed_line_types /
            include_unknown_line_types. Omitted or null means those legacy
            fields are used instead.
          examples:
            - match: any
              on_unknown: include
              rules:
                - field: line_type
                  op: in
                  values:
                    - landline
                    - fixedVoip
                    - nonFixedVoip
                - field: carrier_name
                  op: in
                  values:
                    - Onvoy, LLC - Sinch
        webhooks:
          items:
            $ref: '#/components/schemas/OutboundCampaignWebhookInput'
          type: array
          title: Webhooks
          description: Webhooks for campaign
          default: []
          examples:
            - request_method: POST
              trigger_statuses:
                - COMPLETED
              url: https://example.com/hooks/syllable
      type: object
      required:
        - campaign_name
        - campaign_variables
        - caller_id
        - active_days
      title: OutboundCampaignInput
    OutboundCampaign:
      properties:
        campaign_name:
          type: string
          title: Campaign Name
          description: Human readable name of campaign
          examples:
            - Outbound Campaign 1
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Description of campaign
          examples:
            - This is a test campaign
        mode:
          anyOf:
            - type: string
            - type: 'null'
          title: Mode
          description: Mode of the campaign (e.g. voice, sms, email)
          examples:
            - voice
            - sms
            - email
        sms_session_ttl:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sms Session Ttl
          description: Time to live for SMS session in minutes
          examples:
            - 720
        label:
          anyOf:
            - type: string
            - type: 'null'
          title: Label
          description: Label for campaign (DEPRECATED - use labels instead)
          deprecated: true
          examples:
            - test
            - demo
        labels:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Labels
          description: Labels for campaign
          examples:
            - - test
              - demo
        campaign_variables:
          additionalProperties:
            type: string
          type: object
          title: Campaign Variables
          description: Variables for campaign
          examples:
            - key: value
              key2: value2
        daily_start_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Daily Start Time
          description: Start time of campaign each day
          examples:
            - '09:00:00'
        daily_end_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Daily End Time
          description: End time of campaign each day
          examples:
            - '17:00:00'
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
          description: Source phone number, email, or SMS number
          examples:
            - '+19032900844'
            - account@email.com
        caller_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Caller Id
          description: Caller ID for call
          examples:
            - 19995551234
        hourly_rate:
          type: integer
          maximum: 3600
          minimum: 1
          title: Hourly Rate
          description: Target number of outreach calls per hour
          default: 1
          examples:
            - 25
        max_daily_calls:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Daily Calls
          description: Maximum number of outreach calls per day
          examples:
            - 2500
        retry_count:
          type: integer
          title: Retry Count
          description: Number of retries per target
          default: 0
          examples:
            - 1
        retry_interval:
          anyOf:
            - type: string
            - type: 'null'
          title: Retry Interval
          description: How long to wait before retrying
          examples:
            - 30m
            - 12h
            - 7d
        active_days:
          items:
            $ref: '#/components/schemas/DaysOfWeek'
          type: array
          title: Active Days
          description: Days of the week when campaign is active
          examples:
            - '["mon", "tue", "wed", "thu", "fri"]'
        voicemail_detection:
          anyOf:
            - $ref: '#/components/schemas/VoicemailDetectionConfig'
            - type: 'null'
          description: >-
            Config for voicemail detection for voice campaigns. Set to None to
            disable.
          examples:
            - voicemail_detection_overall_timeout: 30
              voicemail_detection_post_speech_timeout: 1.75
              voicemail_detection_pre_speech_timeout: 3.5
        allowed_line_types:
          anyOf:
            - items:
                $ref: '#/components/schemas/LineTypeBucket'
              type: array
            - type: 'null'
          title: Allowed Line Types
          description: >-
            Line-type buckets this campaign is allowed to dial. Empty or omitted
            means no filter (all line types are dialed).
          examples:
            - - mobile
              - voip
        include_unknown_line_types:
          type: boolean
          title: Include Unknown Line Types
          description: >-
            When a line-type filter is active, whether to also dial numbers
            whose line type is unknown or could not be classified. Has no effect
            when allowed_line_types is empty.
          default: true
          examples:
            - true
        target_filters:
          anyOf:
            - $ref: '#/components/schemas/TargetFilters'
            - type: 'null'
          description: >-
            Generic target filter (a flat rule list over request enrichment
            attributes such as line_type, carrier_name, mcc, mnc). When set,
            takes precedence over allowed_line_types /
            include_unknown_line_types. Omitted or null means those legacy
            fields are used instead.
          examples:
            - match: any
              on_unknown: include
              rules:
                - field: line_type
                  op: in
                  values:
                    - landline
                    - fixedVoip
                    - nonFixedVoip
                - field: carrier_name
                  op: in
                  values:
                    - Onvoy, LLC - Sinch
        id:
          type: integer
          title: Id
          description: Unique ID for campaign
          examples:
            - 1
        agent_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Agent Id
          description: ID of agent assigned to campaign
          examples:
            - agent_id
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Timestamp of campaign creation
          examples:
            - '2026-07-13T00:00:00Z'
        updated_at:
          type: string
          format: date-time
          title: Updated At
          description: Timestamp of campaign update
          examples:
            - '2026-07-13T00:00:00Z'
        last_updated_by:
          type: string
          title: Last Updated By
          description: Email of user who last updated campaign
          examples:
            - user@email.com
        webhooks:
          anyOf:
            - items:
                $ref: '#/components/schemas/OutboundCampaignWebhookResponse'
              type: array
            - type: 'null'
          title: Webhooks
          description: Webhooks for campaign
          examples:
            - id: 1
              request_method: POST
              trigger_statuses:
                - COMPLETED
              url: https://example.com/hooks/syllable
      type: object
      required:
        - campaign_name
        - campaign_variables
        - caller_id
        - active_days
        - id
        - last_updated_by
      title: OutboundCampaign
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DaysOfWeek:
      type: string
      enum:
        - mon
        - tue
        - wed
        - thu
        - fri
        - sat
        - sun
      title: DaysOfWeek
      description: Enum representing days of the week.
    VoicemailDetectionConfig:
      properties:
        mode:
          anyOf:
            - type: string
              enum:
                - v1
                - v2
            - type: 'null'
          title: Mode
          description: >-
            Voicemail-detection strategy: 'v1' (original
            check_voicemail/leave_voicemail) or 'v2' (Voicemail Detection 2,
            which suppresses the turn-0 greeting and uses the greeting tool).
            The two modes are mutually exclusive. Omitted/null on legacy v1
            campaigns is treated as v1.
          examples:
            - v1
            - v2
        voicemail_detection_overall_timeout:
          anyOf:
            - type: number
            - type: 'null'
          title: Voicemail Detection Overall Timeout
        voicemail_detection_pre_speech_timeout:
          anyOf:
            - type: number
            - type: 'null'
          title: Voicemail Detection Pre Speech Timeout
        voicemail_detection_post_speech_timeout:
          anyOf:
            - type: number
            - type: 'null'
          title: Voicemail Detection Post Speech Timeout
        voicemail_detection_speech_threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Voicemail Detection Speech Threshold
      additionalProperties: true
      type: object
      title: VoicemailDetectionConfig
      description: >-
        Voicemail detection config stored on
        outbound_campaign.voicemail_detection.


        `mode` selects the (mutually-exclusive) strategy; the remaining fields
        are detection timeouts.

        Unknown keys are preserved (`extra='allow'`) so the schema stays
        backwards compatible with blobs

        written before fields were added. See ZOO-7818.
    LineTypeBucket:
      type: string
      enum:
        - mobile
        - landline
        - voip
      title: LineTypeBucket
      description: |-
        Friendly line-type buckets a campaign can be restricted to dial.

        These map to raw Twilio Lookup v2 line types via
        ``lib.twilio.line_type_lookup.LINE_TYPE_BUCKETS``.
    TargetFilters:
      properties:
        match:
          type: string
          enum:
            - all
            - any
          title: Match
          description: 'How to combine rules: ''all'' (AND) or ''any'' (OR).'
          default: all
          examples:
            - all
            - any
        on_unknown:
          type: string
          enum:
            - include
            - exclude
          title: On Unknown
          description: >-
            Whether to dial requests whose enrichment is unresolved (no lookup
            data).
          default: include
          examples:
            - include
            - exclude
        rules:
          items:
            $ref: '#/components/schemas/TargetFilterRule'
          type: array
          title: Rules
          description: >-
            Predicates over request enrichment attributes. Empty means no
            filter.
          examples:
            - - field: line_type
                op: in
                values:
                  - landline
                  - fixedVoip
                  - nonFixedVoip
              - field: carrier_name
                op: in
                values:
                  - Onvoy, LLC - Sinch
      type: object
      title: TargetFilters
      description: >-
        Generic target filter for an outbound campaign: a flat list of rules
        over request enrichment.


        A request is *dialable* when it matches the ruleset (``match='all'`` ->
        every rule; ``'any'`` ->

        at least one rule); non-matching requests are skipped. ``on_unknown``
        decides the fate of

        requests whose enrichment never resolved (no lookup / lookup failed). An
        empty ``rules`` list

        means no filter (all numbers dialed), matching the pre-filter behavior.
    OutboundCampaignWebhookInput:
      properties:
        trigger_statuses:
          items:
            $ref: '#/components/schemas/ChannelManagerStatus'
          type: array
          title: Trigger Statuses
          description: Condition expression evaluated when the trigger fires
          examples:
            - campaign_id == 1 && channel_manager_status == 'COMPLETED'
        url:
          type: string
          title: Url
          description: HTTPS URL to which to send the webhook payload
          examples:
            - https://example.com/hooks/syllable
        request_method:
          type: string
          title: Request Method
          description: HTTP method for the outbound request (POST, PUT, or PATCH)
          examples:
            - POST
        id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Id
          description: Unique ID for webhook, if updating an existing webhook
          examples:
            - 1
        auth_values:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - type: 'null'
              type: object
            - type: 'null'
          title: Auth Values
          description: >-
            Optional dict of auth values. Currently, only the key "hmac_secret"
            is allowed; value must be standard Base64 (RFC 4648) decoding to
            32–512 bytes of key material. On update, leave a value for a given
            key null and the stored value for that key is kept. (If a key is
            omitted entirely, any existing value for that key is removed.)
          examples:
            - hmac_secret: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
      type: object
      required:
        - trigger_statuses
        - url
        - request_method
      title: OutboundCampaignWebhookInput
    OutboundCampaignWebhookResponse:
      properties:
        trigger_statuses:
          items:
            $ref: '#/components/schemas/ChannelManagerStatus'
          type: array
          title: Trigger Statuses
          description: Condition expression evaluated when the trigger fires
          examples:
            - campaign_id == 1 && channel_manager_status == 'COMPLETED'
        url:
          type: string
          title: Url
          description: HTTPS URL to which to send the webhook payload
          examples:
            - https://example.com/hooks/syllable
        request_method:
          type: string
          title: Request Method
          description: HTTP method for the outbound request (POST, PUT, or PATCH)
          examples:
            - POST
        id:
          type: integer
          title: Id
          description: Unique ID for webhook
          examples:
            - 1
        auth_value_keys:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Auth Value Keys
          description: >-
            Auth value keys (values omitted for security); only hmac_secret is
            currently supported
          examples:
            - - hmac_secret
      type: object
      required:
        - trigger_statuses
        - url
        - request_method
        - id
      title: OutboundCampaignWebhookResponse
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    TargetFilterRule:
      properties:
        field:
          type: string
          title: Field
          description: >-
            Enrichment attribute to match on (a key in the request enrichment
            payload).
          examples:
            - line_type
            - carrier_name
            - mnc
        op:
          $ref: '#/components/schemas/FilterOp'
          description: Comparison operator.
          examples:
            - in
            - not_in
        values:
          items:
            type: string
          type: array
          title: Values
          description: Values to compare against. Ignored for exists / not_exists.
          examples:
            - - landline
              - fixedVoip
              - nonFixedVoip
      type: object
      required:
        - field
        - op
      title: TargetFilterRule
      description: >-
        A single predicate over one enrichment attribute of an outbound request.


        ``field`` names a key in the request's enrichment payload (e.g.
        ``line_type``, ``carrier_name``,

        ``mcc``, ``mnc``). Any attribute captured at lookup time can be filtered
        on with no code change.
    ChannelManagerStatus:
      type: string
      enum:
        - PENDING
        - DUPLICATE
        - INVALID
        - UNEXPECTED_ERROR
        - FILTERED_LINE_TYPE
        - PROCESSED
        - DROPPED
        - DEFERRED
        - BOUNCED
        - DELIVERED
        - OPENED
        - CLICKED
        - SPAM_REPORT
        - UNSUBSCRIBED
        - PRIOR_UNSUBSCRIBED
        - PRIOR_SPAM_REPORT
        - PRIOR_DROPPED
        - PRIOR_BOUNCED
        - SENT
        - ACCEPTED
        - QUEUED
        - SENDING
        - UNDELIVERED
        - DELIVERY_UNKNOWN
        - DELIVERY_FAILED
        - IN-PROGRESS
        - BUSY
        - CANCELED
        - COMPLETED
        - DECLINED
        - NO-ANSWER
        - MACHINE
        - HUMAN
        - UNKNOWN
        - FAILED
        - SIP_NOT_FOUND
        - SIP_TEMPORARILY_UNAVAILABLE
        - SIP_LOOP_DETECTED
        - SIP_DOES_NOT_EXIST_ANYWHERE
      title: ChannelManagerStatus
      description: Status of an outbound communication request (voice, SMS, or email).
    FilterOp:
      type: string
      enum:
        - in
        - not_in
        - eq
        - neq
        - exists
        - not_exists
      title: FilterOp
      description: Comparison operator for a single target-filter rule.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: Syllable-API-Key

````