---
title: "Publish an active repo session back to the source repo after checks pass on the current tree and the base commit is s..."
method: POST
path: "/v1/repo-sessions/{session_id}/publish"
tags: ["repos"]
---

# Publish an active repo session back to the source repo after checks pass on the current tree and the base commit is s...

`POST /v1/repo-sessions/{session_id}/publish`

## Request

- Base URL: `https://api.kody.codes`
- URL: `https://api.kody.codes/v1/repo-sessions/{session_id}/publish`
- Auth: HTTP bearer

Publish an active repo session back to the source repo after checks pass on the current tree and the base commit is still current. Visibility is a repo setting (`packageUpdate` / `repoUpdate`), not package.json#private. When publishing a community fork after absorbing origin updates, pass absorbed_upstream_commit.

Org permission: `package:write`.

## Path parameters

- `session_id` string, required: Active repo session id from repoOpenSession or repoListSessions.

## Request body

- object
  - `confirm_private_visibility_change` boolean: Unused. Visibility is a repo setting via packageUpdate, not package.json#private.
  - `absorbed_upstream_commit` string: When publishing a community fork after porting (or skipping) origin updates, pass origin HEAD so the behind-upstream banner clears. Does not copy files.

## Response `200`

Success.

- union
  - object
    - `status` 'ok', required
    - `session_id` string, required
    - `published_commit` string, required
    - `message` string, required
    - `package_shaped` boolean
    - `notice` string, nullable
  - object
    - `status` 'checks_outdated', required
    - `session_id` string, required
    - `published_commit` unknown, required
    - `message` string, required
  - object
    - `status` 'base_moved', required
    - `session_id` string, required
    - `published_commit` unknown, required
    - `message` string, required
    - `repair_hint` 'repoRebaseSession', required
    - `session_base_commit` string, required
    - `current_published_commit` string, nullable, required
  - object
    - `status` 'locked', required
    - `session_id` string, required
    - `published_commit` unknown, required
    - `pending_commit` string, required: Full 40-character SHA-1 to promote. Do not abbreviate it.
    - `current_published_commit` string, nullable, required
    - `approval_url` string, required: Owner page for pending_commit. The commit query is that full 40-character SHA-1.
    - `message` string, required
  - object
    - `status` 'approval_required', required
    - `session_id` string, required
    - `published_commit` unknown, required
    - `pending_commit` string, required
    - `current_published_commit` string, nullable, required
    - `approval_url` string, required
    - `approval_bundle_url` string: Present when other paused publishes also wait on the owner: one page that approves them together.
    - `credential_need_changes` union[], required
      - union
        - object
          - `key` string, required
          - `change` 'added', required
          - `after` object, required
            - `kind` 'secret' | 'oauth' | 'mcp' | 'url' | 'login' | 'signing': Omitted when the need accepts any fetch-capable credential for the provider.
            - `provider` string, required
            - `multiple` boolean, required
          - `from` string: The dependency that declared an inherited need.
        - object
          - `key` string, required
          - `change` 'changed', required
          - `before` object, required
            - `kind` 'secret' | 'oauth' | 'mcp' | 'url' | 'login' | 'signing': Omitted when the need accepts any fetch-capable credential for the provider.
            - `provider` string, required
            - `multiple` boolean, required
          - `after` object, required
            - `kind` 'secret' | 'oauth' | 'mcp' | 'url' | 'login' | 'signing': Omitted when the need accepts any fetch-capable credential for the provider.
            - `provider` string, required
            - `multiple` boolean, required
          - `from` string: The dependency that declared an inherited need.
    - `message` 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/705f4f022728?raw)
