Skip to content

One product, with its parameters and public key

GET
/api/products/{id}
curl --request GET \
--url https://app.dycrypt.com/o/acme/api/products/1 \
--header 'Authorization: Bearer <token>'
id
required
integer format: int64

The product.

Media typeapplication/json
object
id
required
integer format: int64
productKey
required

Signed into every licence as prd.

string
name
required
string
description
string | null
active
required
boolean
algorithm
required
string
Allowed values: ED25519 RSA_2048 RSA_3072 RSA_4096 EC_P256 EC_P384
algorithmLabel
string
signatureAlgorithm

The JDK name: Ed25519, SHA256withRSA, SHA256withECDSA.

string
certificateType
string
keyOrigin

Where the private key lives — managed

string
keyFingerprint
string | null
certificateExpiresAt
string | null format: date-time
certificateExpired
boolean
paramCount
integer
licenseCount
integer format: int64
licenceType
required

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

string
Allowed values: OFFLINE ONLINE HYBRID
allowedLicenceTypes
Array<string>
Allowed values: OFFLINE ONLINE HYBRID
checkId

Public — it is in the URL every installed application calls.

string | null
checkTokenSet

Whether a check token exists. Never the token itself.

boolean
checkRotatedAt
string | null format: date-time
licenceFetchEnabled

Whether /fetch is available for this product. Off by default.

boolean
checkIntervalSeconds
integer | null
maxOfflineSeconds
integer | null
fingerprintNeed

How many of the five fingerprint components must match.

integer | null
maxMachines

How many machines a licence for this product binds at once. The default for new licences only.

integer
defaultValidityMonths
integer | null
defaultGraceDays
integer | null
createdAt
string format: date-time
params
Array<object>

One parameter a licence for this product carries. The parameter list IS the licence’s shape: every value collected becomes a claim under key.

The issuer owns v, lid, prd, org, iat, exp and grace; a product parameter may not shadow them.

object
key

The claim name in the signed JSON.

string
label
string
type
string
Allowed values: STRING INTEGER BOOLEAN DATE STRING_LIST ENUM
required
boolean
defaultValue
string | null
options

Allowed values, for ENUM.

Array<string>
help
string | null
publicKeyPem
string | null
certificatePem
string | null
certificateSubject
string | null
keyState

Whether the signing service can currently open this key.

string | null
keyError
string | null
createdBy
string | null
Example
{
"algorithm": "ED25519",
"licenceType": "OFFLINE",
"allowedLicenceTypes": [
"OFFLINE"
],
"params": [
{
"type": "STRING"
}
]
}

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