App Update Server
Version management and update service
| App Name | Platform (OS-Device) | Version | Build | Size | Release Date | Release Notes | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| Loading... | ||||||||
| Time | App Name | Platform | Old Version | New Version | Status | OS Version | Device Info | User Info | Duration | Error | IP Address |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading... | |||||||||||
| Time | App Name | Level | Message | IP Address | Details |
|---|---|---|---|---|---|
| Loading... | |||||
Public API reference for client applications. All endpoints return JSON responses unless otherwise specified.
Authentication
All client API endpoints require API Key authentication via HTTP header.
X-API-Key: your-api-key-hereX-API-Key HTTP header, not in URL query parameters. This is more secure because:
- Headers are not logged in server access logs
- Headers are not stored in browser history
- Headers are not visible in URL bar or shared links
- Headers are encrypted in HTTPS connections
curl -X POST https://app.fsiinc.com/api/check-update \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{"app_name": "MyApp", "platform": "android-phone", "current_version": "1.0.0"}'
Client API Endpoints
/api/check-update
Check if there's an update available for an app.
{
"app_name": "string (required)",
"platform": "string (required)",
"current_version": "string (required)",
"current_build_number": "integer (optional, for accurate version comparison)",
"device_info": "object (optional)",
"user_info": "object (optional)",
"os_version": "string (optional)"
}Response:
{
"has_update": true/false,
"latest_version": "string",
"version_info": {...},
"message": "string"
}Example Request (curl):
curl -X POST https://app.fsiinc.com/api/check-update \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{
"app_name": "MyApp",
"platform": "android-phone",
"current_version": "1.0.0",
"current_build_number": 95,
"device_info": {"model": "Pixel 5", "manufacturer": "Google"},
"os_version": "Android 12"
}'Example Response:
{
"has_update": true,
"latest_version": "1.1.0",
"version_info": {
"app_name": "MyApp",
"version": "1.1.0",
"platform": "android-phone",
"build_number": 101,
"download_url": "/api/download/myapp/android-phone/1.1.0/app.apk",
"file_size": 15728640,
"force_update": false
},
"message": "Update available"
}- First, compare version numbers (e.g., 1.0.0 vs 1.1.0)
- If version numbers are equal, compare build numbers
- Provide
current_build_numberfor accurate comparison when version numbers are the same
device_info, user_info, os_version) are used for checking updates only. Upgrade logs are recorded when the client actually downloads the update file (via the download endpoint), not when checking for updates.
/api/latest-version/{app_name}/{platform}
Get the latest version information for a specific app and platform.
X-API-Key: your-api-keyExample Request (curl):
curl -X GET "https://app.fsiinc.com/api/latest-version/MyApp/android-phone" \
-H "X-API-Key: your-api-key-here"Example Response:
{
"app_name": "MyApp",
"platform": "android-phone",
"latest_version": "1.1.0",
"version_info": {
"app_name": "MyApp",
"version": "1.1.0",
"platform": "android-phone",
"build_number": 101,
"download_url": "/api/download/myapp/android-phone/1.1.0/app.apk",
"file_size": 15728640,
"force_update": false
}
}
/api/download/{app_name}/{platform}/{version}/{filename}
Download the update file for a specific version.
X-API-Key: your-api-keyQuery Parameters (all optional):
current_version: string (optional, current version number)
device_info: string (optional, JSON string of device info)
user_info: string (optional, JSON string of user info)
os_version: string (optional, operating system version)Example Request (curl):
curl -X GET "https://app.fsiinc.com/api/download/MyApp/android-phone/1.1.0/app.apk?current_version=1.0.0" \
-H "X-API-Key: your-api-key-here" \
-o app.apkResponse: Binary file download (application/octet-stream)
POST /api/upgrade-logs endpoint after successful installation to record the upgrade.
/api/upgrade-logs
Upload upgrade log after successful installation (called by the app).
X-API-Key: your-api-keyRequest:
{
"app_name": "string (required)",
"platform": "string (required)",
"old_version": "string (required)",
"new_version": "string (required)",
"device_info": "object (optional)",
"user_info": "object (optional)",
"os_version": "string (optional)",
"install_status": "string (optional: success, failed, cancelled)",
"error_message": "string (optional)",
"install_duration": "number (optional, seconds)"
}Response:
{
"status": "success",
"message": "Upgrade log recorded"
}Example Request (curl):
curl -X POST https://app.fsiinc.com/api/upgrade-logs \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{
"app_name": "MyApp",
"platform": "android-phone",
"old_version": "1.0.0",
"new_version": "1.1.0",
"device_info": {"model": "Pixel 5", "manufacturer": "Google"},
"os_version": "Android 12",
"install_status": "success",
"install_duration": 15.5
}'Example Response:
{
"status": "success",
"message": "Upgrade log recorded"
}/api/app-logs
Upload application log entry. Accepts any JSON body and stores it on the server.
X-API-Key: your-api-key, Content-Type: application/jsonRequest: Any valid JSON object. Recommended fields:
{
"app_name": "string (recommended)",
"level": "string (recommended: debug, info, warn, error)",
"message": "string (recommended)",
"timestamp": "string (optional, ISO 8601)",
"device_info": "object (optional)",
"user_info": "object (optional)",
"extra": "any (optional, additional data)"
}Response:
{
"status": "success",
"message": "App log recorded",
"id": "string (unique log ID)"
}Example Request (curl):
curl -X POST https://app.fsiinc.com/api/app-logs \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{
"app_name": "MyApp",
"level": "error",
"message": "Failed to connect to server",
"timestamp": "2026-02-17T10:30:00Z",
"device_info": {"model": "Pixel 5", "os": "Android 12"},
"extra": {"error_code": 500, "retry_count": 3}
}'Platform Format
Platform should be in the format: operating-system-device
android-phone, android-tablet, ios-iphone, ios-ipad,windows, macos, linux
Notes
- All API endpoints require
X-API-Keyheader for authentication - All API endpoints are case-insensitive for
app_nameandplatformparameters - Rate limiting is enabled (default: 60 requests per minute per IP)
- API Key authentication is enabled by default (can be disabled via environment variable)
- File paths use lowercase for compatibility, but app names are stored with original case
- Version management (upload/update/delete) is only available through the web interface