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

# Save channel assignments

> Replace the sender accounts assigned to this agent for one channel.

Each `account_id` is an `id` from List connected channel accounts for the
same channel. Accounts that are not connected in this workspace are rejected. This operation can change workspace data or trigger an external side effect; review the request before sending it and do not retry blindly after a timeout.



## OpenAPI

````yaml /openapi.json post /api/v1/public/voice-agents/{agent_id}/channels/{channel}
openapi: 3.1.0
info:
  description: >-
    Customer-facing API for managing outreach, leads, conversations, voice
    agents, knowledge bases, analytics, and webhooks.
  title: Sendora Public API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.sendora.ai
security: []
tags:
  - description: Build, launch, pause and stop campaigns, and enroll leads.
    name: Campaigns
  - description: Create, update, tag, enrich and import leads.
    name: Leads
  - description: Group leads into reusable lists.
    name: Lead lists
  - description: Find new prospects and research existing leads.
    name: Prospecting
  - description: Read conversations and send messages to leads.
    name: Inbox
  - description: Manage workspace-wide suppressions.
    name: Do not contact
  - description: Manage the content your agents answer from.
    name: Knowledge bases
  - description: Create, configure, test and publish voice agents.
    name: Voice agents
  - description: Give agents actions such as booking, lookups and transfers.
    name: Agent tools
  - description: Embed a voice agent on your website.
    name: Voice widgets
  - description: Start voice calls and read call results.
    name: Calls
  - description: Browse and preview the voices an agent can use.
    name: Voices
  - description: List numbers, bring your own, and route calls.
    name: Phone numbers
  - description: List the channel accounts connected to the workspace.
    name: Connected accounts
  - description: Register endpoints and review deliveries.
    name: Webhooks
  - description: Drive the workspace assistant programmatically.
    name: Copilot
  - description: Read workspace and campaign performance.
    name: Analytics
  - description: Track asynchronous operations.
    name: Jobs
  - description: Manage client workspaces, plans and branding.
    name: Agency
paths:
  /api/v1/public/voice-agents/{agent_id}/channels/{channel}:
    post:
      tags:
        - Voice agents
      summary: Save channel assignments
      description: >-
        Replace the sender accounts assigned to this agent for one channel.


        Each `account_id` is an `id` from List connected channel accounts for
        the

        same channel. Accounts that are not connected in this workspace are
        rejected. This operation can change workspace data or trigger an
        external side effect; review the request before sending it and do not
        retry blindly after a timeout.
      operationId: >-
        save_channel_assignments_api_v1_public_voice_agents__agent_id__channels__channel__post
      parameters:
        - description: >-
            The voice agent's id: the `id` from List voice agents. It is also
            the last part of that page's address in the app.
          in: path
          name: agent_id
          required: true
          schema:
            title: Agent Id
            type: string
        - description: 'The channel: email, linkedin, whatsapp or phone.'
          in: path
          name: channel
          required: true
          schema:
            title: Channel
            type: string
        - in: header
          name: X-API-Key
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Api-Key
        - in: header
          name: Authorization
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveChannelAssignmentsIn'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelAssignmentsOut'
          description: Successful Response
        '401':
          description: The X-API-Key header is missing, invalid, expired, or revoked.
        '402':
          description: >-
            The workspace is suspended for billing, or the request would exceed
            a plan or usage limit.
        '403':
          description: >-
            The key is valid but lacks the required scope, or the workspace has
            no active plan, lacks the entitlement, or has this feature turned
            off or view-only.
        '404':
          description: >-
            The resource does not exist or is not owned by the authenticated
            workspace.
        '409':
          description: >-
            The requested state transition conflicts with the resource's current
            state.
        '410':
          description: The workspace behind this key has been deleted.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '500':
          description: >-
            An unexpected Sendora error occurred. Retry only if the operation is
            safe to repeat.
        '503':
          description: >-
            An entitlement or billing check is temporarily unavailable. Retry
            after the Retry-After interval.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - label: cURL
          lang: bash
          source: >-
            curl -X POST
            'https://api.sendora.ai/api/v1/public/voice-agents/YOUR_ID/channels/YOUR_ID'
            -H "X-API-Key: $SENDORA_API_KEY" -H "Content-Type: application/json"
            \
              -d '{"assignments":[{"account_id":"example"}]}'
        - label: Python
          lang: python
          source: >-
            import requests


            url =
            'https://api.sendora.ai/api/v1/public/voice-agents/YOUR_ID/channels/YOUR_ID'

            headers = {'X-API-Key': '$SENDORA_API_KEY'}

            response = requests.post(url, headers=headers, json={'assignments':
            [{'account_id': 'example'}]})

            response.raise_for_status()

            print(response.json())
        - label: JavaScript
          lang: javascript
          source: >-
            const response = await
            fetch("https://api.sendora.ai/api/v1/public/voice-agents/YOUR_ID/channels/YOUR_ID",
            {
              method: "POST",
              headers: { 'X-API-Key': process.env.SENDORA_API_KEY, 'Content-Type': 'application/json' },
              body: JSON.stringify({"assignments": [{"account_id": "example"}]}),
            });

            if (!response.ok) throw new Error(await response.text());

            console.log(await response.json());
        - label: Go
          lang: go
          source: >-
            req, err := http.NewRequest("POST",
            "https://api.sendora.ai/api/v1/public/voice-agents/YOUR_ID/channels/YOUR_ID",
            bytes.NewBufferString(`{"assignments": [{"account_id":
            "example"}]}`))

            if err != nil { log.Fatal(err) }

            req.Header.Set("X-API-Key", os.Getenv("SENDORA_API_KEY"))

            req.Header.Set("Content-Type", "application/json")

            resp, err := http.DefaultClient.Do(req)

            if err != nil { log.Fatal(err) }

            defer resp.Body.Close()
