REST API v1

OpenLyst API

Access OpenLyst app and release data programmatically. Free to use, no authentication required.

100% Free
No Auth Required
JSON Responses
CORS Enabled

Base URL

All API requests should be made to this URL

https://openlyst.ink/api/v1

Quick Start

Get started with a simple example

JavaScript / Fetch

const response = await fetch('https://openlyst.ink/api/v1/apps');
const data = await response.json();

// Get all apps
console.log(data.data);

// With language parameter (zh = Chinese, ru = Russian)
const zhResponse = await fetch('https://openlyst.ink/api/v1/apps?lang=zh');

cURL

curl https://openlyst.ink/api/v1/apps
# With language parameter
curl "https://openlyst.ink/api/v1/apps?lang=zh"

Python

import requests

response = requests.get('https://openlyst.ink/api/v1/apps')
data = response.json()

# With language parameter
response = requests.get('https://openlyst.ink/api/v1/apps', params={lang': 'ru'})

API Endpoints

Complete reference for all available endpoints

GET /api/v1/repo

Get repository metadata and basic statistics.

Query Parameters

lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "data": {
    "name": "OpenLyst Repository",
    "subtitle": "Every Openlyst iOS app.",
    "description": "FOSS apps for iOS, Android, and Desktop...",
    "iconURL": "/favicon.svg",
    "headerURL": "https://...",
    "website": "https://openlyst.ink",
    "tintColor": "#dc2626",
    "featuredApps": ["doudou"],
    "totalApps": 6,
    "totalNews": 5,
    "tempDownloadsOff": true
  }
}
GET /api/v1/apps

Get all apps in the repository with optional filtering.

Query Parameters

filter string Filter apps by status: "active" (non-deprecated), "deprecated", or omit for all Default: none (returns all)
platform string Filter apps by platform (iOS, Android, macOS, Windows, Linux, Web)
lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "count": 6,
  "language": "en",
  "data": [
    {
      "name": "Doudou",
      "slug": "doudou",
      "bundleIdentifier": "doudou",
      "subtitle": "Music player for self-hosted services",
      "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
      "iconURL": "https://...",
      "versions": [...],
      ...
    }
  ]
}
GET /api/v1/apps/:slug

Get detailed information about a specific app.

Path Parameters

slug string required The app slug (e.g., "doudou", "klit")

Query Parameters

lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "data": {
    "name": "Doudou",
    "slug": "doudou",
    "bundleIdentifier": "doudou",
    "subtitle": "Music player for self-hosted services",
    "localizedDescription": "...",
    "iconURL": "https://...",
    "tintColor": "#dc2626",
    "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
    "screenshots": [...],
    "versions": [...]
  }
}
GET /api/v1/apps/:slug/versions

Get all versions of a specific app.

Path Parameters

slug string required The app slug

Query Parameters

lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "appName": "Doudou",
  "count": 3,
  "data": [
    {
      "version": "12.0.0",
      "date": "2026-01-13",
      "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
      "platformInstall": {...},
      "downloads": {...},
      "sourceCode": "https://..."
    }
  ]
}
GET /api/v1/apps/:slug/latest

Get the latest version of a specific app.

Path Parameters

slug string required The app slug

Query Parameters

lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "appName": "Doudou",
  "appSlug": "doudou",
  "data": {
    "version": "12.0.0",
    "date": "2026-01-13",
    "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
    "platformInstall": {...},
    "downloads": {...},
    "sourceCode": "https://..."
  }
}
GET /api/v1/news

Get news and announcements.

Query Parameters

limit number Maximum number of news items to return
appId string Filter news by app ID (bundleIdentifier)
lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "count": 5,
  "data": [
    {
      "identifier": "gone_but_not_forgotten",
      "title": "Old builds are deprecated",
      "caption": "We have removed old builds from the main website...",
      "date": "2026-01-13",
      "tintColor": "#6366f1",
      "imageURL": "",
      "notify": false,
      "url": "",
      "appID": ""
    }
  ]
}
GET /api/v1/search

Search for apps by name, description, or bundle identifier.

Query Parameters

q string Search query (required)
lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "query": "music",
  "language": "en",
  "count": 1,
  "data": [
    {
      "name": "Doudou",
      "slug": "doudou",
      "subtitle": "Music player for self-hosted services",
      "relevanceScore": 15,
      ...
    }
  ]
}
GET /api/v1/platforms

Get all available platforms and app counts.

Query Parameters

lang string Language code for localized content (en, zh, ru) Default: en

Example Response

