Summary
The Confidea WCAP G3 is a Televic Conference wireless access point / Conference Controller unit. This spec covers the Confero Customer REST API (OAS3 1.0): a REST/JSON control interface hosted on the Conference Controller over TCP/IP, used to subscribe to events and control meetings, discussion, audio, interpretation, recording, room, system, video, and wireless coupling. Notifications are delivered via HTTP long polling against an event store.
Transport
protocols:
- http
addressing:
# Base URL is the Conference Controller's IP address (example from source: http://192.168.0.110:9080/).
# OpenAPI/Swagger spec is served at <ip_conference_controller>/openapi
base_url: "http://{ip_conference_controller}" # {ip} supplied at runtime
port: 9080 # HTTP (insecure) when no certificate uploaded; 9443 when HTTPS certificate uploaded
auth:
type: bearer # bearer token in Authorization header; token generated in Confero "API Settings & Types" tab
notes: "Authorization: Bearer <token>. Calls without a valid token are not executed. Tokens are generated/revoked via the Confero UI."
# UNRESOLVED: no fixed default port - 9080 vs 9443 depends on whether an HTTPS certificate has been uploaded
# UNRESOLVED: certificate creation/upload/renewal is client's responsibility; source does not state a default CA
Traits
# Inferred from documented command surface
traits:
- queryable # inferred: many GET endpoints return state (audio config, discussion seats, meeting, recording, etc.)
- levelable # inferred: loudspeaker volume and default channel selector volume PUT endpoints
# NOTE: powerable / routable not inferred - no power on/off command and no A/V input-output routing matrix in source
Actions
# Source: Confero Customer REST API 1.0 OAS3. Every documented endpoint listed as a distinct action.
# HTTP method + path is the literal command payload (verbatim from source).
# GET endpoints are kind: query; POST/PUT/PATCH/DELETE are kind: action.
# Path variables ({...}) are parameterized; no query/body schemas expanded here (source lists schemas by name only).
# ---- Audio module ----
- id: audio_get_configurations
label: Get Audio Configurations
kind: query
module: Audio
command: "GET /api/audio/configurations"
params: []
- id: audio_activate_configuration
label: Activate Audio Configuration
kind: action
module: Audio
command: "POST /api/audio/configurations/{id}/activate"
params:
- name: id
type: string
description: Identifier of the audio configuration to activate
- id: audio_get_default_channel_selector_volume
label: Get Default Channel Selector Volume
kind: query
module: Audio
command: "GET /api/audio/defaultchannelselectorvolume"
params: []
- id: audio_set_default_channel_selector_volume
label: Set Default Channel Selector Volume
kind: action
module: Audio
command: "PUT /api/audio/defaultchannelselectorvolume"
params:
- name: body
type: Volume
description: Volume payload (schema 'Volume' from source)
- id: audio_push_default_channel_selector_volume
label: Push Default Channel Selector Volume To Units
kind: action
module: Audio
command: "PUT /api/audio/defaultchannelselectorvolume/push"
params: []
- id: audio_get_loudspeaker_volume
label: Get Loudspeaker Volume
kind: query
module: Audio
command: "GET /api/audio/loudspeakervolume"
params: []
- id: audio_set_loudspeaker_volume
label: Set Loudspeaker Volume
kind: action
module: Audio
command: "PUT /api/audio/loudspeakervolume"
params:
- name: body
type: Volume
description: Volume payload (schema 'Volume' from source)
- id: audio_get_seat_input_sensitivity_offset
label: Get Seat Input Sensitivity Offset
kind: query
module: Audio
command: "GET /api/audio/seats/{seat_id}/inputsensitivityoffset"
params:
- name: seat_id
type: string
description: Seat identifier
- id: audio_set_seat_input_sensitivity_offset
label: Set Seat Input Sensitivity Offset
kind: action
module: Audio
command: "PUT /api/audio/seats/{seat_id}/inputsensitivityoffset"
params:
- name: seat_id
type: string
description: Seat identifier
- name: body
type: InputSensitivityOffset
description: Sensitivity offset payload (schema 'InputSensitivityOffset' from source)
# ---- Device module ----
- id: device_list_devices
label: List Devices
kind: query
module: Device
command: "GET /api/device/devices"
params: []
- id: device_get_device
label: Get Device By Serial
kind: query
module: Device
command: "GET /api/device/devices/{serial}"
params:
- name: serial
type: string
description: Device serial number
- id: device_perform_action
label: Perform Device Action
kind: action
module: Device
command: "POST /api/device/devices/actions"
params:
- name: body
type: DevicesAction
description: Action payload (schema 'DevicesAction' from source)
# ---- Discussion module ----
- id: discussion_get_settings
label: Get Discussion Settings
kind: query
module: Discussion
command: "GET /api/discussion/settings"
params: []
- id: discussion_set_settings
label: Set Discussion Settings
kind: action
module: Discussion
command: "PUT /api/discussion/settings"
params:
- name: body
type: DiscussionSettings
description: Discussion settings payload (schemas 'DiscussionSettings*' from source)
- id: discussion_get_all_seats
label: Get Discussion State Of All Seats
kind: query
module: Discussion
command: "GET /api/discussion/seats"
params: []
- id: discussion_get_seat
label: Get Discussion State Of Seat
kind: query
module: Discussion
command: "GET /api/discussion/seats/{seat}"
params:
- name: seat
type: string
description: Seat identifier
- id: discussion_set_seat
label: Set Discussion State Of Seat
kind: action
module: Discussion
command: "PUT /api/discussion/seats/{seat}"
params:
- name: seat
type: string
description: Seat identifier
- name: body
type: SeatDiscussionState
description: Discussion state payload (schema 'SeatDiscussionState' from source)
- id: discussion_get_speakers
label: Get Speaker List
kind: query
module: Discussion
command: "GET /api/discussion/speakers"
params: []
- id: discussion_clear_all_speakers
label: Clear All Speakers (Delegates And Chairpersons)
kind: action
module: Discussion
command: "DELETE /api/discussion/speakers"
params: []
- id: discussion_clear_delegate_speakers
label: Clear Delegate Speakers
kind: action
module: Discussion
command: "DELETE /api/discussion/speakers/delegates"
params: []
- id: discussion_get_requests
label: Get Request List
kind: query
module: Discussion
command: "GET /api/discussion/requests"
params: []
- id: discussion_clear_requests
label: Clear All Requests
kind: action
module: Discussion
command: "DELETE /api/discussion/requests"
params: []
# ---- Interpretation module ----
- id: interpretation_get_active_channels
label: Get Active Interpretation Channels
kind: query
module: Interpretation
command: "GET /api/interpretation/configurations/active/channels"
params: []
- id: interpretation_patch_active_channel
label: Patch Active Interpretation Channel
kind: action
module: Interpretation
command: "PATCH /api/interpretation/configurations/active/channels/{id}"
notes: "Changes to active configuration are not persistent across reboots; selected preset restored after reboot."
params:
- name: id
type: string
description: Channel identifier
- name: body
type: InterpretationChannelPatch
description: Channel patch payload (schema 'InterpretationChannelPatch' from source)
# ---- Meeting module ----
- id: meeting_get_scheduled_meetings
label: Get Scheduled Meetings
kind: query
module: Meeting
command: "GET /api/meeting/scheduled-meetings"
params: []
- id: meeting_get_open_meeting
label: Get Open Meeting
kind: query
module: Meeting
command: "GET /api/meeting"
params: []
- id: meeting_post_meeting
label: Create / Post Meeting
kind: action
module: Meeting
command: "POST /api/meeting"
params:
- name: body
type: NewOpenMeeting
description: New meeting payload (schemas 'NewOpenMeeting*' / 'NewMeetingFrom*' from source)
- id: meeting_close_open_meeting
label: Close Open Meeting
kind: action
module: Meeting
command: "DELETE /api/meeting"
params: []
- id: meeting_post_action
label: Post Action On Open Meeting
kind: action
module: Meeting
command: "POST /api/meeting/actions"
params:
- name: body
type: OpenMeetingAction
description: Meeting action payload (union of 'OpenMeeting*Action' schemas from source)
- id: meeting_get_participant
label: Get Meeting Participant
kind: query
module: Meeting
command: "GET /api/meeting/participants/{participantId}"
params:
- name: participantId
type: string
description: Participant identifier
- id: meeting_get_voting_results
label: Get Voting Results
kind: query
module: Meeting
command: "GET /api/meeting/voting-results"
params: []
# ---- Notification module ----
- id: notification_get_modules
label: Get Notification Modules
kind: query
module: Notification
command: "GET /api/notification/modules"
params: []
- id: notification_get_events
label: Get Next Event (Long Poll)
kind: query
module: Notification
command: "GET /api/notification/events?include-filter={modules}&minimal-id={id}"
notes: "include-filter is mandatory, comma-separated module list. minimal-id is optional (= last seen id + 1). Long-polls until event or timeout (HTTP 204 on timeout, HTTP 200 + JSON event body otherwise)."
params:
- name: include-filter
type: string
description: Comma-separated module filter (e.g. Audio,Discussion)
- name: minimal-id
type: integer
description: Last seen event id + 1; omit for fresh long poll
# ---- Recording module ----
- id: recording_get_state
label: Get Recording State
kind: query
module: Recording
command: "GET /api/recording/state"
params: []
- id: recording_set_state
label: Change Recording State
kind: action
module: Recording
command: "PUT /api/recording/state"
params:
- name: body
type: RecordingState
description: Recording state payload (schema 'RecordingState' from source)
# ---- Room module ----
- id: room_patch_seat
label: Modify Room Seat (Role Only)
kind: action
module: Room
command: "PATCH /api/room/seats/{seat}"
notes: "Only seat role can be changed."
params:
- name: seat
type: string
description: Seat identifier
- name: body
type: Seat
description: Seat patch payload (schema 'Seat' / 'Role' from source)
- id: room_get_discussion_seats
label: Get Discussion Seats
kind: query
module: Room
command: "GET /api/room/seats/discussion"
params: []
- id: room_get_discussion_seat
label: Get Discussion Seat
kind: query
module: Room
command: "GET /api/room/seats/discussion/{seat}"
params:
- name: seat
type: string
description: Seat identifier
# ---- System module ----
- id: system_reboot
label: Reboot System
kind: action
module: System
command: "POST /api/system/reboot"
params: []
- id: system_get_reordering_state
label: Get Seat Reordering State
kind: query
module: System
command: "GET /api/system/reordering-state"
params: []
- id: system_set_reordering_state
label: Set Seat Reordering State
kind: action
module: System
command: "PUT /api/system/reordering-state"
params:
- name: body
type: SeatReorderingState
description: Reordering state payload (schema 'SeatReorderingState' from source)
# ---- Video module ----
- id: video_get_configurations
label: Get Video Configurations
kind: query
module: Video
command: "GET /api/video/configurations"
params: []
- id: video_activate_configuration
label: Activate Video Configuration
kind: action
module: Video
command: "POST /api/video/configurations/{id}/activate"
params:
- name: id
type: string
description: Identifier of the video configuration to activate
# ---- WirelessCoupling module ----
- id: wirelesscoupling_get_state
label: Get Wireless Coupling State And Pairing Mode
kind: query
module: WirelessCoupling
command: "GET /api/wirelesscoupling"
params: []
- id: wirelesscoupling_get_coupled_state
label: Get Wireless Coupling State Of Access Point
kind: query
module: WirelessCoupling
command: "GET /api/wirelesscoupling/{serial}/coupled-state"
params:
- name: serial
type: string
description: Access point serial number
- id: wirelesscoupling_set_coupled_state
label: Set Wireless Coupling State Of Access Point
kind: action
module: WirelessCoupling
command: "PUT /api/wirelesscoupling/{serial}/coupled-state"
params:
- name: serial
type: string
description: Access point serial number
- name: body
type: CoupledState
description: Coupled-state payload (schema 'CoupledState' from source)
- id: wirelesscoupling_get_pairing_mode
label: Get Pairing Mode Of Access Point
kind: query
module: WirelessCoupling
command: "GET /api/wirelesscoupling/{serial}/pairing-mode"
params:
- name: serial
type: string
description: Access point serial number
- id: wirelesscoupling_set_pairing_mode
label: Set Pairing Mode Of Access Point
kind: action
module: WirelessCoupling
command: "PUT /api/wirelesscoupling/{serial}/pairing-mode"
params:
- name: serial
type: string
description: Access point serial number
- name: body
type: WirelessPairingMode
description: Pairing-mode payload (schemas 'WirelessPairingMode*' from source)
- id: wirelesscoupling_get_paired_devices
label: Get Paired Devices
kind: query
module: WirelessCoupling
command: "GET /api/wirelesscoupling/paired-devices"
params: []
- id: wirelesscoupling_clear_paired_devices
label: Clear All Paired Devices
kind: action
module: WirelessCoupling
command: "DELETE /api/wirelesscoupling/paired-devices"
params: []
- id: wirelesscoupling_delete_paired_device
label: Delete Paired Device (Or All Devices On Access Point)
kind: action
module: WirelessCoupling
command: "DELETE /api/wirelesscoupling/paired-devices/{serial}"
notes: "Deletes one device; if {serial} is an access point, deletes all devices from that access point."
params:
- name: serial
type: string
description: Device serial, or access point serial to clear that AP
Feedbacks
# API uses HTTP response codes for request feedback; long-poll returns HTTP 200 (event) or HTTP 204 (timeout no-content).
# Per-event payloads are JSON with fields: id, discontinuity, module, name, data.
- id: http_response_code
type: enum
values: [200, 204, 4xx, 5xx] # UNRESOLVED: source does not enumerate every status code; only 200/204 explicitly stated
notes: "200 = event delivered; 204 = long-poll timeout, no content. Other codes not enumerated in source."
- id: notification_event_envelope
type: object
fields:
id: integer # event id
discontinuity: boolean # whether an event was missed
module: string # source module
name: string # event name
data: object # event-specific payload
notes: "Envelope for all events returned by GET /api/notification/events"
Variables
# Settable parameters exposed as standalone variables (state that is GET + PUT/PATCH):
- name: default_channel_selector_volume
type: integer
access: [read, write]
schema: Volume
notes: "Room-wide default channel selector volume"
- name: loudspeaker_volume
type: integer
access: [read, write]
schema: Volume
notes: "Room loudspeaker volume"
- name: seat_input_sensitivity_offset
type: object
access: [read, write]
schema: InputSensitivityOffset
notes: "Per-seat input sensitivity offset (keyed by seat_id)"
- name: discussion_settings
type: object
access: [read, write]
schema: DiscussionSettings
notes: "Microphone mode, activation type, LED color settings"
- name: recording_state
type: object
access: [read, write]
schema: RecordingState
- name: seat_reordering_state
type: object
access: [read, write]
schema: SeatReorderingState
- name: seat_role
type: enum
access: [write]
schema: Role
notes: "Seat role; only role is patchable on a room seat"
Events
# Unsolicited (server-to-client) events delivered via the long-poll notification connection.
# Source documents these as GET /api/events/... documentation-only paths; each is a distinct event name.
# Every module's documented event is listed verbatim.
- id: audio_configurations_changed
module: Audio
name: ConfigurationsChanged
path: "GET /api/events/audio/ConfigurationsChanged"
description: Available audio configurations changed
- id: audio_loudspeaker_volume_changed
module: Audio
name: LoudspeakerVolumeChanged
path: "GET /api/events/audio/LoudspeakerVolumeChanged"
description: Loudspeaker volume in the room changed
- id: audio_default_channel_selector_volume_changed
module: Audio
name: DefaultChannelSelectorVolumeChanged
path: "GET /api/events/audio/DefaultChannelSelectorVolumeChanged"
description: Default channel selector volume changed
- id: device_added
module: Device
name: DeviceAdded
path: "GET /api/events/device/DeviceAdded"
description: New device added
- id: device_removed
module: Device
name: DeviceRemoved
path: "GET /api/events/device/DeviceRemoved"
description: Device removed
- id: device_changed
module: Device
name: DeviceChanged
path: "GET /api/events/device/DeviceChanged"
description: Device changed
- id: discussion_seat_changed
module: Discussion
name: SeatChanged
path: "GET /api/events/discussion/SeatChanged"
description: Discussion state of a seat changed
- id: discussion_settings_changed
module: Discussion
name: SettingsChanged
path: "GET /api/events/discussion/SettingsChanged"
description: Room discussion settings changed
- id: discussion_speakers_changed
module: Discussion
name: SpeakersChanged
path: "GET /api/events/discussion/SpeakersChanged"
description: Speaker list changed
- id: discussion_requests_changed
module: Discussion
name: RequestsChanged
path: "GET /api/events/discussion/RequestsChanged"
description: Request list changed
- id: interpretation_active_configuration_channels_changed
module: Interpretation
name: ActiveConfigurationChannelsChanged
path: "GET /api/events/interpretation/ActiveConfigurationChannelsChanged"
description: Interpretation channels in the active configuration changed
- id: meeting_scheduled_meetings_changed
module: Meeting
name: ScheduledMeetingsChanged
path: "GET /api/events/meeting/ScheduledMeetingsChanged"
description: List of scheduled meetings changed
- id: meeting_meeting_state_changed
module: Meeting
name: MeetingStateChanged
path: "GET /api/events/meeting/MeetingStateChanged"
description: Meeting state changed
- id: meeting_participant_added
module: Meeting
name: ParticipantAdded
path: "GET /api/events/meeting/ParticipantAdded"
description: Participant added to a running meeting
- id: meeting_participant_removed
module: Meeting
name: ParticipantRemoved
path: "GET /api/events/meeting/ParticipantRemoved"
description: Participant removed from a running meeting
- id: meeting_participant_changed
module: Meeting
name: ParticipantChanged
path: "GET /api/events/meeting/ParticipantChanged"
description: Participant in a running meeting changed
- id: meeting_participant_presence_changed
module: Meeting
name: ParticipantPresenceChanged
path: "GET /api/events/meeting/ParticipantPresenceChanged"
description: Participant presence changed
- id: meeting_voting_results_changed
module: Meeting
name: VotingResultsChanged
path: "GET /api/events/meeting/VotingResultsChanged"
description: Voting results changed
- id: recording_state_changed
module: Recording
name: StateChanged
path: "GET /api/events/recording/StateChanged"
description: Recording state changed
- id: room_seat_added
module: Room
name: SeatAdded
path: "GET /api/events/room/SeatAdded"
description: A seat got added
- id: room_seat_removed
module: Room
name: SeatRemoved
path: "GET /api/events/room/SeatRemoved"
description: A seat got removed
- id: room_seat_changed
module: Room
name: SeatChanged
path: "GET /api/events/room/SeatChanged"
description: A seat got changed
- id: system_seat_reordering_state_changed
module: System
name: SeatReorderingStateChanged
path: "GET /api/events/system/SeatReorderingStateChanged"
description: Reordering state of seats in the room changed
- id: video_configurations_changed
module: Video
name: ConfigurationsChanged
path: "GET /api/events/video/ConfigurationsChanged"
description: Available video configurations changed
- id: wirelesscoupling_access_point_changed
module: WirelessCoupling
name: AccesPointChanged
path: "GET /api/events/wirelesscoupling/AccesPointChanged"
description: Access point changed pairing mode or coupling states when connected to a CU
Macros
# UNRESOLVED: source does not document named multi-step sequences. Meeting-action union
# (POST /api/meeting/actions) accepts discrete single-step actions (start/stop discussion, start/stop voting,
# add/remove participant, set presence, set/clear badge, set name) but does not bundle them into macros.
Safety
confirmation_required_for:
- action_id: system_reboot
reason: "Reboots the Conference Controller; source documents POST /api/system/reboot as a system action."
- action_id: wirelesscoupling_clear_paired_devices
reason: "Clears the entire paired-device list."
- action_id: wirelesscoupling_delete_paired_device
reason: "When {serial} is an access point, deletes all devices from that AP."
- action_id: meeting_close_open_meeting
reason: "Closes the open meeting."
- action_id: discussion_clear_all_speakers
reason: "Clears all speaking delegates and chairpersons."
- action_id: discussion_clear_delegate_speakers
reason: "Clears all speaking delegates."
- action_id: discussion_clear_requests
reason: "Clears all request-to-speak entries."
interlocks: []
notes: |
Source describes no explicit hardware interlocks or power-on sequencing. Confirmation list above is
inferred from the destructive/global effect of each documented endpoint, not from explicit source warnings.
# UNRESOLVED: source contains no stated interlock procedures or power-on sequencing; populate only if a
# later source (installation manual, release notes) documents them.
Notes
- API is a REST/JSON API. Served OpenAPI/Swagger spec at
<ip_conference_controller>/openapi— authoritative for live schemas; this spec reflects the static PDF document. - Two parallel HTTP connections are expected: one kept-open notification connection (long-poll on
GET /api/notification/events) plus any number of control connections. - Long polling: notification connection held open; server returns HTTP 200 + JSON event when an event matching the include-filter occurs, or HTTP 204 No Content on timeout. Client must immediately re-open the connection after each response.
- Event-store model: every event has a monotonic id. Client must track last-seen id and pass
minimal-id = last_seen + 1. Omittingminimal-idrisks missed events (source warns explicitly). - Performance guidance from source: limit number of connections, keep connections open (especially notification), only subscribe to needed modules.
- HTTPS (port 9443) requires an uploaded certificate; HTTP (port 9080) is the no-certificate fallback. Certificate creation/upload/renewal is the client's responsibility — source recommends a CA-signed certificate over self-signed.
- Auth is a bearer token in the
Authorizationheader. Tokens are generated/edited/revoked in the Confero "API Settings & Types" tab. No calls execute without a valid token. - Source lists schema names (e.g.
Volume,DiscussionSettings,OpenMeetingAction) but does not expand field-level definitions in the refined excerpt; field-level validation requires the live/openapiendpoint.
## Provenance
```yaml
source_domains:
- static.televic-conference.com
- manualslib.com
- televic.com
- manuals.plus
source_urls:
- https://static.televic-conference.com/confero-customer-api/index.html
- https://static.televic-conference.com/ConferoManual/Content/03_Technician/13_Settings.htm
- https://www.manualslib.com/manual/3873342/Televic-Confidea-Wcap-G3.html
- https://www.televic.com/en/conference/products/features/smart-audio-control/advanced-integration-tools
- https://manuals.plus/m/e4b32f39ab18a388953d977c4ba39f7919ee60808609d12c8f5469a962fc9c7a
retrieved_at: 2026-07-26T15:37:30.442Z
last_checked_at: 2026-08-05T08:48:36.777Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-08-05T08:48:36.777Z
matched_actions: 51
action_count: 51
confidence: medium
summary: "All 51 spec actions map one-to-one to documented source endpoints with matching HTTP method + path; transport ports and bearer auth verified. (13 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "source is the Confero Customer REST API doc, which applies to any Conference Controller (Plixus Central Unit or WAP). Confirm WCAP G3 firmware ships this API surface and version."
- "firmware version compatibility range not stated in source"
- "API version label is \"1.0 OAS3\"; runtime version confirmation against a live WCAP G3 not done"
- "no fixed default port - 9080 vs 9443 depends on whether an HTTPS certificate has been uploaded"
- "certificate creation/upload/renewal is client's responsibility; source does not state a default CA"
- "source does not enumerate every status code; only 200/204 explicitly stated"
- "source does not document named multi-step sequences. Meeting-action union"
- "source contains no stated interlock procedures or power-on sequencing; populate only if a"
- "live endpoint schemas not present in source excerpt — verify against `<ip>/openapi` on a real WCAP G3"
- "firmware version compatibility range not stated"
- "exact set of HTTP status codes beyond 200/204 not enumerated"
- "source does not state whether the WCAP G3 ships the same API version as Plixus Central Unit; assume parity but unverified"
- "token format / length / character set not specified"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0