Skip to content

List / search the sync-archaeology timeline

GET
/timeline
curl --request GET \
--url 'https://example.com/api/v1/timeline?scopeKind=arr-instance&arrType=radarr&status=success&page=1&pageSize=100'

Returns a merged, paginated feed of archaeology events aggregated across four read-only sources (sync runs, PCD snapshots, rollbacks, canary rollouts), newest first, with annotations hydrated inline. This is a pure read/visual layer — no materialized event table; the only persisted timeline state is user annotations.

Filters combine with AND and gate which sources are included (fail-closed):

  • no scope filter → all four sources
  • instanceId or arrTypesync + canary only (snapshot/rollback carry no arr scope)
  • databaseIdsnapshot + rollback only
  • source intersects the included set
  • status, from, to, q apply inside every included branch

Ordering is occurredAt DESC, source ASC, id DESC so same-second cross-source events never duplicate or skip across page boundaries. Contradictory scope combinations return 400.

source
Array<string>
Allowed values: sync canary snapshot rollback

Restrict to a subset of sources. Comma-separated (form, non-exploded).

scopeKind

Which instance axis an event is scoped to.

string
Allowed values: arr-instance pcd-database

Restrict to one scope axis. Rejected with 400 when it contradicts a supplied id.

instanceId
integer

Arr instance scope — includes sync + canary only.

databaseId
integer

PCD database scope — includes snapshot + rollback only.

arrType
string
Allowed values: radarr sonarr lidarr

Arr family scope — includes sync + canary only (never inferred for pcd sources).

status

Normalized, cross-source status used for filtering and badge colour.

string
Allowed values: success partial failed skipped pending info
from
string

ISO-8601 (or date-only) lower bound on the event time.

to
string

ISO-8601 (or date-only) upper bound on the event time.

q
string

Free-text match on scope label or error text.

page
integer
default: 1 >= 1
pageSize
integer
default: 100 >= 1 <= 250

Timeline page

Media typeapplication/json
object
items
required
Array<object>

A single normalized timeline event with inline annotations.

object
id
required

Stable composite key ${source}:${sourceId}.

string
source
required

The event source a timeline event originates from.

string
Allowed values: sync canary snapshot rollback
sourceId
required
integer
timestamp
required

ISO-8601 UTC event time (normalized across source dialects).

string format: date-time
type
required

Source-specific subtype (e.g. the trigger).

string
nullable
status
required

Normalized, cross-source status used for filtering and badge colour.

string
Allowed values: success partial failed skipped pending info
badge
required

Badge variant used to colour the event row.

string
Allowed values: success warning danger neutral info
scope
required

Where an event happened. id is null when the Arr instance was deleted; label is retained.

object
kind
required

Which instance axis an event is scoped to.

string
Allowed values: arr-instance pcd-database
id
required
integer
nullable
label
required
string
nullable
arrType
required
string
Allowed values: radarr sonarr lidarr
title
required
string
metrics
required

Small source-specific bag of counts sufficient to render the row.

object
key
additional properties
One of:
string
detailHref
required

Deep-link into the owning feature’s existing detail surface.

string
annotations
required
Array<object>

A user note attached to a single timeline event.

object
id
required
integer
source
required

The event source a timeline event originates from.

string
Allowed values: sync canary snapshot rollback
eventId
required
integer
body
required
string
authorUserId
required
integer
nullable
authorName
required
string
nullable
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
page
required
integer
pageSize
required
integer
totalRecords
required
integer
totalPages
required
integer
hasNext
required
boolean
sourceCounts
required

Per-source event counts over the same filtered/gated set.

object
sync
required
integer
canary
required
integer
snapshot
required
integer
rollback
required
integer
Example
{
"items": [
{
"source": "sync",
"status": "success",
"badge": "success",
"scope": {
"kind": "arr-instance",
"arrType": "radarr"
},
"annotations": [
{
"source": "sync"
}
]
}
]
}

Invalid query parameter or contradictory scope combination

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}

Failed to list timeline

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}