---
title: "Get Outbound Communication Campaign"
method: GET
path: "/api/v1/outbound/campaigns/{campaign_id}"
tags: ["outbound.campaigns"]
---

# Get Outbound Communication Campaign

`GET /api/v1/outbound/campaigns/{campaign_id}`

## Path parameters

- `campaign_id` integer, required

## Response `200`

Successful Response

- OutboundCampaign
  - `campaign_name` string, required — Human readable name of campaign
  - `description` string, nullable — Description of campaign
  - `mode` string, nullable — Mode of the campaign (e.g. voice, sms, email)
  - `sms_session_ttl` integer, nullable — Time to live for SMS session in minutes
  - `label` string, nullable — Label for campaign (DEPRECATED - use labels instead)
  - `labels` string[], nullable — Labels for campaign
  - `campaign_variables` object, required — Variables for campaign
  - `daily_start_time` string, nullable — Start time of campaign each day
  - `daily_end_time` string, nullable — End time of campaign each day
  - `source` string, nullable — Source phone number, email, or SMS number
  - `caller_id` string, nullable, required — Caller ID for call
  - `hourly_rate` integer — Target number of outreach calls per hour
  - `max_daily_calls` integer, nullable — Maximum number of outreach calls per day
  - `retry_count` integer — Number of retries per target
  - `retry_interval` string, nullable — How long to wait before retrying
  - `active_days` DaysOfWeek[], required — Days of the week when campaign is active
  - `voicemail_detection` VoicemailDetectionConfig — 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.
    - `mode` 'v1' | 'v2', nullable — 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.
    - `voicemail_detection_overall_timeout` number, nullable
    - `voicemail_detection_pre_speech_timeout` number, nullable
    - `voicemail_detection_post_speech_timeout` number, nullable
    - `voicemail_detection_speech_threshold` number, nullable
  - `allowed_line_types` LineTypeBucket[], nullable — Line-type buckets this campaign is allowed to dial. Empty or omitted means no filter (all line types are dialed).
  - `include_unknown_line_types` boolean — 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.
  - `target_filters` TargetFilters — 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.
    - `match` 'all' | 'any' — How to combine rules: 'all' (AND) or 'any' (OR).
    - `on_unknown` 'include' | 'exclude' — Whether to dial requests whose enrichment is unresolved (no lookup data).
    - `rules` TargetFilterRule[] — Predicates over request enrichment attributes. Empty means no filter.
      - `field` string, required — Enrichment attribute to match on (a key in the request enrichment payload).
      - `op` 'in' | 'not_in' | 'eq' | 'neq' | 'exists' | 'not_exists', required — Comparison operator for a single target-filter rule.
      - `values` string[] — Values to compare against. Ignored for exists / not_exists.
  - `id` integer, required — Unique ID for campaign
  - `agent_id` integer, nullable — ID of agent assigned to campaign
  - `created_at` string, date-time — Timestamp of campaign creation
  - `updated_at` string, date-time — Timestamp of campaign update
  - `last_updated_by` string, required — Email of user who last updated campaign
  - `webhooks` OutboundCampaignWebhookResponse[], nullable — Webhooks for campaign
    - `trigger_statuses` ChannelManagerStatus[], required — Condition expression evaluated when the trigger fires
    - `url` string, required — HTTPS URL to which to send the webhook payload
    - `request_method` string, required — HTTP method for the outbound request (POST, PUT, or PATCH)
    - `id` integer, required — Unique ID for webhook
    - `auth_value_keys` string[], nullable — Auth value keys (values omitted for security); only hmac_secret is currently supported

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/asksyllable/apis/syllablesdk.md) · [All operations](https://skmtc.net/asksyllable/apis/syllablesdk/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/asksyllable/syllablesdk/versions/ac3228f980bb/schema)
