Skip to content

File a licence the organisation is finished with

POST
/api/licenses/{lid}/archive
curl --request POST \
--url https://app.dycrypt.com/o/acme/api/licenses/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/archive \
--header 'Authorization: Bearer <token>'

Takes the licence off the default list and out of renewal. Nothing is destroyed: its activity trail, its superseded terms and this record all remain, reachable by direct link and under the archived window.

Only a licence whose status is REVOKED or EXPIRED may be archived — anything still being honoured is refused with 400.

It does not reach the field. An archived licence is still signed and still verifies; the check service does not read this state at all.

Replaces DELETE /api/licenses/{lid}, removed in this release.

lid
required
string format: uuid

The licence id — a UUID, and the lid claim in the signed payload. It survives renewal.

The archived licence.

Media typeapplication/json
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
claims

The signed payload, decoded. Issuer claims first, then the product’s own parameters.

object
licenseString

The artifact to deliver: payloadB64url.signatureB64url. This is what a customer’s application verifies, and its own signature is its proof.

string
notes

Free text. Never signed into the licence.

string | null
Example
{
"licenceType": "OFFLINE",
"activation": "ONLINE",
"status": "PENDING",
"checkHealth": "NOT_APPLICABLE"
}

The request is wrong — a bad date, a missing field, a value the product does not declare.

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

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

No such record, or no such endpoint.

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