{"openapi":"3.0.3","info":{"title":"Copera Public API","version":"1.0.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Bearer token"}},"schemas":{}},"paths":{"/public/v1/board/list-boards":{"get":{"summary":"List Boards","tags":["API Reference","public","board"],"description":"List all boards the integration has access to within the workspace.","parameters":[{"schema":{"maxLength":200,"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive search query."}],"x-mint":{"metadata":{"title":"List All Boards","description":"Retrieve all boards accessible to your integration"},"content":"## Overview\n\nThis endpoint returns a list of all boards that your integration has access to within the workspace.\n\nPass `q` to filter by board name or description.\n\n## Response\n\nReturns an array of board objects, each containing:\n- Board ID\n- Name and description\n- Creation and update timestamps","mcp":{"enabled":true,"name":"list_boards","description":"List all boards in the workspace"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst boards = await copera.board.listBoards();\nconsole.log(boards);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","createdAt","updatedAt"]}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}":{"get":{"summary":"Get Board","tags":["API Reference","public","board"],"description":"Retrieve details of a specific board using its boardId.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Board Details","description":"Retrieve detailed information about a specific board"},"content":"## Prerequisites\n\n- Valid API key with board read permissions\n- Board ID of the board you want to retrieve\n\n## Parameters\n\n- `boardId`: A 24-character hexadecimal ObjectId identifying the board","mcp":{"enabled":true,"name":"get_board","description":"Get details of a specific board by ID"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst board = await copera.board.getBoardDetails('board_id_here');\nconsole.log(board);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/tables":{"get":{"summary":"List Board Tables","tags":["API Reference","public","board","table"],"description":"Retrieve all tables associated with the specified board.","parameters":[{"schema":{"maxLength":200,"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive search query."},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"List Board Tables","description":"Get all tables within a board"},"content":"## Overview\n\nReturns all tables associated with the specified board. Each table contains columns that define the structure of data.\n\nPass `q` to filter by table name.\n\n## Response\n\nReturns an array of table objects with:\n- Table ID and name\n- Associated board ID\n- Column definitions (columnId, label, type, order, options)\n- Timestamps\n\nNote: For STATUS, DROPDOWN, and LABELS columns, an `options` array is included with each option containing optionId, label, color, order, and statusGroup (for STATUS columns only).","mcp":{"enabled":true,"name":"list_board_tables","description":"List all tables in a board"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst tables = await copera.board.listBoardTables('board_id_here');\nconsole.log(tables);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"board":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"order":{"type":"number"},"options":{"description":"Options for STATUS, DROPDOWN, or LABELS column types","type":"array","items":{"type":"object","properties":{"optionId":{"description":"Unique identifier for the option","type":"string"},"label":{"description":"Display label for the option","type":"string"},"color":{"description":"Color code for the option (e.g., RED, BLUE, GREEN)","type":"string"},"order":{"description":"Sort order of the option","type":"number"},"statusGroup":{"description":"Status group classification (only for STATUS columns)","anyOf":[{"type":"string","enum":["TODO"]},{"type":"string","enum":["IN_PROGRESS"]},{"type":"string","enum":["DONE"]}]}},"required":["optionId","order"]}}},"required":["columnId","label","type"]}}},"required":["_id","name","board","createdAt","updatedAt","columns"]}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}":{"get":{"summary":"Get Board Table","tags":["API Reference","public","board","table"],"description":"Retrieve details of a specific table inside a board using boardId and tableId.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Table Details","description":"Retrieve detailed information about a specific table"},"content":"## Prerequisites\n\n- Valid API key with board read permissions\n- Board ID and Table ID\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The specific table to retrieve\n\n## Response\n\nReturns table details including column definitions and metadata. For STATUS, DROPDOWN, and LABELS columns, an `options` array is included.","mcp":{"enabled":true,"name":"get_board_table","description":"Get details of a specific table in a board"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst table = await copera.board.getBoardTable({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here'\n});\nconsole.log(table);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"board":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"order":{"type":"number"},"options":{"description":"Options for STATUS, DROPDOWN, or LABELS column types","type":"array","items":{"type":"object","properties":{"optionId":{"description":"Unique identifier for the option","type":"string"},"label":{"description":"Display label for the option","type":"string"},"color":{"description":"Color code for the option (e.g., RED, BLUE, GREEN)","type":"string"},"order":{"description":"Sort order of the option","type":"number"},"statusGroup":{"description":"Status group classification (only for STATUS columns)","anyOf":[{"type":"string","enum":["TODO"]},{"type":"string","enum":["IN_PROGRESS"]},{"type":"string","enum":["DONE"]}]}},"required":["optionId","order"]}}},"required":["columnId","label","type"]}}},"required":["_id","name","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/rows":{"get":{"summary":"List Table Rows","tags":["API Reference","public","board","table","row"],"description":"Retrieve all rows belonging to the specified table inside a board. Supports optional filter and sort query parameters.","parameters":[{"schema":{"maxLength":200,"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive row search across searchable table columns."},{"schema":{"type":"string"},"in":"query","name":"filter","required":false,"description":"JSON filter as a string, e.g. {\"match\":\"and\",\"conditions\":[{\"column_id\":\"…\",\"operator\":\"contains\",\"value\":\"foo\"}]}. See the list-table-rows endpoint docs for the full operator catalog."},{"schema":{"type":"string"},"in":"query","name":"sort","required":false,"description":"Comma-separated sort spec, e.g. \"col_a:asc,col_b:desc\". Defaults to no sorting."},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"List Table Rows","description":"Get rows from a table, optionally filtered and sorted"},"content":"## Overview\n\nRetrieves rows (records) from the specified table. Each row contains values for the table's columns.\n\nYou can optionally search, filter, and sort the result with the `q`, `filter`, and `sort` query parameters.\n\n## Search\n\nPass `q` to run a case-insensitive search across searchable table columns. This uses the same indexed table search path as the web grid.\n\n## Filtering\n\nPass a JSON object as the `filter` query parameter:\n\n```json\n{\n  \"match\": \"and\",\n  \"conditions\": [\n    { \"column_id\": \"col_abc\", \"operator\": \"contains\", \"value\": \"foo\" },\n    { \"column_id\": \"col_xyz\", \"operator\": \"between\", \"value\": [\"2026-01-01\", \"2026-12-31\"] },\n    { \"column_id\": \"col_empty\", \"operator\": \"is_empty\" }\n  ]\n}\n```\n\n- `match`: `\"and\"` (default) or `\"or\"` — how to combine multiple conditions.\n- `conditions[]`: up to 20 conditions. Each has `column_id`, `operator`, and (for most operators) `value`.\n\n### Operators by column type\n\n| Column type | Operators |\n|---|---|\n| string | `equals`, `not_equals`, `contains`, `not_contains`, `starts_with`, `ends_with`, `is_empty`, `is_not_empty` |\n| number | `equals`, `not_equals`, `gt`, `gte`, `lt`, `lte`, `includes`, `not_includes`, `is_empty`, `is_not_empty` |\n| select (status / dropdown / labels) | `equals`, `not_equals`, `includes`, `not_includes`, `is_empty`, `is_not_empty` |\n| bool | `equals`, `not_equals`, `is_empty`, `is_not_empty` |\n| date | `equals`, `before`, `after`, `between`, `today`, `yesterday`, `tomorrow`, `next_7_days`, `last_7_days`, `current_week`, `last_week`, `next_week`, `current_month`, `last_month`, `next_month`, `is_empty`, `is_not_empty` |\n\n### Value shape\n\n- string operators take a string `value`.\n- number operators take a number `value`; `includes` / `not_includes` take `number[]`.\n- select operators take a single string or `string[]` of option IDs.\n- date `equals`/`before`/`after` take an ISO date string; `between` takes a `[startISO, endISO]` tuple; the relative operators (`today`, `current_week`, ...) take no `value`.\n- `is_empty` / `is_not_empty` take no `value`.\n\n## Sorting\n\nPass a comma-separated spec as the `sort` query parameter:\n\n```\nsort=col_a:asc,col_b:desc\n```\n\nEach entry is `<columnId>:asc` or `<columnId>:desc`. Sorting by password columns is not allowed.\n\n## Response\n\nReturns an array of row objects with:\n- Row ID and internal rowId number\n- Owner and timestamps\n- Column values (columnId and value pairs)","mcp":{"enabled":true,"name":"list_table_rows","description":"List rows in a table, optionally filtered and sorted via the filter and sort query parameters"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst rows = await copera.board.listTableRows({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  filter: {\n    match: 'and',\n    conditions: [\n      { column_id: 'col_status', operator: 'equals', value: ['opt_done'] },\n      { column_id: 'col_due',    operator: 'before', value: '2026-12-31' }\n    ]\n  },\n  sort: [{ column: 'col_due', dir: 'asc' }]\n});\nconsole.log(rows);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}":{"get":{"summary":"Get Table Row","tags":["API Reference","public","board","table","row"],"description":"Retrieve a single row using boardId, tableId, and the row's internal ObjectId.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Table Row","description":"Retrieve a specific row from a table"},"content":"## Prerequisites\n\n- Valid API key with board read permissions\n- Board ID, Table ID, and Row ID\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The specific row to retrieve\n\n## Response\n\nReturns a single row object with all column values.","mcp":{"enabled":true,"name":"get_table_row","description":"Get a specific row from a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst row = await copera.board.getTableRow({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here'\n});\nconsole.log(row);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"patch":{"summary":"Update Table Row","tags":["API Reference","public","board","table","row"],"description":"Update column values of an existing row in a table.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"value":{"description":"Cell value. Shape depends on the column type. For LINK columns, value MUST be an array of row id strings (`[]` clears the link); each id must exist in the LINK column's target table and belong to the same workspace."}},"required":["columnId","value"]}}},"required":["columns"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Table Row","description":"Update column values of a row in a table"},"content":"## Overview\n\nUpdates column values of an existing row in the specified table. Only the provided columns will be updated; other columns remain unchanged.\n\n## Request Body\n\n- `columns` (array, required): Array of column values to update\n  - `columnId`: The ID of the column to update\n  - `value`: The new value for that column (type depends on column definition)\n\n## Response\n\nReturns the updated row object with all column values.","mcp":{"enabled":true,"name":"update_table_row","description":"Update column values of a row in a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst updatedRow = await copera.board.updateTableRow({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  columns: [\n    {\n      columnId: 'column_id_1',\n      value: 'Updated Value'\n    }\n  ]\n});\nconsole.log(updatedRow);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"delete":{"summary":"Delete Table Row","tags":["API Reference","public","board","table","row"],"description":"Delete a row from a table.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Delete Table Row","description":"Delete a row from a table"},"content":"## Overview\n\nDeletes a row (record) from the specified table. This action is permanent.\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row to delete\n\n## Response\n\nReturns a success confirmation.","mcp":{"enabled":true,"name":"delete_table_row","description":"Delete a row from a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst result = await copera.board.deleteTableRow({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here'\n});\nconsole.log(result);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row-number/{rowNumber}":{"get":{"summary":"Get Table Row by Row Number","tags":["API Reference","public","board","table","row"],"description":"Retrieve a single row using boardId, tableId, and the visible numeric row ID shown in the table.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[1-9][0-9]*$","type":"string"},"in":"path","name":"rowNumber","required":true,"description":"The visible numeric row ID shown in the table, for example 42."}],"x-mint":{"metadata":{"title":"Get Table Row by Row Number","description":"Retrieve a table row by its visible row number"},"content":"## Prerequisites\n\n- Valid API key with board read permissions\n- Board ID, Table ID, and the visible numeric row ID\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowNumber`: The visible numeric row ID shown in the table, for example `42`\n\n## Response\n\nReturns the same row object shape as the internal ObjectId row lookup.","mcp":{"enabled":true,"name":"get_table_row_by_row_number","description":"Get a specific row from a table by visible row number"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst row = await copera.board.getTableRowByRowNumber({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowNumber: 42\n});\nconsole.log(row);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row":{"post":{"summary":"Create Table Row","tags":["API Reference","public","board","table","row"],"description":"Create a new row in a table by providing optional markdown content for the row description and optional column values.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"description":"Optional markdown content for the row description. Sets the row description on creation.","type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"value":{"description":"Cell value. Shape depends on the column type. For LINK columns, value MUST be an array of row id strings (`[]` clears the link); each id must exist in the LINK column's target table and belong to the same workspace. For RICH TEXT columns, value MUST be a markdown string — it seeds the cell's rich text content (applied asynchronously)."}},"required":["columnId","value"]}}},"required":["columns"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Create Table Row","description":"Add a new row to a table"},"content":"## Overview\n\nCreates a new row (record) in the specified table with optional markdown content for the row description and column values.\n\n## Request Body\n\n- `description` (optional): Markdown content for the row description. Sets the row's description on creation.\n- `columns` (array): Array of column values\n  - `columnId`: The ID of the column\n  - `value`: The value for that column (type depends on column definition)\n\n## Response\n\nReturns the newly created row object with generated ID and timestamps.","mcp":{"enabled":true,"name":"create_table_row","description":"Create a new row in a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst newRow = await copera.board.createTableRow({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  columns: [\n    {\n      columnId: 'column_id_1',\n      value: 'Value 1'\n    },\n    {\n      columnId: 'column_id_2',\n      value: 'Value 2'\n    }\n  ],\n  description: '# Row description\\nOptional markdown content.'\n});\nconsole.log(newRow);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/md":{"get":{"summary":"Get Row Description","tags":["API Reference","public","board","table","row"],"description":"Retrieve the markdown description of a row.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Row Description","description":"Retrieve row description content as markdown"},"content":"## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row whose description to retrieve\n\n## Response\n\nReturns an object with a `content` field containing the markdown body of the row description.","mcp":{"enabled":true,"name":"get_row_description","description":"Get the markdown description of a row in a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst { content } = await copera.board.getRowDescription({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here'\n});\nconsole.log(content);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"post":{"summary":"Update Row Description","tags":["API Reference","public","board","table","row"],"description":"Replace, append, or prepend markdown content to a row's description. Content updates are queued asynchronously.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"description":"Content operation type","anyOf":[{"type":"string","enum":["replace"]},{"type":"string","enum":["append"]},{"type":"string","enum":["prepend"]}]},"content":{"description":"Markdown content","type":"string"}},"required":["operation","content"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Row Description","description":"Replace, append, or prepend markdown content to a row description"},"content":"## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row to update\n\n## Request Body\n\n- `operation` (required): One of `replace`, `append`, or `prepend`\n- `content` (required): The markdown content\n\n## Notes\n\nContent updates are processed asynchronously through a queue. The endpoint returns HTTP 202 immediately.","mcp":{"enabled":true,"name":"update_row_description","description":"Update the markdown description of a row in a table"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst result = await copera.board.updateRowDescription({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  operation: 'replace',\n  content: '# Updated description\\nNew content here.'\n});\nconsole.log(result);"}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}},"required":["success","message"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/column/{columnId}/md":{"get":{"summary":"Get Rich Text Column Content","tags":["API Reference","public","board","table","row","column"],"description":"Retrieve the markdown content of a RICH TEXT column cell on a row.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"columnId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Rich Text Column Content","description":"Retrieve a row's RICH TEXT column cell content as markdown"},"content":"## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row whose cell to retrieve\n- `columnId`: The RICH TEXT column whose content to retrieve\n\n## Response\n\nReturns an object with a `content` field containing the markdown body of the rich text cell (empty string when the cell has no content).","mcp":{"enabled":true,"name":"get_rich_text_column_content","description":"Get the markdown content of a RICH TEXT column cell on a row"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst { content } = await copera.board.getRichTextColumnContent({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  columnId: 'column_id_here'\n});\nconsole.log(content);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"post":{"summary":"Update Rich Text Column Content","tags":["API Reference","public","board","table","row","column"],"description":"Replace, append, or prepend markdown content to a RICH TEXT column cell on a row. Content updates are queued asynchronously.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"description":"Content operation type","anyOf":[{"type":"string","enum":["replace"]},{"type":"string","enum":["append"]},{"type":"string","enum":["prepend"]}]},"content":{"description":"Markdown content","type":"string"}},"required":["operation","content"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"columnId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Rich Text Column Content","description":"Replace, append, or prepend markdown content to a RICH TEXT column cell"},"content":"## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row to update\n- `columnId`: The RICH TEXT column to update\n\n## Request Body\n\n- `operation` (required): One of `replace`, `append`, or `prepend`\n- `content` (required): The markdown content\n\n## Notes\n\nContent updates are processed asynchronously through a queue. The endpoint returns HTTP 202 immediately.","mcp":{"enabled":true,"name":"update_rich_text_column_content","description":"Update the markdown content of a RICH TEXT column cell on a row"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst result = await copera.board.updateRichTextColumnContent({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  columnId: 'column_id_here',\n  operation: 'replace',\n  content: '# Section\\nNew content here.'\n});\nconsole.log(result);"}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}},"required":["success","message"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/column/{columnId}/file/{fileId}/download":{"get":{"summary":"Download File Column Attachment","tags":["API Reference","public","board","table","row","file"],"description":"Download a FILE-column attachment from a specific row and column.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"columnId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"fileId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Download File Column Attachment","description":"Download a file attached to a row's FILE column"},"content":"## Overview\n\nDownloads a file attached to a FILE column on a specific table row. The file is only returned when the authenticated integration can access the board, table, row, and the requested `fileId` is present in that row's `columnId` cell.\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row containing the attachment\n- `columnId`: The FILE column containing the attachment\n- `fileId`: The attachment file ID to download\n\n## Response\n\nReturns the file bytes directly with `Content-Type` and `Content-Disposition` headers. This endpoint does not return a signed URL."},"x-codeSamples":[{"lang":"curl","source":"curl -L \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -o attachment.bin \\\n  \"https://api.copera.ai/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/column/{columnId}/file/{fileId}/download\""}],"responses":{"200":{"description":"Binary file bytes. The response includes Content-Type and Content-Disposition headers.","content":{"application/json":{"schema":{"description":"Binary file bytes. The response includes Content-Type and Content-Disposition headers."}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comments":{"get":{"summary":"List Row Comments","tags":["API Reference","public","board","table","row","comment"],"description":"Retrieve all comments for a specific row with pagination and optional visibility filtering.","parameters":[{"schema":{"type":"string"},"in":"query","name":"after","required":false,"description":"Cursor for pagination (comment ID to fetch after)"},{"schema":{"type":"string"},"in":"query","name":"before","required":false,"description":"Cursor for pagination (comment ID to fetch before)"},{"schema":{"anyOf":[{"type":"string","enum":["all"]},{"type":"string","enum":["internal"]},{"type":"string","enum":["external"]}]},"in":"query","name":"visibility","required":false,"description":"Filter comments by visibility. Defaults to all."},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"List Row Comments","description":"Retrieve comments for a table row"},"content":"## Overview\n\nRetrieves all comments for a specific row in a table, with cursor-based pagination and optional visibility filtering.\n\n## Query Parameters\n\n- `after` (optional): Comment ID cursor to fetch comments after\n- `before` (optional): Comment ID cursor to fetch comments before\n- `visibility` (optional): Filter by visibility - `all`, `internal`, or `external`. Defaults to `all`.\n\n## Response\n\nReturns a paginated list of comments with:\n- Comment ID, content, and content type\n- Visibility (internal or external)\n- Author details (_id, name, picture, email)\n- Optional attachment metadata (fileId, name, mimeType, size)\n- Timestamps","mcp":{"enabled":true,"name":"list_row_comments","description":"List all comments for a table row"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst comments = await copera.board.listRowComments({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  visibility: 'all'\n});\nconsole.log(comments);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"content":{"type":"string"},"contentType":{"type":"string"},"visibility":{"anyOf":[{"type":"string","enum":["internal"]},{"type":"string","enum":["external"]}]},"author":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"picture":{"type":"string"},"email":{"type":"string"}},"required":["_id"]},"attachment":{"type":"object","properties":{"fileId":{"type":"string"},"name":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"}},"required":["fileId","name","mimeType","size"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","contentType","visibility","author","createdAt","updatedAt"]}},"pageInfo":{"type":"object","properties":{"endCursor":{"nullable":true,"type":"string"},"startCursor":{"nullable":true,"type":"string"},"hasNextPage":{"type":"boolean"},"hasPreviousPage":{"type":"boolean"}},"required":["endCursor","startCursor","hasNextPage","hasPreviousPage"]}},"required":["items","pageInfo"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comment/{commentId}/file/{fileId}/download":{"get":{"summary":"Download Row Comment Attachment","tags":["API Reference","public","board","table","row","comment","file"],"description":"Download an attachment from a specific row comment in board, table, row, and comment context.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"commentId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"fileId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Download Row Comment Attachment","description":"Download a file attached to a row comment"},"content":"## Overview\n\nDownloads a file attached to a specific row comment. The file is only returned when the authenticated integration can access the board, table, and row, the comment belongs to that exact context, and `fileId` matches the comment attachment.\n\n## Parameters\n\n- `boardId`: The board containing the table\n- `tableId`: The table containing the row\n- `rowId`: The row containing the comment\n- `commentId`: The comment containing the attachment\n- `fileId`: The attachment file ID to download\n\n## Response\n\nReturns the file bytes directly with `Content-Type` and `Content-Disposition` headers. This endpoint does not return a signed URL."},"x-codeSamples":[{"lang":"curl","source":"curl -L \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -o attachment.bin \\\n  \"https://api.copera.ai/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comment/{commentId}/file/{fileId}/download\""}],"responses":{"200":{"description":"Binary file bytes. The response includes Content-Type and Content-Disposition headers.","content":{"application/json":{"schema":{"description":"Binary file bytes. The response includes Content-Type and Content-Disposition headers."}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comment":{"post":{"summary":"Create Row Comment","tags":["API Reference","public","board","table","row","comment"],"description":"Add a new text comment to a specific row with visibility control.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"description":"The comment text content (HTML supported)","type":"string"},"visibility":{"description":"Comment visibility. Defaults to internal.","anyOf":[{"type":"string","enum":["internal"]},{"type":"string","enum":["external"]}]}},"required":["content"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"rowId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Create Row Comment","description":"Add a comment to a table row"},"content":"## Overview\n\nCreates a new text comment on a specific row. Comments can be internal (visible only to workspace members) or external (visible to everyone including guests).\n\n## Request Body\n\n- `content` (required): The comment text content (HTML supported)\n- `visibility` (optional): `internal` or `external`. Defaults to `internal`.\n\n## Response\n\nReturns the created comment object with author details.","mcp":{"enabled":true,"name":"create_row_comment","description":"Add a comment to a table row"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst comment = await copera.board.createRowComment({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  rowId: 'row_id_here',\n  content: 'This is a comment',\n  visibility: 'internal'\n});\nconsole.log(comment);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"content":{"type":"string"},"contentType":{"type":"string"},"visibility":{"anyOf":[{"type":"string","enum":["internal"]},{"type":"string","enum":["external"]}]},"author":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"picture":{"type":"string"},"email":{"type":"string"}},"required":["_id"]},"attachment":{"type":"object","properties":{"fileId":{"type":"string"},"name":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"}},"required":["fileId","name","mimeType","size"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","contentType","visibility","author","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/row/authenticate":{"post":{"summary":"Authenticate Table Row","tags":["API Reference","public","board","table","row","auth"],"description":"Authenticate a row using an identifier column (email, username, etc.) and a password column.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"identifierColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"identifierColumnValue":{"type":"string"},"passwordColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"passwordColumnValue":{"type":"string"}},"required":["identifierColumnId","identifierColumnValue","passwordColumnId","passwordColumnValue"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"boardId","required":true,"description":"ObjectId"},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Authenticate Table Row","description":"Authenticate using column values as credentials"},"content":"## Overview\n\nAuthenticate a table row by matching an identifier column value and verifying a password column.\nThis enables building custom authentication systems using board tables.\n\n## Request Body\n\n- `identifierColumnId`: The ID of the column to search by (e.g., email, username column)\n- `identifierColumnValue`: The value to match in that column\n- `passwordColumnId`: The ID of the password column\n- `passwordColumnValue`: The plaintext password to verify\n\n## Response\n\nReturns the authenticated row if credentials are valid. Password columns are masked.\n\n## Errors\n\n- 400: No row found with the provided identifier\n- 401: Invalid password","mcp":{"enabled":true,"name":"authenticate_table_row","description":"Authenticate a row using identifier and password columns"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nconst row = await copera.board.authenticateTableRow({\n  boardId: 'board_id_here',\n  tableId: 'table_id_here',\n  identifierColumnId: 'email_column_id',\n  identifierColumnValue: 'user@example.com',\n  passwordColumnId: 'password_column_id',\n  passwordColumnValue: 'user_password'\n});\nconsole.log(row);"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"owner":{"type":"string"},"table":{"type":"string"},"board":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"columnId":{"type":"string"},"value":{},"linkValue":{},"lookupValue":{"type":"array","items":{"type":"object","properties":{"foreignRowId":{"type":"string"},"foreignRowValue":{}},"required":["foreignRowId","foreignRowValue"]}}},"required":["columnId"]}}},"required":["_id","rowId","owner","table","board","createdAt","updatedAt","columns"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/board/{boardId}/table/{tableId}/export":{"post":{"summary":"Export Table View","tags":["API Reference","public","export"],"description":"Render a table view to the chosen format (CSV / XLSX / JSON / MARKDOWN / HTML / PDF / ZIP / ICS). Mirrors the GraphQL `exportTableView` mutation. Small text/spreadsheet renders return inline; large renders plus PDF/ZIP are queued through the async pipeline and return an `asyncJob` snapshot.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"viewId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"format":{"anyOf":[{"type":"string","enum":["CSV"]},{"type":"string","enum":["XLSX"]},{"type":"string","enum":["JSON"]},{"type":"string","enum":["MARKDOWN"]},{"type":"string","enum":["HTML"]},{"type":"string","enum":["PDF"]},{"type":"string","enum":["ZIP"]},{"type":"string","enum":["ICS"]}]},"columnIds":{"type":"array","items":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"}},"filter":{},"sortBy":{"type":"array","items":{"type":"object","properties":{"column":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"dir":{"description":"Sort direction","anyOf":[{"type":"string","enum":["ASC"]},{"type":"string","enum":["DESC"]}]}},"required":["column","dir"]}},"groupBy":{"type":"string"},"rowIds":{"type":"array","items":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"}},"csvOptions":{"type":"object","properties":{"utf8Bom":{"type":"boolean"},"delimiter":{"type":"string"},"quoteMode":{"anyOf":[{"type":"string","enum":["AUTO"]},{"type":"string","enum":["ALL"]},{"type":"string","enum":["MINIMAL"]}]},"lineEnding":{"anyOf":[{"type":"string","enum":["LF"]},{"type":"string","enum":["CRLF"]}]}}},"pdfOptions":{"type":"object","properties":{"pageSize":{"anyOf":[{"type":"string","enum":["A4"]},{"type":"string","enum":["LETTER"]},{"type":"string","enum":["LEGAL"]},{"type":"string","enum":["A3"]},{"type":"string","enum":["TABLOID"]}]},"orientation":{"anyOf":[{"type":"string","enum":["PORTRAIT"]},{"type":"string","enum":["LANDSCAPE"]}]}}},"zipOptions":{"type":"object","properties":{"bundleInnerFormat":{"anyOf":[{"type":"string","enum":["CSV"]},{"type":"string","enum":["XLSX"]},{"type":"string","enum":["JSON"]},{"type":"string","enum":["MARKDOWN"]},{"type":"string","enum":["HTML"]},{"type":"string","enum":["PDF"]}]},"includeAttachments":{"type":"boolean"}}},"icsOptions":{"type":"object","properties":{"startDateColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"endDateColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"titleColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"descriptionColumnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"durationMinutes":{"type":"number"}},"required":["startDateColumnId"]},"columnOverrides":{"type":"array","items":{"type":"object","properties":{"columnId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"dateFormatChoice":{"type":"string"},"dateFormatCustom":{"type":"string"},"numberFormatChoice":{"type":"string"},"userDisplayChoice":{"type":"string"},"multiSelectDelimiter":{"type":"string"},"linkRenderingChoice":{"type":"string"},"linkedRowRenderingChoice":{"type":"string"}},"required":["columnId"]}},"includeHidden":{"type":"boolean"},"includeSystemColumns":{"type":"boolean"},"includeGroupAggregates":{"type":"boolean"},"dateFormatChoice":{"type":"string"},"dateFormatCustom":{"type":"string"},"numberFormatChoice":{"type":"string"},"userDisplayChoice":{"type":"string"},"multiSelectDelimiter":{"type":"string"},"linkRenderingChoice":{"type":"string"},"linkedRowRenderingChoice":{"type":"string"},"fileNameTemplate":{"type":"string"},"ttlDays":{"type":"number"},"forceAsync":{"type":"boolean"},"webhookUrl":{"format":"uri","type":"string"},"saveToDrive":{"type":"boolean"}},"required":["boardId","viewId"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"tableId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Export Table View","description":"Trigger a table-view export and receive the rendered file inline (small text/spreadsheet formats) or a job handle for polling (large, PDF, or ZIP)."},"content":"## Overview\n\nThis endpoint mirrors the in-app \"Export\" dialog. Use it to script exports from your CI / data pipeline / ETL job without scraping the GraphQL surface directly.\n\n## Request body\n\nThe body shape matches the GraphQL `ExportTableViewInput` minus the path-resolved `tableId`. The most common fields:\n\n- `boardId` — required\n- `viewId` — required\n- `format` — defaults to `CSV`\n- `columnIds` — optional; when present, takes precedence over the view's visible columns\n- `webhookUrl` — optional public HTTPS URL; receives a JSON notification when the file is durable\n\n## Response\n\n- **200 OK** — Sync render. `payload` carries the rendered bytes (binary formats are base64).\n- **202 Accepted** — Async render. `asyncJob` carries the job handle; poll the `getExportJob` GraphQL query OR rely on the configured webhook. PDF and ZIP always use this path.\n- **400 Bad Request** — Validation error or missing required fields.\n- **403 Forbidden** — API key lacks `access_boards` permission or no EXPORT permission on the source board.\n- **404 Not Found** — `viewId` / `boardId` / `tableId` not found in this workspace.","mcp":{"enabled":false}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST https://api.copera.ai/public/v1/board/<boardId>/table/<tableId>/export \\\n  -H \"Authorization: Bearer <api_key>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"boardId\": \"<boardId>\",\n    \"viewId\": \"<viewId>\",\n    \"format\": \"XLSX\",\n    \"webhookUrl\": \"https://your-host.example.com/copera-export\"\n  }'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"mimeType":{"type":"string"},"payload":{"type":"string"},"rowCount":{"type":"number"},"columns":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"}},"required":["_id","label","type"]}},"rows":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"columns":{}},"required":["_id","rowId","columns"]}},"asyncJob":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"format":{"type":"string"},"expiresAt":{"type":"string"},"fileName":{"nullable":true,"type":"string"},"mimeType":{"nullable":true,"type":"string"},"fileSizeBytes":{"nullable":true,"type":"number"},"rowCount":{"nullable":true,"type":"number"},"downloadUrl":{"nullable":true,"type":"string"}},"required":["jobId","status","format"]}},"required":["fileName","mimeType","payload","rowCount","columns","rows"]}}}},"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"mimeType":{"type":"string"},"payload":{"type":"string"},"rowCount":{"type":"number"},"columns":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"}},"required":["_id","label","type"]}},"rows":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"rowId":{"type":"number"},"columns":{}},"required":["_id","rowId","columns"]}},"asyncJob":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"format":{"type":"string"},"expiresAt":{"type":"string"},"fileName":{"nullable":true,"type":"string"},"mimeType":{"nullable":true,"type":"string"},"fileSizeBytes":{"nullable":true,"type":"number"},"rowCount":{"nullable":true,"type":"number"},"downloadUrl":{"nullable":true,"type":"string"}},"required":["jobId","status","format"]}},"required":["fileName","mimeType","payload","rowCount","columns","rows"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/chat/channels":{"get":{"summary":"List Channels","tags":["API Reference","public","chat"],"description":"List channels and direct-message conversations visible to the token user.","parameters":[{"schema":{"maxLength":200,"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive search over channel name, custom DM name, description, and participant name/email."},{"schema":{"anyOf":[{"type":"string","enum":["category"]},{"type":"string","enum":["text"]},{"type":"string","enum":["voice"]},{"type":"string","enum":["inbox"]},{"type":"string","enum":["classroom"]},{"type":"string","enum":["meeting"]},{"type":"string","enum":["whatsapp"]}]},"in":"query","name":"type","required":false,"description":"Filter by channel type."},{"schema":{"anyOf":[{"type":"string","enum":["group"]},{"type":"string","enum":["dm"]}]},"in":"query","name":"kind","required":false,"description":"Filter by channel kind."},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"query","name":"participantId","required":false,"description":"Return channels containing this user or team participant."},{"schema":{"minimum":1,"maximum":200,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-200). Defaults to 100."},{"schema":{"minimum":0,"type":"number"},"in":"query","name":"offset","required":false,"description":"Pagination offset. Defaults to 0."}],"x-mint":{"metadata":{"title":"List Channels","description":"Discover channel and DM IDs for CLI and automation workflows"},"content":"## Query Parameters\n\n- `q` (optional): Case-insensitive search over channel name, custom DM name, description, and participant name/email.\n- `type` (optional): Filter by channel type, for example `text`, `voice`, `meeting`, or `whatsapp`.\n- `kind` (optional): `group` or `dm`.\n- `participantId` (optional): Return channels containing this user or team participant.\n- `limit` (optional): Max results, 1-200 (default: 100).\n- `offset` (optional): Pagination offset (default: 0).\n\nOnly channels visible to the token user are returned.","mcp":{"enabled":true,"name":"list_chat_channels","description":"List visible Copera chat channels and DMs"}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.ai/public/v1/chat/channels?q=deploy&kind=group\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"picture":{"type":"string"},"type":{"type":"string"},"kind":{"type":"string"},"participantUserIds":{"type":"array","items":{"type":"string"}},"participantTeamIds":{"type":"array","items":{"type":"string"}},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"lastMessageAt":{"type":"string"}},"required":["_id","name","type","kind","participantUserIds","participantTeamIds","createdBy","createdAt","updatedAt"]}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["channels","total","limit","offset"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/chat/channel/{channelId}/send-message":{"post":{"summary":"Send Message","tags":["API Reference","public","chat"],"description":"Send a text-based message to a chat channel using its channel ID.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"message":{"minLength":1,"maxLength":10000,"type":"string"},"name":{"type":"string"}},"required":["message"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"channelId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Send Message to Channel","description":"Send a text-based message to a chat channel"},"content":"## Prerequisites\n\nBefore sending messages, ensure you have:\n- A valid API key with chat permissions\n- The channel ID where you want to send the message\n\n## Usage Notes\n\n- Messages must be between 1 and 10,000 characters\n- The `name` field is optional and will display as the sender name\n- Returns 204 No Content on success","mcp":{"enabled":true,"name":"send_chat_message","description":"Send a message to a Copera chat channel"}},"x-codeSamples":[{"lang":"javascript","label":"Node.js SDK","source":"import { CoperaAI } from '@copera.ai/sdk';\n\nconst copera = CoperaAI({\n  apiKey: 'your-api-key-here'\n});\n\nawait copera.channel.sendMessage({\n  channelId: 'channel_id_here',\n  message: 'Hello from Copera.ai SDK!',\n  name: 'Bot Name' // optional\n});"}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/chat/direct-message/send-message":{"post":{"summary":"Send Direct Message","tags":["API Reference","public","chat"],"description":"Send a text-based direct message to a workspace user. Creates or reuses the DM channel.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"userId":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"description":"ObjectId","type":"string"},"message":{"minLength":1,"maxLength":10000,"type":"string"}},"required":["userId","message"]}}},"required":true},"x-mint":{"metadata":{"title":"Send Direct Message","description":"Send a direct message to a workspace user by user ID"},"content":"## Usage Notes\n\n- Use `GET /public/v1/workspace/members?q=...` to discover a user's ID by name or email.\n- This endpoint creates a DM channel if one does not already exist for the sender and recipient.\n- Returns HTTP 202 with the DM `channelId` once the message has been queued.","mcp":{"enabled":true,"name":"send_direct_message","description":"Send a message to a Copera workspace user"}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST \"https://api.copera.ai/public/v1/chat/direct-message/send-message\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"userId\":\"USER_ID\",\"message\":\"Hello from the CLI\"}'"}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"type":"string"},"queued":{"type":"boolean"}},"required":["channelId","queued"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/docs/search":{"get":{"summary":"Search Documents","tags":["API Reference","public","docs"],"description":"Full-text search across documents accessible to the authenticated user.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":true,"description":"Search query string"},{"schema":{"anyOf":[{"type":"string","enum":["createdAt"]},{"type":"string","enum":["updatedAt"]}]},"in":"query","name":"sortBy","required":false,"description":"Sort field. Defaults to updatedAt."},{"schema":{"anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sortOrder","required":false,"description":"Sort order. Defaults to desc."},{"schema":{"minimum":1,"maximum":50,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-50). Defaults to 20."}],"x-mint":{"metadata":{"title":"Search Documents","description":"Full-text search across accessible documents"},"content":"## Query Parameters\n\n- `q` (required): Search query string\n- `sortBy` (optional): `createdAt` or `updatedAt` (default: `updatedAt`)\n- `sortOrder` (optional): `asc` or `desc` (default: `desc`)\n- `limit` (optional): Max results, 1-50 (default: 20)\n\n## Response\n\nReturns search results with highlighted matches in title and content. Each hit includes a `parents` array with the document's ancestor chain (root to immediate parent)."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"hits":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"parents":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"}},"required":["_id","title"]}},"highlight":{"type":"object","properties":{"title":{"type":"string"},"mdBody":{"type":"string"}}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id"]}},"totalHits":{"type":"number"},"query":{"type":"string"}},"required":["hits","totalHits","query"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/docs/tree":{"get":{"summary":"Document Tree","tags":["API Reference","public","docs"],"description":"Retrieve the document tree structure with nested children up to a given depth.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"in":"query","name":"parentId","required":false,"description":"Start tree from this document. Omit for root-level documents."},{"schema":{"minimum":1,"maximum":10,"type":"number"},"in":"query","name":"depth","required":false,"description":"Max nesting depth (1-10). Defaults to 3."}],"x-mint":{"metadata":{"title":"Document Tree","description":"Traverse the document hierarchy"},"content":"## Query Parameters\n\n- `parentId` (optional): Start tree from this document ID. Omit for root-level documents.\n- `depth` (optional): Max nesting depth, 1-10 (default: 3)\n\n## Response\n\nReturns a nested tree of documents with:\n- `root`: Array of top-level tree nodes, each with nested `children`\n- `totalDocs`: Total number of documents in the response\n- `truncated`: Whether the result was truncated (max 500 docs)\n- `nextParentIds`: When truncated, IDs of leaf documents that have more children — use these as `parentId` to continue fetching\n\nEach node includes a `hasChildren` flag indicating whether it has children beyond the returned depth."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"root":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"icon":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"cover":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"starred":{"type":"boolean"},"owner":{"type":"string"},"parent":{"nullable":true,"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"hasChildren":{"type":"boolean"},"children":{"type":"array","items":{"$ref":"#/components/schemas/def-0"}}},"required":["_id","title","owner","createdAt","updatedAt","hasChildren","children"],"title":"T0"}},"totalDocs":{"type":"number"},"truncated":{"type":"boolean"},"nextParentIds":{"type":"array","items":{"type":"string"}}},"required":["root","totalDocs","truncated"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/docs/{docId}":{"get":{"summary":"Get Document","tags":["API Reference","public","docs"],"description":"Retrieve details of a specific document using its docId.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"docId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Document Details","description":"Retrieve detailed information about a specific document"},"content":"## Parameters\n\n- `docId`: A 24-character hexadecimal ObjectId identifying the document\n\n## Response\n\nReturns the document metadata including title, icon, cover, owner, and timestamps."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"icon":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"cover":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"starred":{"type":"boolean"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","title","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"patch":{"summary":"Update Document","tags":["API Reference","public","docs"],"description":"Update document properties such as title, icon, or cover.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"New document title","type":"string"},"icon":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"cover":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}}}}}}},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"docId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Document","description":"Update document properties"},"content":"## Parameters\n\n- `docId`: The document to update\n\n## Request Body\n\n- `title` (optional): New document title\n- `icon` (optional): New icon object with type and value\n- `cover` (optional): New cover object with type and value\n\n## Response\n\nReturns the updated document object."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"icon":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"cover":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"starred":{"type":"boolean"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","title","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"delete":{"summary":"Delete Document","tags":["API Reference","public","docs"],"description":"Soft-delete a document. Only the document owner can delete it.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"docId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Delete Document","description":"Soft-delete a document"},"content":"## Parameters\n\n- `docId`: The document to delete\n\n## Notes\n\n- Only the document owner can delete it\n- This is a soft-delete — the document can be recovered"},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/docs/":{"post":{"summary":"Create Document","tags":["API Reference","public","docs"],"description":"Create a new document in the workspace. Optionally nest it under a parent document.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Document title","type":"string"},"parent":{"description":"Parent document ID for nesting","pattern":"^[0-9a-fA-F]{24}$","type":"string"},"content":{"description":"Initial markdown content","type":"string"}},"required":["title"]}}},"required":true},"x-mint":{"metadata":{"title":"Create Document","description":"Create a new document"},"content":"## Request Body\n\n- `title` (required): The document title\n- `parent` (optional): Parent document ID for creating nested documents\n- `content` (optional): Initial markdown content — queued asynchronously via Hocuspocus\n\n## Response\n\nReturns the newly created document object."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"icon":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"cover":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}},"starred":{"type":"boolean"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","title","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/docs/{docId}/md":{"get":{"summary":"Get Document Content","tags":["API Reference","public","docs"],"description":"Retrieve the markdown body of a document.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"docId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Document Content","description":"Retrieve document content as markdown"},"content":"## Parameters\n\n- `docId`: The document whose content to retrieve\n\n## Response\n\nReturns an object with a `content` field containing the markdown body of the document."},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"post":{"summary":"Update Document Content","tags":["API Reference","public","docs"],"description":"Replace, append, or prepend markdown content to a document. Content updates are queued asynchronously.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"description":"Content operation type","anyOf":[{"type":"string","enum":["replace"]},{"type":"string","enum":["append"]},{"type":"string","enum":["prepend"]}]},"content":{"description":"Markdown content","type":"string"}},"required":["operation","content"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"docId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Document Content","description":"Replace, append, or prepend markdown content"},"content":"## Parameters\n\n- `docId`: The document to update\n\n## Request Body\n\n- `operation` (required): One of `replace`, `append`, or `prepend`\n- `content` (required): The markdown content\n\n## Notes\n\nContent updates are processed asynchronously through a queue. The endpoint returns HTTP 202 immediately."},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}},"required":["success","message"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/tree":{"get":{"summary":"Drive Tree","tags":["API Reference","public","drive"],"description":"Retrieve the drive content tree structure with nested children up to a given depth.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"in":"query","name":"parentId","required":false,"description":"Start tree from this folder. Omit for root-level contents."},{"schema":{"minimum":1,"maximum":10,"type":"number"},"in":"query","name":"depth","required":false,"description":"Max nesting depth (1-10). Defaults to 3."}],"x-mint":{"metadata":{"title":"Drive Tree","description":"Traverse the drive hierarchy"},"content":"## Query Parameters\n\n- `parentId` (optional): Start tree from this folder ID. Omit for root-level contents.\n- `depth` (optional): Max nesting depth, 1-10 (default: 3)\n\n## Response\n\nReturns a nested tree of drive contents with:\n- `root`: Array of top-level tree nodes, each with nested `children`\n- `totalItems`: Total number of items in the response\n- `truncated`: Whether the result was truncated (max 500 items)\n- `nextParentIds`: When truncated, IDs of leaf folders that have more children — use these as `parentId` to continue fetching\n\nEach node includes a `hasChildren` flag indicating whether it has children beyond the returned depth."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/drive/tree?depth=3\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"root":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"owner":{"type":"string"},"parent":{"nullable":true,"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"hasChildren":{"type":"boolean"},"children":{"type":"array","items":{"$ref":"#/components/schemas/def-1"}}},"required":["_id","name","type","owner","createdAt","updatedAt","hasChildren","children"],"title":"T1"}},"totalItems":{"type":"number"},"truncated":{"type":"boolean"},"nextParentIds":{"type":"array","items":{"type":"string"}}},"required":["root","totalItems","truncated"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/search":{"get":{"summary":"Search Drive","tags":["API Reference","public","drive"],"description":"Search across files and folders accessible to the authenticated user.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":true,"description":"Search query string"},{"schema":{"anyOf":[{"type":"string","enum":["createdAt"]},{"type":"string","enum":["updatedAt"]}]},"in":"query","name":"sortBy","required":false,"description":"Sort field. Defaults to updatedAt."},{"schema":{"anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sortOrder","required":false,"description":"Sort order. Defaults to desc."},{"schema":{"minimum":1,"maximum":50,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-50). Defaults to 20."}],"x-mint":{"metadata":{"title":"Search Drive","description":"Search across accessible files and folders"},"content":"## Query Parameters\n\n- `q` (required): Search query string\n- `sortBy` (optional): `createdAt` or `updatedAt` (default: `updatedAt`)\n- `sortOrder` (optional): `asc` or `desc` (default: `desc`)\n- `limit` (optional): Max results, 1-50 (default: 20)\n\n## Response\n\nReturns matching files and folders with metadata."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/drive/search?q=report&limit=10\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"hits":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"type":{"description":"\"file\" or \"folder\"","type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","type","owner","createdAt","updatedAt"]}},"totalHits":{"type":"number"},"query":{"type":"string"}},"required":["hits","totalHits","query"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/files/{fileId}":{"get":{"summary":"Get File","tags":["API Reference","public","drive"],"description":"Retrieve details of a specific file or folder using its ID.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"fileId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get File Details","description":"Retrieve detailed information about a specific file or folder"},"content":"## Parameters\n\n- `fileId`: A 24-character hexadecimal ObjectId identifying the file or folder\n\n## Response\n\nReturns the file/folder metadata including name, type, mimeType, size, owner, and timestamps."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/drive/files/60d5ec49f1b2c72d88f0a1b2\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"type":{"description":"\"file\" or \"folder\"","type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","type","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/files/{fileId}/download":{"get":{"summary":"Get Download URL","tags":["API Reference","public","drive"],"description":"Get a pre-signed download URL for a file. The URL is valid for a limited time.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"fileId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Get Download URL","description":"Get a pre-signed URL to download a file"},"content":"## Parameters\n\n- `fileId`: The file to download\n\n## Response\n\nReturns a pre-signed URL that can be used to download the file directly. The URL expires after a short period."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/drive/files/60d5ec49f1b2c72d88f0a1b2/download\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/files/upload/multipart/start":{"post":{"summary":"Start Multipart Upload","tags":["API Reference","public","drive"],"description":"Initialize a multipart upload for a large file. Returns an upload ID and file key for subsequent operations.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"description":"Name of the file to upload","type":"string"},"fileSize":{"description":"File size in bytes","type":"number"},"mimeType":{"description":"MIME type of the file","type":"string"},"parentId":{"pattern":"^[0-9a-fA-F]{24}$","description":"Parent folder ID","type":"string"}},"required":["fileName","fileSize","mimeType"]}}},"required":true},"x-mint":{"metadata":{"title":"Start Multipart Upload","description":"Initialize a multipart file upload"},"content":"## Request Body\n\n- `fileName` (required): Name of the file to upload\n- `fileSize` (required): File size in bytes\n- `mimeType` (required): MIME type of the file\n- `parentId` (optional): Parent folder ID\n\n## Response\n\nReturns an `uploadId` and `fileKey` to use in subsequent presigned URL and finalize calls."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST \"https://api.copera.app/public/v1/drive/files/upload/multipart/start\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"fileName\":\"report.pdf\",\"fileSize\":10485760,\"mimeType\":\"application/pdf\"}'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"type":"string"},"fileKey":{"type":"string"}},"required":["uploadId","fileKey"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/files/upload/multipart/presigned-urls":{"post":{"summary":"Get Presigned Upload URLs","tags":["API Reference","public","drive"],"description":"Get pre-signed URLs for uploading individual parts of a multipart upload.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"description":"Upload ID from multipart init","type":"string"},"parts":{"description":"Number of parts to upload","minimum":1,"type":"number"},"fileKey":{"description":"S3 file key from multipart init","type":"string"}},"required":["uploadId","parts","fileKey"]}}},"required":true},"x-mint":{"metadata":{"title":"Get Presigned Upload URLs","description":"Get pre-signed URLs for uploading file parts"},"content":"## Request Body\n\n- `uploadId` (required): Upload ID from the init step\n- `parts` (required): Number of parts to upload\n- `fileKey` (required): File key from the init step\n\n## Response\n\nReturns an array of pre-signed URLs with part numbers. Upload each file chunk to its corresponding URL via PUT."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST \"https://api.copera.app/public/v1/drive/files/upload/multipart/presigned-urls\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"uploadId\":\"abc123\",\"parts\":3,\"fileKey\":\"user/uuid-file.pdf\"}'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"parts":{"type":"array","items":{"type":"object","properties":{"signedUrl":{"type":"string"},"PartNumber":{"type":"number"}},"required":["signedUrl","PartNumber"]}}},"required":["parts"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/files/upload/multipart/finalize":{"post":{"summary":"Finalize Multipart Upload","tags":["API Reference","public","drive"],"description":"Complete a multipart upload after all parts have been uploaded.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"description":"Upload ID from multipart init","type":"string"},"fileKey":{"description":"S3 file key from multipart init","type":"string"},"parts":{"description":"Uploaded part metadata","type":"array","items":{"type":"object","properties":{"partNumber":{"description":"Part number (1-based)","type":"number"},"eTag":{"description":"ETag returned after uploading part","type":"string"}},"required":["partNumber","eTag"]}}},"required":["uploadId","fileKey","parts"]}}},"required":true},"x-mint":{"metadata":{"title":"Finalize Multipart Upload","description":"Complete a multipart file upload"},"content":"## Request Body\n\n- `uploadId` (required): Upload ID from the init step\n- `fileKey` (required): File key from the init step\n- `parts` (required): Array of uploaded part metadata, each with `partNumber` and `eTag`\n\n## Response\n\nReturns the created file metadata."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST \"https://api.copera.app/public/v1/drive/files/upload/multipart/finalize\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"uploadId\":\"abc123\",\"fileKey\":\"user/uuid-file.pdf\",\"parts\":[{\"partNumber\":1,\"eTag\":\"etag1\"},{\"partNumber\":2,\"eTag\":\"etag2\"}]}'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"type":{"description":"\"file\" or \"folder\"","type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","type","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/drive/folders":{"post":{"summary":"Create Folder","tags":["API Reference","public","drive"],"description":"Create a new folder in the drive. Optionally nest it under a parent folder.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Folder name","type":"string"},"parentId":{"pattern":"^[0-9a-fA-F]{24}$","description":"Parent folder ID","type":"string"}},"required":["name"]}}},"required":true},"x-mint":{"metadata":{"title":"Create Folder","description":"Create a new folder"},"content":"## Request Body\n\n- `name` (required): The folder name\n- `parentId` (optional): Parent folder ID for creating nested folders\n\n## Response\n\nReturns the newly created folder object."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X POST \"https://api.copera.app/public/v1/drive/folders\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"My Folder\"}'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"type":{"description":"\"file\" or \"folder\"","type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"owner":{"type":"string"},"parent":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","type","owner","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Forbidden - You don't have permission to access this resource","content":{"application/json":{"schema":{"description":"Forbidden - You don't have permission to access this resource","type":"object","properties":{"statusCode":{"type":"number","enum":[403]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/notifications/":{"get":{"summary":"List Notifications","tags":["API Reference","public","notifications"],"description":"List notifications owned by the user associated with this Personal Access Token.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"in":"query","name":"after","required":false,"description":"Return notifications after this ObjectId cursor."},{"schema":{"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"in":"query","name":"before","required":false,"description":"Return notifications before this ObjectId cursor."}],"x-mint":{"metadata":{"title":"List Notifications","description":"Retrieve the token user's notifications"},"content":"## Query Parameters\n\n- `after` (optional): ObjectId cursor for newer notifications\n- `before` (optional): ObjectId cursor for older notifications\n\n## Response\n\nReturns notifications scoped to the PAT user and workspace, plus total and unread counts."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/notifications\" \\\n  -H \"Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"type":{"type":"string"},"owner":{"type":"string"},"workspace":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"status":{"anyOf":[{"type":"string","enum":["read"]},{"type":"string","enum":["unread"]}]},"sender":{"type":"string"},"readAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"groupCount":{"type":"number"},"groupStartedAt":{"type":"string"},"groupSenderIds":{"type":"array","items":{"type":"string"}}},"required":["_id","type","owner","workspace","data","status"]}},"unreadCount":{"type":"number"},"count":{"type":"number"}},"required":["notifications","unreadCount","count"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/notifications/{notificationId}":{"patch":{"summary":"Update Notification Status","tags":["API Reference","public","notifications"],"description":"Mark one notification as read or unread.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"description":"New notification status.","anyOf":[{"type":"string","enum":["read"]},{"type":"string","enum":["unread"]}]}},"required":["status"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"notificationId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Update Notification Status","description":"Mark a notification as read or unread"},"content":"## Request Body\n\n- `status`: `read` or `unread`\n\n## Response\n\nReturns the updated notification."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X PATCH \"https://api.copera.app/public/v1/notifications/<notificationId>\" \\\n  -H \"Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"status\":\"read\"}'"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"type":{"type":"string"},"owner":{"type":"string"},"workspace":{"type":"string"},"data":{"type":"object","additionalProperties":{}},"status":{"anyOf":[{"type":"string","enum":["read"]},{"type":"string","enum":["unread"]}]},"sender":{"type":"string"},"readAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"groupCount":{"type":"number"},"groupStartedAt":{"type":"string"},"groupSenderIds":{"type":"array","items":{"type":"string"}}},"required":["_id","type","owner","workspace","data","status"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}},"delete":{"summary":"Delete Notification","tags":["API Reference","public","notifications"],"description":"Delete one notification owned by the token user.","parameters":[{"schema":{"pattern":"^[0-9a-fA-F]{24}$","minLength":24,"maxLength":24,"type":"string"},"in":"path","name":"notificationId","required":true,"description":"ObjectId"}],"x-mint":{"metadata":{"title":"Delete Notification","description":"Delete one notification"},"content":"## Response\n\nReturns the deleted notification ID."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X DELETE \"https://api.copera.app/public/v1/notifications/<notificationId>\" \\\n  -H \"Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"}},"required":["_id"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/search/":{"get":{"summary":"Global Search","tags":["API Reference","public","search"],"description":"Typed global search across documents, chat messages, channels, todos, drive files, voice transcriptions, and AI chats. Results are filtered by the token's permissions.","parameters":[{"schema":{"minLength":1,"type":"string"},"in":"query","name":"q","required":true,"description":"Search query string"},{"schema":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"string","enum":["document"]},{"type":"string","enum":["channel"]},{"type":"string","enum":["channelMessage"]},{"type":"string","enum":["todo"]},{"type":"string","enum":["todoItem"]},{"type":"string","enum":["driveContent"]},{"type":"string","enum":["voiceTranscription"]},{"type":"string","enum":["aiChat"]},{"type":"string","enum":["aiChatMessage"]}]}},{"description":"Comma-separated list of entity types, e.g. 'document,channel'","type":"string"}]},"in":"query","name":"types","required":false,"description":"Restrict search to specific entity types. Accepts repeated query params or a CSV string."},{"schema":{"anyOf":[{"type":"string","enum":["createdAt"]},{"type":"string","enum":["updatedAt"]}]},"in":"query","name":"sortBy","required":false,"description":"Sort field. Defaults to updatedAt."},{"schema":{"anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"sortOrder","required":false,"description":"Sort order. Defaults to desc."},{"schema":{"minimum":1,"maximum":100,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-100). Defaults to 50."}],"x-mint":{"metadata":{"title":"Global Search","description":"Typed global search across all entity types"},"content":"## Query Parameters\n\n- `q` (required): Search query string\n- `types` (optional): Restrict search to specific entity types. Accepts repeated params or a CSV string. Valid values:\n  - `document` — text documents (requires ACCESS_DOCS)\n  - `channel` — chat channels (requires ACCESS_CHANNELS)\n  - `channelMessage` — chat messages (requires ACCESS_CHANNELS)\n  - `voiceTranscription` — voice meeting transcriptions (requires ACCESS_CHANNELS)\n  - `driveContent` — drive files and folders (requires ACCESS_DRIVE)\n  - `todo` — todo lists\n  - `todoItem` — individual todos\n  - `aiChat` — AI chat conversations\n  - `aiChatMessage` — messages inside AI chats\n- `sortBy` (optional): `createdAt` or `updatedAt` (default: `updatedAt`)\n- `sortOrder` (optional): `asc` or `desc` (default: `desc`)\n- `limit` (optional): Max results, 1-100 (default: 50)\n\n## Response\n\nReturns a flat list of hits. Each hit has an `entityType` discriminator and type-specific fields. All timestamps are epoch milliseconds.\n\nIf the token lacks permission for a requested entity type, the type is silently dropped. If no types remain after filtering and `types` was explicitly provided, a 403 is returned.\n\nExternal users cannot access this endpoint."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/search?q=mike&limit=20\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""},{"lang":"bash","label":"cURL (filter types)","source":"curl -X GET \"https://api.copera.app/public/v1/search?q=mike&types=document,driveContent\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""},{"lang":"typescript","label":"copera-sdk","source":"import { Copera } from \"copera-sdk\";\n\nconst copera = new Copera({ token: process.env.COPERA_TOKEN });\n\nconst results = await copera.search({\n  q: \"mike\",\n  limit: 20,\n});\n\nfor (const hit of results.hits) {\n  console.log(hit.entityType, hit._id);\n}"},{"lang":"typescript","label":"copera-sdk (filter types)","source":"import { Copera } from \"copera-sdk\";\n\nconst copera = new Copera({ token: process.env.COPERA_TOKEN });\n\nconst results = await copera.search({\n  q: \"mike\",\n  types: [\"document\", \"driveContent\"],\n  sortBy: \"updatedAt\",\n  sortOrder: \"desc\",\n  limit: 20,\n});"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"totalHits":{"type":"number"},"processingTimeMs":{"type":"number"},"hits":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"entityType":{"type":"string","enum":["document"]},"_id":{"type":"string"},"title":{"type":"string"},"mdBody":{"type":"string"},"workspace":{"type":"string"},"owner":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","title","workspace","owner","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["channel"]},"_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"workspace":{"type":"string"},"type":{"type":"string"},"kind":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","name","workspace","type","createdBy","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["channelMessage"]},"_id":{"type":"string"},"content":{"type":"string"},"workspace":{"type":"string"},"author":{"type":"string"},"channel":{"type":"string"},"contentType":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","content","workspace","author","channel","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["todo"]},"_id":{"type":"string"},"name":{"type":"string"},"workspace":{"type":"string"},"owner":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","name","workspace","owner","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["todoItem"]},"_id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"workspace":{"type":"string"},"owner":{"type":"string"},"list":{"type":"string"},"completed":{"type":"boolean"},"dueDate":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","title","workspace","owner","list","completed","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["driveContent"]},"_id":{"type":"string"},"name":{"type":"string"},"workspace":{"type":"string"},"user":{"type":"string"},"type":{"type":"string"},"mimeType":{"type":"string"},"size":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","name","workspace","user","type","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["voiceTranscription"]},"_id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"transcription":{"type":"string"},"workspace":{"type":"string"},"channel":{"type":"string"},"chatSession":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","title","transcription","workspace","channel","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["aiChat"]},"_id":{"type":"string"},"title":{"type":"string"},"workspace":{"type":"string"},"owner":{"type":"string"},"lastMessageAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","title","workspace","owner","createdAt","updatedAt"]},{"type":"object","properties":{"entityType":{"type":"string","enum":["aiChatMessage"]},"_id":{"type":"string"},"content":{"type":"string"},"query":{"type":"string"},"reasoning":{"type":"string"},"chat":{"type":"string"},"workspace":{"type":"string"},"owner":{"type":"string"},"role":{"anyOf":[{"type":"string","enum":["user"]},{"type":"string","enum":["assistant"]}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["entityType","_id","content","chat","workspace","owner","role","createdAt","updatedAt"]}]}}},"required":["query","totalHits","processingTimeMs","hits"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/workspace/info":{"get":{"summary":"Workspace Info","tags":["API Reference","public","workspace"],"description":"Retrieve basic metadata about the workspace this token belongs to.","x-mint":{"metadata":{"title":"Workspace Info","description":"Get metadata about your workspace"},"content":"## Response\n\nReturns workspace metadata including name, slug, picture, description, and seat count.\n\nExternal users cannot access this endpoint."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/workspace/info\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"picture":{"type":"string"},"description":{"type":"string"},"seats":{"type":"number"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","slug","seats","createdAt","updatedAt"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/workspace/members":{"get":{"summary":"List Workspace Members","tags":["API Reference","public","workspace"],"description":"Retrieve a paginated list of members (users) in the workspace.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Search by name or email (case-insensitive)"},{"schema":{"minimum":1,"maximum":500,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-500). Defaults to 100."},{"schema":{"minimum":0,"type":"number"},"in":"query","name":"offset","required":false,"description":"Pagination offset. Defaults to 0."}],"x-mint":{"metadata":{"title":"List Workspace Members","description":"Retrieve workspace members"},"content":"## Query Parameters\n\n- `q` (optional): Filter by name or email (case-insensitive substring match)\n- `limit` (optional): Max results, 1-500 (default: 100)\n- `offset` (optional): Pagination offset (default: 0)\n\n## Response\n\nReturns a paginated list of members with their name, email, picture, title, type, status, and active flag.\n\nExternal users cannot access this endpoint."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/workspace/members?q=junior&limit=20\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"picture":{"type":"string"},"title":{"type":"string"},"type":{"description":"User type: user, guest, integration, ai, external","type":"string"},"status":{"description":"User status: online, offline, idle, invisible","type":"string"},"active":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["_id","name","email","type","status","active","createdAt"]}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["members","total","limit","offset"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}},"/public/v1/workspace/teams":{"get":{"summary":"List Workspace Teams","tags":["API Reference","public","workspace"],"description":"Retrieve a paginated list of teams in the workspace.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Search by team name (case-insensitive)"},{"schema":{"minimum":1,"maximum":200,"type":"number"},"in":"query","name":"limit","required":false,"description":"Max results (1-200). Defaults to 100."},{"schema":{"minimum":0,"type":"number"},"in":"query","name":"offset","required":false,"description":"Pagination offset. Defaults to 0."}],"x-mint":{"metadata":{"title":"List Workspace Teams","description":"Retrieve workspace teams"},"content":"## Query Parameters\n\n- `q` (optional): Filter by team name (case-insensitive substring match)\n- `limit` (optional): Max results, 1-200 (default: 100)\n- `offset` (optional): Pagination offset (default: 0)\n\n## Response\n\nReturns a paginated list of teams, each with name, picture, participants (user IDs), and `main` flag.\n\nExternal users cannot access this endpoint."},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl -X GET \"https://api.copera.app/public/v1/workspace/teams?limit=50\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\""}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"name":{"type":"string"},"picture":{"type":"string"},"main":{"type":"boolean"},"participants":{"type":"array","items":{"type":"string"}},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["_id","name","main","participants","createdBy","createdAt","updatedAt"]}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["teams","total","limit","offset"]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"401":{"description":"Unauthorized - Authentication is required","content":{"application/json":{"schema":{"description":"Unauthorized - Authentication is required","type":"object","properties":{"statusCode":{"type":"number","enum":[401]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"}},"required":["message"]}}}},"404":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"description":"Not Found - The requested resource was not found","type":"object","properties":{"statusCode":{"type":"number","enum":[404]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}},"500":{"description":"Internal Server Error - Something went wrong on the server","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on the server","type":"object","properties":{"statusCode":{"type":"number","enum":[500]},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"]}}}}}}}},"servers":[{"url":"https://api.copera.ai","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"public","description":"Public endpoints"},{"name":"internal","description":"Internal endpoints"},{"name":"Public API Board","description":"Public API Board"},{"name":"Public API Export","description":"Public API for exporting table views to a chosen format."},{"name":"Public API Bookings","description":"Public API Bookings"},{"name":"Public API Bookings","description":"Public API Bookings"},{"name":"Public API Chat","description":"Public API Chat"},{"name":"Public API Docs","description":"Public API Documents"},{"name":"Public API Drive","description":"Public API Drive"},{"name":"Public API Notifications","description":"Public API Notifications"},{"name":"Public API Search","description":"Public API Search"},{"name":"Public API Workspace","description":"Public API Workspace metadata"}]}