KDPika Licensing Sign inStart free
API v1
Show all languages
Browse documentation

Choose a page in the navigation drawer.

KDPika Licensing · API v1 Beginner

License lifecycle

Understand allowed license state transitions, expiry handling, renewal and the effects on active devices and tokens.

On this page
Updated 2026-10-17 UTCDownload Markdown

License status controls access, but status changes, expiry and device-seat release are distinct operations.

What you will learn

  • Recognize every stored license state.
  • Choose allowed management transitions.
  • Understand why restore and reset do not undo every counter or token change.

Prerequisites

States and transitions

Active licenses can be suspended and restored or revoked permanently. Expiry is checked during use and durably recorded by cron. Eligible expired licenses can be renewed. Pending and Cancelled are stored states with restricted operations.
Active licenses can be suspended and restored or revoked permanently. Expiry is checked during use and durably recorded by cron. Eligible expired licenses can be renewed. Pending and Cancelled are stored states with restricted operations.
StateActivation / validation eligibilityAllowed management actions
ACTIVEEligible if expiry, installation and applicable version rules passSuspend, revoke, restore as a same-state operation, renew
SUSPENDEDNew activation rejected; active tokens revoked by suspensionRestore before expiry, repeat suspend, revoke, renew without removing suspension
PENDINGNew activation rejectedRestore before expiry, revoke, renew without removing pending state
EXPIREDRejectedRenew to ACTIVE, revoke
REVOKEDRejected; tokens invalidatedRepeated revoke only; no restore or renewal
CANCELLEDRejectedNo public cancel endpoint; no renewal or restore

An elapsed expiry is checked before stored status during license eligibility. A future starts_at is currently included in signed data but is not enforced as a not-before boundary; do not use it to schedule a secure launch.

Management operations

OperationAPI path after /api/v1Effects
SuspendPOST /licenses/{license}/suspendACTIVE to SUSPENDED; invalidate active tokens, retain device rows
RestorePOST /licenses/{license}/restoreEligible SUSPENDED or PENDING to ACTIVE; old tokens stay invalid
RevokePOST /licenses/{license}/revokeAllowed non-cancelled states to terminal REVOKED; invalidate active tokens
RenewPOST /licenses/{license}/renewAdd 1–3650 days to future expiry or now; EXPIRED becomes ACTIVE
Reset devicesPOST /licenses/{license}/reset-devicesDeactivate active devices and revoke active tokens; preserve license status and cumulative activation count

Current registered management uses the developer key scopes described in authentication. There is no public status=PENDING or status=CANCELLED command. Creation produces an active license.

Renewal details

Renewal refuses REVOKED and CANCELLED. A suspended or pending license keeps that state after renewal. A license with no expiry becomes time-limited when renewed with days.

Restore refuses an elapsed expiry; renew the eligible expiry first. Product plans marked monthly or yearly do not renew a customer license automatically when a payment occurs. Your own confirmed-payment backend must perform the intended licensing operation.

Expiry and scheduled work

Elapsed expiry blocks eligibility even before the scheduler updates the stored status. The current validation transaction rolls back its attempted EXPIRED write when it throws a rejection; a failed request is not itself durable proof of an expiration event.

The platform cron process durably records expiry and marks active tokens expired. Event/email delivery is queued operational work, not a prerequisite for denying an expired license.

A revoked, suspended or expired token can be rejected as INVALID_TOKEN. A fresh activation attempt can expose the corresponding license-state code. Do not assume every invalidation returns the same code on both paths.

Devices, events and audit history

Suspend and revoke invalidate tokens but do not release device seats. Deactivate or reset devices releases active seats. Restore requires fresh activation; an already-active matching device does not consume another cumulative activation merely because its token is refreshed.

Actual transitions publish corresponding supported events and record audit history. Repeated same-state management operations can record repeated activity. Do not treat them as a universal exactly-once/idempotency guarantee.

Expected result

You can suspend and restore an eligible Sandbox license, then re-activate it deliberately. Revocation is understood as permanent in the current lifecycle.

Common mistakes

  • Revoking when a temporary suspension was intended.
  • Restoring an expired license without renewing its expiry.
  • Resetting devices to clear cumulative activations.
  • Assuming disabling a product blocks every existing token: current validation does not enforce that product state consistently.

Security notes

Offline cached access cannot instantly learn about a server-side change. It ends at the applicable signed deadline or learns the rejection when it reconnects. Never extend an offline allowance from editable local state.

Troubleshooting

SymptomCauseFix
INVALID_STATE 409Requested transition is forbiddenReview the current state; do not retry a permanent revoke as restore
Old token still fails after restoreRestore does not resurrect tokensActivate again with an eligible license and persisted identity
Seat remains after suspensionSuspension is not device deactivationReview and deliberately release the correct installation
EXPIRED not visible immediately in the listCron has not persisted the transitionCheck the actual expiry; validation still rejects elapsed licenses

Next steps

Read the complete activation flow and test its failure outcomes.

Was this page helpful?

Choose an answer

Do not include personal data, license keys or credentials. Retained for up to 30 days. This is not a support inbox.

Search documentation

Arrow keys to move, Enter to open, Escape to close. Search stays in your browser.

Cookie settings