日程与目标 API

日程和参与者、日历订阅,以及目标。

由群历 REST API 的 OpenAPI 契约(openapi/qunli-api.yaml,qunli-api 提交 f18e40d)生成。路径都相对于 https://qunli.co;认证见认证,响应包装、分页和错误格式见约定。字段说明是契约里的英文原文。

日程

GET/api/v1/accounts/{account_id}/projects/{project_id}/schedules

Active schedules of the project overlapping [from, to) — starts_at < to AND ends_at > from — ordered by starts_at (all-day first on ties). Omit both from and to for the current month in Asia/Shanghai. Not paginated: at most 1000 items; narrow the window for more. Items carry every field (same shape as GET /schedules/{id}).

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
project_id路径string是
content查询full | summary否full (default): rows carry their whole body. summary: rows leave out content_html, content_json, content_markdown and content_version and carry only preview_text / excerpt (documents: also preview_html); read one record for its body. Other values → 400 param_invalid.默认 full
from查询string否Window start (inclusive). Date (YYYY-MM-DD) or ISO 8601 date-time; percent-encode a + offset as %2B (or use Z). Defaults with to to the current month.
to查询string否Window end (exclusive). Date or date-time; percent-encode a + offset as %2B.

响应

状态说明返回
200Schedules overlapping the windowdata: Schedule[]
400Malformed request or invalid parameter.ProblemDetails
401Missing or invalid authentication.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails

POST/api/v1/accounts/{account_id}/projects/{project_id}/schedules

Creates an active schedule. Timed events send schedule.starts_at (and optionally ends_at, default +1 hour); all-day events send all_day: true with starts_on (and optionally ends_on, inclusive). schedule.participants (member refs "U12" or user UUIDs) become participants: each is notified (reason invited) and auto-follows the schedule. The creator is not added as a participant.

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
project_id路径string是

请求体application/json,必填

字段类型必填说明
edit_scopestring否Update only. this (default) creates an exception; following edits the selected future instance and later instances, keeping earlier meetings and exceptions. Recurrence changes require following; recurrence null stops repeating after this instance.
recordingobject否
recording.idstring (uuid)否
recording.titlestring否1–255 characters after trimming; required on create.
recording.content_markdownstring | null否Agenda / minutes (GFM, ≤ 128KB).
recording.content_htmlstring | null否已弃用
recording.content_jsonany否已弃用
recording.content_versioninteger | null否Update only. The content_version the edit started from (recommended for every body edit). When present and the request changes the body, a stale value is refused with 409 content_conflict and nothing is written; the problem body carries the current content_version. Omit it (or send null) for last-write-wins. Title- or metadata-only updates never conflict.
scheduleobject否
schedule.idstring (uuid)否
schedule.all_dayboolean否Explicit null or invalid values return 422 validation_error (all_day_invalid).
schedule.starts_atstring否ISO 8601 date-time with offset, e.g. 2026-10-20T14:00:00+08:00.
schedule.ends_atstring否Exclusive end; default starts_at + 1 hour on create.
schedule.starts_onstring否YYYY-MM-DD (all-day).
schedule.ends_onstring否YYYY-MM-DD, inclusive (all-day); default starts_on.
schedule.time_zonestring否IANA name; default Asia/Shanghai.
schedule.locationstring | null否
schedule.linkstring | null否https:// URL, ≤ 2048 characters.
schedule.recurrenceScheduleRecurrence否Calendar-date rule in the event timezone. Daily/weekly/monthly/yearly; invalid month-end or leap dates are skipped. until is inclusive, count includes the first occurrence. Specify at most one of until/count. Open-ended series materialize one year ahead and renew daily. On a schedule it is the rule the series still follows: once the series is stopped (PATCH edit_scope=following with recurrence null, or DELETE edit_scope=following), the meetings it kept report the shortened rule — count becomes the number of kept meetings (count and open-ended rules), until becomes the last kept meeting's date (until rules) — and null when no meeting of the series was kept.
schedule.recurrence.freqstring否
schedule.recurrence.intervalinteger否1–365; defaults to 1.
schedule.recurrence.by_weekdayinteger[]否Weekly only. 0=Sunday to 6=Saturday; must include the initial weekday.
schedule.recurrence.untilstring | null否Inclusive YYYY-MM-DD; not before the first occurrence.
schedule.recurrence.countinteger | null否1–1000 occurrences.
schedule.participants_versionstring否Required on update when participants is present; use the token from the schedule snapshot.
schedule.participantsstring[]否Member refs ("U12") or user UUIDs; replaces the list when present. Only [] clears it; null is invalid.

