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

Choose a page in the navigation drawer.

KDPika Licensing · API v1 Intermediate

Test the complete lifecycle

Stage 13: test the complete lifecycle with a clear outcome, verification steps and one next action.

On this page
Updated 2026-10-20 UTCDownload Markdown
Complete Integration Guide

Before you start: Deliver licenses to customers, or bring the same completed Sandbox setup.

Stage 13 of 14 · 20 min
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14

Already completed this? Skip to the next stage →

What you will do

Exercise negative cases before customers rely on your integration.

Use Sandbox only. This is a checklist for your implementation, not permission to test attacks on other systems.

  1. Run the Stage 7 file with activate. Confirm one active device.
  2. Run validate, then check after restarting the process. Confirm the same identity/seat.
  3. Activate on a second private state directory. With Max devices 2, a third installation must return MAX_DEVICES_REACHED.
  4. Run deactivate on one installation. A replacement activation should now fit.
  5. In [Licenses](/docs/v1/start/glossary#license) → Manage, choose Suspend. A forced online validate must deny. Restore allows a new activation; it does not revive the old revoked token. Run activate again before expecting validation to succeed.
  6. Create a separate test license, choose Revoke and verify denial. Revocation is not a temporary support toggle.
  7. Test a short-duration/expired license. Do not alter the server clock or production database to fake this result.
  8. Test supported renewal through the documented backend/store workflow, with a confirmed paid period; it must not duplicate the license. Renew extends the license, not the token's original lifetime. Validate online to obtain the updated signed decision; activate again if the existing token has expired or was revoked.
  9. Disconnect the network; test valid, missing, corrupted and expired cache states.
  10. Modify a signed payload in an isolated verifier test. The verifier must deny it.
  11. Test wrong email, App ID and environment. Cross-environment access must fail.
  12. Follow your selected store's duplicate, failure, cancellation and refund checklist.

Python

Use the exact same file and state directory for a lifecycle:

bashbash
.venv/bin/python license-check.py activate
.venv/bin/python license-check.py validate
.venv/bin/python license-check.py check
.venv/bin/python license-check.py deactivate

Activation/validation success prints Sandbox license verified.; deactivation prints Device released. A failure exits nonzero and must not unlock your software.

JavaScript / Node.js

Use the exact same file and state directory for a lifecycle:

bashbash
node license-check.mjs activate
node license-check.mjs validate
node license-check.mjs check
node license-check.mjs deactivate

Activation/validation success prints Sandbox license verified.; deactivation prints Device released. A failure exits nonzero and must not unlock your software.

PHP

Use the exact same file and state directory for a lifecycle:

bashbash
php license-check.php activate
php license-check.php validate
php license-check.php check
php license-check.php deactivate

Activation/validation success prints Sandbox license verified.; deactivation prints Device released. A failure exits nonzero and must not unlock your software.

C# / .NET

Use the exact same file and state directory for a lifecycle:

bashbash
dotnet run --project Guide.csproj -- activate
dotnet run --project Guide.csproj -- validate
dotnet run --project Guide.csproj -- check
dotnet run --project Guide.csproj -- deactivate

Activation/validation success prints Sandbox license verified.; deactivation prints Device released. A failure exits nonzero and must not unlock your software.

cURL / other language

Use the same activate → validate → deactivate sequence in your real REST client project and its signature verifier. Exercise every negative case above; a cURL HTTP response alone is not a passing access check.

Expected result

Your test notes show both successful access and deliberate denials, without real charges or leaked tokens.

If it does not work

Stop at the first unsafe result. Keep the application locked, record a safe request ID and contact support. Do not “fix” a negative test by removing its signature or entitlement guard.

Stage checklist

  • All lifecycle, device, state, network and signature cases pass for my runtime.
  • I tested the non-programmer delivery route if I use one.

Next steps

Continue to Stage 14: Go live safely

You are here: Stage 13 of 14.

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