Every product
const url = 'https://app.dycrypt.com/o/acme/api/products';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://app.dycrypt.com/o/acme/api/products \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”The organisation’s products.
A product carries the signing key and the licence shape.
object
Signed into every licence as prd.
The JDK name: Ed25519, SHA256withRSA, SHA256withECDSA.
Where the private key lives — managed
See the licence-mode guides — Offline verifies alone, Online must check in, Hybrid does both.
Public — it is in the URL every installed application calls.
Whether a check token exists. Never the token itself.
Whether /fetch is available for this product. Off by default.
How many of the five fingerprint components must match.
How many machines a licence for this product binds at once. The default for new licences only.
Example
[ { "algorithm": "ED25519", "licenceType": "OFFLINE", "allowedLicenceTypes": [ "OFFLINE" ] }]No credential, or one that no longer resolves — revoked, expired, deleted. Replace it.
Every failure in this API has this shape and no other.
object
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.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}