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

# List campaign calls

> Lists calls/recipients created for a campaign. Use this lightweight response to track call statuses. Use Get call details for the full call record.

Use this endpoint to inspect recipients/calls created for a campaign and track
their current call statuses. The response is intentionally lightweight. Use the
returned call `id` with the Get call details endpoint for the full call record.


## OpenAPI

````yaml GET /v1/external/campaigns/{agent_id}/{campaign_id}/calls
openapi: 3.0.3
info:
  title: Samora AI API
  description: >
    The Samora AI API lets you trigger immediate outbound calls and manage
    outbound campaigns through the Samora AI system. Use it to start calls with
    your AI agents, pass per-call context, create campaigns, add recipients, and
    manage campaign lifecycle from your server.


    **Authentication:** Every request must include your organization API key in
    the `X-API-Key` header. These APIs are intended for server-to-server
    integrations; do not expose your organization API key in browser or mobile
    clients.


    **Phone number format:** Destination numbers must be in E.164 format (e.g.
    `+919876543210`) and include the country code. The pattern is: `+` followed
    by 10-15 digits.


    **Call statuses:** When you fetch call details, `status` can be: `PENDING`,
    `TRIGGERED`, `ONGOING`, `CALL_FINISHED`, `UNANSWERED`, `REJECTED`.


    **Campaign statuses:** Campaign `status` can be: `DRAFT`, `SCHEDULED`,
    `IN_PROGRESS`, `PAUSED`, `FINISHED`, `FAILED`, `CANCELLED`.


    **Campaign lifecycle:** Recipients can be added only while a campaign is
    `DRAFT` or `PAUSED`. Campaigns can be started only from `DRAFT` or `PAUSED`,
    stopped only from `IN_PROGRESS`, and cancelled unless they are already
    `FINISHED`, `FAILED`, or `CANCELLED`.


    **Campaign API limits:** Request bodies are limited to 2 MiB. Campaign names
    can be up to 120 characters. List requests support `page_size` up to 100.
    Add recipients accepts up to 5000 phone numbers per request, and each
    recipient's `call_variables` can be up to 4 KiB.


    **Transcripts and recordings:** For finished calls, presigned URLs for
    transcript and recording are valid for 60 minutes.
  version: 1.0.0
  license:
    name: Proprietary
servers:
  - url: https://api.samora.ai
    description: Production server
security:
  - ApiKeyAuth: []
paths:
  /v1/external/campaigns/{agent_id}/{campaign_id}/calls:
    get:
      description: >-
        Lists calls/recipients created for a campaign. Use this lightweight
        response to track call statuses. Use Get call details for the full call
        record.
      parameters:
        - $ref: '#/components/parameters/AgentId'
        - $ref: '#/components/parameters/CampaignId'
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
        - name: page_size
          in: query
          schema:
            type: integer
            default: 10
            minimum: 1
            maximum: 100
        - name: search
          in: query
          description: Search by recipient phone number.
          schema:
            type: string
        - name: status
          in: query
          description: Filter by call status.
          schema:
            type: string
        - name: duration_min
          in: query
          description: Minimum call duration in seconds.
          schema:
            type: integer
            minimum: 0
        - name: duration_max
          in: query
          description: Maximum call duration in seconds.
          schema:
            type: integer
            minimum: 0
        - name: sort_by
          in: query
          schema:
            type: string
            enum:
              - participant_id
              - status
              - created_at
              - updated_at
              - started_at
              - ended_at
              - duration
            default: created_at
        - name: sort_dir
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
      responses:
        '200':
          description: Campaign calls fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCampaignCallsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    AgentId:
      name: agent_id
      in: path
      required: true
      description: The UUID of the AI agent that owns the campaign.
      schema:
        type: string
        format: uuid
    CampaignId:
      name: campaign_id
      in: path
      required: true
      description: The UUID of the campaign.
      schema:
        type: string
        format: uuid
  schemas:
    ListCampaignCallsResponse:
      type: object
      required:
        - message
        - data
      properties:
        message:
          type: string
        data:
          type: object
          required:
            - calls
            - page
            - page_size
            - total
          properties:
            calls:
              type: array
              items:
                $ref: '#/components/schemas/CampaignCall'
            page:
              type: integer
            page_size:
              type: integer
            total:
              type: integer
          additionalProperties: false
      additionalProperties: false
    CampaignCall:
      type: object
      required:
        - id
        - to_number
        - status
        - duration
        - created_at
        - updated_at
        - started_at
        - ended_at
      properties:
        id:
          type: string
          format: uuid
        to_number:
          type: string
          description: Recipient phone number.
          pattern: ^\+[0-9]{10,15}$
        status:
          type: string
          description: Current call status.
        duration:
          type: integer
          description: Call duration in seconds.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        started_at:
          type: string
          format: date-time
          nullable: true
        ended_at:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Error message.
      additionalProperties: false
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found or does not belong to your organization
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your unique organization API key. Required on all requests.

````