API Reference
May 21, 2026 ยท View on GitHub
This file is no longer maintained. For up-to-date documentation, see FaynoSync Documentation.
You can find Postman collection here.
Check Health Status
Check the health status of the application.
Request:
curl -X GET http://localhost:9000/health
Response:
{
"status": "healthy"
}
SignUp
Authenticate and receive a token for accessing the API.
POST /signup
Request:
curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "password", "api_key": "UHp3aKb40fwpoKZluZByWQ"}' http://localhost:9000/signup
Response:
{
"result": "Successfully created admin user."
}
Login to App
Authenticate and receive a jwt token for accessing the API.
POST /login
Request:
curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "password"}' http://localhost:9000/login
Response:
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"}
Create app
Create app.
POST /app/create
Optional with description, logo, private.
Headers
Authorization: Authorization header with jwt token.
Body
file: logo of the app.
Body form data
app: Name of the app.
description: App description.
private: Lock app. (If selected, the app will be stored in a private bucket)
Request:
curl --location 'http://localhost:9000/app/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'data="{\"app\":\"myapp\", \"description\": \"description of app\"}"' \
--form 'file=@"path_to_logo.png"'
Response:
{
"createAppResult.Created":"641459ffb8760d74164e7e3c"
}
Create channel (Optional)
:warning: After first creating, field channel is required.
Create deployment channel.
POST /channel/create
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
channel: Name of the channel.
Request:
curl --location 'http://localhost:9000/channel/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--header 'Content-Type: application/json' \
--data '{"channel":"nightly"}'
Response:
{
"createChannelResult.Created":"641459ffb8360d74164e7e3c"
}
Create platform (Optional)
:warning: After first creating, field platform is required.
Create deployment platform.
POST /platform/create
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
platform: Name of the platform.
updaters: Array of updater configurations for the platform. Each updater defines how applications will be updated on this platform.
Structure:
type(string, required): Type of updater. Valid values:"manual"- Manual update process, requires user to download and install updates manually"squirrel_darwin"- Squirrel updater for macOS applications"squirrel_windows"- Squirrel updater for Windows applications"sparkle"- Sparkle framework updater for macOS applications"electron-builder"- Electron Builder updater for Electron applications
default(boolean, required): Whether this updater is the default one. Exactly one updater must be set as default.
Request:
curl --location 'http://localhost:9000/platform/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--header 'Content-Type: application/json' \
--data '{"platform":"linux", "updaters": [{"type": "manual", "default": true}]}'
Response:
{
"createPlatformResult.Created":"641459ffb8360d74164e7e3c"
}
Create arch (Optional)
:warning: After first creating, field arch is required.
Create deployment architecture.
POST /arch/create
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
arch: Arch of the app.
Request:
curl --location 'http://localhost:9000/arch/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--header 'Content-Type: application/json' \
--data '{"arch":"amd64"}'
Response:
{
"createArchResult.Created":"641459ffb8360d74164e7e3c"
}
List Apps
Retrieve a list of all apps.
GET /app/list
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET http://localhost:9000/app/list -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"apps": [
{
"ID": "66ae18a29807f0696d967176",
"AppName": "first",
"Logo": "",
"Updated_at": "2024-08-03T14:46:42.361+03:00"
},
{
"ID": "66ae14024b663c058367f895",
"AppName": "myapp",
"Logo": "",
"Updated_at": "2024-08-03T14:26:58.701+03:00"
}
]
}
Get All Channels
Retrieve a list of all channels.
GET /channel/list
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET http://localhost:9000/channel/list -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"channels":[
{
"ID":"641459ffb8360d74164e7e3c",
"ChannelName":"nightly",
"Updated_at":"2023-03-17T14:15:59.818+02:00"
},
{
"ID":"64145ebaedd163d59d52e1dc",
"ChannelName":"stable",
"Updated_at":"2023-03-17T14:36:10.278+02:00"
}
]
}
Get All Platforms
Retrieve a list of all platforms.
GET /platform/list
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET http://localhost:9000/platform/list -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"platforms": [
{
"ID": "653a52481ff613bed613df58",
"PlatformName": "darwin",
"Updated_at": "2023-10-26T14:49:28.894+03:00"
},
{
"ID": "653a52401ff613bed613df57",
"PlatformName": "linux",
"Updated_at": "2023-10-26T14:49:20.976+03:00"
}
]
}
Get All Architectures
Retrieve a list of all architectures.
GET /arch/list
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET http://localhost:9000/arch/list -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"archs": [
{
"ID": "653a52611ff613bed613df59",
"ArchID": "amd64",
"Updated_at": "2023-10-26T14:49:53.815+03:00"
},
{
"ID": "653a52691ff613bed613df5a",
"ArchID": "arm64",
"Updated_at": "2023-10-26T14:50:01.413+03:00"
}
]
}
Get All Apps (deprecated)
Retrieve a list of all apps.
GET /
Query Parameters
limit: Maximum number of records to return in the response.
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET http://localhost:9000/ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"apps": [
{
"ID": "653a544c1ff613bed613df5b",
"AppName": "firstapp",
"Version": "0.0.1",
"Channel": "nightly",
"Published": false,
"Artifacts": [
{
"Link": "http://localhost:9000/download?key=firstapp/nightly/linux/amd64/firstapp-0.0.1.deb",
"Platform": "linux",
"Arch": "amd64",
"Package": ".deb"
}
],
"Changelog": [
{
"Version": "0.0.1",
"Changes": "",
"Date": "2023-10-26"
}
],
"Updated_at": "2023-10-26T14:58:04.258+03:00"
},
{
"ID": "653a5e4f51ce5114611f5abb",
"AppName": "secondapp",
"Version": "0.0.1",
"Channel": "stable",
"Published": true,
"Artifacts": [
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.deb",
"Platform": "linux",
"Arch": "amd64",
"Package": ".deb"
},
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.rpm",
"Platform": "linux",
"Arch": "amd64",
"Package": ".rpm"
}
],
"Changelog": [
{
"Version": "0.0.1",
"Changes": "",
"Date": "2023-10-26"
}
],
"Updated_at": "2023-10-26T15:40:47.226+03:00"
}
]
}
Check Latest Version
Check if there is a newer version of a specific app.
GET /checkVersion?app_name=<app_name>&version=<version>
Query Parameters
app_name: Name of the app.
version: Current version of the app.
owner: Name of your admin user.
Request:
curl -X GET --location 'http://localhost:9000/checkVersion?app_name=secondapp&version=0.0.1&channel=stable&platform=linux&arch=amd64&owner=admin'
Response:
{
"update_available": false,
"update_url_deb": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.deb",
"update_url_rpm": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.rpm"
}
Upload App
Upload a new version of an app.
POST /upload
Optional with channel, publish, platform, arch and changelog:
--form 'data="{\"app_name\":\"myapp\",\"version\":\"0.0.1\",\"channel\":\"\",\"publish\":true,\"platform\":\"\",\"arch\":\"\",\"changelog\":\"### Changelog\\n\\n- Added new feature X\\n- Fixed bug Y\"}"'
Headers
Authorization: Authorization header with jwt token.
Body
file: file of the app.
Body form data
app_name: Name of the app.
version: Current version of the app.
channel: Current channel of the app.
publish: Set true for availabilitty this version for clients.
critical: Set true to mark this version as critical.
platform: Current platform of the app.
arch: Current arch of the app.
changelog: Changelog is a log of changes on current version.
updater: Set the updater type when uploading a version. Possible value: electron-builder. All other update types no longer require this parameter during upload.
Request:
curl -X POST --location 'http://localhost:9000/upload' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'file=@"/path_to_file/secondapp.deb"' \
--form 'data="{\"app_name\":\"secondapp\",\"version\":\"0.0.2\",\"channel\":\"stable\",\"publish\":true,\"platform\":\"linux\",\"arch\":\"amd64\",\"changelog\":\"### Changelog\\n\\n- Added new feature X\\n- Fixed bug Y\"}"'
Request with multiple uploading:
curl --location 'http://localhost:9000/upload' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'file=@"/path_to_file/secondapp.deb"' \
--form 'file=@"/path_to_file/secondapp.rpm"' \
--form 'data="{\"app_name\":\"secondapp\",\"version\":\"0.0.2\",\"channel\":\"stable\",\"publish\":true,\"platform\":\"linux\",\"arch\":\"amd64\",\"changelog\":\"### Changelog\\n\\n- Added new feature X\\n- Fixed bug Y\"}"'
Response:
{
"uploadResult.Uploaded":"6411c7c0ec4ff9a9a9bc18fa"
}
Check Latest Version Again
Check if there is a newer version of a specific app after uploading a new version.
GET /checkVersion?app_name=<app_name>&version=<version>
Query Parameters
app_name: Name of the app.
version: Current version of the app.
Request:
curl -X GET --location 'http://localhost:9000/checkVersion?app_name=secondapp&version=0.0.1&channel=stable&platform=linux&arch=amd64owner=admin'
Response:
{
"update_available": true,
"update_url_deb": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.deb",
"update_url_rpm": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.rpm"
}
Fetch Latest Version of App
This API endpoint retrieves the latest version of a specific app based on the provided parameters.
GET /apps/latest?app_name=<app_name>&channel=stable&platform=linux&arch=amd64
Query Parameters
app_name: Name of the app.
channel: Current channel of the app.
platform: Current platform of the app.
arch: Current arch of the app.
package: The package type (e.g., deb, rpm, dmg).
owner: Name of your user.
Request:
curl -X GET --location 'http://localhost:9000/apps/latest?app_name=secondapp&channel=stable&platform=linux&arch=amd64owner=admin'
Response:
{
"stable": {
"linux": {
"amd64": {
"deb": {
"url": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.deb"
}
},
"amd64": {
"rpm": {
"url": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.rpm"
}
}
}
}
}
Update App
Update existing specific app.
:warning: You can't change app_name, channel and version. app_name and version are used for correct searching.
POST /apps/update
Optional with channel, publish, critical, platform, arch and changelog:
data="{"id": "653a6268f51dee6a99a3d88c", "app_name": "secondapp", "version": "0.0.2", "channel": "stable", "publish": true, "platform": "linux", "arch": "amd64", "changelog": ""}"
Headers
Authorization: Authorization header with jwt token.
Body
file: file of the app.
Body form-data
app_name: Name of the app.
version: Current version of the app.
channel: Current channel of the app.
publish: Set true for availabilitty this version for clients.
critical: Set true to mark this version as critical.
platform: Current platform of the app.
arch: Current arch of the app.
changelog: Changelog is a log of changes on current version.
Request:
curl --location 'http://localhost:9000/apps/update' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'data="{\"id\": \"653a6268f51dee6a99a3d88c\", \"app_name\": \"secondapp\", \"version\": \"0.0.2\", \"channel\": \"stable\", \"publish\": true, \"platform\": \"linux\", \"arch\": \"amd64\", \"changelog\": \"\"}"' \
--form 'file=@"/path_to_file/secondapp.deb"' \
Request with multiple uploading:
curl --location 'http://localhost:9000/apps/update' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'data="{\"id\": \"653a6268f51dee6a99a3d88c\", \"app_name\": \"secondapp\", \"version\": \"0.0.2\", \"channel\": \"stable\", \"publish\": true, \"platform\": \"linux\", \"arch\": \"amd64\", \"changelog\": \"\"}"' \
--form 'file=@"/path_to_file/secondapp.deb"' \
--form 'file=@"/path_to_file/secondapp.rpm"'
Response:
{
"updatedResult.Updated": true
}
Search App by Name
Search for all versions of an app by name.
GET /search?app_name=<app_name>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
app_name (required): Name of the app.
limit: Maximum number of records to return in the response.
Optional filters:
channel: Name of the channel.
published: Set to true to return only published versions.
critical: Set to true to return only critical versions.
platform: Platform of the application to return.
arch: Architecture of the application to return.
Request:
curl -X GET --location 'http://localhost:9000/search?app_name=secondapp' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q'
Response:
{
"apps": [
{
"ID": "653a5e4f51ce5114611f5abb",
"AppName": "secondapp",
"Version": "0.0.1",
"Channel": "stable",
"Published": true,
"Artifacts": [
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.deb",
"Platform": "linux",
"Arch": "amd64",
"Package": ".deb"
},
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.1.rpm",
"Platform": "linux",
"Arch": "amd64",
"Package": ".rpm"
}
],
"Changelog": [
{
"Version": "0.0.1",
"Changes": "### Changelog\n\n- Added new feature X\n- Fixed bug Y",
"Date": "2023-10-26"
}
],
"Updated_at": "2023-10-26T15:40:47.226+03:00"
},
{
"ID": "653a6268f51dee6a99a3d88c",
"AppName": "secondapp",
"Version": "0.0.3",
"Channel": "stable",
"Published": true,
"Artifacts": [
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.deb",
"Platform": "linux",
"Arch": "amd64",
"Package": ".deb"
},
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.rpm",
"Platform": "linux",
"Arch": "amd64",
"Package": ".rpm"
}
],
"Changelog": [
{
"Version": "0.0.3",
"Changes": "### Changelog\n\n- Added new feature X\n- Fixed bug Y",
"Date": "2023-10-26"
}
],
"Updated_at": "2023-10-26T15:58:16.999+03:00"
}
]
}
Delete app
This endpoint allows you to delete a specific app.
DELETE /app/delete?id=<id>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
id: The unique identifier of the app.
Request:
curl -X DELETE http://localhost:9000/app/delete\?\id\=\64145ebaedd163d59d52e1dc -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"deleteAppResult.DeletedCount":1
}
Delete specific channel
This endpoint allows you to delete a specific channel.
DELETE /channel/delete?id=<id>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
id: The unique identifier of the channel.
Request:
curl -X DELETE http://localhost:9000/channel/delete\?\id\=\64145ebaedd163d59d52e1dc -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"deleteChannelResult.DeletedCount":1
}
Delete specific platform
This endpoint allows you to delete a specific platform.
DELETE /platform/delete?id=<id>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
id: The unique identifier of the platform.
Request:
curl -X DELETE http://localhost:9000/platform/delete\?\id\=\64145ebaedd163d59d52e1dc -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"deletePlatformResult.DeletedCount":1
}
Delete specific arch
This endpoint allows you to delete a specific arch.
DELETE /arch/delete?id=<id>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
id: The unique identifier of the arch.
Request:
curl -X DELETE http://localhost:9000/arch/delete\?\id\=\64145ebaedd163d59d52e1dc -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"deleteArchResult.DeletedCount":1
}
Delete specific version of app
This endpoint allows you to delete a specific version of an app.
DELETE /apps/delete?id=<id>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
id: The unique identifier of the app version.
Request:
curl -X DELETE http://localhost:9000/apps/delete\?\id\=\653a5e4f51ce5114611f5abb -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"deleteSpecificAppResult.DeletedCount":1
}
Check available apps now
GET /search?app_name=<app_name>
Headers
Authorization: Authorization header with jwt token.
Query Parameters
app_name: Name of the app.
limit: Maximum number of records to return in the response.
Request:
curl -X GET http://localhost:9000/search\?\app_name\=\secondapp -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q"
Response:
{
"apps": [
{
"ID": "653a6268f51dee6a99a3d88c",
"AppName": "secondapp",
"Version": "0.0.3",
"Channel": "stable",
"Published": true,
"Artifacts": [
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.deb",
"Platform": "linux",
"Arch": "amd64",
"Package": ".deb"
},
{
"Link": "http://localhost:9000/download?key=secondapp/stable/linux/amd64/secondapp-0.0.3.rpm",
"Platform": "linux",
"Arch": "amd64",
"Package": ".rpm"
}
],
"Changelog": [
{
"Version": "0.0.3",
"Changes": "### Changelog\n\n- Added new feature X\n- Fixed bug Y",
"Date": "2023-10-26"
}
],
"Updated_at": "2023-10-26T15:58:16.999+03:00"
}
]
}
Update Channel
Update existing channel.
:warning: If you change this value, already existing client apps can't check for new versions' availability because the channel name has changed.
POST /channel/update
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
id: ID of the channel which you want to change.
channel: New channel name.
Request:
curl --location 'http://localhost:9000/channel/update' \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q" \
--header 'Content-Type: application/json' \
--data '{"id":"66ae13fe4b663c058367f893", "channel":"newname"}'
Response:
{
"updateChannelResult.Updated": true
}
Update App
Update existing app.
:warning: If you change this value, already existing client apps can't check for new versions' availability because the app name has changed.
POST /app/update
Optional with description, logo.
Headers
Authorization: Authorization header with jwt token.
Body
file: logo of the app.
Body form-data
id: ID of the app which you want to change.
app: New app name.
description: App description.
Request:
curl --location 'http://localhost:9000/app/update' \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q" \
--form 'data="{\"id\":\"66ae13fe5b663c058367f893\", \"app\":\"new_name\", \"description\": \"description of app\"}"' \
--form 'file=@"path_to_logo.png"'
Response:
{
"updateAppResult.Updated": true
}
Update Platform
Update existing platform.
:warning: If you change this value, already existing client apps can't check for new versions' availability because the platform name has changed.
POST /platform/update
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
id: ID of the platform which you want to change.
platform: New platform name.
updaters: Array of updater configurations for the platform. Each updater defines how applications will be updated on this platform.
Structure:
type(string, required): Type of updater. Valid values:"manual"- Manual update process, requires user to download and install updates manually"squirrel_darwin"- Squirrel updater for macOS applications"squirrel_windows"- Squirrel updater for Windows applications"sparkle"- Sparkle framework updater for macOS applications"electron-builder"- Electron Builder updater for Electron applications
default(boolean, required): Whether this updater is the default one. Exactly one updater must be set as default.
Request:
curl --location 'http://localhost:9000/platform/update' \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q" \
--header 'Content-Type: application/json' \
--data '{"id":"66ae13fe5b663c058367f893", "platform":"newname", "updaters": [{ "type": "manual", "default": true }]}'
Response:
{
"updatePlatformResult.Updated": true
}
Update Arch
Update existing arch.
:warning: If you change this value, already existing client apps can't check for new versions' availability because the arch name has changed.
POST /arch/update
Headers
Authorization: Authorization header with jwt token. Content-Type: application/json
Body
id: ID of the arch which you want to change.
arch: New arch name.
Request:
curl --location 'http://localhost:9000/arch/update' \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q" \
--header 'Content-Type: application/json' \
--data '{"id":"66ae13fe5b663c058367f893", "arch":"newname"}'
Response:
{
"updateArchResult.Updated": true
}
Delete Artifact
This endpoint allows you to delete artifacts of a specific application by its identifier in array.
POST /artifact/delete
Headers
Authorization: Authorization header with JWT token.
Body form-data
id: Unique identifier of the specific version of application.
app_name: Name of the application to which the artifact belongs.
version: Current version of the application.
artifacts_to_delete: Array of identifiers of the artifacts to be deleted. Example: ["0", "1"]
Request:
curl -X POST --location 'http://localhost:9000/artifact/delete' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY3NDQ4NDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.eYkCNem24-6rpw8aXo6NIcN6xtU9rqq2_2YYz1nS82Q' \
--form 'data="{\"id\":\"653a5e4f51ce5114611f5abb\", \"app_name\":\"secondapp\", \"version\":\"0.0.1\", \"artifacts_to_delete\":[\"0\"]}"'
Response:
{
"deleteSpecificArtifactResult": true
}
Download
This request returns a signed URL for downloading a file.
GET /download
Query Parameters
key: Key for finding the object on S3.
Request:
curl -X GET --location 'http://localhost:9000/download?key=secondapp%2Fstable%2Flinux%2Famd64%2Fsecondapp-0.0.1.deb'
Create Team User
Create a new team user with specific permissions.
POST /user/create
Headers
Authorization: Authorization header with jwt token.
Body
username: Username for the new team user. password: Password for the new team user. permissions: Object containing permission settings for different resources.
Request:
curl -X POST \
'http://localhost:9000/user/create' \
-H 'Authorization: Bearer {{token}}' \
-H 'Content-Type: application/json' \
-d '{
"username": "teamuser1",
"password": "password123",
"permissions": {
"apps": {
"create": true,
"delete": false,
"edit": true,
"download": true,
"upload": false,
"allowed": [""]
},
"channels": {
"create": true,
"delete": false,
"edit": true,
"allowed": [""]
},
"platforms": {
"create": true,
"delete": false,
"edit": true,
"allowed": [""]
},
"archs": {
"create": true,
"delete": false,
"edit": true,
"allowed": [""]
}
}
}'
Response:
{
"message": "Team user created successfully"
}
Update Team User
Update an existing team user's permissions.
POST /user/update
Headers
Authorization: Authorization header with jwt token.
Body
username: Username of the team user to update. password: New password for the team user (optional). permissions: Updated permission settings.
Request:
curl -X POST \
'http://localhost:9000/user/update' \
-H 'Authorization: Bearer {{token}}' \
-H 'Content-Type: application/json' \
-d '{
"id": "67ffc3f5a2120e73468ce66c",
"username": "teamuser1",
"password": "password123",
"permissions": {
"apps": {
"create": false,
"delete": true,
"edit": true,
"download": true,
"upload": true,
"allowed": ["", ""]
},
"channels": {
"create": true,
"delete": true,
"edit": true,
"allowed": [""]
},
"platforms": {
"create": true,
"delete": false,
"edit": true,
"allowed": [""]
},
"archs": {
"create": true,
"delete": false,
"edit": true,
"allowed": [""]
}
}
}'
Response:
{
"message": "Team user updated successfully"
}
List Team Users
Retrieve a list of all team users.
GET /users/list
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET \
'http://localhost:9000/users/list' \
-H 'Authorization: Bearer {{token}}'
Response:
{
"users": [
{
"id": "67fd2a63a70df16a87034b83",
"username": "teamuser1",
"permissions": {
"Apps": {
"Create": true,
"Delete": false,
"Edit": true,
"Download": true,
"Upload": false,
"Allowed": [
"67f8070fba341940a3ae4542"
]
},
"Channels": {
"Create": true,
"Delete": false,
"Edit": true,
"Allowed": [
"67f826fa5c0a2b68411b2111"
]
},
"Platforms": {
"Create": true,
"Delete": false,
"Edit": true,
"Allowed": [
"67f82615a27c60636bd57308"
]
},
"Archs": {
"Create": true,
"Delete": false,
"Edit": true,
"Allowed": [
"67f8261aa27c60636bd57309"
]
}
},
"updated_at": "2025-04-14T18:31:47.575+03:00"
}
]
}
Delete Team User
Delete a team user.
DELETE /user/delete
Headers
Authorization: Authorization header with jwt token.
Body
id: ID of the team user to delete.
Request:
curl -X DELETE \
'http://localhost:9000/user/delete' \
-H 'Authorization: Bearer {{token}}' \
-H 'Content-Type: application/json' \
-d '{
"id": "67f8e842675a6e160d48a59c"
}'
Response:
{
"message": "Team user deleted successfully"
}
Whoami
Get information about current user.
GET /whoami
Headers
Authorization: Authorization header with jwt token.
Request:
curl -X GET \
'http://localhost:9000/whoami' \
-H 'Authorization: Bearer {{token}}'
Response:
{
"id": "67f806cdba341940a3ae4540",
"username": "admin",
"is_admin": true
}
# Or for team user
{
"username": "teamuser1",
"is_admin": false,
"owner": "admin",
"permissions": {
"Apps": {
"Create": true,
"Delete": false,
"Edit": false,
"Download": true,
"Upload": true,
"Allowed": [
"67fe34c804d701fb7f3cc656",
"67fe3669cebd0550e07763de"
]
},
"Channels": {
"Create": true,
"Delete": false,
"Edit": false,
"Allowed": [
"67f826fa5c0a2b68411b2111"
]
},
"Platforms": {
"Create": false,
"Delete": false,
"Edit": true,
"Allowed": [
"67f82615a27c60636bd57308"
]
},
"Archs": {
"Create": true,
"Delete": true,
"Edit": false,
"Allowed": [
"67f8261aa27c60636bd57309",
"67f827ac8ffe38b6de325c07"
]
}
}
}
Update Admin
Update an existing admin's passswords.
POST /admin/update
Headers
Authorization: Authorization header with jwt token.
Body
id: ID of the admin to update (can't be updated). username: Username of the admin to update (can't be updated). password: New password for the admin.
Request:
curl -X POST \
'http://localhost:9000/admin/update' \
-H 'Authorization: Bearer {{token}}' \
-H 'Content-Type: application/json' \
-d '{
"id": "67ffc3f5a2120e73468ce66c",
"username": "admin",
"password": "newpassword123"
}'
Response:
{
"message": "Admin updated successfully"
}
Get Telemetry
Retrieve telemetry data for your applications.
GET /telemetry
Headers
Authorization: Authorization header with jwt token.
Query Parameters
date: Specific date in YYYY-MM-DD format (optional) range: Time range - "week" or "month" (optional) apps: Comma-separated list of app names to filter (optional) channels: Comma-separated list of channels to filter (optional) platforms: Comma-separated list of platforms to filter (optional) architectures: Comma-separated list of architectures to filter (optional)
Request:
curl -X GET \
'http://localhost:9000/telemetry?range=week&apps=myapp&channels=stable,beta&platforms=darwin,windows&architectures=x64,arm64' \
-H 'Authorization: Bearer {{token}}'
Response:
{
"date": "2024-03-20",
"admin": "admin_name",
"summary": {
"total_requests": 1500,
"unique_clients": 750,
"clients_using_latest_version": 600,
"clients_outdated": 150,
"total_active_apps": 3
},
"versions": {
"known_versions": ["1.0.0", "1.1.0", "1.2.0"],
"usage": [
{
"version": "1.2.0",
"client_count": 600
},
{
"version": "1.1.0",
"client_count": 100
},
{
"version": "1.0.0",
"client_count": 50
}
]
},
"platforms": [
{
"platform": "darwin",
"client_count": 400
},
{
"platform": "windows",
"client_count": 350
}
],
"architectures": [
{
"arch": "x64",
"client_count": 700
},
{
"arch": "arm64",
"client_count": 50
}
],
"channels": [
{
"channel": "stable",
"client_count": 600
},
{
"channel": "beta",
"client_count": 150
}
],
"daily_stats": [
{
"date": "2024-03-20",
"total_requests": 1500,
"unique_clients": 750,
"clients_using_latest_version": 600,
"clients_outdated": 150
}
]
}
Notes:
- Team users can access their administrator's telemetry data
- Data is retained for 30 days
- Statistics are only collected when
X-Device-IDheader is provided in/checkVersionrequests - Team users have limited filtering capabilities based on their resource access rights