响应

状态说明返回
201Created scheduledata: Schedule
400Malformed request or invalid parameter.ProblemDetails
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails
422Validation failed.ProblemDetails

GET/api/v1/accounts/{account_id}/schedules

The account calendar: schedules overlapping [from, to) across every project the caller can access. scope=mine (default) keeps schedules the caller created or participates in; scope=all keeps every accessible one. project_ids narrows to some projects (inaccessible ids are ignored). Same window rules, order and 1000-item cap as the project list.

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
content查询full | summary否full (default): rows carry their whole body. summary: rows leave out content_html, content_json, content_markdown and content_version and carry only preview_text / excerpt (documents: also preview_html); read one record for its body. Other values → 400 param_invalid.默认 full
from查询string否Window start (inclusive). Date (YYYY-MM-DD) or ISO 8601 date-time; percent-encode a + offset as %2B (or use Z). Defaults with to to the current month.
to查询string否Window end (exclusive). Date or date-time; percent-encode a + offset as %2B.
scope查询string否mine (default) = created by me or I participate; all = every accessible project; members = selected creators or participants (member_ids required).
project_ids查询string 或 string[]否Comma-separated project IDs or project_ids[]=12&project_ids[]=13.
member_ids查询string 或 string[]否Required for scope=members. 1–100 live account member refs (U12) or user UUIDs, comma-separated or array. OR across selected members; intersects project filters and caller access.

响应

状态说明返回
200Schedules overlapping the windowdata: Schedule[]
400Malformed request or invalid parameter.ProblemDetails
401Missing or invalid authentication.ProblemDetails

GET/api/v1/accounts/{account_id}/schedules/{id}

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

响应

状态说明返回
200Scheduledata: Schedule
401Missing or invalid authentication.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails

PATCH/api/v1/accounts/{account_id}/schedules/{id}

Updates any subset of fields. Sending starts_at without ends_at (or starts_on without ends_on) shifts the event and keeps its duration; sending both sets both as given. Changing the time notifies participants and the creator (reason rescheduled), records a rescheduled activity and re-plans reminders. schedule.participants, when present, replaces the participant list (same as PUT .../participants). recording.content_version guards the body like the other recording updates: stale → 409 content_conflict (current content_version in the problem body), nothing written; only the selected instance's version is checked when edit_scope is following.

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

请求体application/json,必填

字段类型必填说明
edit_scopestring否Update only. this (default) creates an exception; following edits the selected future instance and later instances, keeping earlier meetings and exceptions. Recurrence changes require following; recurrence null stops repeating after this instance.
recordingobject否
recording.idstring (uuid)否
recording.titlestring否1–255 characters after trimming; required on create.
recording.content_markdownstring | null否Agenda / minutes (GFM, ≤ 128KB).
recording.content_htmlstring | null否已弃用
recording.content_jsonany否已弃用
recording.content_versioninteger | null否Update only. The content_version the edit started from (recommended for every body edit). When present and the request changes the body, a stale value is refused with 409 content_conflict and nothing is written; the problem body carries the current content_version. Omit it (or send null) for last-write-wins. Title- or metadata-only updates never conflict.
scheduleobject否
schedule.idstring (uuid)否
schedule.all_dayboolean否Explicit null or invalid values return 422 validation_error (all_day_invalid).
schedule.starts_atstring否ISO 8601 date-time with offset, e.g. 2026-10-20T14:00:00+08:00.
schedule.ends_atstring否Exclusive end; default starts_at + 1 hour on create.
schedule.starts_onstring否YYYY-MM-DD (all-day).
schedule.ends_onstring否YYYY-MM-DD, inclusive (all-day); default starts_on.
schedule.time_zonestring否IANA name; default Asia/Shanghai.
schedule.locationstring | null否
schedule.linkstring | null否https:// URL, ≤ 2048 characters.
schedule.recurrenceScheduleRecurrence否Calendar-date rule in the event timezone. Daily/weekly/monthly/yearly; invalid month-end or leap dates are skipped. until is inclusive, count includes the first occurrence. Specify at most one of until/count. Open-ended series materialize one year ahead and renew daily. On a schedule it is the rule the series still follows: once the series is stopped (PATCH edit_scope=following with recurrence null, or DELETE edit_scope=following), the meetings it kept report the shortened rule — count becomes the number of kept meetings (count and open-ended rules), until becomes the last kept meeting's date (until rules) — and null when no meeting of the series was kept.
schedule.recurrence.freqstring否
schedule.recurrence.intervalinteger否1–365; defaults to 1.
schedule.recurrence.by_weekdayinteger[]否Weekly only. 0=Sunday to 6=Saturday; must include the initial weekday.
schedule.recurrence.untilstring | null否Inclusive YYYY-MM-DD; not before the first occurrence.
schedule.recurrence.countinteger | null否1–1000 occurrences.
schedule.participants_versionstring否Required on update when participants is present; use the token from the schedule snapshot.
schedule.participantsstring[]否Member refs ("U12") or user UUIDs; replaces the list when present. Only [] clears it; null is invalid.

