> ## 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.

# Add campaign recipients

> Adds recipients to a campaign by creating scheduled outbound call records. Recipients can be added only when campaign status is DRAFT or PAUSED.

## Request body example

Use `phone_numbers` to add recipients to a campaign. Each phone number must be
in E.164 format. Use `call_variables` to pass per-recipient context to the
agent.

```json theme={null}
{
	"phone_numbers": [
		{
			"to_number": "+919876543210",
			"call_variables": {
				"name": "Aarav Sharma",
				"customer_id": "CUST-001",
				"city": "Mumbai"
			}
		},
		{
			"to_number": "+919812345678",
			"call_variables": {
				"name": "Priya Mehta",
				"customer_id": "CUST-002",
				"city": "Delhi"
			}
		}
	]
}
```

<Note>
  You can add up to 5000 phone numbers in one request. Each recipient's
  `call_variables` object can be up to 4 KiB.
</Note>


## OpenAPI

````yaml POST /v1/external/campaigns/{agent_id}/{campaign_id}/scheduled-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}/scheduled-calls:
    post:
      description: >-
        Adds recipients to a campaign by creating scheduled outbound call
        records. Recipients can be added only when campaign status is DRAFT or
        PAUSED.
      parameters:
        - $ref: '#/components/parameters/AgentId'
        - $ref: '#/components/parameters/CampaignId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCampaignRecipientsRequest'
            examples:
              recipients:
                value:
                  phone_numbers:
                    - to_number: '+919876543210'
                      call_variables:
                        name: Aarav Sharma
                        customer_id: CUST-001
                        city: Mumbai
                    - to_number: '+919812345678'
                      call_variables:
                        name: Priya Mehta
                        customer_id: CUST-002
                        city: Delhi
      responses:
        '201':
          description: Campaign calls scheduled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddCampaignRecipientsResponse'
        '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:
    AddCampaignRecipientsRequest:
      type: object
      required:
        - phone_numbers
      properties:
        phone_numbers:
          type: array
          minItems: 1
          maxItems: 5000
          items:
            $ref: '#/components/schemas/CampaignRecipient'
      additionalProperties: false
    AddCampaignRecipientsResponse:
      type: object
      required:
        - message
        - data
      properties:
        message:
          type: string
        data:
          type: object
          required:
            - scheduled_call_ids
          properties:
            scheduled_call_ids:
              type: array
              items:
                type: string
                format: uuid
          additionalProperties: false
      additionalProperties: false
    CampaignRecipient:
      type: object
      required:
        - to_number
      properties:
        to_number:
          type: string
          description: Destination phone number in E.164 format.
          pattern: ^\+[0-9]{10,15}$
        call_variables:
          type: object
          description: >-
            Variables passed to the agent for this recipient. Maximum serialized
            size is 4 KiB.
          additionalProperties: 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.

````