{
  "opencollection": "1.0.0",
  "info": {
    "name": "GC AI External Chat Projects API",
    "version": "1.0.0"
  },
  "items": [
    {
      "info": {
        "name": "Projects",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List projects",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://app.gc.ai/api/external/v1/projects",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items to return (default 100, max 500)"
              },
              {
                "name": "offset",
                "value": "",
                "type": "query",
                "description": "Number of items to skip (default 0)"
              },
              {
                "name": "search",
                "value": "",
                "type": "query",
                "description": "Case-insensitive substring match on project name"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "List projects accessible to the caller, optionally filtered by name.\n\nWith a user-scoped key (`u:gcai_...`), the user sees projects they created, projects shared with them, and non-access-controlled projects. With an org-scoped key (`gcai_...`), only non-access-controlled (org-wide) projects are returned."
        },
        {
          "info": {
            "name": "Create a project",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://app.gc.ai/api/external/v1/projects",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Create a new project to group files, folders, and chats around a single matter (deal, vendor, or program).\n\nWith a user-scoped key, the caller is recorded as the project creator and granted admin access. With an org-scoped key, `creatorId` is null and the project defaults to non-access-controlled (org-wide)."
        },
        {
          "info": {
            "name": "Get a project",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://app.gc.ai/api/external/v1/projects/:id",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Retrieve a single project by ID. Returns the caller's access level alongside the project metadata."
        },
        {
          "info": {
            "name": "Update a project",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://app.gc.ai/api/external/v1/projects/:id",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Update a project's name, description, or custom instructions. Only the fields you supply are changed; omitted fields are left untouched. Pass `null` for `description` or `custom_instructions` to clear them.\n\nRequires write access to the project. Org-scoped keys can update non-access-controlled projects."
        },
        {
          "info": {
            "name": "Delete a project",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://app.gc.ai/api/external/v1/projects/:id",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Delete a project. Files, folders, and chats linked to the project are detached, not deleted — they remain in the organization and can be reattached elsewhere.\n\nRequires admin access to the project. Org-scoped keys can delete non-access-controlled projects."
        },
        {
          "info": {
            "name": "List files on a project",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/files",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items to return (default 100, max 500)"
              },
              {
                "name": "offset",
                "value": "",
                "type": "query",
                "description": "Number of items to skip (default 0)"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "List files directly linked to a project. Files reachable only via a linked folder are not included; list those folders separately with `GET /projects/{id}/folders`."
        },
        {
          "info": {
            "name": "Attach a file to a project",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/files",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Attach an already-uploaded file to a project. The file remains in its current folder; this only records the project link.\n\nRequires write access to the project and read access to the file. Org-scoped keys can attach non-access-controlled files to non-access-controlled projects."
        },
        {
          "info": {
            "name": "Detach a file from a project",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/files/:fileId",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              },
              {
                "name": "fileId",
                "value": "",
                "type": "path",
                "description": "The file ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Remove the link between a file and a project. The file itself is not deleted — it stays in the organization and can be reattached later. Idempotent: detaching a file that is not attached is a no-op.\n\nRequires write access to the project. Org-scoped keys can detach files from non-access-controlled projects."
        },
        {
          "info": {
            "name": "List folders linked to a project",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/folders",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items to return (default 100, max 500)"
              },
              {
                "name": "offset",
                "value": "",
                "type": "query",
                "description": "Number of items to skip (default 0)"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "List folders linked to a project. To enumerate the contents of a folder, call `GET /folders/{id}/children`."
        },
        {
          "info": {
            "name": "Attach a folder to a project",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/folders",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Link a folder to a project. Once attached, all files in the folder become available as project context. The folder is not moved or copied; only the project link is recorded.\n\nRequires write access to the project and read access to the folder. Idempotent: re-attaching an already-linked folder is a no-op. Org-scoped keys can attach non-access-controlled folders to non-access-controlled projects."
        },
        {
          "info": {
            "name": "Detach a folder from a project",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/folders/:folderId",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              },
              {
                "name": "folderId",
                "value": "",
                "type": "path",
                "description": "The folder ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Remove the link between a folder and a project. The folder itself is not deleted — it stays in the organization. Idempotent: detaching a folder that is not attached is a no-op.\n\nRequires write access to the project. Org-scoped keys can detach folders from non-access-controlled projects."
        },
        {
          "info": {
            "name": "Star a project",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/star",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Pin a project to the calling user's sidebar. Idempotent. Starring is per-user state (each user has their own starred set), so it requires a user-scoped key (`u:gcai_...`). Org-scoped keys carry no user identity and receive 422."
        },
        {
          "info": {
            "name": "Unstar a project",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/star",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Remove a project from the calling user's sidebar pins. Idempotent. Starring is per-user state (each user has their own starred set), so it requires a user-scoped key (`u:gcai_...`). Org-scoped keys carry no user identity and receive 422."
        },
        {
          "info": {
            "name": "List chats in a project",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://app.gc.ai/api/external/v1/projects/:id/chats",
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "The project ID"
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items to return (default 100, max 500)"
              },
              {
                "name": "offset",
                "value": "",
                "type": "query",
                "description": "Number of items to skip (default 0)"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "List chats associated with a project. Returns chat metadata only. Per-chat message retrieval is not exposed via the API."
        }
      ]
    }
  ],
  "bundled": true
}