Skip to content

Read an application's change timeline

GET
/api/v1/applications/{id}/timeline
curl --request GET \
--url https://api.aletheia-ops.com/api/v1/applications/example/timeline \
--header 'Authorization: Bearer <token>'
id
required
string

OK

Media typeapplication/json

/changes list response

object
items
Array<object>

One timeline row (summary-level fields only)

object
id
string
source_system
string
kind
string
occurred_at
string format: date-time
recorded_at
string format: date-time
actor

Normalized actor identity on a timeline change

object
type
string
id
string
display
string
arn
string
actor_user_id
string
via
string
aws_account_id
string
region
string
event_name
string
summary
string
next_cursor
string
total
integer
facets

Are the timeline filter-rail aggregations

object
source_systems
Array<object>

One value/count pair

object
value
string
count
integer
kinds
Array<object>

One value/count pair

object
value
string
count
integer
vias
Array<object>

One value/count pair

object
value
string
count
integer
aws_accounts
Array<object>

One value/count pair

object
value
string
count
integer
regions
Array<object>

One value/count pair

object
value
string
count
integer
freshness

Freshness block on every timeline response (§2.2)

object
cursors
Array<object>

One per-scope ingestion freshness entry

object
aws_account_id
string
region
string
last_event_time
string format: date-time
status
string
Examplegenerated
{
"items": [
{
"id": "example",
"source_system": "example",
"kind": "example",
"occurred_at": "2026-04-15T12:00:00Z",
"recorded_at": "2026-04-15T12:00:00Z",
"actor": {
"type": "example",
"id": "example",
"display": "example",
"arn": "example"
},
"actor_user_id": "example",
"via": "example",
"aws_account_id": "example",
"region": "example",
"event_name": "example",
"summary": "example"
}
],
"next_cursor": "example",
"total": 1,
"facets": {
"source_systems": [
{
"value": "example",
"count": 1
}
],
"kinds": [
{
"value": "example",
"count": 1
}
],
"vias": [
{
"value": "example",
"count": 1
}
],
"aws_accounts": [
{
"value": "example",
"count": 1
}
],
"regions": [
{
"value": "example",
"count": 1
}
]
},
"freshness": {
"cursors": [
{
"aws_account_id": "example",
"region": "example",
"last_event_time": "2026-04-15T12:00:00Z",
"status": "example"
}
]
}
}

No valid credential was presented, or it has expired.

Media typeapplication/json
object
code
required

Stable, machine-readable identifier. Branch on this.

string
message
required

Human-readable explanation. Safe to display; do not parse.

string
Examples
{
"code": "unauthorized",
"message": "authentication required"
}

Authenticated, but not permitted to perform this action.

Media typeapplication/json
object
code
required

Stable, machine-readable identifier. Branch on this.

string
message
required

Human-readable explanation. Safe to display; do not parse.

string
Examples
{
"code": "forbidden",
"message": "you do not have permission to perform this action"
}

The resource does not exist, or belongs to another organization. The two are deliberately indistinguishable.

Media typeapplication/json
object
code
required

Stable, machine-readable identifier. Branch on this.

string
message
required

Human-readable explanation. Safe to display; do not parse.

string
Examples
Examplenot_found
{
"code": "not_found",
"message": "resource not found"
}

An unexpected failure. Diagnostic detail is logged server-side and deliberately not returned. Quote the X-Request-Id response header when reporting one.

Media typeapplication/json
object
code
required

Stable, machine-readable identifier. Branch on this.

string
message
required

Human-readable explanation. Safe to display; do not parse.

string
Examples
Exampleinternal_error
{
"code": "internal_error",
"message": "internal server error"
}