响应

状态说明返回
200Updated scheduledata: Schedule
400Malformed request or invalid parameter.ProblemDetails
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails
409State conflict.ProblemDetails
422Validation failed.ProblemDetails

DELETE/api/v1/accounts/{account_id}/schedules/{id}

Cancel (trash) a schedule — notifies participants and the creator

Cancelling is trashing: the response is the schedule with status trashed; participants and the creator (except the caller) are notified with reason cancelled. Restore with PUT /recordings/{ref}/status/active.

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。
edit_scope查询string否this (default) cancels one occurrence; following stops the series from this future occurrence, including its later exceptions. Restoring one meeting does not restart the series.

响应

状态说明返回
200Trashed scheduledata: Schedule
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails

PUT/api/v1/accounts/{account_id}/schedules/{schedule_id}/participants

Replaces the participant list. members are member refs ("U12") or user UUIDs of people who can access the project; an empty array clears it. Newly added people are notified (reason invited) and follow the schedule; removed people stop following it (unless they created it).

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
schedule_id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

请求体application/json,必填

字段类型必填说明
participantsobject否Required.
participants.versionstring否Required. The participants_version from the opened schedule snapshot.
participants.membersstring[]否Required. Member refs ("U12") or user UUIDs; [] clears the list.

响应

状态说明返回
200The schedule with its new participantsdata: Schedule
400Malformed request or invalid parameter.ProblemDetails
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails
409State conflict.ProblemDetails
422Validation failed.ProblemDetails

GET/api/v1/accounts/{account_id}/calendar_feeds

List only the current user's calendar subscriptions

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。

响应

状态说明返回
200Subscriptions (no raw access tokens)data: CalendarFeed[]

POST/api/v1/accounts/{account_id}/calendar_feeds

Create a revocable read-only calendar subscription with saved filters

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。

请求体application/json,必填

字段类型必填说明
calendar_feedobject否
calendar_feed.namestring否
calendar_feed.scopestring否
calendar_feed.project_idsstring[]否
calendar_feed.member_idsstring[]否
calendar_feed.include_tasksboolean否

响应

状态说明返回
201Subscription with its one-time token URLdata: CalendarFeed
400Malformed request or invalid parameter.ProblemDetails
422Validation failed.ProblemDetails

DELETE/api/v1/accounts/{account_id}/calendar_feeds/{id}

Revoke a calendar subscription

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string是

响应

状态说明返回
200Revoked (`{ "data": null }`); the old subscription URL now answers 404.data: null
404Resource does not exist or has been trashed.ProblemDetails

POST/api/v1/accounts/{account_id}/calendar_feeds/{id}/rotate

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string是

响应

状态说明返回
200New URL; previous token immediately invalidateddata: CalendarFeed
404Resource does not exist or has been trashed.ProblemDetails

GET/api/v1/accounts/{account_id}/calendar_subscriptions/{id}.ics