components:
  schemas:
    SaveChannelAssignmentsIn:
      properties:
        assignments:
          description: Assignments returned by the Sendora API.
          items:
            $ref: '#/components/schemas/ChannelAssignment'
          title: Assignments
          type: array
      required:
        - assignments
      title: SaveChannelAssignmentsIn
      type: object
    ChannelAssignmentsOut:
      properties:
        account_ids:
          description: >-
            The assigned sender accounts, each an `id` from List connected
            channel accounts.
          items:
            type: string
          title: Account Ids
          type: array
        assignments:
          description: Assignments returned by the Sendora API.
          items:
            $ref: '#/components/schemas/ChannelAssignment'
          title: Assignments
          type: array
        number_ids:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          description: The same ids as `account_ids`, present for the phone channel.
          title: Number Ids
      required:
        - account_ids
        - assignments
      title: ChannelAssignmentsOut
      type: object
    HTTPValidationError:
      properties:
        detail:
          description: Detail returned by the Sendora API.
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      required: []
      title: HTTPValidationError
      type: object
    ChannelAssignment:
      properties:
        account_id:
          description: >-
            A sender account's id: the `id` from List connected channel accounts
            for the same channel.
          title: Account Id
          type: string
        active_hours_end:
          default: 18
          description: Active hours end returned by the Sendora API.
          maximum: 23
          minimum: 0
          title: Active Hours End
          type: integer
        active_hours_start:
          default: 8
          description: Active hours start returned by the Sendora API.
          maximum: 23
          minimum: 0
          title: Active Hours Start
          type: integer
        daily_limit:
          default: 50
          description: Daily limit returned by the Sendora API.
          minimum: 1
          title: Daily Limit
          type: integer
        hourly_limit:
          default: 10
          description: Hourly limit returned by the Sendora API.
          minimum: 1
          title: Hourly Limit
          type: integer
        min_gap_minutes:
          default: 5
          description: Min gap minutes returned by the Sendora API.
          minimum: 0
          title: Min Gap Minutes
          type: integer
        timezone:
          default: UTC
          description: Timezone returned by the Sendora API.
          title: Timezone
          type: string
      required:
        - account_id
      title: ChannelAssignment
      type: object
    ValidationError:
      properties:
        loc:
          description: Loc returned by the Sendora API.
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          description: Msg returned by the Sendora API.
          title: Message
          type: string
        type:
          description: Type returned by the Sendora API.
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: Customer API key created in the Sendora dashboard.
      in: header
      name: X-API-Key
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.