{
  "success": true,
  "language": "en",
  "count": 6,
  "data": [
    { "name": "iOS", "appCount": 6 },
    { "name": "Android", "appCount": 6 },
    { "name": "macOS", "appCount": 4 },
    { "name": "Windows", "appCount": 4 },
    { "name": "Linux", "appCount": 4 },
    { "name": "Web", "appCount": 3 }
  ]
}

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: tempDownloadsOff The 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).

Windows Downloads

Windows supports multiple installer types and package managers.

"Windows": {
  "exe": {
    "x86_64": "https://.../app-setup-x64.exe",
    "arm64": "https://.../app-setup-arm64.exe"
  },
  "msi": {
    "x86_64": "https://.../app-x64.msi",
    "arm64": ""
  },
  "msix": {
    "x86_64": "https://.../app.msix",
    "arm64": ""
  },
  "zip": {
    "x86_64": "https://.../app-win-x64.zip",
    "arm64": ""
  },
  "portable": {
    "x86_64": "https://.../app-portable.exe",
    "arm64": ""
  },
  "winget": "Publisher.AppName",
  "chocolatey": "app-name",
  "scoop": "extras/app-name"
}

Installer Types:

  • exe - NSIS, Inno Setup, or other installers
  • msi - Windows Installer packages
  • msix - Modern Windows app packages
  • zip - Portable zip archives
  • portable - Standalone portable executables

Package Managers:

  • winget - Windows Package Manager ID
  • chocolatey - Chocolatey package name
  • scoop - Scoop bucket/package name

Linux Downloads

Linux supports various package formats and package managers.

"Linux": {
  "zip": {
    "x86_64": "https://.../app-linux-x64.zip",
    "arm64": ""
  },
  "appimage": {
    "x86_64": "https://.../app-x86_64.AppImage",
    "arm64": ""
  },
  "deb": {
    "x86_64": "https://.../app-amd64.deb",
    "arm64": ""
  },
  "rpm": {
    "x86_64": "https://.../app-x86_64.rpm",
    "arm64": ""
  },
  "aur": {
    "x86_64": "https://aur.archlinux.org/packages/app-bin"
  },
  "homebrew": "https://.../homebrew/tap"
}

Package Types:

  • appimage - Universal Linux packages
  • deb - Debian/Ubuntu packages
  • rpm - Fedora/RHEL packages
  • zip / tar - Archive formats
  • aur - Arch User Repository
  • homebrew - Homebrew tap URL

macOS Downloads

macOS supports architecture-specific downloads.

"macOS": {
  "x86_64": "https://.../app-mac-x64.zip",
  "arm64": "https://.../app-mac-arm64.zip",
  "universal": "https://.../app-mac-universal.zip",
  "homebrew": "https://.../homebrew/tap"
}

Architectures:

  • x86_64 - Intel Macs
  • arm64 - Apple Silicon (M1/M2/M3)
  • universal - Universal binary (both)
  • homebrew - Homebrew cask/tap

Android Downloads

Android supports APK and AAB formats.

"Android": {
  "apk": "https://.../app-release.apk",
  "aab": "https://.../app-release.aab",
  "apkpure": "https://apkpure.com/p/..."
}

Formats:

  • apk - Android Package (direct install)
  • aab - Android App Bundle
  • apkpure - APKPure store link

Architecture Reference

x86_64

64-bit Intel/AMD

arm64

64-bit ARM (Apple Silicon, Snapdragon)

universal

Multi-architecture binary

i386

32-bit Intel (legacy)

Error Handling

Understanding API error responses

404 Not Found

Returned when the requested resource doesn't exist.

{
  "success": false,
  "error": "App not found"
}
400 Bad Request

Returned when required parameters are missing.

{
  "success": false,
  "error": "Search query is required"
}
500 Server Error

Returned when an internal error occurs.

{
  "success": false,
  "error": "Failed to load apps"
}
200 Success

All successful responses include success: true.

{
  "success": true,
  "data": { ... }
}

Rate Limits & Usage

Fair usage guidelines

No Rate Limits

Currently no rate limits are enforced. Please use responsibly.

No API Key

No authentication or API keys required to access any endpoint.

Open Source

This API is part of the OpenLyst open source project.

Fair Usage Guidelines

  • Cache responses when possible to reduce server load
  • Use specific endpoints instead of fetching all data repeatedly
  • Include a User-Agent header identifying your application
  • Don't make excessive requests in short time periods
★
OpenLyst

OpenLyst builds free and open-source apps for the community.

Applications

© 2025 OpenLyst. All software released under open source licenses.

Free software for everyone ✊