Skip to content

Response reference ​

What every rimo command returns, field by field. For the commands themselves (syntax, flags, examples) see Commands; for the output contract and error format see Output & errors.

How to read this page ​

  • Presence is either Always (the field is in every response) or Optional. An optional field is omitted entirely when it has no value — it is not returned as null or "", so check for the key's presence rather than comparing to an empty value. The one exception is Participant.user_id, which is always present but is "" for a speaker with no Rimo account.
  • Timestamps are RFC 3339 strings in the caller's local timezone, for example "2026-07-05T15:45:20.47178+09:00".
  • Key order is not part of the contract — do not rely on it.

What each command returns ​

CommandFormatShape
rimo auth loginJSONLogin and switch result
rimo auth logoutJSONLogout result
rimo auth statusJSONAuth status
rimo auth switchJSONLogin and switch result
rimo note listJSON{notes: Note[], next_page_token}
rimo note getJSON{note: Note}
rimo note get --list-documentsJSON{documents: Document[]}
rimo note get --transcript / --document / --full / --meeting-chat / --document-idPlain textNote content
rimo note searchJSON{notes: Search result[], total_count}
rimo note askPlain textAsk answer
rimo note createJSON{note: Note, document: Document}
rimo note appendJSON{document: Document}
rimo note asset listJSON{assets: Asset[]}
rimo note asset uploadJSON{asset: Asset, document: Document}
rimo team listJSON{teams: Team[], next_page_token}
rimo versionPlain textOne version line
rimo upgradePlain textOne status line
rimo mcp—An MCP server on stdio, not a data command. See MCP.

rimo login and rimo logout are aliases for rimo auth login / rimo auth logout and return the same shapes.

Any command can fail instead, in which case it prints an error object and exits 1.

Envelopes ​

Every JSON response wraps its payload under a container key, alongside any scalar metadata:

EnvelopeReturned by
{notes: [...], next_page_token: "..."}note list
{notes: [...], total_count: <int>}note search
{teams: [...], next_page_token: "..."}team list
{note: {...}}note get
{documents: [...]}note get --list-documents
{note: {...}, document: {...}}note create
{document: {...}}note append
{accounts: [...], active_account: "..."}auth status

--fields and --excludes apply to the records inside the envelope; the scalar metadata siblings (next_page_token, total_count, active_account) are always preserved. So rimo note list --fields id,title trims each note but keeps next_page_token. See Field filtering.

next_page_token is a cursor: pass it back as --page-token to fetch the next page, and stop when it is absent.

Note ​

Returned inside {note: ...} by note get and note create, and inside {notes: [...]} by note list.

FieldTypePresenceDescription
idstringAlwaysThe note ID. Pass it to note get, note append, and the other note commands.
titlestringAlwaysThe note title.
statestringAlwaysWhere the note is in the recording/transcription pipeline. See Note states.
durationintegerAlwaysMedia length in milliseconds. 0 for notes with no recording.
created_atstringAlwaysWhen the note was created.
updated_atstringAlwaysWhen the note was last updated. Filter on this with note list --updated-since.
user_idstringOptionalID of the user who owns the note.
organization_idstringOptionalID of the organization the note belongs to. Absent for personal notes.
team_idstringOptionalID of the team the note belongs to. Absent for personal notes. Pass it to note list --team.
localestringOptionalTranscription language, e.g. ja-JP.
media_typestringOptionalKind of media attached, e.g. audio, none.
sourcestringOptionalHow the note was created, e.g. none, zoom_import. New values are added as integrations are added.
held_atstringOptionalWhen the meeting took place. Filter on this with note list --since / --until.
memostringOptionalFree-text memo added to the note.
share_modestringOptionalLink sharing: nothing (not shared), view, or edit.
custom_template_idstringOptionalID of the custom template used for the minutes.
webhook_urlstringOptionalWebhook called when processing completes.
document_markdownstringOptionalThe primary document's markdown. See the note below.
tagsstring[]OptionalTag names on the note. See the note below.
participantsParticipant[]OptionalMeeting participants. See the note below.

note list and note get return metadata only. They never populate document_markdown, tags, or participants, because loading a note's content is the expensive part and most callers only need the metadata. To read content, use the dedicated flags — note get --document, --transcript, --full, --list-documents — which return plain text or Document records.

Note states ​

state tracks the note through recording, media conversion, and speech recognition. Treat it as an open set: match the values you care about and handle unknown ones gracefully, because new states are added as new capture methods ship.

