Voice consents
The Voice consents screen lets you record and revoke the consent of each participant of a realtime voice session,
and read the session, its turns and its DLP filtered transcripts. Portal path: /multimodal/consents. Developers and
agents record consents; auditors and security officers read the transcripts.
What the screen shows
The page title is Realtime consents. The Realtime session section holds a Session id field and the Apply button: paste the id returned when the session was created. Four tabs then appear:
- Consents: the table with Participant, Purpose, Recording allowed, Transcription allowed, Retention (days), Method, Captured by, Captured at, Revoked at. A click on a row opens a drawer with the consent.
- Session: the JSON record of the session.
- Turns: Turn, Participant, Agent, Status, Latency (ms), Trace id, Created.
- Transcripts: Turn, Participant, Text, Created. Only the text filtered by the DLP is stored.
The Record consent form has Purpose (required), Retention (days) (required, 30, from 1 to 3650),
Participant (empty: the participant of the session), Recording allowed (unchecked), Transcription allowed
(checked) and Method (verbal, click, written, api).
Actions
| Button or action | What it does | API call | Roles |
|---|---|---|---|
| Apply then Consents | Lists the consents of the session | GET /v1/realtime/sessions/{session_id}/consents | any tenant user |
| Record consent > Create | Records the consent, captured by you | POST /v1/realtime/sessions/{session_id}/consents | tenant_admin, developer, agent |
| Revoke (row menu, consent not revoked) | Shows the impact confirmation, then revokes the consent; it takes effect on the next audio event | POST /v1/realtime/sessions/{session_id}/consents/{consent_id}/revoke | tenant_admin, developer, agent |
| Session tab | Reads the session | GET /v1/realtime/sessions/{session_id} | any tenant user |
| Turns tab | Lists the turns | GET /v1/realtime/sessions/{session_id}/turns | any tenant user |
| Transcripts tab | Lists the stored transcripts | GET /v1/realtime/sessions/{session_id}/transcripts | tenant_admin, developer, auditor, security_officer |
Roles
Record consent and Revoke are hidden for users who lack one of the roles of ROLES.consentWriters in
portal/src/lib/kit.ts (tenant_admin, developer, agent), the same list the Control Plane checks in
services/control-plane/src/eai/domains/realtime/__init__.py. The transcripts are read by tenant_admin,
developer, auditor and security_officer. Recording a consent goes through the policy decision
realtime.consent.record; recording and revocation are audited.
Typical tasks
Record the consent before a transcription
-
Open the session. Consents belong to one session. Paste the Session id, then Apply.
Expected result: the four tabs and the Consents table.
If it fails:
not_foundwithrealtime_sessionmeans the id is wrong. -
Record the consent. Without it, transcription and recording are refused outside dev and test. Click Record consent, fill Purpose, Retention (days), check Transcription allowed, choose the Method, then Create.
Expected result: the toast "Created" and the row with Captured by set to you.
If it fails:
session_endedmeans the session is over; open a new one.
Withdraw a consent
-
Revoke it. The participant may withdraw at any time. Open the row menu, choose Revoke and confirm.
Expected result: Revoked at is filled; the next audio event is no longer transcribed.
If it fails:
not_foundwithrealtime_consentmeans the consent was already revoked.
Audit what was said
-
Read the transcripts. Open Transcripts.
Expected result: the DLP filtered text of each turn.
If it fails:
forbiddenmeans your role cannot read transcripts; an empty list means no consent allowed the transcription.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
forbidden (403) with required_roles | Your role is not allowed for this action | See the Roles section |
parameter_invalid (422) with method | Unknown consent method | Use verbal, click, written or api |
session_ended (409) on Create | The session is ended | Record the consent on an open session |
not_found (404) with realtime_session | Wrong session id | Copy the id shown in Voice live |
not_found (404) with realtime_consent | The consent does not exist or is already revoked | Refresh the table |
consent_required (403) in the voice session | No active consent with transcription or recording allowed | Record a consent here |