openapi: 3.0.3 info: title: PostHog actions desktop_recordings API version: 1.0.0 description: '' tags: - name: desktop_recordings paths: /api/environments/{project_id}/desktop_recordings/: get: operationId: desktop_recordings_list description: 'RESTful API for managing desktop meeting recordings. Standard CRUD operations plus transcript management as a subresource.' parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings security: - PersonalAPIKeyAuth: - desktop_recording:read - PersonalAPIKeyAuth: - desktop_recording:read responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedDesktopRecordingList' description: '' x-explicit-tags: - desktop_recordings post: operationId: desktop_recordings_create description: Create a new recording and get Recall.ai upload token for the desktop SDK parameters: - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateRecordingRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CreateRecordingRequest' multipart/form-data: schema: $ref: '#/components/schemas/CreateRecordingRequest' security: - PersonalAPIKeyAuth: - desktop_recording:write - PersonalAPIKeyAuth: - desktop_recording:write responses: '201': content: application/json: schema: $ref: '#/components/schemas/CreateRecordingResponse' description: '' x-explicit-tags: - desktop_recordings /api/environments/{project_id}/desktop_recordings/{id}/: get: operationId: desktop_recordings_retrieve description: 'RESTful API for managing desktop meeting recordings. Standard CRUD operations plus transcript management as a subresource.' parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this desktop recording. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings security: - PersonalAPIKeyAuth: - desktop_recording:read - PersonalAPIKeyAuth: - desktop_recording:read responses: '200': content: application/json: schema: $ref: '#/components/schemas/DesktopRecording' description: '' x-explicit-tags: - desktop_recordings put: operationId: desktop_recordings_update description: 'RESTful API for managing desktop meeting recordings. Standard CRUD operations plus transcript management as a subresource.' parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this desktop recording. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings requestBody: content: application/json: schema: $ref: '#/components/schemas/DesktopRecording' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/DesktopRecording' multipart/form-data: schema: $ref: '#/components/schemas/DesktopRecording' required: true security: - PersonalAPIKeyAuth: - desktop_recording:write - PersonalAPIKeyAuth: - desktop_recording:write responses: '200': content: application/json: schema: $ref: '#/components/schemas/DesktopRecording' description: '' x-explicit-tags: - desktop_recordings patch: operationId: desktop_recordings_partial_update description: 'RESTful API for managing desktop meeting recordings. Standard CRUD operations plus transcript management as a subresource.' parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this desktop recording. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedDesktopRecording' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedDesktopRecording' multipart/form-data: schema: $ref: '#/components/schemas/PatchedDesktopRecording' security: - PersonalAPIKeyAuth: - desktop_recording:write - PersonalAPIKeyAuth: - desktop_recording:write responses: '200': content: application/json: schema: $ref: '#/components/schemas/DesktopRecording' description: '' x-explicit-tags: - desktop_recordings delete: operationId: desktop_recordings_destroy description: 'RESTful API for managing desktop meeting recordings. Standard CRUD operations plus transcript management as a subresource.' parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this desktop recording. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings security: - PersonalAPIKeyAuth: - desktop_recording:write - PersonalAPIKeyAuth: - desktop_recording:write responses: '204': description: No response body x-explicit-tags: - desktop_recordings /api/environments/{project_id}/desktop_recordings/{id}/append_segments/: post: operationId: desktop_recordings_append_segments_create description: Append transcript segments (supports batched real-time streaming) parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this desktop recording. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - desktop_recordings requestBody: content: application/json: schema: $ref: '#/components/schemas/AppendSegments' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AppendSegments' multipart/form-data: schema: $ref: '#/components/schemas/AppendSegments' required: true security: - PersonalAPIKeyAuth: - desktop_recording:write - PersonalAPIKeyAuth: - desktop_recording:write responses: '200': content: application/json: schema: $ref: '#/components/schemas/DesktopRecording' description: '' x-explicit-tags: - desktop_recordings components: schemas: PatchedDesktopRecording: type: object properties: id: type: string format: uuid readOnly: true team: type: integer readOnly: true created_by: type: integer readOnly: true nullable: true sdk_upload_id: type: string format: uuid readOnly: true recall_recording_id: type: string format: uuid nullable: true platform: $ref: '#/components/schemas/MeetingPlatformEnum' meeting_title: type: string nullable: true maxLength: 255 meeting_url: type: string format: uri nullable: true maxLength: 200 duration_seconds: type: integer maximum: 2147483647 minimum: -2147483648 nullable: true status: $ref: '#/components/schemas/DesktopRecordingStatusEnum' notes: type: string nullable: true error_message: type: string nullable: true video_url: type: string format: uri nullable: true maxLength: 200 video_size_bytes: type: integer maximum: 9223372036854775807 minimum: -9223372036854775808 format: int64 nullable: true participants: type: array items: type: string description: List of participant names transcript_text: type: string readOnly: true transcript_segments: type: array items: $ref: '#/components/schemas/TranscriptSegment' description: Transcript segments with timestamps summary: type: string nullable: true extracted_tasks: type: array items: $ref: '#/components/schemas/DesktopRecordingTask' description: AI-extracted tasks from transcript tasks_generated_at: type: string format: date-time nullable: true summary_generated_at: type: string format: date-time nullable: true started_at: type: string format: date-time completed_at: type: string format: date-time nullable: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true CreateRecordingRequest: type: object description: Request body for creating a new recording properties: platform: allOf: - $ref: '#/components/schemas/CreateRecordingRequestPlatformEnum' default: desktop_audio description: 'Meeting platform being recorded * `zoom` - zoom * `teams` - teams * `meet` - meet * `desktop_audio` - desktop_audio * `slack` - slack' DesktopRecordingTask: type: object description: Serializer for extracted tasks properties: title: type: string description: type: string assignee: type: string nullable: true required: - title PaginatedDesktopRecordingList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?offset=400&limit=100 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?offset=200&limit=100 results: type: array items: $ref: '#/components/schemas/DesktopRecording' TranscriptSegment: type: object description: Serializer for individual transcript segments from AssemblyAI properties: timestamp: type: number format: double nullable: true description: Milliseconds from recording start speaker: type: string nullable: true text: type: string confidence: type: number format: double nullable: true description: Transcription confidence score is_final: type: boolean nullable: true description: Whether this is the final version required: - text AppendSegments: type: object description: Serializer for appending transcript segments (supports batched real-time uploads) properties: segments: type: array items: $ref: '#/components/schemas/TranscriptSegment' minItems: 1 required: - segments CreateRecordingRequestPlatformEnum: enum: - zoom - teams - meet - desktop_audio - slack type: string description: '* `zoom` - zoom * `teams` - teams * `meet` - meet * `desktop_audio` - desktop_audio * `slack` - slack' CreateRecordingResponse: type: object description: Response for creating a new recording (includes upload_token) properties: id: type: string format: uuid readOnly: true team: type: integer readOnly: true created_by: type: integer readOnly: true nullable: true sdk_upload_id: type: string format: uuid readOnly: true recall_recording_id: type: string format: uuid nullable: true platform: $ref: '#/components/schemas/MeetingPlatformEnum' meeting_title: type: string nullable: true maxLength: 255 meeting_url: type: string format: uri nullable: true maxLength: 200 duration_seconds: type: integer maximum: 2147483647 minimum: -2147483648 nullable: true status: $ref: '#/components/schemas/DesktopRecordingStatusEnum' notes: type: string nullable: true error_message: type: string nullable: true video_url: type: string format: uri nullable: true maxLength: 200 video_size_bytes: type: integer maximum: 9223372036854775807 minimum: -9223372036854775808 format: int64 nullable: true participants: type: array items: type: string description: List of participant names transcript_text: type: string readOnly: true transcript_segments: type: array items: $ref: '#/components/schemas/TranscriptSegment' description: Transcript segments with timestamps summary: type: string nullable: true extracted_tasks: type: array items: $ref: '#/components/schemas/DesktopRecordingTask' description: AI-extracted tasks from transcript tasks_generated_at: type: string format: date-time nullable: true summary_generated_at: type: string format: date-time nullable: true started_at: type: string format: date-time completed_at: type: string format: date-time nullable: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true upload_token: type: string description: Recall.ai upload token for the desktop SDK required: - created_at - created_by - id - platform - sdk_upload_id - team - transcript_text - updated_at - upload_token MeetingPlatformEnum: enum: - zoom - teams - meet - desktop_audio - slack type: string description: '* `zoom` - Zoom * `teams` - Microsoft Teams * `meet` - Google Meet * `desktop_audio` - Desktop audio * `slack` - Slack huddle' DesktopRecording: type: object properties: id: type: string format: uuid readOnly: true team: type: integer readOnly: true created_by: type: integer readOnly: true nullable: true sdk_upload_id: type: string format: uuid readOnly: true recall_recording_id: type: string format: uuid nullable: true platform: $ref: '#/components/schemas/MeetingPlatformEnum' meeting_title: type: string nullable: true maxLength: 255 meeting_url: type: string format: uri nullable: true maxLength: 200 duration_seconds: type: integer maximum: 2147483647 minimum: -2147483648 nullable: true status: $ref: '#/components/schemas/DesktopRecordingStatusEnum' notes: type: string nullable: true error_message: type: string nullable: true video_url: type: string format: uri nullable: true maxLength: 200 video_size_bytes: type: integer maximum: 9223372036854775807 minimum: -9223372036854775808 format: int64 nullable: true participants: type: array items: type: string description: List of participant names transcript_text: type: string readOnly: true transcript_segments: type: array items: $ref: '#/components/schemas/TranscriptSegment' description: Transcript segments with timestamps summary: type: string nullable: true extracted_tasks: type: array items: $ref: '#/components/schemas/DesktopRecordingTask' description: AI-extracted tasks from transcript tasks_generated_at: type: string format: date-time nullable: true summary_generated_at: type: string format: date-time nullable: true started_at: type: string format: date-time completed_at: type: string format: date-time nullable: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true required: - created_at - created_by - id - platform - sdk_upload_id - team - transcript_text - updated_at DesktopRecordingStatusEnum: enum: - recording - uploading - processing - ready - error type: string description: '* `recording` - Recording * `uploading` - Uploading * `processing` - Processing * `ready` - Ready * `error` - Error' parameters: ProjectIdPath: in: path name: project_id required: true schema: type: string description: Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/. securitySchemes: PersonalAPIKeyAuth: type: http scheme: bearer x-tagGroups: - name: All endpoints tags: - LLM Analytics - actions - activity_log - activity_logs - advanced_activity_logs - alerts - annotations - approval_policies - batch_exports - cdp - change_requests - code - code-invites - cohorts - comments - conversations - core - customer_analytics - customer_journeys - customer_profile_configs - dashboard_templates - dashboards - data_color_themes - data_modeling_jobs - data_warehouse - dataset_items - datasets - desktop_recordings - domains - early_access_feature - early_access_features - elements - endpoints - environments - error_tracking - evaluation_runs - evaluations - event_definitions - event_filter - event_schemas - events - experiment_holdouts - experiment_saved_metrics - experiments - exports - external_data_schemas - external_data_sources - feature_flags - file_system - file_system_shortcut - flag_value - groups - groups_types - health_issues - heatmap_screenshots - heatmaps - hog_flows - hog_function_templates - hog_functions - insight_variables - insights - integrations - invites - js-snippet - legal_documents - lineage - live_debugger_breakpoints - llm_analytics - llm_prompts - llm_skills - logs - managed_viewsets - max - max_tools - mcp_server_installations - mcp_servers - mcp_store - mcp_tools - members - notebooks - oauth_applications - object_media_previews - organizations - persisted_folder - persons - platform_features - plugin_configs - product_analytics - product_tours - project_secret_api_keys - projects - property_definitions - proxy_records - public_hog_function_templates - query - replay - reverse_proxy - role_external_references - roles - sandbox-environments - sandbox_environments - saved - schema_property_groups - sdk_doctor - session_group_summaries - session_recording_playlists - session_recordings - session_summaries - sessions - signals - subscriptions - surveys - taggers - task-automations - task-runs - task_automations - tasks - uploaded_media - user_home_settings - user_interviews - users - visual_review - warehouse_dag - warehouse_model_paths - warehouse_saved_queries - warehouse_saved_query_folders - warehouse_tables - warehouse_view_link - warehouse_view_links - web_analytics - web_experiments - web_vitals - welcome - workflows