---
title: "Get a project with its folders + files"
method: GET
path: "/api/v1/projects/{id}"
tags: ["workspace"]
---

# Get a project with its folders + files

`GET /api/v1/projects/{id}`

## Request

- Base URL: `https://mdtidy.com`
- URL: `https://mdtidy.com/api/v1/projects/{id}`
- Auth: HTTP bearer

## Query parameters

- `include_archived` boolean

## Response `200`

Project + folders + files.

- object
  - `id` string, uuid, required
  - `type` 'project', required
  - `name` string, required
  - `description` string, nullable, required
  - `file_count` integer, required
  - `folder_count` integer, required
  - `archived` boolean, required
  - `visibility` 'private' | 'public' | 'restricted', required
  - `public_url` string, nullable, required: `https://mdtidy.com/p/{slug}` when public; null otherwise.
  - `shared_by` string, nullable: Owner display name; only on scope=shared items.
  - `created_at` string, required
  - `updated_at` string, required
  - `folders` Folder[]
    - `id` string, uuid, required
    - `type` 'folder', required
    - `project_id` string, uuid, required
    - `parent_id` string, uuid, required: Immediate parent: the project id (root folder) or another folder id.
    - `name` string, required
    - `created_at` string, required
    - `updated_at` string, required
  - `files` File[]
    - `id` string, uuid, required
    - `type` 'file', required
    - `project_id` string, uuid, required
    - `folder_id` string, uuid, nullable, required
    - `folder_path` object[]: Top-down folder ancestry (excludes project + file); [] at the project root. Returned by GET /v1/files/{id} and POST /v1/files.
      - `id` string, uuid, required
      - `name` string, required
    - `name` string, required
    - `archived` boolean, required
    - `version` integer, required
    - `etag` string, required: Quoted version; mirrors the ETag header.
    - `last_opened_at` string, nullable, required
    - `created_at` string, required
    - `updated_at` string, required
    - `credits_remaining` integer
    - `content` string: Markdown body; returned by GET /v1/files/{id}.
    - `after_md_gcs` string, nullable
    - `rendered_html_gcs` string, nullable

## Other responses

- `401`: X-API-KEY is malformed, unknown, or revoked.
- `404`: Resource not found, or not owned by the caller (IDOR-safe).
- `429`: Per-key rate limit (60/min) exceeded.

---

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