---
title: "Get a campaign run"
method: GET
path: "/v1/campaigns/{id}/runs/{runId}"
tags: ["Campaigns"]
---

# Get a campaign run

`GET /v1/campaigns/{id}/runs/{runId}`

## Request

- Base URL: `https://api.samva.dev`
- URL: `https://api.samva.dev/v1/campaigns/{id}/runs/{runId}`
- Auth: API key in header `x-api-key`

Returns a single run of a campaign by its identifier.

## Path parameters

- `id` string, required
- `runId` string, required

## Response `200`

CampaignRun

- CampaignRun
  - `id` string, required
  - `campaignId` string, required
  - `status` 'scheduled' | 'resolving' | 'dispatching' | 'paused' | 'completed' | 'cancelled' | 'failed', required
  - `scheduledFor` string, required
  - `idempotencyKey` string, nullable, required
  - `startedAt` string, nullable, required
  - `completedAt` string, nullable, required
  - `contentSnapshot` CampaignContent, required
    - `channel` 'email', required
    - `email` EmailContent, required
      - `subject` string, nullable
      - `html` string, nullable
      - `text` string, nullable
      - `attachments` EmailAttachment[], nullable
        - `filename` string, required
        - `content` string, nullable
        - `mediaId` string
        - `contentType` string, required
        - `size` integer, required
      - `publicationId` string
      - `inputContractId` string
      - `templateId` string
      - `templateSlug` string, nullable
      - `templateData` TemplateData
      - `locale` string
      - `timeZone` string
      - `inReplyToMessageId` string
      - `replyTo` string[], nullable
      - `unsubscribeGroupId` string
      - `tracking` EmailTrackingOverrideV1: Requested per-send engagement tracking policy. Recipient opt-out takes precedence, then explicit fields, organization defaults, and product defaults.
        - `opens` boolean: Override open tracking for this send. Omit to inherit the organization default. A recipient tracking opt-out always disables tracking.
        - `clicks` boolean: Override click tracking for this send. Omit to inherit the organization default. A recipient tracking opt-out always disables tracking.
      - `footer` EmailFooterOverride
        - `enabled` boolean, nullable
    - `conversationId` string
    - `metadata` CampaignContentMetadata, nullable
  - `audienceSnapshot` CampaignAudience, required
    - `includeTags` string[], nullable
    - `excludeTags` string[], nullable
    - `contactIds` ContactId[], nullable
    - `groupIds` ContactGroupId[], nullable
  - `policySnapshot` CampaignPolicy, required
    - `unsubscribeGroupId` string
    - `pageSize` integer, nullable
  - `totalRecipients` number, required
  - `dispatchedCount` number, required
  - `failedCount` number, required
  - `skippedCount` number, required
  - `pendingCount` number, required
  - `skippedReasons` CampaignRunSkippedReason[], required
    - `reason` 'unsubscribed' | 'blocked' | 'suppressed' | 'opted_out' | 'unreachable' | 'no_identity' | 'inactive' | 'run_cancelled' | 'run_failed', required
    - `count` number, required
  - `estimatedCompletionAt` string, nullable, required
  - `failureReason` string, nullable, required
  - `holdReason` string, nullable, required
  - `holdDomainId` string, required
  - `holdUntil` string, nullable, required
  - `capacityWarning` string, nullable, required
  - `lastContactId` string, nullable, required
  - `createdBy` string, nullable, required
  - `actorEmail` string, required
  - `memberRole` string, required
  - `createdAt` string, required
  - `updatedAt` string, required

## Other responses

- `401`: UnauthorizedError
- `403`: ForbiddenError
- `404`: ResourceNotFoundError
- `422`: ValidationError
- `500`: InternalError
- `504`: GatewayTimeoutError

---

[API](https://skmtc.dev/samva/apis/samva-api.md) · [All operations](https://skmtc.dev/samva/apis/samva-api/llms.txt) · [OpenAPI document](https://skmtc.dev/samva/apis/samva-api/revisions/a99408542cc3?raw)
