General syntax
--db-path takes precedence over --base. Without either, the CLI looks for syntheo/app.db, then fr.willisback.syntheo/app.db, in the system’s data folder (~/.local/share on Linux, %APPDATA% on Windows). See Install the CLI.
Meeting source
Themeetings commands accept --source before their subcommand:
local, the default, reads this computer’s database. auto is kept as an alias of local. There is no other source. The SYNTHEO_SOURCE variable has the same effect as the option.
Read and export commands
Markdown exports present the transcript as paragraphs attributed to speakers when that information exists at word level. Otherwise, they keep the raw transcript text. JSON exports can contain a
speakers field with the names used.
Import a recording
The app must be open on the same database: without it, the import is refused. It transcribes the file with the transcription server configured in the app, then generates the summary with the configured LLM. The audio is sent to that server.
- Accepted formats: WAV, MP3, OGG, MP4, M4A, FLAC, WebM, AAC. The file must be non-empty and readable on the machine running the CLI. Subtitle or transcript files are not accepted.
- The file is not copied: the app reads it at its original location. Don’t move or delete it before the job ends.
--titledefaults to the file name without its extension.--foldermust point to an existing folder (seemeetings folders).--request-key(1 to 200 bytes) makes the import replayable: reuse the same key to retry the same import, and it returns the original job and meeting, even after a failure. A new import requires a new key.
meeting_id, job_id, processing_status, summary_status and error (possibly null). processing_status goes through queued, importing, transcribing, summarizing, then done or failed. summary_status is pending, done, skipped_no_model, skipped_too_short or failed: done for processing therefore doesn’t guarantee that a summary was generated.
--wait waits for a final state. --timeout defaults to 3600 seconds (from 1 to 86400). Exit codes: 0 for a successful submission or completion, 1 for a failure, 2 if the wait times out. A timeout or an interruption of the CLI doesn’t cancel the job: continue with import-status. A job interrupted midway is marked failed; data already produced is kept.
The JSON command identifiers are meetings.import and meetings.import_status.
Proposal commands
These commands create or view pending edits. They never apply the edit: the app does that, after the user approves it.JSON response contract
With--json, a successful response contains:
pagination contains offset, limit, returned, and possibly total and next_offset.
Errors are described in Errors and exit codes.
doctor command
cli_version, ready and database (path, exists, opened_read_only, schema_ready, error). Exit code 0 if ready is true, 1 otherwise.
mcp command
Help and version
Managed capture commands
These commands are for managed deployments (legal hold, usage measurement). They only work with the local database. Several require--json or an explicit --source local, as shown below.
Syntheo keeps no audio files. Items that concern recording files (
recording_locations, recording deletion) are therefore normally empty or have no effect.meetings initialize-managed
--source local, the app closed and a managed_settings.json file (version 1, settings object) next to app.db, which disables intelligence (intelligence_disabled: true).
meetings hold-list
--json. Keyset pagination: pass the last ID received to --after; an empty data.ids array ends the inventory. --database-only skips the discovery of files on disk.
meetings hold-export
--json. Each line is bounded; a final SHA-256 digest covers all previous lines. A missing end line signals an incomplete snapshot. The archive excludes global settings, provider credentials and other meetings. With --database-only, it skips file discovery and returns recording_files_separate: true. This retention archive is separate from the ordinary export.
meetings pilot-usage
--json and --source local. --from-ms and --until-ms are Unix milliseconds, for a half-open UTC window of at most 366 days. Returns the capture intervals and coverage counters (unmeasured_stops, invalid_metadata_records, pending_sessions, legacy_sessions_without_measurement), without IDs, text, titles or participants. An empty result doesn’t prove that no meeting took place. Nothing is sent automatically.
meetings delete
--source local, --if-export-sha256 (the SHA-256 of the full JSON export, as printed on standard output with its final newline, or as saved with --output) and --require-transcription-complete. Close the app first. A modified export, an unfinished transcript or a pending proposal prevents the deletion. An interrupted deletion resumes with the same ID and the same digest.