REST API v1

OpenLyst API

Access our complete app repository 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);

cURL

curl https://openlyst.ink/api/v1/apps

Python

import requests

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

API Endpoints

Complete reference for all available endpoints

GET /api/v1/repo

Get repository metadata and basic statistics.

Example Response

{
  "success": true,
  "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": 3,
    "totalNews": 2
  }
}
GET /api/v1/apps

Get all apps in the repository with optional filtering.

Query Parameters

filter string Filter apps by status Default: none (returns all)
platform string Filter apps by platform (iOS, Android, macOS, Windows, Linux, Web)

Example Response

{
  "success": true,
  "count": 3,
  "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")

Example Response

{
  "success": true,
  "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

Example Response

{
  "success": true,
  "appName": "Doudou",
  "count": 3,
  "data": [
    {
      "version": "8.0.0",
      "date": "2025-12-06",
      "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
      "platformInstall": {...},
      "downloads": {...},
      "localizedDescription": "# 8.0.0\n..."
    }
  ]
}
GET /api/v1/apps/:slug/latest

Get the latest version of a specific app.

Path Parameters

slug string required The app slug

Example Response

{
  "success": true,
  "appName": "Doudou",
  "appSlug": "doudou",
  "data": {
    "version": "8.0.0",
    "date": "2025-12-06",
    "platforms": ["iOS", "macOS", "Windows", "Linux", "Android", "Web"],
    "platformInstall": {...},
    "downloads": {...},
    "localizedDescription": "..."
  }
}
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)

Example Response

{
  "success": true,
  "count": 2,
  "data": [
    {
      "title": "BaoBao Discontinued - Meet Klit!",
      "identifier": "baobao_deprecated_klit_release",
      "caption": "BaoBao is being retired...",
      "date": "2025-12-06",
      "tintColor": "#ff6b35",
      "imageURL": "/icons/Klit/klit_release_image.png",
      "notify": true,
      "url": "/apps/klit",
      "appID": "klit"
    }
  ]
}
GET /api/v1/search

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

Query Parameters

q string Search query (required)

Example Response

{
  "success": true,
  "query": "music",
  "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.

Example Response

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

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

Building revolutionary FOSS applications for the people. Free and open source software that serves the community, not corporate interests.

Applications

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

Power to the people through free software ✊