StateMeaning
NOTE_CREATEDNote created with no media registered (e.g. by note create).
NOT_SCHEDULEDNo bot recording scheduled.
RECORDING_SCHEDULEDBot recording is scheduled.
RECORDING_WAITINGBot joined the meeting and is waiting to start (e.g. host approval).
RECORDING_STARTEDBot recording is in progress.
RECORDING_PAUSEDBot recording is paused.
RECORDING_DONEBot recording finished.
RECORDING_FAILEDBot recording failed and generally cannot be retried.
MIC_RECORDING_REQUESTED / MIC_RECORDING_STARTED / MIC_RECORDING_DONEMicrophone recording not yet started / in progress / finished.
HARDWARE_RECORDING_REQUESTED / HARDWARE_RECORDING_STARTEDHardware recording not yet started / in progress.
TRANSCRIPTION_DONEReal-time transcription finished, but the media has not been uploaded.
MEDIA_PREPARINGAudio or video is uploading.
VC_WAITINGAudio uploaded, waiting for permission to process.
VC_REQUESTEDMedia conversion in progress.
VC_ERRORMedia conversion failed.
ASR_PROCESSINGSpeech recognition in progress.
ASR_ERRORSpeech recognition failed.
ASR_DONESpeech recognition finished — the transcript and minutes are ready.

Participant ​

A meeting participant. Returned inside a Note's participants array.

FieldTypePresenceDescription
user_idstringAlwaysThe participant's Rimo user ID. Empty when the speaker has no Rimo account. Pass it to note search --participant.
idstringOptionalInternal participant ID.
namestringOptionalDisplay name.
emailstringOptionalEmail address.
calendar_namestringOptionalAttendee name from the calendar event, for notes created from a calendar.
speaker_idstringOptionalDiarization speaker identifier, used to attribute transcript lines to this participant.

Document ​

A document (minutes) attached to a note. A note can have several — translations, different templates — and primary marks the canonical one.

Returned inside {documents: [...]} by note get --list-documents, and inside {document: ...} by note create and note append.

FieldTypePresenceDescription
idstringAlwaysThe document ID. Pass it to note append and note get --document-id.
note_idstringAlwaysID of the note this document belongs to.
titlestringAlwaysThe document title.
primarybooleanAlwaystrue for the note's canonical minutes document.
created_atstringAlwaysWhen the document was created.
updated_atstringAlwaysWhen the document was last updated.
export_markdownstringOptionalThe document body as markdown.
localestringOptionalDocument language, e.g. ja-JP.
categorystringOptionalWhat kind of document it is, e.g. agenda, summary, translation.
template_modestringOptionalTemplate the document was generated from, e.g. minutes.
custom_template_idstringOptionalID of the custom template used.

--list-documents includes every document's full export_markdown, so the response grows with the note's content — a note with a few translations can run to tens of kilobytes. When you only need the IDs and titles, drop the bodies:

bash
rimo note get <note_id> --list-documents --excludes export_markdown

Asset ​

A file attachment — an uploaded file or an image embedded in the body — referenced by one of a note's documents.

Returned inside {assets: [...]} by note asset list, and as the single {asset: ...} just-uploaded attachment by note asset upload.

FieldTypePresenceDescription
idstringAlwaysThe attachment's ID.
namestringAlwaysThe file name.
mime_typestringOptionalThe file's MIME type. Omitted when unknown.
size_bytesintegerOptionalFile size in bytes. Omitted when unknown — images embedded in the body usually don't carry a size.
uploaded_atstringAlwaysWhen the file was uploaded.

Team ​

Returned inside {teams: [...]} by team list.

FieldTypePresenceDescription
idstringAlwaysThe team ID. Pass it to note list --team, note search --team, and note create --team.
namestringAlwaysThe team name — this is the folder name shown in the Rimo app.
categorystringOptional"team" for a team folder. "organization" marks your organization's own folder, returned only with --include-organization; its id is the organization ID.
is_private_channelbooleanAlwaystrue when only team members can read the team's notes.
member_idsstring[]AlwaysUser IDs of the team's members.
created_atstringAlwaysWhen the team was created.
updated_atstringAlwaysWhen the team was last updated.
parent_idstringOptionalID of the parent team.
descriptionstringOptionalThe team description.

Search result ​

Returned inside {notes: [...], total_count} by note search. This is a search hit, not a full Note — it carries only what the search index returns.

