Plugin Marketplace API

A read-only REST API for the plugins listed on the Logi Marketplace. Search, filter by platform or category, and get full plugin details as clean JSON. You don't need an API key.

How it works

This service sits between your app and the marketplace. It fetches the marketplace data, cleans it up, and serves it through a small, stable API.

Your app

Sends a normal HTTP GET request, with optional filters in the query string.

This API

Checks your input, filters and pages the results, and keeps marketplace data cached for 30 minutes.

Logi Marketplace

The original source. It's only contacted when the cache is empty or expired.

Fast

Most requests come straight from the cache, without waiting on the marketplace.

Clean data

Plugin fields are flattened into a consistent shape, including platforms and download counts.

Versioned

Every URL starts with /v1, so future breaking changes won't affect your integration.

Endpoints

Both endpoints return JSON. Send Accept: application/json so errors come back as JSON too.

GET /api/v1/plugins

Lists plugins, one page at a time. All query parameters are optional and can be combined.

ParameterTypeDescription
searchstringMatches the plugin name or display name. Case-insensitive, up to 100 characters.
platformstringOnly plugins for this platform, for example Windows or MacOS.
categorystringOnly plugins in this category, for example Gaming.
pageintegerPage number, starting at 1. Default: 1.
per_pageintegerResults per page, from 1 to 100. Default: 25.

Example request

curl "https://logiplugin.com/api/v1/plugins?search=dice&category=Gaming"

Example response (the meta.links array is left out)

{
  "data": [
    {
      "id": 4942,
      "name": "Dice",
      "displayName": "Dice",
      "description": "Allows quick virtual dice rolling.",
      "categories": ["Gaming"],
      "icon": "https://marketplace.logi.com/resources/16/Dice_65255eb975.png",
      "versions": ["1.2.1"],
      "platforms": ["MacOS", "Windows"],
      "firstPublicAt": "2025-10-06T17:04:48.177Z",
      "downloads": 8352
    }
  ],
  "links": {
    "first": "https://logiplugin.com/api/v1/plugins?search=dice&category=Gaming&page=1",
    "last": "https://logiplugin.com/api/v1/plugins?search=dice&category=Gaming&page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://logiplugin.com/api/v1/plugins",
    "per_page": 25,
    "to": 1,
    "total": 1
  }
}
GET /api/v1/plugins/{name}

Returns one plugin, looked up by its name (not the display name). It has all the list fields plus author, links, requirements, and the full version history (here versions is a list of objects instead of version numbers).

Example request

curl "https://logiplugin.com/api/v1/plugins/Dice"

Example response

{
  "data": {
    "id": 4942,
    "name": "Dice",
    "displayName": "Dice",
    "description": "Allows quick virtual dice rolling.",
    "categories": ["Gaming"],
    "icon": "https://marketplace.logi.com/resources/16/Dice_65255eb975.png",
    "versions": [
      {
        "version": "1.2.1",
        "fileUrl": "https://marketplace.logi.com/resources/16/Dice_1_2_1_33fbfc1963.lplug4",
        "minLPSVersion": "6",
        "platforms": ["MacOS", "Windows"]
      }
    ],
    "platforms": ["MacOS", "Windows"],
    "firstPublicAt": "2025-10-06T17:04:48.177Z",
    "downloads": 8352,
    "author": { "name": "KBrandt.dev", "supportUrl": "" },
    "homeUrl": "",
    "requirements": [],
    "capabilities": [],
    "supportedFeatures": []
  }
}

Caching & errors

What to expect when responses are reused, and how errors look.

Caching

Server cacheMarketplace data is kept for 30 minutes, so new plugins can take that long to show up.
Your cacheSuccessful responses send Cache-Control: public, max-age=300, so you can reuse them for 5 minutes.
ETagSend the ETag back as If-None-Match and you'll get 304 Not Modified if nothing changed.

Status codes

200Success.
304Not modified. Use your cached copy.
404No plugin with that name, or an unknown URL.
405Wrong method. Only GET and HEAD are allowed.
422A query parameter is invalid. See errors.
502The marketplace couldn't be reached. Try again later.

Every error has a message. Invalid input also includes errors.

{
  "message": "The per page field must not be greater than 100.",
  "errors": {
    "per_page": ["The per page field must not be greater than 100."]
  }
}