---
title: "GET /v1/external/campaigns/{agent_id}/{campaign_id}"
method: GET
path: "/v1/external/campaigns/{agent_id}/{campaign_id}"
---

# GET /v1/external/campaigns/{agent_id}/{campaign_id}

`GET /v1/external/campaigns/{agent_id}/{campaign_id}`

## Request

- Base URL: `https://api.samora.ai`
- URL: `https://api.samora.ai/v1/external/campaigns/{agent_id}/{campaign_id}`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/i-stem/apis/samora-ai-api/docs/v1/external/campaigns/:agent_id/:campaign_id/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieves campaign details and aggregate call statistics.

## Path parameters

- `agent_id` string, uuid, required
- `campaign_id` string, uuid, required

## Response `200`

Campaign fetched successfully

- GetCampaignResponse
  - `message` string, required
  - `data` object, required
    - `campaign` Campaign, required
      - `id` string, uuid
      - `name` string
      - `agent_id` string, uuid
      - `agent_name` string: Agent name, included on responses that join campaign and agent details.
      - `status` 'DRAFT' | 'SCHEDULED' | 'IN_PROGRESS' | 'PAUSED' | 'FINISHED' | 'FAILED' | 'CANCELLED'
      - `retry_config` RetryConfig: Optional retry behavior for campaign calls. Retries are attempted when a call ends with one of the statuses listed in `retry_on`.
        - `max_retries` integer: Maximum retry attempts per recipient call. Must be between 1 and 5 when retry_config is provided.
        - `retry_delay_minutes` integer: Delay in minutes before each retry attempt. Must be between 1 and 1440.
        - `retry_on` string[]: Call statuses that should trigger a retry.
      - `call_stats` CampaignCallStats
        - `total` integer
        - `finished` integer
        - `pending` integer
        - `unanswered` integer
        - `failed` integer
        - `total_duration` string: Human-readable total call duration.
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `stats` CampaignCallStats, required
      - `total` integer
      - `finished` integer
      - `pending` integer
      - `unanswered` integer
      - `failed` integer
      - `total_duration` string: Human-readable total call duration.

## Other responses

- `400`: Bad request
- `404`: Resource not found or does not belong to your organization
- `500`: Internal server error

## Changes

- **2026-06-02** `b9d6c9669dfa`: 3 warning, 3 info
  - removed the optional property `data/campaign/cps` from the response with the `200` status
  - removed the optional property `data/campaign/metadata` from the response with the `200` status
  - removed the optional property `data/campaign/schedule_config` from the response with the `200` status
  - added the optional property `data/campaign/retry_config/max_retries` to the response with the `200` status
  - …2 more
- **2026-06-02** `c05ce18c8419`: 1 info
  - endpoint added
- **2026-02-03** `919eb7a392aa`: 1 breaking
  - api path removed without deprecation

[Operation history](https://skmtc.dev/i-stem/apis/samora-ai-api/changes/v1/external/campaigns/:agent_id/:campaign_id/get.md)

---

[API](https://skmtc.dev/i-stem/apis/samora-ai-api.md) - [All operations](https://skmtc.dev/i-stem/apis/samora-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/i-stem/apis/samora-ai-api/revisions/cb390cb388d1?raw)