FieldTypePresenceDescription
idstringAlwaysThe note ID. Pass it to note get.
titlestringOptionalThe note title.
held_atstringOptionalWhen the meeting took place.
created_atstringOptionalWhen the note was created.
owner_namestringOptionalDisplay name of the note's owner. --mode=filter only.
snippetobjectOptionalMatching excerpts. --mode=filter only — see below.

In --mode=filter, total_count is the raw match count before permission filtering — the whole result set rather than the current page, which is what makes --page / --per navigation possible. In --mode=semantic it is the number of unique notes returned.

snippet carries the matching excerpts, with the matched terms wrapped in HTML tags for highlighting. Each key is an array of strings, and all four keys are present — empty arrays where that part of the note did not match.

FieldTypePresenceDescription
transcriptsstring[]AlwaysExcerpts from the transcript.
headingsstring[]AlwaysExcerpts from the note's headings.
annotationsstring[]AlwaysExcerpts from annotations.
document_markdownsstring[]AlwaysExcerpts from the document body.

Authentication responses ​

Login and switch result ​

Returned by auth login (and rimo login) and auth switch. Every field is always present.

FieldTypeDescription
statusstringlogged_in for auth login, switched for auth switch.
aliasstringThe account alias, used with --account.
emailstringThe signed-in email address.
namestringDisplay name, falling back to the email and then the user ID.
orgstringOrganization name, falling back to the org ID and then Personal.

Logout result ​

Returned by auth logout (and rimo logout). Every field is always present.

FieldTypeDescription
statusstringAlways logged_out.
aliasstringThe alias that was logged out.
active_accountstringThe active account after the logout — empty if the one you logged out was active, since there is no auto-promotion.

Auth status ​

Returned by auth status.

FieldTypePresenceDescription
active_accountstringAlwaysAlias of the active account.
accountsobject[]AlwaysEvery saved account — see below.
active_credentialstringOptionalPresent only when an environment variable overrides the configured account: env:RIMO_API_KEY or env:RIMO_TOKEN. When it is present, that credential — not active_account — is what authenticates requests.
api_key_hintstringOptionalMasked form of the key, present only with env:RIMO_API_KEY.

Each entry in accounts:

FieldTypePresenceDescription
aliasstringAlwaysThe account alias, used with --account.
namestringAlwaysDisplay name.
orgstringAlwaysOrganization name.
activebooleanAlwaystrue for the active account.
token_statusstringAlwaysvalid, expiring_soon, expired, or unknown (the expiry could not be determined).
emailstringOptionalThe account's email address.

auth status refreshes any expired or near-expiry token before reporting, so token_status reflects live state rather than what was last written to the credential store.

Plain-text output ​

These commands print plain text on success because a JSON wrapper would only get in the way. Errors are still JSON — see Output & errors.

Note content ​

note get with a content flag prints the note's content directly:

FlagOutput
--transcriptOne line per transcript segment, as Speaker: content. Segments whose speaker could not be resolved print the content alone. Empty segments are skipped.
--documentThe primary document as markdown, preceded by # <title>.
--fullThe transcript, then a blank line, then the primary document.
--document-id <id>One document's markdown, in the same form as --document.
--meeting-chatOne line per web-meeting chat message, as [HH:MM] sender: text. The [HH:MM] and sender: parts are dropped when unavailable, and empty messages are skipped.
--timestampsWith --transcript or --full, prefixes each transcript line with [HH:MM:SS] — time elapsed from the start of the recording, not wall-clock time. A segment with no start time stays unprefixed.

A note with no transcript or no chat messages prints nothing and exits 0.

Ask answer ​

note ask streams the answer as the model generates it, then a Sources: block — the canonical citation surface, since the answer text carries no inline citations — then a Fetch a note: block. Unusually, all three go to stdout, so this is the one command whose stdout is not machine-readable. See rimo note ask for a full example.

Version and upgrade ​

Both print a single line to stdout — see rimo version and rimo upgrade for the exact strings.

Dry-run output ​

--dry-run on a write command (note create, note append) sends no request. It returns a representative example of the response shape with "dry_run": true added:

json
{
  "document": { "id": "doc_abc123", "primary": true, "...": "..." },
  "dry_run": true
}

The values are placeholders from the API schema, not a preview of your own input — use it to check the response shape and confirm the command parses, not to see what your note will contain.

--dry-run is rejected on read commands with dry-run not supported for read operations.