---
title: "List saved packages for the signed-in user, including community-fork source listing provenance, so agents can discove..."
method: GET
path: "/v1/packages"
tags: ["packages"]
---

# List saved packages for the signed-in user, including community-fork source listing provenance, so agents can discove...

`GET /v1/packages`

## Request

- Base URL: `https://api.kody.codes`
- URL: `https://api.kody.codes/v1/packages`
- Auth: HTTP bearer

List saved packages for the signed-in user, including community-fork source listing provenance, so agents can discover the scoped package.json name (or package_id when the name is not known) for later execution, editing, or UI opening.

Org permission: `package:read`.

## Response `200`

Success.

- object
  - `packages` object[], required
    - `package_id` string, required
    - `kody_id` string, required: Package name leaf (same value as `slug`). Kept as a compatibility alias; prefer `slug` or `name`.
    - `slug` string, required: Package name leaf (the path segment after the scope). Same value as `kody_id`.
    - `name` string, required
    - `description` string, required
    - `tags` string[], required
    - `has_app` boolean, required
    - `hidden` boolean, required
    - `visibility` 'public' | 'private', required: Repo visibility / forkable. Public means default-branch HEAD is world-readable and forkable and the package appears on /community. Private is owner-only. Independent of internet_visible.
    - `internet_visible` boolean, required: When true, the hosted package app may be served on the public internet after capability approval. Independent of visibility/forkable. Defaults false.
    - `locked_at` string, nullable, required: When set, publishes require a website click at /@{username}/{kodyId}/approve-publish?commit=<full 40-character SHA>. Agents may lock via packageUpdate (`changes.locked: true`). Unlocking is website-only at /@{username}/{kodyId}/settings. Do not abbreviate the commit.
    - `source_id` string, required
    - `created_at` string, required
    - `updated_at` string, required
    - `source_listing_id` string, nullable, required: Catalog entry id this package was forked from, or null for a self-authored package.
    - `listing_current` boolean, nullable, required: Whether the source catalog entry currently resolves to an active public package, or null for a self-authored package.
    - `listing_kody_id` string, nullable, required: Original public package name leaf recorded when this package was forked, or null for a self-authored package.
    - `listing_name` string, nullable, required: Current source listing package name when the listing is active, or null when this package is self-authored or the listing is gone.
    - `origin_commit` string, nullable, required: Listing pinned commit this fork last absorbed. Starts as the fork-time snapshot and moves when a later publish passes absorbed_upstream_commit.
    - `listing_pinned_commit` string, nullable, required: Current pinned commit of the source listing, or null when this package is self-authored or the listing is gone.
    - `listing_published_at` string, nullable, required: Last community publish time of the source listing, or null when this package is self-authored or the listing is gone.
    - `listing_ahead` boolean, nullable, required: True only when this community fork is outdated: the listing pin is not an ancestor of the fork tip. Null for a self-authored package. Otherwise false.

## Other responses

- `400`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `401`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `403`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `404`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `409`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `413`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `429`: Too many requests (edge IP/token limit) or an entitlement / plan-cap limit. Wait at least `Retry-After` seconds before retrying.
- `500`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `503`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `default`: Error envelope `{ "error": { "code", "message", "details"? } }`.

---

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