{ "opencollection": "1.0.0", "info": { "name": "GC AI External Chat Files API", "version": "1.0.0" }, "items": [ { "info": { "name": "Files", "type": "folder" }, "items": [ { "info": { "name": "Search files", "type": "http" }, "http": { "method": "GET", "url": "https://app.gc.ai/api/external/v1/files", "params": [ { "name": "q", "value": "", "type": "query", "description": "Search query (required)" }, { "name": "scope", "value": "", "type": "query", "description": "Optional scope filter. When omitted, searches all files the user can read." } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Hybrid (vector + keyword) search across accessible files. Results are ranked by relevance and capped at 100.\n\nUser-scoped keys search all files the user can read. Org-scoped keys search all non-access-controlled files in the organization.\n\nPass `scope` (user-scoped keys only) to constrain the search to one of the three top-level meta-collections shown in the GC AI UI:\n- `my-files`: files in the user's personal \"My Files\" tree\n- `shared-with-me`: files explicitly shared with the user (and files i" }, { "info": { "name": "Upload a file", "type": "http" }, "http": { "method": "POST", "url": "https://app.gc.ai/api/external/v1/files", "body": { "type": "multipart-form", "data": [] }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Upload a file to GC AI for processing and storage. Files are uploaded as multipart form data and automatically processed (text extraction, summarization, and embedding creation).\n\nWith a user-scoped key, files default to the user's \"My Files\" folder. With an org-scoped key, files default to the \"Organization Files\" folder and the `my-files` scope is not available.\n\nFor PDFs and Word documents, extraction runs asynchronously. Poll `GET /files/{id}` until `status` is `ready`." }, { "info": { "name": "Get file status", "type": "http" }, "http": { "method": "GET", "url": "https://app.gc.ai/api/external/v1/files/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "The file ID" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Retrieve the current status and metadata of an uploaded file. Use this to poll for extraction completion after uploading a file." }, { "info": { "name": "Move a file", "type": "http" }, "http": { "method": "PATCH", "url": "https://app.gc.ai/api/external/v1/files/:id", "params": [ { "name": "id", "value": "", "type": "path", "description": "The file ID" } ], "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Move a file to a different folder by updating its `folder_id`. Org-scoped keys can move non-access-controlled files to non-access-controlled destination folders." }, { "info": { "name": "Initiate a chunked upload", "type": "http" }, "http": { "method": "POST", "url": "https://app.gc.ai/api/external/v1/files/uploads", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Start a multipart upload session for a large file. Validates the file type, size, and destination up front, then returns an `upload_id`. Send the file in parts with `PUT /files/uploads/{upload_id}/parts/{part_number}`, then finalize with `POST /files/uploads/{upload_id}/complete`.\n\nUse this instead of `POST /files` when a single request is impractical (large files, or clients with per-request payload limits). The destination options (`folder_id` / `project_id` / `scope`) behave exactly as on `PO" }, { "info": { "name": "Upload a file part", "type": "http" }, "http": { "method": "PUT", "url": "https://app.gc.ai/api/external/v1/files/uploads/:upload_id/parts/:part_number", "params": [ { "name": "upload_id", "value": "", "type": "path", "description": "The upload session ID from initiate." }, { "name": "part_number", "value": "", "type": "path", "description": "Part index, from 1 to 32." } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Upload one part of a chunked upload. The request body is the raw bytes of the part (`application/octet-stream`). Parts may be uploaded in any order; re-sending the same `part_number` overwrites it, so a failed part is safe to retry." }, { "info": { "name": "Complete a chunked upload", "type": "http" }, "http": { "method": "POST", "url": "https://app.gc.ai/api/external/v1/files/uploads/:upload_id/complete", "params": [ { "name": "upload_id", "value": "", "type": "path", "description": "The upload session ID from initiate." } ], "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Assemble the uploaded parts into the final file and start processing (text extraction, summarization, embeddings), returning the same file object as `POST /files`. For PDFs and Word documents, extraction runs asynchronously — poll `GET /files/{id}` until `status` is `ready`." }, { "info": { "name": "Abort a chunked upload", "type": "http" }, "http": { "method": "DELETE", "url": "https://app.gc.ai/api/external/v1/files/uploads/:upload_id", "params": [ { "name": "upload_id", "value": "", "type": "path", "description": "The upload session ID from initiate." } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Discard an in-flight upload session and delete any parts already uploaded. Idempotent: aborting an unknown or already-finalized session still returns success." } ] } ], "bundled": true }