A quick walkthrough of the codebase and how it maps to Webex meeting APIs.
This project exports Webex meeting data (recordings, transcripts, summaries, action items) to local folders or Google Drive. It uses two Webex API families:
- Webex Meetings API – meetings, participants, recordings, transcripts
- Meeting Summaries API – AI-generated summaries and action items
CLI (list/export) → WebexClient (HTTP) → Ingestion (collect_meeting_data) → MeetingData → Exporter (write)
list– Lists past meetings in a date rangeexport– Exports one meeting by ID or all meetings in a date range
Both commands use WebexClient and export_meeting() from the ingestion layer.
All Webex calls go through WebexClient. Base URL: https://webexapis.com/v1.
| Method | Webex API Endpoint | Purpose |
|---|---|---|
list_meetings() |
GET /meetings |
List meetings with meetingType=meeting (instances only) |
get_meeting() |
GET /meetings/{id} |
Get a single meeting |
list_meeting_participants() |
GET /meetingParticipants?meetingId=... |
List participants |
list_recordings() |
GET /recordings?meetingId=... |
List recordings |
list_meeting_transcripts() |
GET /meetingTranscripts?meetingId=... |
List transcripts |
get_meeting_summary_by_meeting_id() |
GET /meetingSummaries?meetingId=... |
Get AI summary and action items |
download_transcript_from_item() |
GET {txtDownloadLink} |
Download transcript (URL from transcript item) |
Important details:
- Instance IDs – Summaries, recordings, and transcripts require instance IDs (e.g.
..._I_...), not series IDs.list_meetings()usesmeetingType=meetingto return instances. - Meeting Summaries API – Uses
GET /meetingSummaries?meetingId=...(not the Summary Report API). See Get Summary by Meeting ID. - Recordings – Uses
temporaryDirectDownloadLinks.recordingDownloadLinkfrom get-recording-details (notdownloadUrl, which points to a web page).
collect_meeting_data() fetches everything for a meeting and returns a normalized MeetingData object:
- Meeting details –
get_meeting()→ title, start/end, host, etc. - Participants –
list_meeting_participants() - Recordings –
list_recordings()→get_recording_details()→recordingDownloadLink→_get_binary_no_auth() - Transcript –
list_meeting_transcripts()→txtDownloadLink→ download - Summary & action items –
get_meeting_summary_by_meeting_id()→ parsessummary,actionItems(oraction_items)
export_meeting() orchestrates: collect_meeting_data() → then passes MeetingData to the exporter.
| Model | Role |
|---|---|
MeetingData |
Normalized meeting data (title, times, recordings, transcript, summary, action items, participants) |
RecordingAsset |
Recording file (filename, content, download_url, mime_type) |
ActionItem |
Action item (text, assignee, due, raw) |
Shared formatting used by exporters:
folder_name()– e.g.2026-02-05 14-00 - Meeting Titlemeeting_details_text()– Content formeeting_details.txtsummary_txt_content()– Summary + action items forsummary.txtsafe_filename()– Sanitizes names for file/folder use
| File | Class | Role |
|---|---|---|
base.py |
MeetingExporter |
ABC with write(MeetingData) -> str |
local_folder.py |
LocalFolderExporter |
Writes to disk (meeting_details.txt, transcript.vtt, summary.txt, summary.json, recordings) |
google_drive.py |
GoogleDriveExporter |
Uploads same structure to Google Drive |
factory.py |
get_exporter() |
Chooses exporter from EXPORT_BACKEND env var |
Helpers for future webhook support:
extract_meeting_id_from_payload()– GetsmeetingIdfrom Webex webhook payloadsextract_recording_id_from_payload()– GetsrecordingIdfrom payloads
| Webex API Data | Output File / Content |
|---|---|
GET /meetings/{id} |
meeting_details.txt (title, date, host, participants) |
GET /meetingParticipants |
Participant list in meeting_details.txt |
GET /recordings + recordingDownloadLink |
recording_*.mp4 (or .webm, .m4a) |
GET /meetingTranscripts → txtDownloadLink |
transcript.vtt or transcript.txt |
GET /meetingSummaries |
summary.txt, summary.json, action items in summary.txt |
{output_dir}/
2026-02-05 14-00 - Meeting Title/
meeting_details.txt # Title, date, host, participants
transcript.vtt # Or transcript.txt
summary.txt # Summary + action items
summary.json # Raw Meeting Summaries API response
recording_1.mp4 # Downloaded recordings