Read-only ICS authenticated by the URL token. Rechecks owner membership and project access on every request. Rolling past 90 days and next year; cancelled events retain stable UIDs. External clients choose refresh timing.

认证:无需认证。

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string是
token查询string是

响应

状态说明返回
200RFC 5545 calendarstring
404Resource does not exist or has been trashed.ProblemDetails

GET/api/v1/accounts/{account_id}/schedules/{schedule_id}/calendar.ics

Download one meeting (requires normal session/API authentication and project access)

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
schedule_id路径string是

响应

状态说明返回
200RFC 5545 calendar containing one eventstring
404Resource does not exist or has been trashed.ProblemDetails

目标

GET/api/v1/accounts/{account_id}/goals

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
content查询full | summary否full (default): rows carry their whole body. summary: rows leave out content_html, content_json, content_markdown and content_version and carry only preview_text / excerpt (documents: also preview_html); read one record for its body. Other values → 400 param_invalid.默认 full

响应

状态说明返回
200Goal listdata: Goal[]
401Missing or invalid authentication.ProblemDetails

GET/api/v1/accounts/{account_id}/goals/{id}

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

响应

状态说明返回
200Goaldata: Goal
401Missing or invalid authentication.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails

PATCH/api/v1/accounts/{account_id}/goals/{id}

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

请求体application/json,必填

