Skip to content

One page, filtered and sorted in the database

GET
/api/licenses/page
curl --request GET \
--url 'https://app.dycrypt.com/o/acme/api/licenses/page?status=PENDING&sort=issuedAt&asc=false&limit=25&offset=0' \
--header 'Authorization: Bearer <token>'

total is the count matching the same filters, not the size of the page — a pager that cannot say “of 4,312” is a pair of arrows in the dark.

productId
integer format: int64
q
string

Free text over the customer name, email and licence id.

status

Where the licence is against the calendar and the revocation flag. PENDING, EXPIRED and REVOKED do not count against plan capacity.

string
Allowed values: PENDING ACTIVE GRACE EXPIRED REVOKED
window
string

An expiry window, as counted by /api/licenses/windows. Archived licences are excluded from every window except archived, which is the only way to list them.

sort
string
default: issuedAt
asc
boolean
limit
integer
default: 25
offset
integer
0

One page of licences.

Media typeapplication/json
object
rows
required
Array<object>

A licence as it appears in a list.

object
lid
required
string format: uuid
customerId
integer | null format: int64
licensee
required

The customer’s name

string
licenseeEmail
string | null
productId
required
integer format: int64
productName
string | null
productKey

Signed into the licence as prd.

string | null
issuedAt
required
string format: date-time
startsAt

The nbf claim. Absent means it is valid immediately.

string | null format: date-time
expiresAt

Null for a perpetual licence — the exp claim is omitted entirely.

string | null format: date-time
graceDays
required
integer
licenceType
required

See the licence-mode guides — Offline verifies alone, Online must check in, Hybrid does both.

string
Allowed values: OFFLINE ONLINE HYBRID
activation

How a Hybrid licence first binds to a machine. Only meaningful for HYBRID.

string
Allowed values: ONLINE OFFLINE
activated
boolean
boundAt

When it bound to a machine. Null means nobody has installed it yet.

string | null format: date-time
rebindCount

How many times an operator released the binding.

integer
maxMachines

How many machines this licence binds at once. Copied from the product at issue.

integer
seatsUsed

How many of them are bound right now.

integer
status
required

Where the licence is against the calendar and the revocation flag. PENDING, EXPIRED and REVOKED do not count against plan capacity.

string
Allowed values: PENDING ACTIVE GRACE EXPIRED REVOKED
checkHealth

What the field says, beside what the calendar says. NOT_APPLICABLE for every Offline licence, which is most of them in a typical organisation.

string
Allowed values: NOT_APPLICABLE NEVER OK DUE OVERDUE
checkMaxSeconds

The signed offline window.

integer | null
checkEverySeconds

How often the application should check in.

integer | null
revoked
required
boolean
revokedReason
string | null
archived

Filed away — off the default list and out of renewal. Still verifies in the field.

boolean
archivedAt
string | null format: date-time
issuedBy

The person or token that issued it.

string
lastCheckedAt
string | null format: date-time
renewedAt
string | null format: date-time
total
required

Matching the filters

integer format: int64
offset
required
integer
limit
required
integer
Example
{
"rows": [
{
"licenceType": "OFFLINE",
"activation": "ONLINE",
"status": "PENDING",
"checkHealth": "NOT_APPLICABLE"
}
]
}

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"
}