---
title: "Load several listings by id"
method: POST
path: "/api/v1/listings/batch"
tags: ["catalog"]
---

# Load several listings by id

`POST /api/v1/listings/batch`

## Request

- Base URL: `https://skillselion.com`
- URL: `https://skillselion.com/api/v1/listings/batch`
- Auth: none declared

Real catalog batch read. Body `{ "ids": string[] }` (max 25). Returns `{ items, notFound }` using the same getListing path as single-id reads. No auth.

## Headers

- `API-Version` '1'

## Request body

- object
  - `ids` string[], required

## Response `200`

Found listings plus ids that did not resolve.

- object
  - `items` Listing[], required
    - `id` string, required: Listing slug id (path-style ids are URL-encoded).
    - `type` 'skill' | 'marketplace' | 'plugin' | 'mcp' | 'workflow', required
    - `name` string, required
    - `author` string
    - `repo` string: GitHub owner/repo when known.
    - `description` string
    - `summary` string
    - `category` string
    - `stage` 'idea' | 'validate' | 'build' | 'ship' | 'launch' | 'grow' | 'operate'
    - `stars` integer
    - `installs` integer: Real install count from the skills.sh registry.
    - `votes` integer: Internal ranking tiebreak only; voting UI is retired.
    - `verifiedSafe` boolean
    - `trustScore` number
  - `notFound` string[], required

## Other responses

- `400`: Invalid query or body.
- `401`: Authentication required (staff routes only).
- `404`: No listing or route matches.
- `405`: Method not allowed.
- `429`: Rate limited. Retry-After and RateLimit headers are set.
- `500`: Upstream or server error.

---

[API](https://skmtc.dev/skillselion/apis/skillselion-public-api.md) · [All operations](https://skmtc.dev/skillselion/apis/skillselion-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/skillselion/apis/skillselion-public-api/revisions/e6e0c4d3d116?raw)
