Check-in
A team-scoped recurring or ad-hoc check-in attached to a form. Collects responses from assignees on a schedule (RecurringRule) or on demand. Notify types control how assignees are reminded (email, in-app message, push notification). Assignees and subscribers are managed one at a time through the assignees and subscribers sub-resource routes.
List Check-ins
List checkIns. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 7 fields. Ordered by -createdAt unless you pass sort.
Required scope: check-ins: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.
requestType[eq]Filter where requestType equals.
requestType[in]Filter where requestType is one of (comma-separated list).
formId[eq]Filter where formId equals.
formId[in]Filter where formId is one of (comma-separated list).
recurringRuleId[eq]Filter where recurringRuleId equals.
recurringRuleId[in]Filter where recurringRuleId is one of (comma-separated list).
createdByActorId[eq]Filter where createdByActorId equals.
createdByActorId[in]Filter where createdByActorId is one of (comma-separated list).
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.
updatedAt[gt]Filter where updatedAt is greater than.
updatedAt[gte]Filter where updatedAt is greater than or equal to.
updatedAt[lt]Filter where updatedAt is less than.
updatedAt[lte]Filter where updatedAt is less than or equal to.
List Check-ins › 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 Check-in
Create a Check-in. Server-assigned fields are ignored if sent.
Required scope: check-ins: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 Check-in › Request Body
nameDisplay name for the check-in. Capped at 100 characters.
notifyTypesHow assignees are reminded: email, message (an in-app message) or notification (a push notification). Every channel you list fires, and at least one is required.
requestTypeWhat triggers this check-in. schedule runs it on a recurrence and REQUIRES recurringRuleId; manual runs it on demand and must omit recurringRuleId.
formIdThe form holding this check-in's questions. Set once when the check-in is created.
recurringRuleIdIdentifier of the recurrence rule that triggers this check-in, or null when requestType is manual. Create the rule first with POST /recurring-rules and pass its id here, or send an inline schedule object on the create body instead and one will be created for you.
Define the recurrence inline instead of pre-creating a rule: send the same timetable object recurringRule.schedule carries and a recurringRule is created in the same transaction and linked, so a failure anywhere rolls both back. This is the one-call alternative to recurringRuleId and mutually exclusive with it. Accepted on create only — change the schedule of an existing check-in by pointing recurringRuleId at another rule.
assigneesTeam members who must answer this check-in. Replaces the whole set on update; use POST /check-ins/{id}/assignees and POST /check-ins/{id}/assignees/remove for a single add or remove.
subscribersTeam members notified when someone answers, without being asked themselves. Replaces the whole set on update; use POST /check-ins/{id}/subscribers and POST /check-ins/{id}/subscribers/remove for a single add or remove.
Create Check-in › Responses
Created
idUnique identifier — an opaque string; never parse or generate one.
createdAtCreation timestamp.
nameDisplay name for the check-in. Capped at 100 characters.
notifyTypesHow assignees are reminded: email, message (an in-app message) or notification (a push notification). Every channel you list fires. Usually non-empty, but older records can come back with an empty list — read it, and if you are echoing a record back on an update, drop the key rather than sending the empty array (writes require at least one channel and will reject it).
requestTypeWhat triggers this check-in. schedule runs it on a recurrence and REQUIRES recurringRuleId; manual runs it on demand and must omit recurringRuleId.
formIdThe form holding this check-in's questions. Set once when the check-in is created.
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.
recurringRuleIdIdentifier of the recurrence rule that triggers this check-in, or null when requestType is manual. Create the rule first with POST /recurring-rules and pass its id here, or send an inline schedule object on the create body instead and one will be created for you.
The related Form, present only when you pass ?expand=form.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Actor, present only when you pass ?expand=createdByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Check-in request rows, present only when you pass ?expand=requests.
Get Check-in
Retrieve a single Check-in by id.
Required scope: check-ins:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Check-in › Responses
OK
idUnique identifier — an opaque string; never parse or generate one.
createdAtCreation timestamp.
nameDisplay name for the check-in. Capped at 100 characters.
notifyTypesHow assignees are reminded: email, message (an in-app message) or notification (a push notification). Every channel you list fires. Usually non-empty, but older records can come back with an empty list — read it, and if you are echoing a record back on an update, drop the key rather than sending the empty array (writes require at least one channel and will reject it).
requestTypeWhat triggers this check-in. schedule runs it on a recurrence and REQUIRES recurringRuleId; manual runs it on demand and must omit recurringRuleId.
formIdThe form holding this check-in's questions. Set once when the check-in is created.
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.
recurringRuleIdIdentifier of the recurrence rule that triggers this check-in, or null when requestType is manual. Create the rule first with POST /recurring-rules and pass its id here, or send an inline schedule object on the create body instead and one will be created for you.
The related Form, present only when you pass ?expand=form.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Actor, present only when you pass ?expand=createdByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Check-in request rows, present only when you pass ?expand=requests.
Delete Check-in
Permanently delete this Check-in. This cannot be undone.
Required scope: check-ins:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Check-in › Responses
No Content
Update Check-in
Partially update a Check-in. Only the fields you send are changed.
Required scope: check-ins:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
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 Check-in › Request Body
nameDisplay name for the check-in. Capped at 100 characters.
notifyTypesHow assignees are reminded: email, message (an in-app message) or notification (a push notification). Every channel you list fires, and at least one is required.
requestTypeWhat triggers this check-in. schedule runs it on a recurrence and REQUIRES recurringRuleId; manual runs it on demand and must omit recurringRuleId.
recurringRuleIdIdentifier of the recurrence rule that triggers this check-in, or null when requestType is manual. Create the rule first with POST /recurring-rules and pass its id here, or send an inline schedule object on the create body instead and one will be created for you.
assigneesTeam members who must answer this check-in. Replaces the whole set on update; use POST /check-ins/{id}/assignees and POST /check-ins/{id}/assignees/remove for a single add or remove.
subscribersTeam members notified when someone answers, without being asked themselves. Replaces the whole set on update; use POST /check-ins/{id}/subscribers and POST /check-ins/{id}/subscribers/remove for a single add or remove.
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 Check-in › Responses
OK
idUnique identifier — an opaque string; never parse or generate one.
createdAtCreation timestamp.
nameDisplay name for the check-in. Capped at 100 characters.
notifyTypesHow assignees are reminded: email, message (an in-app message) or notification (a push notification). Every channel you list fires. Usually non-empty, but older records can come back with an empty list — read it, and if you are echoing a record back on an update, drop the key rather than sending the empty array (writes require at least one channel and will reject it).
requestTypeWhat triggers this check-in. schedule runs it on a recurrence and REQUIRES recurringRuleId; manual runs it on demand and must omit recurringRuleId.
formIdThe form holding this check-in's questions. Set once when the check-in is created.
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.
recurringRuleIdIdentifier of the recurrence rule that triggers this check-in, or null when requestType is manual. Create the rule first with POST /recurring-rules and pass its id here, or send an inline schedule object on the create body instead and one will be created for you.
The related Form, present only when you pass ?expand=form.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Actor, present only when you pass ?expand=createdByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Check-in request rows, present only when you pass ?expand=requests.
Search Check-ins
Full-text ranked search across checkIns. Ranked by relevance; pages are capped at 200 results. Filterable by 7 fields.
Required scope: check-ins: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.
requestType[eq]Filter where requestType equals.
requestType[in]Filter where requestType is one of (comma-separated list).
formId[eq]Filter where formId equals.
formId[in]Filter where formId is one of (comma-separated list).
recurringRuleId[eq]Filter where recurringRuleId equals.
recurringRuleId[in]Filter where recurringRuleId is one of (comma-separated list).
createdByActorId[eq]Filter where createdByActorId equals.
createdByActorId[in]Filter where createdByActorId is one of (comma-separated list).
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.
updatedAt[gt]Filter where updatedAt is greater than.
updatedAt[gte]Filter where updatedAt is greater than or equal to.
updatedAt[lt]Filter where updatedAt is less than.
updatedAt[lte]Filter where updatedAt is less than or equal to.
Search Check-ins › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Add assignees to a Check-in
Link the given ids to this Check-in as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards.
Required scopes: check-ins:write check-ins:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add assignees to a Check-in › Request Body
idsTeam Members to add or remove, by id.
Add assignees to a Check-in › Responses
OK
The complete assignees set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove assignees from a Check-in
Unlink the given ids from this Check-in's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards.
Required scopes: check-ins:write check-ins:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove assignees from a Check-in › Request Body
idsTeam Members to add or remove, by id.
Remove assignees from a Check-in › Responses
OK
The complete assignees set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Add subscribers to a Check-in
Link the given ids to this Check-in as subscribers. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete subscribers set afterwards.
Required scopes: check-ins:write check-ins:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add subscribers to a Check-in › Request Body
idsTeam Members to add or remove, by id.
Add subscribers to a Check-in › Responses
OK
The complete subscribers set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove subscribers from a Check-in
Unlink the given ids from this Check-in's subscribers. Removing one that is not linked changes nothing. Returns the complete subscribers set afterwards.
Required scopes: check-ins:write check-ins:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Check-in.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove subscribers from a Check-in › Request Body
idsTeam Members to add or remove, by id.
Remove subscribers from a Check-in › Responses
OK
The complete subscribers set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).