---
title: "Browse and search published worlds"
method: GET
path: "/api/v1/worlds"
---

# Browse and search published worlds

`GET /api/v1/worlds`

## Request

- Base URL: `https://portamora.app`
- URL: `https://portamora.app/api/v1/worlds`
- Auth: none declared

Sort by newest, liked, or trending. The days filter accepts 1, 7 (API default), or 30 UTC calendar days including today, or all for any sort. Newest filters publication date unless days=all or creator is specified. Liked ranks period likes, or lifetime likes when days=all. Trending ranks period activity, or lifetime plays and likes when days=all, with publication-age decay in both cases. Older worlds may appear in activity rankings. The Explore website defaults to liked/all; API defaults remain newest/7. Search text can include exact #tags; custom tags are supported without a fixed vocabulary. Liked and trending require the community flag. Follow nextCursor with unchanged filters until null. Drafts and offline worlds are excluded. Public; no authentication is required.

## Query parameters

- `q` string
- `sort` 'newest' | 'liked' | 'trending'
- `days` union
  - integer
  - string
- `tag` string: One to 32 tag characters; optional leading #, surrounding whitespace, and uppercase letters are normalized.
- `creator` string: An existing creator handle; lookup ignores case.
- `limit` integer
- `cursor` string

## Response `200`

Successful response

- WorldList
  - `items` object[], required
    - `visibility` 'public' | 'unlisted'
    - `id` string, required: Case-sensitive world identifier with 10 safe-alphabet characters after the prefix.
    - `title` string, required
    - `tagline` string, required
    - `description` string, required
    - `thumbnailKey` string, nullable, required
    - `status` 'published' | 'offline' | 'removed', required
    - `currentVersionId` string, nullable, required: Case-sensitive version identifier with 10 safe-alphabet characters after the prefix.
    - `publishedAt` string, date-time, nullable, required
    - `playsTotal` integer, required
    - `likesTotal` integer, required
    - `dislikesTotal` integer, required
    - `bytesUnpacked` integer, nullable, required
    - `tags` string[], required
    - `creator` object, required
      - `id` string, required: Case-sensitive user identifier with 10 safe-alphabet characters after the prefix.
      - `handle` string, required
      - `displayName` string, required
      - `bio` string, required
      - `avatarKey` string, nullable, required
      - `links` object, required
        - `self` string, uri, required
        - `profile` string, uri, required
        - `avatar` string, uri, nullable, required
    - `links` object, required
      - `self` string, uri, required
      - `details` string, uri, required
      - `play` string, uri, nullable, required
      - `thumbnail` string, uri, nullable, required
  - `nextCursor` string, nullable, required

## Other responses

- `400`: Invalid request or cursor
- `404`: Resource not found or not publicly visible
- `503`: Catalog temporarily unavailable

---

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