Skip to content

Counts, status breakdown, and recent activity

GET
/api/dashboard
curl --request GET \
--url https://app.dycrypt.com/o/acme/api/dashboard \
--header 'Authorization: Bearer <token>'

Requires analytics:read. The embedded activity list is its own capability: a token granted only analytics:read receives an empty array rather than the audit trail as a side effect.

The overview.

Media typeapplication/json
object
counts
object
products
integer format: int64
customers
integer format: int64
users
integer format: int64
licenses
integer format: int64
active
integer format: int64
pending
integer format: int64
grace
integer format: int64
expired
integer format: int64
revoked
integer format: int64
expiringSoon
integer format: int64
issuedLast30

A level with no direction is a reading

integer format: int64
checkOverdue
integer format: int64
checkNever
integer format: int64
checkDue
integer format: int64
checkOk
integer format: int64
activity
Array<object>

Append-only. Written by the platform, never by a caller.

object
at
string format: date-time
actor

A token appears under its own name

string
type
string
target
string | null
detail
string | null
Example
{
"activity": [
{
"type": "LICENSE_ISSUED"
}
]
}

No credential, or one that no longer resolves — revoked, expired, deleted. Replace it.

Media typeapplication/json

Every failure in this API has this shape and no other.

object
error
required
string
Example
{
"error": "this token does not have licenses:write"
}

Authenticated, but not allowed: a missing scope, a read-only role, a plan limit reached, or a credential used under another organisation’s slug. The right credential doing something it may not do.

Media typeapplication/json

Every failure in this API has this shape and no other.

object
error
required
string
Example
{
"error": "this token does not have licenses:write"
}