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

# Set a room's default members

> Replaces the whole set: the organisation's extensions rung when the room opens, each in its role (participant by default, or moderator). A busy, unregistered or unanswered member is tried again a minute later, five times, then given up on; one who joined and dropped off while the room is up is rung again. A member that never made it shows in the session's history with the reason. A virtual agent's extension may be a member; what it does in the room is the AI module's. Every extension must be the room's organisation's. Answers the room.



## OpenAPI

````yaml /api-reference/openapi-public.json put /conference-rooms/{id}/members
openapi: 3.0.3
info:
  description: >-
    The API your own systems use: place and follow calls, have an AI agent call
    someone, run campaigns and get their results, keep contacts in step with
    your CRM, and receive signed webhooks. Authenticate with an integration key
    (Authorization: Bearer ft_...), used only from the IP addresses it allows.
  title: FireTone API
  version: 0.1.0
servers:
  - description: Your platform's API host
    url: https://{host}/api/v1
    variables:
      host:
        default: api.firet.one
security:
  - bearerAuth: []
tags:
  - name: Auth
  - description: >-
      Live calls and what can be done to them: hang up, hold, transfer, park,
      merge, monitor, whisper; the Desk's own call.
    name: Calls
  - description: 'Outbound campaigns: contacts, attempts, outcomes.'
    name: Campaigns
  - description: 'Customers: who called, what is known about them, and their memory.'
    name: Contacts
  - description: What was said on an AI call, and the review of it.
    name: Conversations
  - description: >-
      Your own systems: HTTP connections an IVR calls mid-call, and webhooks for
      call events. Tenant URLs must be public https addresses.
    name: Integrations
  - name: Live
  - name: Provisioning
  - name: Reporting
  - description: Tickets raised by people, agents and the API.
    name: Tickets
  - description: Messages left for an extension or a queue.
    name: Voicemail
paths:
  /conference-rooms/{id}/members:
    put:
      tags:
        - Provisioning
      summary: Set a room's default members
      description: >-
        Replaces the whole set: the organisation's extensions rung when the room
        opens, each in its role (participant by default, or moderator). A busy,
        unregistered or unanswered member is tried again a minute later, five
        times, then given up on; one who joined and dropped off while the room
        is up is rung again. A member that never made it shows in the session's
        history with the reason. A virtual agent's extension may be a member;
        what it does in the room is the AI module's. Every extension must be the
        room's organisation's. Answers the room.
      operationId: putConferenceRoomsIdMembers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                items:
                  items:
                    properties:
                      extension_id:
                        format: uuid
                        type: string
                      role:
                        default: participant
                        enum:
                          - participant
                          - moderator
                        type: string
                    required:
                      - extension_id
                    type: object
                  type: array
              required:
                - items
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConferenceRoom'
          description: The room, with its default members.
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          description: Not found.
components:
  schemas:
    ConferenceRoom:
      description: >-
        A dial-in bridge the organisation owns. Migration 0115 says why the PINs
        are stored and returned in clear.
      properties:
        created_at:
          format: date-time
          type: string
        enabled:
          type: boolean
        end_when_moderator_leaves:
          type: boolean
        exemptions:
          description: >-
            The organisation's extensions that dial the room number and are
            seated without a PIN, each in its role. Set as a whole with PUT
            /conference-rooms/{id}/exemptions.
          items:
            properties:
              extension_id:
                format: uuid
                type: string
              name:
                type: string
              number:
                type: string
              role:
                enum:
                  - participant
                  - moderator
                type: string
            type: object
          type: array
        id:
          format: uuid
          type: string
        live_members:
          description: People in the room right now.
          type: integer
        max_members:
          description: 0 = no limit beyond the node's capacity.
          type: integer
        members:
          description: >-
            Default members: the organisation's extensions rung when the room
            opens, or as soon as they are free while it is up. `virtual` marks a
            virtual agent's extension, whose conduct in the room is the AI
            module's. Set as a whole with PUT /conference-rooms/{id}/members.
          items:
            properties:
              extension_id:
                format: uuid
                type: string
              name:
                type: string
              number:
                type: string
              role:
                enum:
                  - participant
                  - moderator
                type: string
              virtual:
                type: boolean
            type: object
          type: array
        minutes_email:
          description: >-
            Comma-separated addresses a session's minutes go to, when the AI
            module writes them.
          type: string
        moderator_pin:
          description: 4-10 digits, or empty for a room with no moderator role.
          type: string
        name:
          type: string
        number:
          description: >-
            2-8 digits: what an extension dials, and what a caller keys at a
            shared 'conference' number.
          type: string
        numbers:
          description: Phone numbers pointed at this room alone.
          items:
            type: string
          type: array
        organisation_id:
          format: uuid
          type: string
        participant_pin:
          description: '4-10 digits, or empty: no PIN, dial the number and you are in.'
          type: string
        record:
          description: Record every session of this room.
          type: boolean
        wait_for_moderator:
          description: Participants hear hold music until a moderator has joined.
          type: boolean
      required:
        - id
        - organisation_id
        - name
        - number
        - participant_pin
        - moderator_pin
        - wait_for_moderator
        - end_when_moderator_leaves
        - record
        - max_members
        - enabled
        - numbers
        - live_members
        - exemptions
        - members
        - minutes_email
        - created_at
      type: object
    Error:
      properties:
        error:
          properties:
            code:
              enum:
                - invalid_request
                - invalid_credentials
                - unauthenticated
                - forbidden
                - not_found
                - conflict
                - internal
              type: string
            message:
              type: string
          required:
            - code
            - message
          type: object
      required:
        - error
      type: object
  responses:
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: The request is not valid. The message names every field that is wrong.
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT or API key
      description: >-
        Every request sends `Authorization: Bearer <token>`. The token is either
        a panel session (a JWT from /auth/login, 12 hours) or an API key
        `ft_<id>_<secret>`. An API key is accepted only from an address on its
        IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required
        for an old key that has none), is limited to its rate per minute (429
        rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on
        every response), and at most 60 call placements a minute.
      scheme: bearer
      type: http

````