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

# List conference rooms

> Dial-in bridges the organisation owns. A room has a number inside the organisation (what an extension dials, and what a caller keys when a shared 'conference' phone number asks which room), a participant PIN and, optionally, a moderator PIN. The PINs are returned: they are invitation codes, not credentials, and a PIN nobody can read is a room nobody can invite people into. `numbers` are the phone numbers pointed at this room alone; `live_members` is who is in it right now. Live control -- who is in a room, mute, kick, lock, record -- is under /conferences.



## OpenAPI

````yaml /api-reference/openapi-public.json get /conference-rooms
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:
    get:
      tags:
        - Provisioning
      summary: List conference rooms
      description: >-
        Dial-in bridges the organisation owns. A room has a number inside the
        organisation (what an extension dials, and what a caller keys when a
        shared 'conference' phone number asks which room), a participant PIN
        and, optionally, a moderator PIN. The PINs are returned: they are
        invitation codes, not credentials, and a PIN nobody can read is a room
        nobody can invite people into. `numbers` are the phone numbers pointed
        at this room alone; `live_members` is who is in it right now. Live
        control -- who is in a room, mute, kick, lock, record -- is under
        /conferences.
      operationId: getConferenceRooms
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/order'
        - $ref: '#/components/parameters/q'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConferenceRoomPage'
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  parameters:
    limit:
      in: query
      name: limit
      schema:
        default: 50
        maximum: 500
        type: integer
    offset:
      in: query
      name: offset
      schema:
        default: 0
        type: integer
    sort:
      description: >-
        Sort key. Each list accepts its own allow-list of keys, given in that
        endpoint's description; anything else is a 400. ORDER BY cannot be
        parameterised, so the key is looked up rather than interpolated. Every
        sort carries a tiebreak on the primary key, so paging stays disjoint
        when the sort column has duplicates.
      in: query
      name: sort
      schema:
        type: string
    order:
      description: >-
        Sort direction. Defaults to ascending, except the call log, which reads
        newest first.
      in: query
      name: order
      schema:
        enum:
          - asc
          - desc
        type: string
    q:
      description: >-
        Free-text search across the list's searchable columns (case-insensitive
        substring). % and _ in the term match themselves.
      in: query
      name: q
      schema:
        type: string
  schemas:
    ConferenceRoomPage:
      properties:
        items:
          items:
            $ref: '#/components/schemas/ConferenceRoom'
          type: array
        limit:
          type: integer
        offset:
          type: integer
        total:
          type: integer
      required:
        - items
        - total
        - limit
        - offset
      type: object
    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:
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Missing, invalid or expired token
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Outside the caller's scope, or insufficient role
  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

````