Skip to main content

Fetch Latest Version of App

This API endpoint retrieves the latest version of a specific app based on the provided parameters.

Endpoint​

GET /apps/latest?app_name=<app_name>&channel=stable&platform=linux&arch=amd64&owner=admin

Query Parameters​

ParameterTypeRequiredDescription
app_namestring✅The name of the app you want to fetch
channelstring✅The release channel (e.g., stable, beta)
platformstring❌The platform (e.g., linux, darwin)
archstring❌The architecture (e.g., amd64, arm64)
packagestring❌The package type (e.g., deb, rpm, dmg)
ownerstring✅Name of your admin user

Headers​

HeaderValueRequired
X-Download-Tokenfnd_… download token of the app and channelPrivate apps in strict mode
AuthorizationBearer <jwt_token> of the owning admin, or of a team user with the download permission and access to the app and channelAlternative to X-Download-Token

Public apps and private apps in unlisted mode need no credential. For a private app in strict mode, a request without a valid credential gets exactly the same answer as an app that does not exist, 500 Internal Server Error:

{
"error": "app_name not found in apps_meta collection"
}

Important Behavior​

1. Channel Parameter​

  • If channels have been pre-defined, the channel parameter becomes mandatory.

2. Single URL Redirection​

  • If the response contains only one URL, the API will automatically redirect the request to download the build at that URL. This simplifies the process when only one option is available.

3. Installers Only​

/apps/latest returns only files a user can download and install. Files that exist for native updaters are never included, whichever updater uploaded them:

ExcludedExamples
Update feedsSquirrel.Windows RELEASES, Velopack releases.{channel}.json, electron-builder latest*.yml, Sparkle appcast*.xml
Update packages.nupkg (full and delta, Squirrel.Windows and Velopack), Sparkle .delta, Tauri update bundles (.app.tar.gz, .AppImage.tar.gz, .nsis.zip, .msi.zip)
Updater helperselectron-builder .blockmap, .sig signature files

So for an app using Velopack or Squirrel.Windows, a request narrowed to one platform and architecture resolves to the single installer and redirects to it. Filtering by an excluded type (for example package=nupkg or package=yml) returns 404. Native updaters get these files from their feeds via /checkVersion, not from this endpoint.

4. Latest per Platform and Architecture​

The newest build is picked separately for every platform and architecture, from published versions only:

  • A release uploaded for one platform does not hide the others. If 1.0.3 ships only for Windows, platform=darwin keeps returning the newest macOS build, e.g. 1.0.2.
  • With package, the newest version that has this package is returned. If the latest macOS release has only a .dmg, package=zip still resolves to the newest .zip.
  • A version whose files for a platform are all updater-internal (see Installers Only) is skipped for that platform.
  • Versions in a staged rollout (rollout below 100) are skipped until they reach 100%, so a download page never hands out a build that in-app updates are still holding back.

Every entry carries the version it comes from, so a download page can show it next to the link. Without platform/arch, different platforms may therefore report different versions.

5. Flexible Responses Based on Parameters​

The API responds dynamically based on the parameters you provide.

Example: Specific Parameters​

GET /apps/latest?app_name=secondapp&channel=stable&platform=linux&arch=amd64&owner=admin

Returns a list of available builds:

{
"stable": {
"linux": {
"amd64": {
"deb": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/linux/amd64/secondapp-0.0.3.deb",
"version": "0.0.3"
},
"rpm": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/linux/amd64/secondapp-0.0.3.rpm",
"version": "0.0.3"
}
}
}
}
}

Example: With Package Specification​

GET /apps/latest?app_name=secondapp&channel=stable&platform=linux&arch=amd64&package=deb&owner=admin

The API will redirect directly to the .deb package download URL:

https://<bucket_name>.s3.amazonaws.com/secondapp/stable/linux/amd64/secondapp-0.0.3.deb

Example: Omitting Platform and Arch​

GET /apps/latest?app_name=secondapp&channel=stable&owner=admin

Returns all available builds under that channel:

{
"stable": {
"linux": {
"amd64": {
"deb": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/linux/amd64/secondapp-0.0.3.deb",
"version": "0.0.3"
},
"rpm": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/linux/amd64/secondapp-0.0.3.rpm",
"version": "0.0.3"
}
}
},
"darwin": {
"arm64": {
"dmg": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/darwin/arm64/secondapp-0.0.3.dmg",
"version": "0.0.3"
}
},
"amd64": {
"pkg": {
"url": "https://<bucket_name>.s3.amazonaws.com/secondapp/stable/darwin/amd64/secondapp-0.0.2.pkg",
"version": "0.0.2"
}
}
}
}
}

Notes​

  • The API provides all available builds depending on what is uploaded in the specified channel, platform, and architecture
  • Use specific parameters to narrow down results and get direct download URLs
  • The owner parameter is required for proper access control
  • Each entry holds the download url and the version it belongs to
  • Package types are automatically detected from the file extension; updater feeds, update packages and helper files are excluded (see Installers Only)
  • Responses of private apps are never cached in Redis