Skip to main content
POST
Call page.list_files

Authorizations

Authorization
string
header
required

An API key minted at Settings › API & MCP. Send it as Authorization: Bearer <key>. A key carries its holder's own permissions, resolved on every call — revoking a membership closes the key's reach immediately. Keep it in an environment variable (GOOSY_API_KEY), never in a committed file.

Headers

x-request-id
string

Your own id for this request, echoed back and recorded on the audit trail. 1–128 characters from A–Z a–z 0–9 . _ : -, starting with a letter or digit; anything else is replaced by a generated id.

Maximum string length: 128

Body

application/json
site_id
string<uuid>

The site to act on, as a site UUID from page.list. On a site's own page, leave it out where this schema makes it optional: the call acts on the site open there, unless the member names another site. On any other screen (Analytics, the desk, Connections) no site is open, so pass it: call page.list with name set to the site the member named and pass the site_id it returns. When they named no site, call page.list without a name: pass the one site's id when the brand has one, and ask which site they mean when it has several. Never pass an id you composed, or one that names a board, thread or other object.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
path_prefix
string

Optional. List only the paths that start with this — app/, components/, src/pages/. Use it on a large project to walk one directory at a time; omit it for the first call, which shows the top of the tree and the true total.

Maximum string length: 1024
cursor
string

Optional. Where to continue: when a result carries next_cursor there are more files — call again with cursor set to it and the same site_id, path_prefix and contains to read the rest. Omit it for the first page. Never guess a path you have not seen listed; page or narrow instead.

Minimum string length: 1
contains
string

Optional. Find WHERE some words live: only the text files whose contents contain this (case-insensitive, within one line) are listed, each with match_line and match_text — the first line it appears on. Use a short fragment of the words that are on the page NOW, e.g. 'Sept 22' to find the date a member asked to change; then page.read_file that file around match_line. total counts the matching files.

Required string length: 1 - 1024
workspace
string

Which workspace to run in — its slug. Omit to use your default. With more than one reachable workspace and no default, the call is refused and the choices are listed.

Minimum string length: 1

Response

The call was admitted and dispatched. ok says whether the tool succeeded — a refusal the tool itself produced is still a 200, exactly as it is a successful JSON-RPC result over MCP.

The tool ran and answered.

ok
boolean
required
site_id
string<uuid>
required
Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
kind
enum<string>
required
Available options:
source_snapshot,
no_source_snapshot
can_write
boolean
required
files
object[]
required
truncated
boolean
required
total
integer
required
Required range: x >= 0
workspace
string
required

The slug of the workspace this call ran in.

working_in
object
required

Which workspace this call ran in, and how that was decided. Present on every workspace-scoped result.

source_ref
string
reason
enum<string>
Available options:
bundle,
not_generated
next_cursor
string