Skip to content

Check Updates ​

Return the latest published version of a product. Public – the license key is optional.

Use this for custom updaters (desktop apps, CLI tools, your own PHP). WordPress plugins get this through the WordPress SDK. Joomla extensions use Joomla's own updater, see Joomla update server integration.

Request ​

GET /api/index.php/v1/licensedock/updates/{product_id}

Parameters ​

ParameterTypeInRequiredNotes
product_idintegerURLYesProduct ID
license_keystringQueryNoScopes the result to the license's plan and adds the license's state. dlid is accepted as an alias

Example ​

bash
# Public: latest version with an all-plans file
curl "https://yoursite.com/api/index.php/v1/licensedock/updates/42"

# Licensed: plan-scoped, with license state
curl "https://yoursite.com/api/index.php/v1/licensedock/updates/42?license_key=A1B2C3D4-E5F6A7B8-C9D0E1F2-A3B4C5D6"

Response ​

Version available (200) ​

json
{
  "data": {
    "update_available": true,
    "name": "My Extension",
    "version": "2.1.0",
    "download_url": "https://yoursite.com/api/index.php/v1/licensedock/downloads/42",
    "download_requires": "license_key",
    "release_notes": "Bug fixes and improvements.",
    "date": "2026-04-03",
    "file_size": 5242880,
    "requires_license": true
  }
}

With a license_key that covers the product, four fields are added:

json
{
  "data": {
    "update_available": true,
    "...": "the fields above, plus",
    "license_status": "active",
    "license_expires_at": "2027-04-03T00:00:00Z",
    "auto_renew": true,
    "next_payment_at": "2027-03-03T00:00:00Z"
  }
}
FieldNotes
update_availabletrue when a published version exists. The API doesn't know which version the caller has installed – compare version with it yourself
nameProduct title
versionVersion string as entered in the admin
download_urlAbsolute URL of the download endpoint. null when the product is set to Account only
download_requiresWhat /downloads will ask for. See the table below
release_notesThe version's release notes, or null
dateRelease date (Y-m-d). The release date set in the admin, or the upload date
file_sizeSize in bytes of the file an updater would receive
requires_licenseThe product's Requires License setting
license_statusactive, expired, suspended, revoked or cancelled. An active license past its expiry date reports expired
license_expires_atnull for a license that doesn't expire
auto_renewtrue when the license renews through a recurring subscription
next_payment_atNext renewal date, or null

download_requires values:

ValueSend to /downloads
"license_key"The license key
"activated_identifier"The license key and an identifier that is already activated
"account"Nothing works. The file is only available from the customer's account
nullNothing. The download is public

No version (200) ​

json
{
  "data": {
    "update_available": false,
    "requires_license": true,
    "download_requires": "license_key"
  }
}

A product that doesn't exist answers the same way, with download_requires: null. No update is data, so it isn't an error.

Errors ​

CodeHTTPWhen
RATE_LIMITED429More than 60 requests in 60 seconds from this IP
INTERNAL_ERROR500Unexpected server failure

Which Version Is Returned ​

  • Only published versions count.
  • Only files ticked Include in auto-updates count. A version whose files are all unticked (a manual, an SDK, source code) is never offered.
  • The most recently uploaded version wins. The release date shown to customers doesn't change which version is served.
  • Without a key, only files available to all plans count. With a key, files restricted to that license's plan count too, and the plan-specific file is preferred.
  • A bundle key sees the all-plans files of each product in the bundle.

License State Doesn't Hide Updates ​

The update check reports a new version whatever the license state – expired, suspended or revoked. A customer who installed the product still learns a newer version exists, and license_status tells your software which renewal message to show.

The download endpoint is where access is enforced. An expired key gets the metadata here and 403 LICENSE_EXPIRED from /downloads.

Joomla Update Server Integration ​

Joomla's updater reads its own XML format, so Joomla extensions don't call this endpoint. Joomla fetches your update XML and downloads the package from the download endpoint with the customer's key as dlid.

The full setup – update XML, manifest, Download Key, sending the site domain – is on Joomla Extensions.

Joomla Extensions by Contona