Scroll
EvoraDocs
Get started
C++ SDK
REST API
Manage
Endpoint reference
All endpoints
GETPlan quota and current usage
GETList applicationsPOSTCreate an applicationGETGet an applicationPUTUpdate an applicationDELETEDelete an application
GETApplication statisticsGETExtended overviewGETLogin activity by dayGETUser growth over timeGETLicense status breakdownGETSession trends
GETList licensesPOSTGenerate licensesGETGet a licensePUTUpdate a licenseDELETEDelete a licensePOSTBan a licensePOSTUnban a licensePOSTReset a license HWIDPOSTFreeze a licensePOSTResume a frozen licensePOSTAdjust license expiry by a signed deltaPOSTBulk license actions
GETLook up a customer by usernameGETList customersPOSTCreate a customerGETGet a customerPUTUpdate a customerDELETEDelete a customerPOSTMint a password-reset tokenPOSTConsume a reset token and set the new passwordPOSTBan a customerPOSTUnban a customerPOSTReset a customer's HWIDGETRead a customer's two-factor stateDELETEReset a customer's two-factor authenticationPOSTReset a customer's device bindingPOSTMint a one-time SDK login token (panel SSO)POSTRedeem a license key on a customer's behalfPOSTBulk customer actions
POSTAuthenticate a customer by license keyPOSTAuthenticate a customer by username and password
GETList a customer's subscriptionsPOSTGrant a subscription directlyDELETERemove a subscriptionPOSTFreeze a subscriptionPOSTResume a frozen subscriptionPOSTExtend a subscription by days
GETList tiersPOSTCreate a tierPUTUpdate a tierDELETEDelete a tier
GETList app variablesPOSTCreate or update a variableDELETEDelete all app variablesGETGet a variablePUTUpdate a variableDELETEDelete a variableGETList every user variable in the applicationGETList one customer's variablesPOSTSet a customer variableDELETEDelete all of a customer's variablesDELETEDelete a customer variable
GETList webhooksPOSTCreate a webhookGETGet a webhookPUTUpdate a webhookDELETEDelete a webhookPOSTFire a test deliveryGETRead the event stream (catch-up)
GETList blacklist entriesPOSTAdd a blacklist entryDELETERemove a blacklist entryGETList whitelist entriesPOSTAdd a whitelist entryDELETERemove a whitelist entry
GETList live sessionsDELETEKill a sessionPOSTKill every live session
GETList logsGETLog statistics
GETList sellersPOSTCreate a sellerGETGet a sellerPUTUpdate a sellerDELETEDelete a sellerPOSTAdd seller balance
GETList clientsPOSTCreate a clientPUTUpdate a clientDELETEDelete a clientGETList a client's application accessPOSTGrant application accessDELETERevoke application access
GETList entitlementsPOSTCreate an entitlementPUTUpdate an entitlementDELETEDelete an entitlementGETList entitlements attached to a tierPOSTAttach an entitlement to a tierGETResolve a customer's entitlements
GETList geo rulesPOSTAdd a geo ruleDELETERemove a geo rulePUTEnable or disable geo restrictions
GETList active leasesDELETERevoke a leaseGETSeat usage for a customer
Docs/API reference/Webhooks

Read the event stream (catch-up)

GEThttps://api.evora.lol/api/developer-api/apps/{appId}/events
Requires scopelogs:read

Every event is recorded here whether or not a webhook is configured, so this is how you recover anything a webhook delivery missed.

Poll it with a cursor instead of reconciling by walking your users: one request returns only what changed, rather than re-fetching every subscription on a timer.

GET /apps/{appId}/events?since=10432&limit=100 -> { events: [...], next_cursor: "10530", has_more: false }

Order is by seq, a monotonic integer. Do not page by created_at — two events can share a millisecond and a clock adjustment can make a timestamp cursor skip or repeat rows.

Events age out on the platform retention window (90 days by default).

Path parameters
appIdrequired
string (uuid)
Application UUID. App-scoped keys may only use their own application.
Query parameters
since
string
Cursor. Pass the next_cursor from your previous call. Exclusive, so you can store and resend it verbatim.
limit
integer
Maximum events to return in this page.
Default: 100 · Range: 1–500
types
string
Comma-separated event names to filter by.
Responses
200Events in ascending cursor order.
json
{
  "events": [
    {
      "id": "b1c2...",
      "seq": "10530",
      "type": "subscription.extended",
      "payload": {
        "event": "subscription.extended",
        "user_id": "4a28...",
        "expiry": "2026-10-01T00:00:00.000Z"
      },
      "created_at": "2026-08-06T19:44:02.113Z"
    }
  ],
  "next_cursor": "10530",
  "has_more": false
}
400since was not a numeric cursor.
json
{
  "error": "since must be a numeric cursor returned as next_cursor",
  "code": "INVALID_CURSOR"
}
403Key lacks the required scope, or the resource belongs to another tenant.
json
{
  "error": "API key missing required scope: users:write"
}

More in Webhooks

  • getList webhooks
  • postCreate a webhook
  • getGet a webhook
  • putUpdate a webhook
  • deleteDelete a webhook
  • postFire a test delivery

Base URL https://api.evora.lol/api/developer-api · full spec at developer-api.yaml · back to the docs