---
title: "Make a saved package public (first community listing), or force-refresh an already-public listing to the current publ..."
method: POST
path: "/v1/community/listings"
tags: ["community"]
---

# Make a saved package public (first community listing), or force-refresh an already-public listing to the current publ...

`POST /v1/community/listings`

## Request

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

Make a saved package public (first community listing), or force-refresh an already-public listing to the current published_commit. Default-branch HEAD becomes world-readable and forkable, and the package appears on /community. Prefer packageUpdate with changes.visibility: "public" for the first publish. After that, packagePublishExternalPush / promote auto-advance the listing pin — you do not need a separate republish step. Before calling for a first publish, review the package for overly personal content (package_authoring visibility). If anything looks personal, stop, tell the user, suggest generalizing, and wait for explicit go-ahead. No license, logo, or Intent platform gates. Runtime uses published_commit. Listings owned by anyone are third-party code — review before forking.

Org permission: `package:publish`.

## Request body

- object
  - `package_id` string, required: Saved package id to publish as a public package.

## Response `200`

Success.

- object
  - `listing_id` string, required
  - `name` string, required
  - `kody_id` string, required
  - `description` string, required
  - `category` 'integrations' | 'examples' | 'productivity' | 'apps' | 'utilities' | 'other', required
  - `license` string, required
  - `version` string, nullable, required: package.json#version from the pinned listing snapshot, or null when the author did not set a string version.
  - `pinned_commit` string, required
  - `status` 'active' | 'delisted', required
  - `public_url` string, required: Canonical shareable user URL ({base}/@{username}/{package-name-leaf}); share this URL with humans.
  - `published_at` string, required

## 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)
