Unofficial Otter.ai CLI
Project description
otterai-cli
An unofficial command-line interface for Otter.ai.
Note: This project is not affiliated with or endorsed by Otter.ai / Aisense Inc.
Requirements
- Python 3.10+
Installation
uv tool install otterai-cli
This makes the otter command available globally.
To update to the latest version:
uv tool upgrade otterai-cli
Or run directly without installing:
uvx --from otterai-cli otter --help
Setup
otter login
Credentials are stored in your OS keychain (macOS Keychain, Windows Credential Locker, etc.) via keyring, with ~/.otterai/config.json as fallback.
You can also use environment variables (OTTERAI_USERNAME, OTTERAI_PASSWORD), which take highest precedence.
Auth commands
otter user # check current user
otter logout # remove saved credentials
Usage
otter speeches list # list all speeches
otter speeches list --days 7 # last 7 days
otter speeches list --folder "Work" # by folder name
otter speeches get SPEECH_ID # get speech details + transcript
otter speeches download SPEECH_ID -f txt # download as txt, pdf, mp3, docx, srt, or md
otter speeches search "keyword" SPEECH_ID # search within a speech
otter speakers list # list all speakers
otter folders list # list all folders
Run otter --help or otter <command> --help for more options.
Important: Speech IDs (otid vs speech_id)
Otter.ai speeches have two identifiers:
speech_id(e.g.22WB27HAEBEJYFCA) -- internal ID, does NOT work with API endpointsotid(e.g.jqb7OHo6mrHtCuMkyLN0nUS8mxY) -- the ID used in all API calls
All CLI commands that accept a SPEECH_ID argument expect the otid value. Use otter speeches list to find otids, or otter speeches list --json | jq '.speeches[].otid' for just the IDs.
Speeches
# List all speeches
otter speeches list
# List with options
otter speeches list --page-size 10 --source owned
# List speeches from the last N days
otter speeches list --days 2
# List speeches in a specific folder (by name or ID)
otter speeches list --folder "CoverNode"
# Get a specific speech
otter speeches get SPEECH_ID
# Search within a speech
otter speeches search "search query" SPEECH_ID
# Download a speech (formats: txt, pdf, mp3, docx, srt, md)
otter speeches download SPEECH_ID --format txt
# Download as markdown (generated locally from transcript data)
otter speeches download SPEECH_ID --format md
otter speeches download SPEECH_ID --format md --output meeting-notes
otter speeches download SPEECH_ID --format md --frontmatter-fields "title,summary,speakers,start_time,end_time,duration_seconds,source,speech_id,folder,folder_id"
# Upload an audio file
otter speeches upload recording.mp4
# Move to trash
otter speeches trash SPEECH_ID
# Rename a speech
otter speeches rename SPEECH_ID "New Title"
# Move speeches to a folder (by name or ID)
otter speeches move SPEECH_ID --folder "CoverNode"
otter speeches move ID1 ID2 ID3 --folder "CoverNode"
# Move to a new folder (auto-create if it doesn't exist)
otter speeches move SPEECH_ID --folder "New Folder" --create
Markdown frontmatter (--format md)
Markdown export includes YAML frontmatter, configurable per download:
# Use defaults
otter speeches download SPEECH_ID --format md
# Pick exact fields (in your own order)
otter speeches download SPEECH_ID --format md --frontmatter-fields "title,speech_id,summary"
# Disable all frontmatter fields
otter speeches download SPEECH_ID --format md --frontmatter-fields none
Default frontmatter fields (in order):
titlesummaryspeakersstart_timeend_timeduration_secondssourcespeech_idfolderfolder_id
Available frontmatter fields for --frontmatter-fields:
titlesummaryspeakersstart_timeend_timeduration_secondssourcespeech_idfolderfolder_idotidcreated_attranscript_updated_atlanguagetranscript_countprocess_status
Notes:
--frontmatter-fieldsis valid only with--format md.speech_idin frontmatter is the Otter internalspeech_id; command argumentSPEECH_IDstill expects theotid.
Speakers
# List all speakers
otter speakers list
# Create a new speaker
otter speakers create "Speaker Name"
# Tag a speaker on transcript segments
otter speakers tag SPEECH_ID SPEAKER_ID
otter speakers tag SPEECH_ID SPEAKER_ID --all
Folders and Groups
# List folders
otter folders list
# Create a folder
otter folders create "My Folder"
# Rename a folder
otter folders rename FOLDER_ID "New Name"
# List groups
otter groups list
Configuration
# Show current config
otter config show
# Clear saved config
otter config clear
JSON Output
Most commands support --json flag for machine-readable output:
otter speeches list --json
otter speakers list --json
Development
uv sync --dev # install dependencies
uv run pytest # run tests
Acknowledgements
Based on gmchad/otterai-api by Chad Lohrli, with CLI functionality from PR #9 by @andrewfurman.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file otterai_cli-0.1.2.tar.gz.
File metadata
- Download URL: otterai_cli-0.1.2.tar.gz
- Upload date:
- Size: 82.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc99e0b90500740b7be2a68bfd4c92f2ccd135818285073fce82ed3e354dc55f
|
|
| MD5 |
64e93162d36607b32f25fa1f2e43ddb4
|
|
| BLAKE2b-256 |
febd80ad3dbbd95485b989c576817043d3e67e2cb794080224c6835d3a5742e1
|
Provenance
The following attestation bundles were made for otterai_cli-0.1.2.tar.gz:
Publisher:
publish.yml on erickhchan/otterai-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
otterai_cli-0.1.2.tar.gz -
Subject digest:
fc99e0b90500740b7be2a68bfd4c92f2ccd135818285073fce82ed3e354dc55f - Sigstore transparency entry: 975578135
- Sigstore integration time:
-
Permalink:
erickhchan/otterai-cli@f56e6af079b153c5035189932311ced9033bd7d4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/erickhchan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f56e6af079b153c5035189932311ced9033bd7d4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file otterai_cli-0.1.2-py3-none-any.whl.
File metadata
- Download URL: otterai_cli-0.1.2-py3-none-any.whl
- Upload date:
- Size: 20.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f37800c2289bf64d506dfaac96e28ee965bd7adf5cf0878c8e762d1d3e907bc
|
|
| MD5 |
74f887e8ff19ace21ffafd255af98998
|
|
| BLAKE2b-256 |
9ca604f29308bc39332a43d4a9ca80737c767f87dc9fcdc7062c03a954c9c379
|
Provenance
The following attestation bundles were made for otterai_cli-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on erickhchan/otterai-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
otterai_cli-0.1.2-py3-none-any.whl -
Subject digest:
0f37800c2289bf64d506dfaac96e28ee965bd7adf5cf0878c8e762d1d3e907bc - Sigstore transparency entry: 975578138
- Sigstore integration time:
-
Permalink:
erickhchan/otterai-cli@f56e6af079b153c5035189932311ced9033bd7d4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/erickhchan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f56e6af079b153c5035189932311ced9033bd7d4 -
Trigger Event:
release
-
Statement type: