Ask for the current signed licence string
const url = 'https://app.dycrypt.com/o/acme/api/public/license/example/fetch';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"license":"example","fingerprint":"DYC1.a1b2c3d4.e5f6a7b8.00000000.c9d0e1f2.a3b4c5d6.9f2c"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://app.dycrypt.com/o/acme/api/public/license/example/fetch \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "license": "example", "fingerprint": "DYC1.a1b2c3d4.e5f6a7b8.00000000.c9d0e1f2.a3b4c5d6.9f2c" }'Opt-in per product, off by default. Renewal keeps the lid and signs a
new string; /check can only report that it happened. This closes that
loop.
The presented licence is the credential — the current one, or an earlier,
superseded term for the same lid. For a bound licence the fingerprint
must match the existing binding; there is no trust-on-first-use here.
Refused once the presented licence is past its own exp plus grace.
Otherwise any past licence file, including a leaked one, would pull
whatever is current forever, and expiry would stop being a checkpoint.
The returned string is not trustworthy because the transport succeeded. Run it through the same verification any other licence gets.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The product’s check id. Public — it is in the URL every installed application calls.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The machine fingerprint, DYC1.<hashed parts>.<checksum>. Component values
are hashed separately; raw identifiers never leave the machine.
Responses
Section titled “Responses”The current signed licence.
object
Examplegenerated
{ "license": "example"}The request is wrong — a bad date, a missing field, a value the product does not declare.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}A missing or wrong check token.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}Fetch is not enabled for this product, the fingerprint does not match the binding, or the presented licence is past expiry plus grace.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}Online checking is disabled, or the slug is unknown.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}Rate limited. A separate budget from /check.
Every failure in this API has this shape and no other.
object
Example
{ "error": "this token does not have licenses:write"}