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/repoRepository metadata and basic statistics. Use for repo name, icon, featured apps, total counts, and tempDownloadsOff flag.
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", "docan", ...]
}
}/api/v1/appsList all apps. Optionally filter by status or platform.
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/:slugFull details for one app, including all versions.
Path Parameters
| Name | required | Description |
|---|---|---|
| slug | required | App slug or bundle identifier (e.g. doudou, docan) |
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/versionsAll versions of an app, ordered 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/latestThe latest version of an app only. 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/newsNews and announcements. Optionally 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 identifier. Query parameter q is required. 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/platformsAll platforms that have at least one app, with app counts. Sorted by count descending.
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.