Goal Group
A team-scoped grouping for related goals (for example "Q2 OKRs"). It holds nothing but a name and a description; the goals themselves live on /goals. List a group's goals with ?expand=goals, or with GET /goals?goalGroupId[eq]={id} when you want the full goal payloads. Groups have no intrinsic order — sort them however suits your UI.
List Goal Groups
List goalGroups. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 2 fields. Ordered by createdAt unless you pass sort.
Required scope: goal-groups:read
query Parameters
sortField to sort by. Prefix with - for descending (-createdAt); a createdAt:desc / createdAt:asc suffix works too, but never both markers at once. Default: createdAt.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
List Goal Groups › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Create Goal Group
Create a Goal Group. Server-assigned fields are ignored if sent.
Required scope: goal-groups:write
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Create Goal Group › Request Body
nameDisplay name for this goal group. 1–100 characters; a blank name is rejected.
descriptionFree-text description of the group. Send null or "" to clear it; it always reads back as a string, empty when unset.
Create Goal Group › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for this goal group. 1–100 characters; a blank name is rejected.
descriptionFree-text description of the group. Send null or "" to clear it; it always reads back as a string, empty when unset.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
The linked Goal rows, present only when you pass ?expand=goals.
The related Actor, present only when you pass ?expand=createdByActor.
Get Goal Group
Retrieve a single Goal Group by id.
Required scope: goal-groups:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Goal Group.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Goal Group › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for this goal group. 1–100 characters; a blank name is rejected.
descriptionFree-text description of the group. Send null or "" to clear it; it always reads back as a string, empty when unset.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
The linked Goal rows, present only when you pass ?expand=goals.
The related Actor, present only when you pass ?expand=createdByActor.
Delete Goal Group
Permanently delete this Goal Group. This cannot be undone. The goals in the group are NOT deleted: every one of them survives with goalGroupId set to null.
Required scope: goal-groups:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Goal Group.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Goal Group › Responses
No Content
Update Goal Group
Partially update a Goal Group. Only the fields you send are changed.
Required scope: goal-groups:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Goal Group.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Update Goal Group › Request Body
nameDisplay name for this goal group. 1–100 characters; a blank name is rejected.
descriptionFree-text description of the group. Send null or "" to clear it; it always reads back as a string, empty when unset.
expectedUpdatedAtOptional concurrency guard: the updatedAt you last read. If the resource has changed since, the update is rejected with 409 instead of overwriting the other writer. Re-read, re-derive your change from the current values, and retry with the fresh updatedAt.
Update Goal Group › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for this goal group. 1–100 characters; a blank name is rejected.
descriptionFree-text description of the group. Send null or "" to clear it; it always reads back as a string, empty when unset.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
The linked Goal rows, present only when you pass ?expand=goals.
The related Actor, present only when you pass ?expand=createdByActor.
Search Goal Groups
Full-text ranked search across goalGroups. Ranked by relevance; pages are capped at 200 results. Filterable by 2 fields.
Required scope: goal-groups:read
query Parameters
qFull-text search query. Trimmed before matching; URLs, e-mail addresses and HTML markup are rejected.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
Search Goal Groups › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.