OpenLyst API
Access OpenLyst app and release data programmatically. Free to use, no authentication required.
Base URL
All API requests should be made to this URL
https://openlyst.ink/api/v1How the API Works
Response format, parameters, and error codes
Response format
Successful responses are JSON with success: true, a data field (array or object), and often language and count. Add ?lang=en|zh|ru to any request for localized strings (default: en).
// Success
{ "success": true, "language": "en", "data": ... }
// Error (400, 404, 500)
{ "success": false, "error": "message" }Error Handling
Understanding API error responses
- 400 — Returned when required parameters are missing.
- 404 — Returned when the requested resource doesn't exist.
- 500 — Returned when an internal error occurs.
Quick Start
Get started with a simple example
const response = await fetch('https://openlyst.ink/api/v1/apps');
const data = await response.json();
console.log(data.data);API Endpoints
Complete reference for all available endpoints
/api/v1/repoGet repository info: name, icon, featured apps, total counts, and download status.
Query Parameters
| Name | required | Description |
|---|---|---|
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"data": {
"name": "OpenLyst",
"subtitle": "...",
"totalApps": 6,
"totalNews": 5,
"tempDownloadsOff": false,
"featuredApps": ["doudou", "finar", ...]
}
}/api/v1/appsList all apps. Filter by status or platform if needed.
Query Parameters
| Name | required | Description |
|---|---|---|
| filter | Default | Limit to active or deprecated apps (active | deprecated) |
| platform | Default | Only apps that support this platform (e.g. iOS, Android, macOS) |
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"count": 6,
"language": "en",
"data": [
{
"name": "Doudou",
"slug": "doudou",
"subtitle": "Music player for self-hosted services",
"platforms": ["iOS", "macOS", "Windows", "Linux", "Android"],
"versions": [...]
}
]
}/api/v1/apps/:slugGet full app details including all versions.
Path Parameters
| Name | required | Description |
|---|---|---|
| slug | required | App slug or bundle identifier (e.g. doudou, finar) |
Query Parameters
| Name | required | Description |
|---|---|---|
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"data": {
"name": "Doudou",
"slug": "doudou",
"bundleIdentifier": "doudou",
"applicationId": "gitlab.openlyst.doudou",
"subtitle": "Music player for self-hosted services",
"localizedDescription": "...",
"iconURL": "https://...",
"platforms": ["iOS", "macOS", ...],
"versions": [{ "version": "14.0.0", "date": "2026-02-16", ... }]
}
}/api/v1/apps/:slug/versionsGet all versions of an app, newest first.
Path Parameters
| Name | required | Description |
|---|---|---|
| slug | required | App slug or bundle identifier (e.g. doudou) |
Query Parameters
| Name | required | Description |
|---|---|---|
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"appName": "Doudou",
"count": 12,
"data": [
{ "version": "14.0.0", "date": "2026-02-16", "platforms": [...], "downloads": {...} },
{ "version": "13.0.0", ... }
]
}/api/v1/apps/:slug/latestGet the latest version of an app. Returns 404 if no versions exist.
Path Parameters
| Name | required | Description |
|---|---|---|
| slug | required | App slug or bundle identifier (e.g. doudou) |
Query Parameters
| Name | required | Description |
|---|---|---|
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"appName": "Doudou",
"appSlug": "doudou",
"data": {
"version": "14.0.0",
"date": "2026-02-16",
"platforms": ["iOS", "macOS", "Windows", "Linux", "Android"],
"downloads": { "iOS": "https://...", "Android": { "apk": "https://..." }, ... }
}
}/api/v1/newsGet news and announcements. Filter by app or limit count.
Query Parameters
| Name | required | Description |
|---|---|---|
| limit | Default | Max number of items to return (positive integer) |
| appId | Default | Only news for this app (bundle ID) (e.g. doudou) |
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"count": 5,
"data": [
{
"identifier": "...",
"title": "New release",
"caption": "...",
"date": "2026-02-16",
"appID": "doudou"
}
]
}/api/v1/searchSearch apps by name, subtitle, description, or bundle ID. Results include relevanceScore.
Query Parameters
| Name | required | Description |
|---|---|---|
| q | required | Search term (any string) |
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"query": "music",
"language": "en",
"count": 1,
"data": [
{
"name": "Doudou",
"slug": "doudou",
"subtitle": "Music player for self-hosted services",
"relevanceScore": 11
}
]
}/api/v1/platformsGet all platforms with at least one app, sorted by app count.
Query Parameters
| Name | required | Description |
|---|---|---|
| lang | Default | Content language (en | zh | ru) |
Example Response
{
"success": true,
"language": "en",
"count": 6,
"data": [
{ "name": "Android", "appCount": 6 },
{ "name": "iOS", "appCount": 5 },
{ "name": "macOS", "appCount": 5 }
]
}Download Structure
Understanding the platform-specific download formats
The downloads field in version objects contains platform-specific download URLs. Different platforms support different installer types and architectures.
Repository flag: tempDownloadsOffThe repo endpoint (GET /api/v1/repo) may include tempDownloadsOff: true. When true, clients should hide or disable download UI and show an appropriate message (e.g. that hosted builds are temporarily unavailable).
Rate Limits & Usage
Fair usage guidelines
Currently no rate limits are enforced. Please use responsibly.
No authentication or API keys required to access any endpoint.