Adjust license expiry by a signed delta
Moves one license's expiry by deltaSeconds — positive to grant time, negative to take it back. {licenseId} accepts the printable license key as well as the UUID, so a settlement loop never has to resolve one first.
Written for time-wager features ("key gambling"), where a customer stakes minutes against your own game logic and your server settles the result. Prefer this over reading expires_at and writing it back with PUT /licenses/{licenseId}: the delta is applied inside a single statement, so two settlements landing at the same instant compose instead of one silently overwriting the other.
Behaviour worth knowing:
- Expiry floors at now — a loss bigger than the time remaining expires the key; it never rewinds into the past. - duration_seconds and banked remaining_seconds floor at 0. - A paused license keeps its expiry, and the delta is applied to its banked seconds instead. - A lifetime key (expires_at: null) is left untouched and returns lifetime: true — there is no expiry to move. - The redeemer's subscription moves in the same statement, so the SDK and your panel never disagree about when access ends.
| appIdrequired string (uuid) | Application UUID. App-scoped keys may only use their own application. |
| licenseIdrequired string | License UUID. Ban, unban, pause, unpause, reset-hwid and expiry also accept the raw license key here. |
| deltaSecondsrequired integer | Seconds to add (positive) or take back (negative). Non-zero, within +/-315360000 (10 years). |
{ "deltaSeconds": -1800 }
{ "success": true, "license": { "id": "9c1f2e7a-5b30-4a11-9d64-0f2b8c7a5e10", "key": "HA7N-9CGB-RFV2-MPAN", "status": "active", "expiresAt": "2026-09-01T12:00:00.000Z", "remainingSeconds": null }, "applied_seconds": -1800, "lifetime": false, "subscriptions_updated": 1 }
deltaSeconds absent, zero, or out of range (INVALID_DELTA).More in Licenses
Base URL https://api.evora.lol/api/developer-api · full spec at developer-api.yaml · back to the docs