字段类型必填说明
recordingRecordingFields否The fields every recording type shares, sent under recording. id is create-only (a client-generated UUID).
recording.idstring (uuid)否
recording.titlestring否
recording.statusstring否
recording.content_htmlstring | null否已弃用
recording.content_jsonany否已弃用
recording.content_markdownstring | null否Canonical body (GFM). When present the server renders and sanitizes content_html from it, ignoring any client-sent content_html/content_json. Preferred over content_html and content_json for new integrations. Hard cap 131072 bytes (128KB, UTF-8 bytes — not characters); a larger body is rejected with 422 validation_error ("正文超出 128KB 上限"): upload long content as an attachment or split it into multiple documents. Pre-existing over-limit rows stay readable and editable as long as the body is untouched.
recording.content_versioninteger | null否Update only. The content_version the edit started from (recommended for every body edit). When present and the request changes the body, a stale value is refused with 409 content_conflict and nothing is written; the problem body carries the current content_version. Omit it (or send null) for last-write-wins. Title- or metadata-only updates never conflict.
goalGoalFields否Goal fields (goals_controller#recordable_params). Whole numbers; target must be greater than starting.
goal.idstring (uuid)否
goal.startinginteger否
goal.targetinteger否
goal.currentinteger否

响应

状态说明返回
200Updated goaldata: Goal
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails
409content_conflict — the body was saved elsewhere since the request's recording.content_version; nothing was written. Rebase the edit onto the returned content_version (or reload) and save again.ProblemDetails
422Validation failed.ProblemDetails

DELETE/api/v1/accounts/{account_id}/goals/{id}

Soft-delete a goal (returns the trashed recording)

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
id路径string (ref)是引用号,例如 T1042,大小写不敏感,可带前导 #。

响应

状态说明返回
200Trashed goaldata: Goal
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
404Resource does not exist or has been trashed.ProblemDetails

GET/api/v1/accounts/{account_id}/projects/{project_id}/goals

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
project_id路径string是
content查询full | summary否full (default): rows carry their whole body. summary: rows leave out content_html, content_json, content_markdown and content_version and carry only preview_text / excerpt (documents: also preview_html); read one record for its body. Other values → 400 param_invalid.默认 full

响应

状态说明返回
200Goal listdata: Goal[]
401Missing or invalid authentication.ProblemDetails

POST/api/v1/accounts/{account_id}/projects/{project_id}/goals

参数

参数位置类型必填说明
account_id路径string是团队的数字 id,和网页地址里的相同,例如 2025。
project_id路径string是

请求体application/json,必填

字段类型必填说明
recordingRecordingFields否The fields every recording type shares, sent under recording. id is create-only (a client-generated UUID).
recording.idstring (uuid)否
recording.titlestring否
recording.statusstring否
recording.content_htmlstring | null否已弃用
recording.content_jsonany否已弃用
recording.content_markdownstring | null否Canonical body (GFM). When present the server renders and sanitizes content_html from it, ignoring any client-sent content_html/content_json. Preferred over content_html and content_json for new integrations. Hard cap 131072 bytes (128KB, UTF-8 bytes — not characters); a larger body is rejected with 422 validation_error ("正文超出 128KB 上限"): upload long content as an attachment or split it into multiple documents. Pre-existing over-limit rows stay readable and editable as long as the body is untouched.
recording.content_versioninteger | null否Update only. The content_version the edit started from (recommended for every body edit). When present and the request changes the body, a stale value is refused with 409 content_conflict and nothing is written; the problem body carries the current content_version. Omit it (or send null) for last-write-wins. Title- or metadata-only updates never conflict.
goalGoalFields否Goal fields (goals_controller#recordable_params). Whole numbers; target must be greater than starting.
goal.idstring (uuid)否
goal.startinginteger否
goal.targetinteger否
goal.currentinteger否

响应

状态说明返回
201Created goaldata: Goal
401Missing or invalid authentication.ProblemDetails
403Authenticated but not permitted.ProblemDetails
422Validation failed.ProblemDetails

数据结构

上面的响应用到的对象。字段的类型是另一个对象时,它也列在这里。

Schedule

字段类型必填说明
idstring (uuid)是
public_idstring | null否
legacy_idstring | null是
titlestring是
content_htmlstring | null否
content_jsonobject | null否
content_markdownstring | null否Canonical body (GFM). content_html is rendered server-side from it; null on rows not yet migrated from Tiptap JSON.
content_versioninteger否Body version for compare-and-set saves. Starts at 0 and increases by one each time content_markdown / content_html / content_json actually changes (any write path). Send it back as recording.content_version when saving a body edit.
preview_textstring否Lists only. The body as plain text (HTML tags removed, entities left encoded, e.g. "&"), cut to 80 UTF-16 units; "" without a body.
excerptstring | null否Lists only. Up to 100 characters of the body's text, images and videos shown as [图片] / [视频]; null without a body.
preview_htmlstring否Document lists only. The first 3000 characters of content_html (may end inside a tag), for thumbnails.
comments_countinteger是
typeSchedule是
statusdraft | active | archived | trashed是
recordable_typeSchedule是
app_urlstring | null是
account_idstring (uuid)是
account_public_idstring是
project_idstring (uuid)是
project_public_idstring是
creator_idstring (uuid)是
parent_idstring (uuid) | null否
parent_public_idstring | null否
ancestorsFolderCrumb[]否
created_atstring (date-time)是
updated_atstring (date-time)是Last change of the recording or of its body, whichever is later.
reactionsReaction[]是
edited_byUserRef否Comments and discussions only: the last member other than the author who edited the title or body (the author's own later edits keep it); null when only the author edited it.
trashed_byUserRef否Comments and discussions only: the member other than the author who trashed it; null otherwise (cleared by the author's own trash and on restore). A comment with status "trashed" and a trashed_by is a placeholder in GET .../recordings/:id/comments — its title and content are empty.
recordable_idstring (uuid)是The schedules row id.
starts_atstring (date-time)是Start instant (UTC). All-day events start at 00:00 in time_zone.
ends_atstring (date-time)是End instant (UTC), EXCLUSIVE.
all_dayboolean是
time_zonestring是IANA time zone the event is defined in.
starts_onstring (date) | null是All-day only — first day (local); null for timed events.
ends_onstring (date) | null是All-day only — last day (local), INCLUSIVE; null for timed events.
locationstring | null是
linkstring | null是Meeting / live link (https).
participantsUserRef[]是
participant_idsstring (uuid)[]是User UUIDs of participants, same order as participants.
participants_versionstring是Opaque participant snapshot token for replacement writes.
projectProjectSummary是
series_idstring (uuid) | null否
recurrenceScheduleRecurrence否Calendar-date rule in the event timezone. Daily/weekly/monthly/yearly; invalid month-end or leap dates are skipped. until is inclusive, count includes the first occurrence. Specify at most one of until/count. Open-ended series materialize one year ahead and renew daily. On a schedule it is the rule the series still follows: once the series is stopped (PATCH edit_scope=following with recurrence null, or DELETE edit_scope=following), the meetings it kept report the shortened rule — count becomes the number of kept meetings (count and open-ended rules), until becomes the last kept meeting's date (until rules) — and null when no meeting of the series was kept.
detachedboolean否This occurrence was individually changed or cancelled.
occurrence_numberinteger | null否

CalendarFeed

字段类型必填说明
idstring (uuid)是
namestring是
scopemine | all | members是
project_idsstring (uuid)[]是
member_idsstring (uuid)[]是
include_tasksboolean是
created_atstring (date-time)是
subscription_pathstring | null是Token-bearing relative ICS URL; returned only on creation/rotation. Store privately; listing returns null.

Goal

字段类型必填说明
idstring (uuid)是
public_idstring | null否
legacy_idstring | null是
titlestring是
content_htmlstring | null否
content_jsonobject | null否
content_markdownstring | null否Canonical body (GFM). content_html is rendered server-side from it; null on rows not yet migrated from Tiptap JSON.
content_versioninteger否Body version for compare-and-set saves. Starts at 0 and increases by one each time content_markdown / content_html / content_json actually changes (any write path). Send it back as recording.content_version when saving a body edit.
preview_textstring否Lists only. The body as plain text (HTML tags removed, entities left encoded, e.g. "&"), cut to 80 UTF-16 units; "" without a body.
excerptstring | null否Lists only. Up to 100 characters of the body's text, images and videos shown as [图片] / [视频]; null without a body.
preview_htmlstring否Document lists only. The first 3000 characters of content_html (may end inside a tag), for thumbnails.
comments_countinteger是
typestring是
statusdraft | active | archived | trashed是
recordable_typeGoal是
app_urlstring | null是
account_idstring (uuid)是
account_public_idstring是
project_idstring (uuid)是
project_public_idstring是
creator_idstring (uuid)是
parent_idstring (uuid) | null否
parent_public_idstring | null否
ancestorsFolderCrumb[]否
created_atstring (date-time)是
updated_atstring (date-time)是Last change of the recording or of its body, whichever is later.
reactionsReaction[]是
edited_byUserRef否Comments and discussions only: the last member other than the author who edited the title or body (the author's own later edits keep it); null when only the author edited it.
trashed_byUserRef否Comments and discussions only: the member other than the author who trashed it; null otherwise (cleared by the author's own trash and on restore). A comment with status "trashed" and a trashed_by is a placeholder in GET .../recordings/:id/comments — its title and content are empty.
startinginteger是
targetinteger是
currentinteger是

FolderCrumb

字段类型必填说明
idstring (uuid)是
public_idstring | null是
titlestring是

Reaction

字段类型必填说明
idstring (uuid)是
actor_idstring (uuid)是
reactable_idstring (uuid)是
reactable_typestring是
reaction_type_idstring (uuid)是
reaction_emojistring是
reaction_namestring是
created_atstring (date-time)是
updated_atstring (date-time)是

UserRef

字段类型必填说明
idstring (uuid)是User UUID.
public_idstring | null是Member ref ("U12") in this account.
namestring | null是
avatar_urlstring | null是
kindhuman | agent | null是null only for an unknown (deleted) user.

ProjectSummary

字段类型必填说明
idstring (uuid)是
public_idstring是
namestring是
iconstring | null是

ScheduleRecurrence

Calendar-date rule in the event timezone. Daily/weekly/monthly/yearly; invalid month-end or leap dates are skipped. until is inclusive, count includes the first occurrence. Specify at most one of until/count. Open-ended series materialize one year ahead and renew daily. On a schedule it is the rule the series still follows: once the series is stopped (PATCH edit_scope=following with recurrence null, or DELETE edit_scope=following), the meetings it kept report the shortened rule — count becomes the number of kept meetings (count and open-ended rules), until becomes the last kept meeting's date (until rules) — and null when no meeting of the series was kept.

字段类型必填说明
freqstring否
intervalinteger否1–365; defaults to 1.
by_weekdayinteger[]否Weekly only. 0=Sunday to 6=Saturday; must include the initial weekday.
untilstring | null否Inclusive YYYY-MM-DD; not before the first occurrence.
countinteger | null否1–1000 occurrences.