---
title: "List projects"
method: GET
path: "/api/project"
tags: ["Projects"]
---

# List projects

`GET /api/project`

## Request

- Base URL: `https://insights.linuxfoundation.org`
- URL: `https://insights.linuxfoundation.org/api/project`
- Auth: none declared

Returns a page of projects. Only the parameters and fields used to look up projects in batch by slug are documented here: the project's name, description, logo and links, and its Health Score v2.

This endpoint is public and requires no authentication. Rate limiting applies (default: 200 requests per 60 seconds per IP address).
Rate limit status is returned in the `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
and `X-RateLimit-Reset` response headers.

## Query parameters

- `slugs` string[]
- `pageSize` integer
- `healthBreakdown` boolean

## Response `200`

A page of projects

- object
  - `page` integer: Current page number
  - `pageSize` integer: Number of projects per page
  - `total` integer: Total number of matching projects
  - `data` ProjectListItem[]
    - `slug` string, required: URL slug used to identify the project
    - `name` string, required: Display name of the project
    - `description` string, required: Short description of the project. Empty string when the project has none.
    - `logo` string, required: URL of the project logo. Empty string when the project has none.
    - `website` string, required: Project website. Usually a full URL, but some values have no scheme (e.g. `bower.io`). Empty string when the project has none.
    - `github` string, required: URL of the project's GitHub organization or repository. Empty string when the project has none.
    - `twitter` string, required: The project's X (formerly Twitter) account. Usually a full URL, but some values are a bare handle (e.g. `OpenMFProject`). Empty string when the project has none.
    - `linkedin` string, required: URL of the project's LinkedIn page. Empty string when the project has none.
    - `healthScoreV2` integer, nullable, required: Overall Health Score v2, in points out of `healthMaxScore`. Always returned. Null when the project is unscored (fewer than 2 categories covered), archived, or one of a few special projects (e.g. the Linux kernel).
    - `healthMaxScore` 100 | 75 | 65 | 60 | null, nullable, required: Points available for `healthScoreV2`: 100 when all 3 categories are covered, or 60, 65 or 75 when Maintainer Health, Security & Supply Chain or Development Activity is missing. Always returned. Null whenever `healthScoreV2` is null.
    - `healthLabel` 'excellent' | 'healthy' | 'fair' | 'concerning' | 'critical' | 'null', nullable, required: Band of `healthScoreV2Normalized`. Use it for display instead of grading the raw `healthScoreV2`. Always returned. Null whenever `healthScoreV2` is null.
    - `healthScoreV2Normalized` number, nullable, required: `healthScoreV2 * 100 / healthMaxScore` on a 0-100 scale, for sorting and comparing partial and full scores. Always returned. Null whenever `healthScoreV2` is null.
    - `maintainerHealthScoreV2` integer, nullable: Health Score v2 Maintainer Health category score. Returned when `healthBreakdown=true`. Null when the project has no value for this category.
    - `securitySupplyChainScoreV2` integer, nullable: Health Score v2 Security & Supply Chain category score. Returned when `healthBreakdown=true`. Null when the project has no value for this category.
    - `developmentActivityScoreV2` integer, nullable: Health Score v2 Development Activity category score. Returned when `healthBreakdown=true`. Null when the project has no value for this category.
    - `coveredCategoryCount` integer, nullable: Number of the 3 Health Score v2 categories that have a score. Returned when `healthBreakdown=true`. Null when the count is not available, including for archived projects and a few special projects (e.g. the Linux kernel), which can still have category scores. Treat a null `healthScoreV2` or `healthLabel` as unscored instead of inferring it from the category scores.

## Other responses

- `400`: `pageSize` is over 100 while `healthBreakdown=true`
- `429`: Rate limit exceeded
- `500`: Internal server error

## Changes

- **2026-11-02** `0451fe6f04d4`: 7 info
  - added the required property `data/items/description` to the response with the `200` status
  - added the required property `data/items/github` to the response with the `200` status
  - added the required property `data/items/linkedin` to the response with the `200` status
  - added the required property `data/items/logo` to the response with the `200` status
  - …3 more
- **2026-10-14** `38fa7e18b95c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/linuxfoundation/apis/lfx-insights-public-api/changes/api/project/get.md)

---

[API](https://skmtc.dev/linuxfoundation/apis/lfx-insights-public-api.md) - [All operations](https://skmtc.dev/linuxfoundation/apis/lfx-insights-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/linuxfoundation/apis/lfx-insights-public-api/revisions/0451fe6f04d4?raw)
