Skip to content

List action items

GET
/action-items
curl --request GET \
--url 'https://safe-api.safetyradar.com/v2/action-items?page=1&limit=20&status=open&updatedAfter=2026-09-01T00%3A00%3A00%2B00%3A00&updatedBefore=2026-09-30T00%3A00%3A00%2B00%3A00&fieldFilters=%5B%7B%22key%22%3A%22crew%22%2C%22op%22%3A%22eq%22%2C%22value%22%3A%22A-shift%22%7D%5D&fieldSort=%7B%22key%22%3A%22crew%22%2C%22direction%22%3A%22asc%22%7D' \
--header 'Authorization: Bearer <token>' \
--header 'x-team: my-team-slug'

Get a paginated list of action items. Filter by status, assignedToUserId, entityType/entityId, externalId (the action item’s own correlation ID) or eventExternalId (scopes results to that event). A filter that matches nothing returns an empty page.

Poll for changes with updatedAfter / updatedBefore — strict ISO 8601 instants with a timezone offset, exclusive on both ends. When either is present the default sort changes from createdAt descending to updatedAt ascending, so the updatedAt of the last record on a page can be passed back as updatedAfter to fetch only what has changed since. Timestamps serialize to millisecond precision but are stored with microsecond precision, so the boundary record may be re-sent once; rows are never skipped. Treat the poll as at-least-once and de-duplicate on id.

Filter and sort on your organization’s custom fields with fieldFilters and fieldSort — JSON in the query string, ANDed with the filters above. A key your organization has not defined, or an operator its type does not accept, is a 400 rather than an ignored filter. Call GET /v2/modules/action_item/fields for the keys, types and the operators each one accepts.

page
integer
default: 1
limit
integer
default: 20 <= 100
status
string
Allowed values: open in_progress complete
assignedToUserId
string format: uuid
entityType
string
entityId
string format: uuid
externalId

The action item’s own external ID

string

The action item’s own external ID

eventExternalId

Event external ID; scopes results to that event

string

Event external ID; scopes results to that event

updatedAfter

Only action items updated strictly after this instant (exclusive). ISO 8601 with a timezone offset. When either updatedAt bound is present, results sort by updatedAt ascending so the last-seen value works as a cursor.

string format: date-time
Example
2026-09-01T00:00:00+00:00

Only action items updated strictly after this instant (exclusive). ISO 8601 with a timezone offset. When either updatedAt bound is present, results sort by updatedAt ascending so the last-seen value works as a cursor.

updatedBefore

Only action items updated strictly before this instant (exclusive). ISO 8601 with a timezone offset.

string format: date-time
Example
2026-09-30T00:00:00+00:00

Only action items updated strictly before this instant (exclusive). ISO 8601 with a timezone offset.

fieldFilters

JSON array of custom-field filters, ANDed together. Each entry is {“key”,“op”,“value”}; isNull / isNotNull take no value and in takes an array. The operators a field accepts are returned as ops by GET /v2/modules/action_item/fields. Example: [{“key”:“crew”,“op”:“in”,“value”:[“A”,“B”]},{“key”:“corrective_cost”,“op”:“gte”,“value”:1000}]

string
Example
[{"key":"crew","op":"eq","value":"A-shift"}]

JSON array of custom-field filters, ANDed together. Each entry is {“key”,“op”,“value”}; isNull / isNotNull take no value and in takes an array. The operators a field accepts are returned as ops by GET /v2/modules/action_item/fields. Example: [{“key”:“crew”,“op”:“in”,“value”:[“A”,“B”]},{“key”:“corrective_cost”,“op”:“gte”,“value”:1000}]

fieldSort

JSON custom-field sort: {“key”,“direction”} with direction “asc” or “desc” (default “asc”). Records holding no value for the key sort last on “asc” and first on “desc” (Postgres NULL ordering). Replaces the default createdAt sort.

string
Example
{"key":"crew","direction":"asc"}

JSON custom-field sort: {“key”,“direction”} with direction “asc” or “desc” (default “asc”). Records holding no value for the key sort last on “asc” and first on “desc” (Postgres NULL ordering). Replaces the default createdAt sort.

x-team

Deprecated — accepted but ignored; the v2 API is org-scoped.

string
Example
my-team-slug

Deprecated — accepted but ignored; the v2 API is org-scoped.

Paginated list of action items

Media typeapplication/json
object
data
required
Array<object>
object
id
required
string format: uuid
entityType
required
string
nullable
entityId
required
string format: uuid
nullable
formSubmissionId
required
string format: uuid
nullable
sourceSectionNodeId
required
string
nullable
title
required
string
description
required
string
nullable
assignedToUserId
required
string format: uuid
nullable
assignedToUserName
string
nullable
assignedToDepartmentId
required
string format: uuid
nullable
assignedToRoleSlug
required
string
nullable
dueDate
required
string
nullable
priority
required
string
Allowed values: low medium high urgent
statusId
required
string format: uuid
nullable
statusName
required
string
nullable
statusGroup
required
string
nullable
Allowed values: new in_progress complete on_hold cancelled
status
required
string
Allowed values: open in_progress complete
assetId
required
string format: uuid
nullable
assetName
required
string
nullable
externalId
required
string
nullable
responseNotes
required
string
nullable
attachments
required
Array<object>
nullable
object
key
additional properties
nullable
completedAt
required
string
nullable
completedById
required
string format: uuid
nullable
completedByName
required
string
nullable
createdById
required
string format: uuid
nullable
fields
required

The organization’s custom module fields, keyed by definition key. Always present; {} when the organization has configured none, and a defined key this item holds no value for is absent rather than null. Discover the keys, types and filter operators at GET /v2/modules/action_item/fields.

object
key
additional properties
any
metadata
required

Verbatim, unvalidated. Use fields — typed, admin-defined, validated. See GET /v2/modules/action_item/fields.

object
key
additional properties
nullable
organizationId
required
string format: uuid
teamId
required
string format: uuid
nullable
createdAt
required
string
updatedAt
required
string
meta
required
object
pagination
required
object
page
required
number
limit
required
number
total
required
number
totalPages
required
number
hasNext
required
boolean
hasPrev
required
boolean
Example
{
"data": [
{
"priority": "low",
"statusGroup": "new",
"status": "open",
"fields": {
"crew": "A-shift",
"corrective_cost": 1250
}
}
]
}

Malformed fieldFilters / fieldSort, or a key or operator the organization’s definitions refuse

Media typeapplication/json
object
code
required
string
message
required
string
details
object
key
additional properties
nullable
Examplegenerated
{
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
}
}

Unauthorized

Media typeapplication/json
object
code
required
string
message
required
string
details
object
key
additional properties
nullable
Examplegenerated
{
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
}
}

Referenced event not found

Media typeapplication/json
object
code
required
string
message
required
string
details
object
key
additional properties
nullable
Examplegenerated
{
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
}
}