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
| Parameter | Type | Required | Description |
|---|---|---|---|
app_name | string | ✅ | The name of the app you want to fetch |
channel | string | ✅ | The release channel (e.g., stable, beta) |
platform | string | ❌ | The platform (e.g., linux, darwin) |
arch | string | ❌ | The architecture (e.g., amd64, arm64) |
package | string | ❌ | The package type (e.g., deb, rpm, dmg) |
owner | string | ✅ | Name of your admin user |
Headers
| Header | Value | Required |
|---|---|---|
X-Download-Token | fnd_… download token of the app and channel | Private apps in strict mode |
Authorization | Bearer <jwt_token> of the owning admin, or of a team user with the download permission and access to the app and channel | Alternative 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:
| Excluded | Examples |
|---|---|
| Update feeds | Squirrel.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 helpers | electron-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.3ships only for Windows,platform=darwinkeeps 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=zipstill 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 (
rolloutbelow 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
ownerparameter is required for proper access control - Each entry holds the download
urland theversionit 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
Related reading
- Fetch Latest Version of App — Smart Update Links — how to use this endpoint for permanent download links.