---
title: "List every node in the space carrying its own live public share"
method: GET
path: "/api/v1/node-shares"
tags: ["Nodes", "Sharing"]
---

# List every node in the space carrying its own live public share

`GET /api/v1/node-shares`

## Request

- Base URL: `https://api-docs.busabase.com`
- URL: `https://api-docs.busabase.com/api/v1/node-shares`
- Auth: none declared

## Response `200`

One row per node that someone explicitly published and that is still live — `scope: "public"` and unexpired — joined to just enough of the node (name, slug, type, icon) to render and open it. Rows the caller cannot see are omitted (same node-visibility ACL as `nodes.list`), and the stored share password is never returned, only a `hasPassword` flag. Deliberately does NOT include nodes that are merely reachable because an ANCESTOR is shared: this is the list of grants a person made, each revocable on its own with `nodes.share.disable`, which is the same set the workbench sidebar marks with a globe (`NodeVO.shared`).

- object[]
  - `nodeId` string, required
  - `name` string, required
  - `slug` string, required
  - `type` 'folder' | 'base' | 'skill' | 'drive' | 'airapp' | 'file' | 'doc' | 'form' | 'whiteboard' | 'workflow' | 'html', required
  - `icon` union
    - object
      - `type` unknown, required
      - `value` string, required
    - object
      - `type` unknown, required
      - `url` string, required
      - `attachmentId` string, required
      - `originalUrl` string
      - `originalAttachmentId` string
      - `crop` object
        - `x` number, required
        - `y` number, required
        - `zoom` number, required
  - `capability` 'read' | 'submit', required
  - `hasPassword` boolean, required
  - `expiresAt` string, required
  - `createdAt` string, required

---

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