{"openapi":"3.1.0","info":{"title":"kloudboard API","version":"1.1.0","description":"Every kloudboard capability over plain HTTPS with one API key: AI voice, music and sound effects, images, thumbnails, video, transcripts, YouTube and web research, kloudie (ask_kloudie), boards, cards, tasks, Drive and the Brain. AI runs on the workspace's AI credits; no provider keys or accounts needed.\n\n**Auth.** `Authorization: Bearer <key>` with a key from Settings > API. A key acts as the member who created it, in one workspace, within its scopes (read, write, spend).\n\n**Responses.** `{ ok: true, data }` or `{ ok: false, error: { code, message, hint, request_id } }` with a real status code: 400 invalid_request, 401 unauthenticated, 402 insufficient_credits (with top_up_url), 403 permission_denied / scope_missing, 404 not_found, 409 idempotency_in_progress, 422 idempotency_key_reused, 429 rate_limited (Retry-After), 500/502. Every response carries X-Request-Id.\n\n**Credits.** Paid tools hold their estimated cost first and refund what they do not use; the response has `cost` plus X-Credits-Charged and X-Credits-Remaining. Quote first with get_pricing (free).\n\n**Retries.** Send Idempotency-Key on POSTs: a retry returns the first success instead of charging twice.\n\n**Jobs.** Video, translations, dubs, long transcripts and long ask_kloudie turns answer 202 with Location: /api/v1/jobs/{jobId}; poll it every Retry-After seconds until data.done.\n\n**Limits.** 600 requests an hour per key (tool calls, reads, job polls) and 120 an hour on POST /api/v1/text, counted across every server (MCP has its own 1,000 tool calls an hour per connection). A 429 carries Retry-After, RateLimit and RateLimit-Policy. Spend is capped by credits.\n\n**Versioning.** v1 (/api/v1) is the current, stable version. Additive changes (new endpoints, tools, optional fields and error codes) ship without a new version, so clients should ignore fields they do not know. Breaking changes ship only as a new version path (/api/v2); the old version keeps working side by side. Before an endpoint or version is removed, its responses carry a Deprecation header (RFC 9745) and a Sunset header (RFC 8594) with the shutdown date, at least 6 months ahead, and the changelog announces it. A deprecated endpoint keeps working until its Sunset date.","contact":{"name":"kloudboard support","url":"https://kloudboard.com/developers"},"license":{"name":"Proprietary","url":"https://kloudboard.com/terms"}},"security":[{"bearer":[]}],"paths":{"/api/v1":{"get":{"operationId":"v1_discovery","summary":"API discovery","description":"What exists and how to authenticate. The one endpoint that needs no key.","tags":["api"],"security":[],"responses":{"200":{"description":"Endpoint list","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/v1/workspace":{"get":{"operationId":"v1_get_workspace","summary":"Workspace overview","description":"The key's workspace: name, boards, stages and card counts. Free.","tags":["workspace"],"responses":{"200":{"description":"The workspace","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}},"example":{"ok":true,"data":{"workspaceId":"3b7e…","name":"My channel","boards":[{"name":"YouTube","stages":[{"name":"Ideas","cards":4}]}]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/cards":{"get":{"operationId":"v1_list_cards","summary":"List cards","description":"Cards in the key's workspace, newest first. Filter by board, stage or a title search; limit defaults to 25, at most 50.","tags":["workspace"],"parameters":[{"name":"boardId","in":"query","required":false,"description":"Only this board.","schema":{"type":"string"}},{"name":"stageId","in":"query","required":false,"description":"Only this stage.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Title search.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 50 (default 25).","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"Cards, newest first","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data","has_more"],"properties":{"ok":{"const":true},"data":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"cardId":{"type":"string"},"title":{"type":"string"},"stage":{"type":"string"}}}},"has_more":{"type":"boolean","description":"True when the page came back full: raise limit (max 50) or narrow the query."},"limit":{"type":"integer"}}},"example":{"ok":true,"data":[{"cardId":"6f1c…","title":"Episode 12: winglets","board":"YouTube","stage":"Scripting"}],"has_more":false,"limit":25}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]},"post":{"operationId":"v1_create_card","summary":"Create a card","description":"Create a card on a board, optionally with a description and a stage. Needs the write scope.","tags":["workspace"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["boardId","title"],"properties":{"boardId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"stageId":{"type":"string"}}},"example":{"boardId":"b1…","title":"Episode 13: contrails"}}}},"responses":{"200":{"description":"The new card","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true,"properties":{"cardId":{"type":"string"},"title":{"type":"string"},"stage":{"type":"string"}}}}},"example":{"ok":true,"data":{"cardId":"6f1c…","title":"Episode 12: winglets","board":"YouTube","stage":"Scripting"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["write"]}]}},"/api/v1/cards/{cardId}":{"parameters":[{"name":"cardId","in":"path","required":true,"description":"The card id.","schema":{"type":"string"}}],"get":{"operationId":"v1_get_card","summary":"Get a card","description":"One card's full state by id.","tags":["workspace"],"responses":{"200":{"description":"The card's full state","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true,"properties":{"cardId":{"type":"string"},"title":{"type":"string"},"stage":{"type":"string"}}}}},"example":{"ok":true,"data":{"cardId":"6f1c…","title":"Episode 12: winglets","board":"YouTube","stage":"Scripting"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]},"patch":{"operationId":"v1_update_card","summary":"Update a card","description":"One action per call: move_stage (stageId), rename (newTitle), set_due (dueAt, ISO date), comment (body), complete.","tags":["workspace"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action"],"properties":{"action":{"enum":["move_stage","rename","set_due","comment","complete"]},"stageId":{"type":"string"},"newTitle":{"type":"string"},"dueAt":{"type":"string"},"body":{"type":"string"}}},"example":{"action":"move_stage","stageId":"s2…"}}}},"responses":{"200":{"description":"The result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["write"]}]}},"/api/v1/tasks":{"get":{"operationId":"v1_list_tasks","summary":"List tasks","description":"Tasks in the key's workspace. Filter by a title search; includeDone=true adds completed tasks; limit defaults to 20, at most 50.","tags":["workspace"],"parameters":[{"name":"q","in":"query","required":false,"description":"Title search.","schema":{"type":"string"}},{"name":"includeDone","in":"query","required":false,"description":"Include completed tasks.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 50 (default 20).","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"Tasks","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data","has_more"],"properties":{"ok":{"const":true},"data":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"title":{"type":"string"},"completed":{"type":"boolean"}}}},"has_more":{"type":"boolean","description":"True when the page came back full: raise limit (max 50) or narrow the query."},"limit":{"type":"integer"}}},"example":{"ok":true,"data":[{"id":"t1…","title":"Record VO","completed":false}],"has_more":false,"limit":25}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]},"post":{"operationId":"v1_create_task","summary":"Create a task","description":"Create a task, optionally with a due date and linked to a card. Needs the write scope.","tags":["workspace"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"dueAt":{"type":"string"},"cardId":{"type":"string"}}},"example":{"title":"Record VO","dueAt":"2026-10-14"}}}},"responses":{"200":{"description":"The new task","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"title":{"type":"string"},"completed":{"type":"boolean"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["write"]}]}},"/api/v1/text":{"post":{"operationId":"v1_generate_text","summary":"Generate text","security":[{"bearer":["spend"]}],"description":"LLM text on the workspace's AI credits: a prompt (or a short conversation) in, text out. Tiers: fast (cheapest), standard (default) and writer (long-form prose); the models behind them can change. Needs the spend scope. The estimate (input plus max_output_tokens) is held first and the unused part refunded; the response reports the real cost.","tags":["api"],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":100000,"description":"The instruction. Send prompt or messages, not both."},"messages":{"type":"array","maxItems":100,"items":{"type":"object","required":["role","content"],"properties":{"role":{"enum":["user","assistant"]},"content":{"type":"string"}}}},"system":{"type":"string","maxLength":20000},"model":{"enum":["fast","standard","writer"],"default":"standard"},"max_output_tokens":{"type":"integer","minimum":1,"maximum":8000,"default":2000},"temperature":{"type":"number","minimum":0,"maximum":2}}},"example":{"prompt":"Write a 2-sentence hook for a video about why planes have winglets.","model":"fast","max_output_tokens":200}}}},"responses":{"200":{"description":"The text, with what it cost","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"text":{"type":"string"},"model":{"type":"string"},"finish_reason":{"type":"string"},"usage":{"type":"object","additionalProperties":true}}}}},"example":{"ok":true,"data":{"text":"Every jet you have flown on…","model":"fast","finish_reason":"stop","usage":{"input_tokens":31,"output_tokens":46}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}}}},"/api/v1/tools":{"get":{"operationId":"v1_list_tools","summary":"List tools","description":"Every tool this key can call, with its JSON input schema and MCP annotations (readOnlyHint, destructiveHint). ?toolsets=create,research narrows the list.","tags":["api"],"parameters":[{"name":"toolsets","in":"query","required":false,"description":"Comma-separated toolsets (core, create, research, workspace, drive, brain, social, analytics, automations, systems, team, kloudie, account) or all (default).","schema":{"type":"string"}}],"responses":{"200":{"description":"Tools","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"count":{"type":"integer"},"data":{"type":"object","properties":{"tools":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/credits":{"get":{"operationId":"v1_get_credits","summary":"AI credit balance","description":"Credits left, this period's allowance and use, recent charges, and where to top up. Free.","tags":["api"],"parameters":[{"name":"recent","in":"query","required":false,"description":"How many recent charges to include (0 to 50, default 10).","schema":{"type":"integer","minimum":0,"maximum":50}}],"responses":{"200":{"$ref":"#/components/responses/ToolOk"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/jobs/{jobId}":{"parameters":[{"name":"jobId","in":"path","required":true,"description":"The job_id a tool returned (URL-encoded), e.g. video%3A6f1c….","schema":{"type":"string"}}],"get":{"operationId":"v1_get_job","summary":"Poll a job","description":"Status of a long job (video, transcript, ask_kloudie and the other tools that return a job_id). A tool that starts one answers 202 with this URL in Location; poll every Retry-After seconds until data.done is true. Free; never charges again.","tags":["api"],"responses":{"200":{"$ref":"#/components/responses/ToolOk"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/brain/search":{"get":{"operationId":"v1_search_brain","summary":"Search the Brain","description":"Hybrid recall (vector + full text) over the workspace's Brain, each hit with a citable title and url. Free.","tags":["brain"],"parameters":[{"name":"q","in":"query","required":true,"description":"The query.","schema":{"type":"string"}},{"name":"k","in":"query","required":false,"description":"Hits, 1 to 50 (default 6).","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Hits","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}},"example":{"ok":true,"data":{"query":"retention","k":6,"hits":[{"id":"h1…","title":"Why viewers leave at 0:30","url":"https://…","excerpt":"…"}]}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/brain/connected":{"get":{"operationId":"v1_brain_connected","summary":"Connected platforms","description":"Which social channels this workspace can import into the Brain.","tags":["brain"],"responses":{"200":{"description":"Connections","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/brain/candidates":{"get":{"operationId":"v1_brain_candidates","summary":"Import candidates","description":"A channel's recent items with an alreadyInBrain flag. Imports nothing.","tags":["brain"],"parameters":[{"name":"provider","in":"query","required":true,"description":"youtube, tiktok, instagram or twitter.","schema":{"type":"string"}},{"name":"channel_url","in":"query","required":false,"description":"The channel, when not the connected one.","schema":{"type":"string"}}],"responses":{"200":{"description":"Candidates","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["read"]}]}},"/api/v1/brain/sources/{sourceId}":{"parameters":[{"name":"sourceId","in":"path","required":true,"description":"The Brain source id.","schema":{"type":"string"}}],"delete":{"operationId":"v1_delete_brain_source","summary":"Delete a Brain source","description":"Removes the source and every chunk embedded from it.","tags":["brain"],"responses":{"200":{"description":"Deleted","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","additionalProperties":true}}},"example":{"ok":true,"data":{"deleted":true,"sourceId":"s1…"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"security":[{"bearer":["write"]}]}},"/api/v1/tools/get_started":{"post":{"operationId":"get_started","summary":"Get started","description":"Start here. What this kloudboard connection can do for the \"your workspace\" workspace, the AI credit balance, five example prompts to try, and links to the docs. Free.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Job status","description":"Check a long job by the job_id any tool returned (videos, transcripts, renders, System runs, ask_kloudie, dubs, translations, lip-syncs, edits, frame previews, YouTube uploads). Returns status running, waiting (paused on the person: do what next_step says), done or failed, when to poll again, and the job's result once it is done (the video link, transcript, dubs and translations, System deliverables or kloudie's reply). Free; never starts or pays for anything again.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","minLength":3,"maxLength":4096,"description":"The job_id from the tool that started the job, e.g. video:…, transcript:…, dub:…, translate:…, lipsync:…, edit:…, frames:…, youtube:…, system:… or kloudie:…."}},"required":["job_id"]},"example":{"job_id":"video:6f1c2d4e-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_youtube_discovery_feed":{"post":{"operationId":"get_youtube_discovery_feed","summary":"Get youtube discovery feed","description":"Read an existing dated shared Discover cache: channel leads (niches), outliers, viral small-channel videos, or categories. For new topic-level niche candidates use discover_niches. Free. No live provider request or refresh; includes source day, staleness, availability and bounds. Missing cache is unavailable, never a fresh empty scan.\n\nPrice: Free.","tags":["research"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["niches","outliers","viral","categories"],"description":"Which existing shared Discover cache to read. This never starts a live provider request."},"limit":{"default":24,"description":"Maximum cached items to return, 1 to 50. Default 24.","type":"integer","minimum":1,"maximum":50}},"required":["kind"],"additionalProperties":false},"example":{"kind":"niches"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_youtube_channel_research":{"post":{"operationId":"get_youtube_channel_research","summary":"Get youtube channel research","description":"Read one public YouTube channel research section: analytics, daily growth, format split, estimated geography/revenue, monetization, faceless classification, similar channels, or promotions. One selected section per request, never private connected-channel analytics. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"type":"string","pattern":"^UC[A-Za-z0-9_-]{22}$","description":"Exact 24-character YouTube channel ID beginning UC, from search_youtube or find_niches."},"section":{"type":"string","enum":["analytics","daily","format_split","geography","monetization","classification","similar","promotions"],"description":"One public channel research section to retrieve. Each request executes one upstream operation."},"dayCount":{"description":"Daily section only. Default 30, maximum 365 days. Each request reads one section.","type":"integer","minimum":1,"maximum":365}},"required":["channelId","section"],"additionalProperties":false},"example":{"channelId":"UC_x5XG1OV2P6uZZ5FSM9Ttw","section":"analytics"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_youtube_video_research":{"post":{"operationId":"get_youtube_video_research","summary":"Get youtube video research","description":"Read one public YouTube video's details, predicted RPM/earnings, monetization, or similar videos. One selected section per request. For audience comments use get_youtube_comments. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"videoId":{"type":"string","pattern":"^[A-Za-z0-9_-]{11}$","description":"Exact 11-character YouTube video ID from a YouTube link or research result."},"section":{"type":"string","enum":["details","rpm","monetization","similar"],"description":"One public video research section: details, estimated RPM, monetization or similar videos."}},"required":["videoId","section"],"additionalProperties":false},"example":{"videoId":"dQw4w9WgXcQ","section":"details"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/find_similar_thumbnails":{"post":{"operationId":"find_similar_thumbnails","summary":"Find similar thumbnails","description":"Find visually similar video thumbnails from an observed public HTTPS thumbnail image. Returns precise provider similarity scores and observed image URLs, not generated images. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"thumbnailUrl":{"type":"string","maxLength":2048,"description":"Observed public HTTPS thumbnail image URL to search for visual matches. Credentials and custom ports are refused."},"limit":{"default":10,"description":"Maximum matching thumbnails to return, 1 to 50. Default 10.","type":"integer","minimum":1,"maximum":50}},"required":["thumbnailUrl"],"additionalProperties":false},"example":{"thumbnailUrl":"https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/watch_video":{"post":{"operationId":"watch_video","summary":"Watch video","description":"Watch a public YouTube, TikTok or Instagram video and answer one question. Pass a direct video URL. Returns the full bounded provider answer; it is analysis, not verified factual evidence or private account analytics. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"description":"Direct public HTTPS YouTube, TikTok or Instagram video URL, not an account page or redirect link."},"question":{"type":"string","minLength":1,"maxLength":4000,"description":"The question to answer after watching this video, up to 4,000 characters."}},"required":["url","question"],"additionalProperties":false},"example":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","question":"What did my last three videos have in common?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/analyze_youtube_niche":{"post":{"operationId":"analyze_youtube_niche","summary":"Analyze youtube niche","description":"Analyze the niche around an exact public YouTube channel: similar channels and sample videos. Slow, typically 60-90 seconds. Returns a bounded public report without saving workspace records. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"type":"string","pattern":"^UC[A-Za-z0-9_-]{22}$","description":"Exact 24-character YouTube channel ID beginning UC, from search_youtube or find_niches."}},"required":["channelId"],"additionalProperties":false},"example":{"channelId":"UC_x5XG1OV2P6uZZ5FSM9Ttw"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_workspace_overview":{"post":{"operationId":"get_workspace_overview","summary":"Workspace overview","description":"Orient yourself in the \"your workspace\" kloudboard workspace: boards with their stages, saved Systems (production workflows), recent runs, and the month's research allowance. Call this first. Free.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/create_card":{"post":{"operationId":"create_card","summary":"Create card","description":"Create a card on a board in the content pipeline. Get board and stage ids from get_workspace_overview; without stageId the card lands in the board's first stage. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Board id from get_workspace_overview."},"title":{"type":"string","minLength":1,"maxLength":300,"description":"Card title, usually the working video title."},"description":{"default":"","description":"Card body (plain text or Markdown). Empty keeps the board's card template.","type":"string","maxLength":20000},"stageId":{"description":"Stage id on that board (get_workspace_overview). Default: the board's first stage.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["boardId","title"]},"example":{"boardId":"00000000-0000-4000-8000-000000000000","title":"Episode 13: contrails"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/run_system":{"post":{"operationId":"run_system","summary":"Run a System","description":"Run a saved System (production workflow: research, script, posts, thumbnail, voiceover, board delivery) on a brief. Runs complete in the background: poll get_job with the returned job_id for status and deliverables. Each step spends AI credits like the matching tool.\n\nPrice: Quoted per System: list_systems with a systemId (and run_system's result) itemizes every step, the likely range and the cap; a run never spends past its cap and refunds what it does not use.","tags":["systems"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"workflowId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"System id from get_workspace_overview (saved Systems)."},"brief":{"type":"string","minLength":4,"maxLength":2000,"description":"What this run should produce: topic, angle, audience, any must-haves."}},"required":["workflowId","brief"]},"example":{"workflowId":"00000000-0000-4000-8000-000000000000","brief":"example brief"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/search_youtube":{"post":{"operationId":"search_youtube","summary":"Search YouTube","description":"Search live YouTube results with current views and recency for keyword and packaging research. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Search terms, as typed into YouTube search."},"type":{"description":"Only this result type. Omit for mixed results.","type":"string","enum":["video","channel","playlist","shorts"]},"sortBy":{"description":"Result order.","type":"string","enum":["relevance","popularity","rating","date","views"]},"limit":{"description":"Maximum results from this provider page, 1 to 50. Default 12. Use 50 to retain more of the page; each request has the same per-call price.","type":"integer","minimum":1,"maximum":50},"token":{"description":"Opaque continuation returned by the preceding response. Keep query/type/sortBy unchanged. Each page is a separate billed request.","type":"string","minLength":1,"maxLength":4096}},"required":["query"]},"example":{"query":"best time to post on YouTube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/discover_niches":{"post":{"operationId":"discover_niches","summary":"Discover YouTube topics","description":"Discover new YouTube niche candidates without supplying names. Optional interests and numeric/format filters narrow one bounded sample. Requires a shared category plus a specific tag, or two shared specific tags when no topic category exists (including Shorts), across at least two channels with positive observed views. Generic standalone tags cannot become niches. Returns both observed sourceTerms, evidence links, available thumbnails, metric coverage and rationale; identical source sets occupy one slot. Fewer results means insufficient evidence, not permission to invent ideas. Metadata does not prove content similarity, low competition or market saturation. Use find_niches for channels within a known topic. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"shorts":{"description":"true searches Shorts channels; the long-form-only filters are then rejected.","type":"boolean"},"facelessOnly":{"description":"true keeps only faceless channels.","type":"boolean"},"isAiChannel":{"description":"true keeps only channels flagged as AI-made content; false excludes them.","type":"boolean"},"minSubscribers":{"description":"Minimum subscriber count.","type":"integer","minimum":0,"maximum":1000000000000},"maxSubscribers":{"description":"Maximum subscriber count.","type":"integer","minimum":0,"maximum":1000000000000},"minAvgViewsPerVideo":{"description":"Minimum average views per video.","type":"integer","minimum":0,"maximum":1000000000000},"maxAvgViewsPerVideo":{"description":"Maximum average views per video.","type":"integer","minimum":0,"maximum":1000000000000},"minTotalViews":{"description":"Minimum lifetime channel views.","type":"integer","minimum":0,"maximum":1000000000000},"maxTotalViews":{"description":"Maximum lifetime channel views.","type":"integer","minimum":0,"maximum":1000000000000},"minOutlierScore":{"description":"Minimum channel outlier score: how strongly its videos outperform its usual views (higher = bigger breakouts).","type":"number","minimum":0,"maximum":1000000000},"maxOutlierScore":{"description":"Maximum outlier score.","type":"number","minimum":0,"maximum":1000000000},"firstUploadAfter":{"description":"Channel's first upload on or after this date (YYYY-MM-DD). Good for finding new channels.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"firstUploadBefore":{"description":"Channel's first upload on or before this date (YYYY-MM-DD).","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"minMonthlyRevenue":{"description":"Minimum estimated revenue per month, in USD. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"maxMonthlyRevenue":{"description":"Maximum estimated revenue per month, in USD. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"minMonthlyViews":{"description":"Minimum views in the last month. Long-form only.","type":"integer","minimum":0,"maximum":1000000000000},"maxMonthlyViews":{"description":"Maximum views in the last month. Long-form only.","type":"integer","minimum":0,"maximum":1000000000000},"minRpm":{"description":"Minimum estimated RPM (USD per 1,000 views). Long-form only.","type":"number","minimum":0,"maximum":1000000000},"maxRpm":{"description":"Maximum estimated RPM (USD per 1,000 views). Long-form only.","type":"number","minimum":0,"maximum":1000000000},"minTotalVideos":{"description":"Minimum number of uploads.","type":"integer","minimum":0,"maximum":1000000000000},"maxTotalVideos":{"description":"Maximum number of uploads.","type":"integer","minimum":0,"maximum":1000000000000},"minUploadsPerWeek":{"description":"Minimum average uploads per week. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"maxUploadsPerWeek":{"description":"Maximum average uploads per week. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"minAvgVideoLength":{"description":"Minimum average video length in seconds. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"maxAvgVideoLength":{"description":"Maximum average video length in seconds. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"lastUploadAfter":{"description":"Most recent upload on or after this date (YYYY-MM-DD); keeps active channels. Long-form only.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"lastUploadBefore":{"description":"Most recent upload on or before this date (YYYY-MM-DD). Long-form only.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"channelCreatedAfter":{"description":"Channel created on or after this date (YYYY-MM-DD). Long-form only.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"channelCreatedBefore":{"description":"Channel created on or before this date (YYYY-MM-DD). Long-form only.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"isMonetizationEnabled":{"description":"true keeps only channels in the YouTube Partner Program. Long-form only.","type":"boolean"},"hasKidsContent":{"description":"true keeps only made-for-kids channels; false excludes them. Long-form only.","type":"boolean"},"categoryId":{"description":"YouTube video category id (e.g. 27 Education, 28 Science & Technology). Long-form only.","type":"integer","minimum":0,"maximum":100000},"location":{"description":"Channel country as an uppercase ISO 3166 two-letter code, e.g. US.","type":"string","pattern":"^[A-Z]{2}$"},"channelLanguage":{"description":"Channel languages to include (ISO 639-1 codes).","maxItems":4,"type":"array","items":{"type":"string","enum":["en","es","fr","de"]}},"interests":{"default":"","description":"Optional broad interests. Leave empty to discover topics without naming any niche first.","type":"string","maxLength":200},"limit":{"default":5,"description":"Maximum topic candidates, 1 to 10. Insufficient evidence returns fewer, never invented results.","type":"integer","minimum":1,"maximum":10},"sampleSize":{"default":50,"description":"Maximum channel rows to sample in one billed upstream request, 2 to 50. No automatic pagination.","type":"integer","minimum":2,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/find_niches":{"post":{"operationId":"find_niches","summary":"Find niches","description":"Search YouTube channels within a topic using a curated research database. Returns channels, not discovered niche ideas; use discover_niches to discover new topics without supplying names. Empty query browses by filters (size, views, revenue, RPM, channel age). 24 channels per page. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"description":"The niche or topic in plain words. Omit to browse by filters only.","type":"string","maxLength":200},"shorts":{"description":"true searches Shorts channels; the long-form-only filters are then rejected.","type":"boolean"},"facelessOnly":{"description":"true keeps only faceless channels.","type":"boolean"},"minSubscribers":{"description":"Minimum subscriber count.","type":"integer","minimum":0,"maximum":1000000000000},"maxSubscribers":{"description":"Maximum subscriber count.","type":"integer","minimum":0,"maximum":1000000000000},"minAvgViewsPerVideo":{"description":"Minimum average views per video.","type":"integer","minimum":0,"maximum":1000000000000},"minMonthlyRevenue":{"description":"Minimum estimated revenue per month, in USD. Long-form only.","type":"number","minimum":0,"maximum":1000000000},"minRpm":{"description":"Minimum estimated RPM (USD per 1,000 views). Long-form only.","type":"number","minimum":0,"maximum":1000000000},"firstUploadAfter":{"description":"Channel's first upload on or after this date (YYYY-MM-DD). Good for finding new channels.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"page":{"description":"Results page, 1 to 20. Default 1.","type":"integer","minimum":1,"maximum":20}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/find_outlier_videos":{"post":{"operationId":"find_outlier_videos","summary":"Find outlier videos","description":"Find faceless YouTube outlier videos from a curated research database. Describe a topic to find uploads substantially outperforming their channel's usual results. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"default":"","description":"Describe the niche, or leave empty / use * to browse by filters only.","type":"string","maxLength":200},"page":{"default":1,"description":"Results page, 1 to 20. Default 1.","type":"integer","minimum":1,"maximum":20},"limit":{"default":24,"description":"Videos per page, 1 to 50. Default 24.","type":"integer","minimum":1,"maximum":50},"minOutlierScore":{"default":3,"description":"Minimum outlier score: the video's views as a multiple of its channel's usual views. Default 3 (3x).","type":"number","minimum":0,"maximum":1000},"maxOutlierScore":{"description":"Maximum outlier score.","type":"number","minimum":0,"maximum":1000000000},"minSubscribers":{"description":"Minimum subscribers of the uploading channel.","type":"integer","minimum":0,"maximum":1000000000000},"maxSubscribers":{"description":"Maximum subscribers of the uploading channel.","type":"integer","minimum":0,"maximum":1000000000000},"minViews":{"description":"Minimum video views.","type":"integer","minimum":0,"maximum":1000000000000},"maxViews":{"description":"Maximum video views.","type":"integer","minimum":0,"maximum":1000000000000},"minDuration":{"description":"Minimum video length in seconds.","type":"number","minimum":0,"maximum":1000000000},"maxDuration":{"description":"Maximum video length in seconds.","type":"number","minimum":0,"maximum":1000000000},"minUploadDate":{"description":"Uploaded on or after this date (YYYY-MM-DD).","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"maxUploadDate":{"description":"Uploaded on or before this date (YYYY-MM-DD).","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"videoType":{"description":"long = long-form only, shorts = Shorts only. Omit for both.","type":"string","enum":["long","shorts"]},"ytChannelId":{"description":"Only videos from this channel (UC… id, from search_youtube or find_niches).","type":"string","pattern":"^UC[\\w-]{22}$"},"isAiContent":{"description":"true keeps only videos flagged as AI-made; false excludes them.","type":"boolean"},"sortBy":{"description":"Sort field. Omit for best match to the query.","type":"string","enum":["outlierScore","videoViews","channelSubCount","videoPublishedAt"]},"sortDirection":{"description":"Sort direction for sortBy.","type":"string","enum":["asc","desc"]}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_credit_balance":{"post":{"operationId":"get_credit_balance","summary":"AI credit balance","description":"This workspace's AI credit balance: credits left, this period's allowance and use, and the most recent charges (tool, credits, when). Every paid tool on this connection draws from this balance and says what it costs. Use before a large batch, or when a call fails for lack of credits. Free.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"recent":{"default":10,"description":"How many recent charges to include.","type":"integer","minimum":0,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/buy_credits":{"post":{"operationId":"buy_credits","summary":"Buy AI credits","description":"How to add AI credits: the credit packs and prices, and the kloudboard billing link where the workspace owner buys them (Stripe Checkout). If the workspace's subscription has ended, no packs are offered: it says how to reopen the subscription instead. Does not charge anything. Give the person the link; never retry a paid tool in a loop while out of credits.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_pricing":{"post":{"operationId":"get_pricing","summary":"Quote AI credits","description":"Quote AI credits before running anything. With no arguments: the price list for every paid job. With jobs: the exact cost of each planned call (same pricing the tools charge with), the total, and whether this workspace can afford it. Use before a batch of paid calls and tell the person the total. Free.\n\nPrice: Free.","tags":["core"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"description":"Planned calls to quote. Omit for the price list.","maxItems":50,"type":"array","items":{"type":"object","properties":{"tool":{"type":"string","minLength":2,"maxLength":64,"description":"The paid tool to quote, e.g. \"generate_audio\"."},"args":{"description":"The arguments you plan to pass (prompt, model, count, duration...).","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["tool"]}}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_voices":{"post":{"operationId":"list_voices","summary":"List voices","description":"List the workspace's ElevenLabs voices (id, name, category) for generate_audio. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/generate_audio":{"post":{"operationId":"generate_audio","summary":"Generate voice, SFX or music","description":"Generate ElevenLabs audio: tts (a voiceover of the text), sfx (a sound effect from a description) or music (a background track from a mood). Saved to the workspace Library and filed in Drive under kloudie/<today>/; returns asset (asset_id, drive_file_id, a 24h url, expires_at). With timestamps, tts also returns every word's start/end in seconds for word-synced cuts, and files English captions (.srt, free) next to it (captions.drive_file_id, ready to upload as the video's caption track). Costs AI credits: tts about 60 per 1,000 characters (half with quality fast), sfx about 45, music about 55 per 30 s.\n\nPrice: About 50 AI credits: 1,000 characters, standard (Multilingual v2).","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"capability":{"type":"string","enum":["tts","sfx","music"],"description":"tts = voiceover, sfx = sound effect, music = background track."},"prompt":{"type":"string","minLength":1,"maxLength":5000,"description":"tts: the exact words to speak (up to 5,000 characters). sfx/music: a description of the sound or mood."},"voiceId":{"description":"tts voice id (list_voices, in the create toolset, lists the workspace's voices). Default: a neutral stock voice.","type":"string"},"timestamps":{"description":"tts only: also return word timings [{ word, start, end }] in seconds.","type":"boolean"},"quality":{"description":"tts only: standard (Multilingual v2, best) or fast (Flash v2.5, half the credits). Default standard.","type":"string","enum":["standard","fast"]},"durationSeconds":{"description":"sfx only: clip length in seconds. Omit to let the model choose.","type":"number","minimum":0.5,"maximum":30},"lengthSeconds":{"description":"music only: track length in seconds. Default 30.","type":"number","minimum":10,"maximum":300},"folder":{"description":"Drive folder for the copy, e.g. \"kloudie/episode-12\" (created if missing). Default kloudie/<today>.","type":"string","maxLength":300}},"required":["capability","prompt"]},"example":{"capability":"tts","prompt":"A calm, curious voiceover: why do planes have winglets?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":50,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/generate_thumbnail":{"post":{"operationId":"generate_thumbnail","summary":"Generate thumbnail","description":"Create a YouTube thumbnail with Pikzels: tool generate (text prompt), recreate (model a reference image, imageUrl required), or edit (change an image per instruction, imageUrl required). Saves to the workspace thumbnail library and Drive (kloudie/<today>/), returns asset with a 6h url. Costs AI credits (about 130 for pkz_3).\n\nPrice: About 120 AI credits: thumbnail, pkz_3.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string","enum":["generate","recreate","edit"],"description":"generate = from text, recreate = model a reference image, edit = change an image per the prompt."},"prompt":{"type":"string","minLength":3,"maxLength":2000,"description":"What the thumbnail should show (generate/recreate) or the change to make (edit)."},"imageUrl":{"description":"Public image URL; required for recreate (the reference) and edit (the image to change).","type":"string","format":"uri"},"model":{"description":"Pikzels model for generate/recreate. Default pkz_3; edit ignores it.","type":"string","enum":["pkz_2","pkz_3","pkz_4","pkz_4_5"]},"format":{"description":"Aspect ratio. Default 16:9.","type":"string","enum":["16:9","9:16","1:1"]},"folder":{"description":"Drive folder for the copy, e.g. \"kloudie/episode-12\" (created if missing). Default kloudie/<today>.","type":"string","maxLength":300}},"required":["tool","prompt"]},"example":{"tool":"generate","prompt":"A calm, curious voiceover: why do planes have winglets?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":120,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/score_thumbnail":{"post":{"operationId":"score_thumbnail","summary":"Score thumbnail","description":"Grade any thumbnail image URL 0-100 with Pikzels (five subscores plus one suggestion). Works on competitor thumbnails (https://i.ytimg.com/vi/VIDEOID/hqdefault.jpg). Costs about 20 credits.\n\nPrice: About 20 AI credits: one thumbnail score.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"imageUrl":{"type":"string","format":"uri","description":"Public URL of the thumbnail image to grade."},"title":{"description":"The video title it will run with, so the grade judges the pair.","type":"string","maxLength":300}},"required":["imageUrl"]},"example":{"imageUrl":"example imageUrl"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":20,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/generate_titles":{"post":{"operationId":"generate_titles","summary":"Generate titles","description":"Three to five YouTube title suggestions from Pikzels, from a topic, a thumbnail URL, or both. Costs about 55 credits.\n\nPrice: About 55 AI credits: 3 to 5 title ideas.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"description":"The video topic or idea. Give this, imageUrl, or both.","type":"string","maxLength":500},"imageUrl":{"description":"Public URL of the thumbnail the titles should pair with.","type":"string","format":"uri"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":55,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/transcribe":{"post":{"operationId":"transcribe","summary":"Transcribe a video or file","description":"Transcribe a video from its link (YouTube, Instagram, TikTok, Facebook) or an audio/video file in the workspace Drive (fileId, for example from upload_file). A YouTube video with captions costs about 10 AI credits; anything transcribed from audio (other platforms, Drive files, videos without captions) costs about 15 credits per started minute. A long link can return a job_id: poll get_job.\n\nPrice: About 40 AI credits: transcribed from audio, per started minute; estimate assumes 3 min (pass durationSeconds).","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"Video URL on YouTube, Instagram, TikTok or Facebook. Give this or fileId.","type":"string","maxLength":2048,"format":"uri"},"fileId":{"description":"Drive fileId of an audio or video file (from finish_upload, save_to_drive or search_drive). Give this or url.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"withTimestamps":{"description":"fileId only: also return start times per line (for captions and cuts). Default false.","type":"boolean"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":40,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/dub_video":{"post":{"operationId":"dub_video","summary":"Dub a video into other languages","description":"The studio dub: ElevenLabs Dubbing keeps every speaker's own voice, best for interviews, podcasts and videos with several speakers. Dub a video or audio into other languages. source is a Drive file id, a Library creation id or a public link. It is a long job: it returns a job_id at once; poll get_job every 30 seconds until done (a few minutes per language). Each finished dub is filed in Drive under kloudie/<date> and listed in Playground, Dubbing. Costs about 295 AI credits a minute per language (about 195 watermarked). When the length is unknown, max_minutes (default 10) is held per language and the dub covers at most that many minutes; delivery charges the real length and refunds the rest, and a failed language is not charged.\n\nPrice: About 2,945 AI credits: 1 language × up to 10 min at 295 credits a minute; held, then the real length is charged and the rest refunded (pass max_minutes or duration_seconds for a shorter source).","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","minLength":1,"maxLength":2000,"description":"What to dub: a Drive file id (search_drive, finish_upload), a Library creation id (list_library), or a public https link to the video or audio (YouTube, TikTok, X, a direct file)."},"target_languages":{"minItems":1,"maxItems":14,"type":"array","items":{"type":"string","enum":["es","fr","de","pt","it","hi","ja","zh","ko","no","sv","ar","pl","tr"]},"description":"Languages to dub into, as codes: es (Spanish), fr (French), de (German), pt (Portuguese), it (Italian), hi (Hindi), ja (Japanese), zh (Chinese), ko (Korean), no (Norwegian), sv (Swedish), ar (Arabic), pl (Polish), tr (Turkish)."},"source_language":{"description":"The language spoken in the source, e.g. en. Detected when omitted.","type":"string","minLength":2,"maxLength":8},"watermark":{"description":"Watermarked dubs cost about a third less. Default false (clean).","type":"boolean"},"num_speakers":{"description":"How many people speak. Detected when omitted.","type":"integer","minimum":1,"maximum":9},"max_minutes":{"description":"The source's length in minutes, at most, when it is not known (a link). That length is held per language; the real length is charged and the rest refunded. Default 10.","type":"integer","minimum":1,"maximum":60}},"required":["source","target_languages"]},"example":{"source":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","target_languages":["es"]}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":2945,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/save_creation":{"post":{"operationId":"save_creation","summary":"Save to Library","description":"Save a script or social post pack into the workspace Library (Playground > Library). Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["script","posts"],"description":"script = a video script, posts = a social post pack."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Library title, up to 200 characters."},"body":{"type":"string","minLength":1,"maxLength":60000,"description":"The full text to save (plain text or Markdown), up to 60,000 characters."}},"required":["kind","title","body"]},"example":{"kind":"script","title":"Episode 13: contrails","body":"example body"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_library":{"post":{"operationId":"list_library","summary":"List library","description":"Browse the workspace Library: saved scripts, post packs, audio, images, videos and reports (titles only), with optional kind filter and title search. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"description":"Only this kind of creation. Omit for all kinds.","type":"string","enum":["script","posts","tts","image","video","report"]},"query":{"description":"Case-insensitive match on the title.","type":"string","maxLength":100},"limit":{"description":"Max items, newest first. Default 20, max 50.","type":"integer","minimum":1,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_creation":{"post":{"operationId":"get_creation","summary":"Get Library item","description":"Fetch one Library creation by id: text in 15,000-character pages, or a fresh 6h media link (use it when an earlier link expired). If nextOffset is present, call again with that offset to read the rest. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"creationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Creation id from list_library or from the tool that made it."},"offset":{"description":"Character offset to read from; pass the previous nextOffset. Default 0.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["creationId"]},"example":{"creationId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_youtube_channel":{"post":{"operationId":"get_youtube_channel","summary":"YouTube channel lookup","description":"Look up one YouTube channel by its UC… id (search_youtube returns them): subscribers, views, country, description, and outlier videos. From a @handle, URL or name, use analyze_channel. Billed by usage; the result reports the exact cost. Failed requests are refunded and cached reports are free.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"type":"string","pattern":"^UC[\\w-]{20,}$","description":"YouTube channel id starting with UC (from search_youtube or a channel URL)."}},"required":["channelId"]},"example":{"channelId":"UC_x5XG1OV2P6uZZ5FSM9Ttw"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/generate_image":{"post":{"operationId":"generate_image","summary":"Generate image","description":"Generate one or two images from a text prompt with Nano Banana (nano-banana-2 fast, nano-banana-pro sharper). Optionally pass up to 4 reference images to edit or match, in order (the model sees them as input image 1, 2, …): referenceUrl / referenceUrls (public URLs) and referenceIds (the workspace's saved style references). Set aspect (1:1, 4:3, 3:2, 16:9, 9:16, 2:3). To copy an outlier thumbnail: referenceUrls [outlier thumbnail, brand or subject image] (or referenceIds of saved references), model nano-banana-pro, aspect 16:9, and a prompt like \"Recreate input image 1: same composition, camera, lighting, palette and text style; only the subject changes. Input image 2 shows <the real subject>.\" Saves to the Library and Drive (kloudie/<today>/), returns assets with 6h links. Costs AI credits; references cost nothing extra.\n\nPrice: About 50 AI credits: 1 × nano-banana-2.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":4000,"description":"What the image should show, or the edit to make to the reference. Name references as input image 1, input image 2, … in their order."},"model":{"description":"Default nano-banana-2 (about 50 credits); nano-banana-pro is sharper (about 95).","type":"string","enum":["nano-banana-2","nano-banana-pro"]},"aspect":{"description":"Aspect ratio. Default 1:1.","type":"string","enum":["1:1","4:3","3:2","16:9","9:16","2:3"]},"count":{"description":"How many images to generate, each charged. Default 1.","type":"integer","minimum":1,"maximum":2},"referenceUrl":{"description":"Public image URL (max 8 MB) to edit or use as a style/subject reference. Input image 1 when referenceUrls is also given.","type":"string","format":"uri"},"referenceUrls":{"description":"Public image URLs (max 8 MB each), in order: input image 1, 2, … E.g. [outlier thumbnail, brand/subject reference].","maxItems":4,"type":"array","items":{"type":"string","format":"uri"}},"referenceIds":{"description":"Ids of the workspace's saved style references (studio toolset), after the URLs in order. Use for a brand reference saved once.","maxItems":4,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"folder":{"description":"Drive folder for the copy, e.g. \"kloudie/episode-12\" (created if missing). Default kloudie/<today>.","type":"string","maxLength":300}},"required":["prompt"]},"example":{"prompt":"A calm, curious voiceover: why do planes have winglets?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":50,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/generate_video":{"post":{"operationId":"generate_video","summary":"Generate video","description":"Generate a short (4-8s) video clip from a text prompt with Google Veo (veo-3.1-lite cheapest, veo-3.1-fast, veo-3.1 sharpest). Set aspect (16:9 or 9:16) and duration; optionally animate a first frame via referenceUrl or a Library image via sourceCreationId. Async: returns a job_id; poll get_job until the clip lands in the Library and Drive. Costs AI credits (about 300 for 8 s of veo-3.1-lite; get_pricing quotes exactly).\n\nPrice: About 298 AI credits: 6 s veo-3.1-lite (estimate held; final follows the provider receipt).","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":2000,"description":"What happens in the clip: subject, action, camera, style."},"model":{"description":"Default veo-3.1-lite (cheapest). Credits scale with model and duration.","type":"string","enum":["veo-3.1-lite","veo-3.1-fast","veo-3.1"]},"duration":{"description":"Clip length in seconds, 4 to 8. Default 6.","type":"integer","minimum":4,"maximum":8},"aspect":{"description":"Aspect ratio. Default 16:9.","type":"string","enum":["16:9","9:16"]},"referenceUrl":{"description":"Public image URL to use as the first frame. Takes precedence over sourceCreationId.","type":"string","format":"uri"},"sourceCreationId":{"description":"Library image creationId (from generate_image or list_library) to use as the first frame.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generateAudio":{"description":"Generate a native soundtrack with the clip. Default true.","type":"boolean"},"folder":{"description":"Drive folder for the copy, e.g. \"kloudie/episode-12\" (created if missing). Default kloudie/<today>.","type":"string","maxLength":300}},"required":["prompt"]},"example":{"prompt":"A calm, curious voiceover: why do planes have winglets?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":298,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/create_youtube_video":{"post":{"operationId":"create_youtube_video","summary":"Create YouTube rough cut","description":"Create a narrated 16:9 stock-footage rough cut from a brief or Library script, up to 650 narration words. Library script narration is preserved, never rewritten. Pass the user's constraints in brief and targetDuration. Use dryRun=true for a FREE preflight before paid generation. Illustrative stock and timed captions cannot supply explanatory diagrams or establish publish readiness. Returns a jobId; poll get_job with its job_id. Generation costs credits, including completed narration if a later stage fails.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"description":"Short topic; used as the brief when brief is omitted.","type":"string","minLength":3,"maxLength":2000},"creationId":{"description":"Library script id (list_library kind script, under 12,000 characters) to narrate word for word.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"brief":{"description":"What the video is about plus the user's constraints (audience, tone, must-include points). Needed unless creationId is set.","type":"string","minLength":3,"maxLength":4000},"dryRun":{"description":"Free deterministic preflight only. Does not generate narration, footage or a render, create a job, or spend credits.","type":"boolean"},"targetDuration":{"description":"Requested runtime window. Pass the user's actual range, for example 120 to 180 for 2–3 minutes. Never shorten an approved script to fit.","type":"object","properties":{"minSeconds":{"type":"number","minimum":10,"maximum":300,"description":"Shortest acceptable runtime in seconds."},"maxSeconds":{"type":"number","minimum":10,"maximum":300,"description":"Longest acceptable runtime in seconds."}},"required":["minSeconds","maxSeconds"]}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_channel_thumbnails":{"post":{"operationId":"get_channel_thumbnails","summary":"Get channel thumbnails","description":"List a YouTube channel's recent thumbnails from a channel or video link, to copy its style. Public data, free.\n\nPrice: Free.","tags":["research"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"maxLength":2000,"description":"A YouTube channel URL, @handle URL, UC… channel id, or any video link from the channel."}},"required":["url"]},"example":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/save_reference":{"post":{"operationId":"save_reference","summary":"Save style reference","description":"Save an image URL into the workspace style-reference set for reuse in image generation. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"imageUrl":{"type":"string","format":"uri","description":"Public image URL to save (max 10 MB)."},"label":{"description":"Short name to recognize the reference by.","type":"string","maxLength":120}},"required":["imageUrl"]},"example":{"imageUrl":"example imageUrl"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_saved_references":{"post":{"operationId":"list_saved_references","summary":"List style references","description":"List the workspace's saved style references with preview links. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/generate_report":{"post":{"operationId":"generate_report","summary":"Generate report","description":"Write a titled markdown report on a topic and save it to the Library. Costs about 9 AI credits, billed by the model's actual usage.\n\nPrice: About 9 AI credits: upper estimate; billed by the model's actual usage.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"brief":{"type":"string","minLength":3,"maxLength":4000,"description":"The topic plus every fact the report should rely on; the brief is its only evidence."},"instructions":{"description":"Extra direction on length, format or audience.","type":"string","maxLength":1000}},"required":["brief"]},"example":{"brief":"example brief"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":9,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/save_creation_to_brain":{"post":{"operationId":"save_creation_to_brain","summary":"Library item to Brain","description":"Save a text creation (script, posts, or report) from the Library into the workspace Brain as a searchable note. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"creationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Library creationId of a script, post pack or report (from list_library)."}},"required":["creationId"]},"example":{"creationId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/attach_creation_to_card":{"post":{"operationId":"attach_creation_to_card","summary":"Library item to card","description":"Attach a Library creation to a board card as a file. Needs the card (video) id. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"creationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Library creationId to attach (from list_library)."},"cardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Card id from list_cards or create_card."}},"required":["creationId","cardId"]},"example":{"creationId":"00000000-0000-4000-8000-000000000000","cardId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/lipsync_video":{"post":{"operationId":"lipsync_video","summary":"Lip-sync a video to new audio","description":"Lip-sync a video to a new audio track with sync.so: only the mouth is regenerated so the speaker says the new words; face, eyes and gestures stay the real footage. video and audio are each a Drive file id, a Library creation id or a public https link. Pass segments to sync (and pay for) only the seconds where the face is visible. Runs on the workspace's own sync.so key (connected in Settings, Apps; sync.so bills that account, no AI credits). The first lip-sync in a workspace needs the person to confirm: \"I am the person in this footage or have their written consent; no public figures.\" Ask them, and pass consent_confirmed only after they say yes. A long job: returns a job_id; poll get_job every 30 seconds. The result is saved to the Library and Drive (kloudie/<date>). Managed billing on the platform key, where enabled, costs about 1765 AI credits a minute on lipsync-2.\n\nPrice: About 1,765 AI credits: lipsync-2, 60 s at 1765 credits a minute, only on managed billing; with the workspace's own sync.so key it costs no credits.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"video":{"type":"string","minLength":1,"maxLength":2000,"description":"The footage of the speaker: a Drive file id (search_drive, finish_upload), a Library creation id, or a public https link to a video file."},"audio":{"type":"string","minLength":1,"maxLength":2000,"description":"The new voice track the mouth should follow: a Drive file id, a Library creation id (a generate_audio voiceover) or a public https link to an audio file."},"model":{"description":"lipsync-2 (default, the cheapest), lipsync-2-pro (sharper teeth and detail, about 1.7x) or sync-3 (native 4K, about 2.7x).","type":"string","enum":["lipsync-2","lipsync-2-pro","sync-3"]},"sync_mode":{"description":"When the audio and video lengths differ: cut_off (default), bounce, loop, silence or remap.","type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"temperature":{"description":"How expressive the mouth is, 0-1 (lipsync-2 models only).","type":"number","minimum":0,"maximum":1},"occlusion_detection":{"description":"Handle hands or objects in front of the face (slower).","type":"boolean"},"active_speaker_detection":{"description":"Sync only the person who is speaking when several faces are on screen.","type":"boolean"},"model_mode":{"description":"lips (default), face or head: how much of the face is regenerated.","type":"string","enum":["lips","face","head"]},"segments":{"description":"Only these windows of the video are lip-synced and billed (the seconds where the face is visible), each with the same window of the audio. Omit to sync the whole clip.","maxItems":50,"type":"array","items":{"type":"object","properties":{"start":{"type":"number","minimum":0,"description":"Start, in seconds of the video."},"end":{"type":"number","exclusiveMinimum":0,"description":"End, in seconds of the video."}},"required":["start","end"]}},"duration_seconds":{"description":"The clip's length in seconds when it is not known (a link). Used for the quote.","type":"number","exclusiveMinimum":0,"maximum":1800},"name":{"description":"Name for the result in the Library and Drive. Default: the video's name + \"lip-sync\".","type":"string","maxLength":120},"folder":{"description":"Drive folder for the result; default kloudie/<date>.","type":"string","maxLength":300},"consent_confirmed":{"description":"Only on the workspace's first lip-sync, and only after the person has said yes to: \"I am the person in this footage or have their written consent; no public figures.\" Never set it on your own.","type":"boolean"}},"required":["video","audio"]},"example":{"video":"example video","audio":"example audio"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":1765,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_system_templates":{"post":{"operationId":"list_system_templates","summary":"List System templates","description":"List ready-made System templates (daily short, long-form package, repurpose a post, social launch, weekly outlier report, comment listener, dubbing pack): what each run makes, its steps, what the brief needs and the estimated AI credits per run. A template with a suggested_cron also returns monthly_forecast (runs in the next 30 days × credits per run) and a suggested_monthly_budget: quote both before scheduling. Systems are free; runs pay only the AI credits their steps use. Fork one with create_system_from_template. Free.\n\nPrice: Free.","tags":["systems"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/create_system_from_template":{"post":{"operationId":"create_system_from_template","summary":"Create a System from a template","description":"Fork a System template into this workspace as a new System (version 1, nothing runs yet), optionally on a schedule with a monthly AI credit budget. Returns the steps, the per-run credit estimate and the System's link; with a schedule, the schedule result carries monthly_forecast (runs a month × credits per run ≈ credits a month), monthly_budget_credits and budget_source. Tell the person the per-run and monthly cost before asking for a yes. Change it later on the System's page in the app (update_system where the connection lists it), run it with run_system. Free to create; each run spends credits.\n\nPrice: Free.","tags":["systems"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"templateId":{"type":"string","enum":["daily-short","longform-package","repurpose-post","social-launch","outlier-report","comment-listener","weekly-learn","dubbing-pack"],"description":"templateId from list_system_templates."},"title":{"description":"Name for the new System; defaults to the template's name.","type":"string","maxLength":80},"schedule":{"description":"Also put the new System on a schedule. Only when the person asked for one; tell them the monthly forecast and cap.","type":"object","properties":{"cron":{"type":"string","maxLength":100,"description":"5-field cron, e.g. \"0 9 * * 1-5\" = weekdays 09:00."},"timezone":{"description":"IANA time zone such as \"Europe/Oslo\". Default UTC.","type":"string","maxLength":64},"brief":{"description":"The brief every scheduled run receives.","type":"string","maxLength":8000},"monthlyBudgetCredits":{"description":"Monthly AI credit cap. Omitted: the suggested cap is used (forecast + 25 %, rounded) and the schedule result says so (budget_source: suggested).","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"perRunBudgetCredits":{"description":"Optional per-run AI credit ceiling.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["cron"]},"publish":{"description":"End the System with a publish step (daily short). Each post asks the workspace's Autopilot rules first and waits for one-click approval unless the person set Autopilot to post on its own.","type":"object","properties":{"platforms":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["youtube","tiktok","instagram","facebook","twitter","linkedin"]},"description":"Where each run posts its video (connected accounts)."},"folder":{"description":"Drive folder of finished videos to post from, oldest first. Default \"Autopilot/<System name>/Ready to post\".","type":"string","maxLength":200}},"required":["platforms"]},"approve_script":{"description":"Add a human gate after the script (an approve step): every run waits for a person to read and approve the script before the voiceover (or the next paid step). Offer it for long-form; leave it off for a scheduled System that should run unattended.","type":"boolean"}},"required":["templateId"]},"example":{"templateId":"daily-short"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/review_script":{"post":{"operationId":"review_script","summary":"Review script","description":"Beat-by-beat critique of a video script, scored on hook, retention, pacing, cta, and seo, grounded in this workspace's brand voice and top-performing videos. Pass the script via scriptText, or creationId for a saved Library script. Returns a not-grounded flag when no brand voice or performance data exists yet. Costs a few AI credits.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"scriptText":{"description":"The script text to review, up to 60,000 characters. Give this or creationId.","type":"string","maxLength":60000},"creationId":{"description":"Library script creationId (from list_library or save_creation) to review instead of scriptText.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"channel":{"description":"Which connected channel the script is for (name or @handle), when the workspace has several: grounds the review in that channel's retention.","type":"string","maxLength":120}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/refresh_voice_profile":{"post":{"operationId":"refresh_voice_profile","summary":"Refresh voice profile","description":"Distill a durable VOICE PROFILE (hook formulas, cadence, recurring phrases, structure, cta style) from the workspace's imported video transcripts and save it as a Brain doc that script writing follows. Needs 2+ matching transcripts. The default profile studies only the workspace's OWN channel; a NAMED voice takes name + titleMatch. For a posting voice, pass a platform ('X', 'tiktok', 'instagram') as titleMatch with a name. Costs a few AI credits.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name for a separate named voice (saved as \"Voice: <name>\"). Omit to refresh the workspace's own voice profile.","type":"string","maxLength":80},"titleMatch":{"description":"Channel name or title text picking which transcripts to study, or a platform (X, tiktok, instagram) to learn from imported posts.","type":"string","maxLength":120}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_voice_profile":{"post":{"operationId":"get_voice_profile","summary":"Read the creator's voice","description":"Read the creator's voice before writing anything: the workspace voice profile (hooks, cadence, recurring phrases, structure, CTA style) or a named voice, plus the workspace's custom instructions. Write scripts, posts and titles to match it. Lists the available voices; if none exists, refresh_voice_profile builds one from imported videos. Free.\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"A named voice (as listed in \"voices\"), e.g. \"X\" or \"Narrator\". Omit for the workspace's own voice profile.","type":"string","maxLength":80}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_channel_profile":{"post":{"operationId":"get_channel_profile","summary":"Channel retention profile","description":"Read the channel's retention profile before writing a script, hook, title or edit plan: what holds and loses THIS audience, from real YouTube audience-retention curves (hook retention at 3 s for Shorts or 0:30 for long-form, average % viewed, end retention, average view duration, the moments several videos lose people with what was said there, rewatched moments) and a checklist for the next script. Rebuilt daily per connected YouTube channel. Free; read-only.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"description":"short (Shorts, up to 3 minutes) or long (long-form). Omit for both.","type":"string","enum":["short","long"]},"channel":{"description":"Channel name, when the workspace has more than one connected YouTube channel.","type":"string","maxLength":120}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/web_search":{"post":{"operationId":"web_search","summary":"Search the web","description":"Search the open internet for current or external information (news, facts, prices, competitors, anything recent). Returns sources with title, url, and a snippet. Read the best ones with read_url before relying on them. Costs about 8 AI credits per search, whatever maxResults is; an empty search is free.\n\nPrice: About 8 AI credits: one search, 5 results (an empty search is free).","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":400,"description":"The search query. Be specific."},"maxResults":{"description":"How many results (default 5, max 8).","type":"integer","minimum":1,"maximum":8}},"required":["query"]},"example":{"query":"best time to post on YouTube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":8,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/read_url":{"post":{"operationId":"read_url","summary":"Read a web page","description":"Open a single web page or video URL and read its full text (articles, docs, blog posts; video URLs return their transcript). Use it to read a web_search result or any link. Costs about 10 AI credits per page; a TikTok, Instagram or other video without captions costs about 15 per minute of video. An unreadable page is free.\n\nPrice: About 10 AI credits: one page or captioned video (a video without captions bills per minute, like transcribe).","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The absolute http(s) URL to open and read."}},"required":["url"]},"example":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":10,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/deep_research":{"post":{"operationId":"deep_research","summary":"Deep research","description":"Research a topic across many web sources and save a cited report to the workspace Library. Plans sub-questions, reads up to ~12 sources, and writes a long note citing them by number. Slower and pricier than web_search (a minute or two, about 300 AI credits); use web_search + read_url for a quick fact. Returns the report's Library id (get_creation reads it in full) and the sources read.\n\nPrice: About 300 AI credits: one cited research report.","tags":["research"],"x-kloudboard-effect":"paid","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","minLength":3,"maxLength":400,"description":"The topic to research. Be specific."},"angle":{"description":"Optional framing/audience, e.g. 'for a faceless finance channel'.","type":"string","maxLength":400}},"required":["topic"]},"example":{"topic":"why planes have winglets"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":300,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/search_help":{"post":{"operationId":"search_help","summary":"Search the help docs","description":"Curated, accurate documentation about kloudboard itself: features, permissions and guest visibility, files and Drive, chat bridges, credits and billing, payouts and fees, integrations and API availability, automations and webhooks. Call this for any question about how kloudboard works, and answer only from what it returns.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":400,"description":"The question or topic in plain words, e.g. \"how do guest permissions work\"."}},"required":["query"]},"example":{"query":"best time to post on YouTube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/search_people":{"post":{"operationId":"search_people","summary":"Search people","description":"Find teammates in this workspace by name or email. Returns each match with their userId, which is what card and task assign/reassign (update_card, update_task) need. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":120,"description":"Part of a teammate's name or email."}},"required":["query"]},"example":{"query":"best time to post on YouTube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_brain":{"post":{"operationId":"list_brain","summary":"List the Brain","description":"List the Brain's contents by structure: with no arguments returns the workspace's Brain folders (with counts) plus source groups and totals; with `folder` returns every item in that folder or group (title, type, id). Use it to answer what is IN the Brain; use search_brain for passage retrieval. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"folder":{"description":"A folder or source-group name from a previous list_brain call. Omit to list folders and groups.","type":"string","maxLength":120}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/read_brain_item":{"post":{"operationId":"read_brain_item","summary":"Read brain item","description":"Read one Brain item's full text end to end: an uploaded file, a synced source, or a knowledge note. Pass the item's id (from search_brain or list_brain) or its title (fuzzy matched). Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Item id from search_brain (src:<uuid> or doc:<slug>) or list_brain (a source uuid or a doc slug). Give this or title.","type":"string","maxLength":200},"title":{"description":"Item title, fuzzy matched, when the id is unknown.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/complete_stage_cards":{"post":{"operationId":"complete_stage_cards","summary":"Complete stage cards","description":"Mark every accessible unfinished card in one column complete, in one operation (up to 500). Resolve exact boardId and stageId using list_boards. Preserves the column and existing assignees; never creates payouts. To credit an editor, resolve their userId with search_people and pass assigneeId to add them as an assignee (including already completed cards when retrying credit). Returns actual completedCount/cardIds and assignedCount/assignedCardIds. Up to 500 selected cards. Use for an explicit request to complete all cards in a column, not repeated update_card calls.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Board id from list_boards."},"stageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The column (stage) id on that board, from list_boards."},"assigneeId":{"description":"Existing teammate userId from search_people. Adds editor credit without replacing assignees or creating payouts.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["boardId","stageId"]},"example":{"boardId":"00000000-0000-4000-8000-000000000000","stageId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_tasks":{"post":{"operationId":"list_tasks","summary":"List tasks","description":"List or search tasks for the person connected: mine (assigned to them or their own unassigned), created (they made), assigned (assigned to them), or project (the shared board list, private excluded). Filter by title with query; completed=false shows open, true shows done, omit for both. Returns ids for update_task. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"default":"mine","description":"Which tasks; see the tool description. Default mine.","type":"string","enum":["mine","created","assigned","project"]},"completed":{"description":"false = open only, true = done only, omit for both.","type":"boolean"},"query":{"description":"Case-insensitive match on the task title.","type":"string","maxLength":120},"limit":{"default":25,"description":"Max tasks, newest first. Default 25, max 100.","type":"integer","minimum":1,"maximum":100}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/create_task":{"post":{"operationId":"create_task","summary":"Create task","description":"Create a workspace task assigned to the authenticated caller (already assigned to me, no reassignment needed), optionally with a due date (ISO 8601) or attached to a card. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300,"description":"Task title, up to 300 characters."},"dueAt":{"description":"Due date-time, ISO 8601 with offset, e.g. 2026-10-12T17:00:00Z.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"cardId":{"description":"Card id (from list_cards) to attach the task to.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["title"]},"example":{"title":"Episode 13: contrails"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/update_task":{"post":{"operationId":"update_task","summary":"Update task","description":"One structured edit on a task: complete, reopen, rename (newTitle), set_due (dueAt ISO 8601, or omit to clear), reassign (assigneeId, a member's user id), or unassign. Deleting is app-only. Identify the task with taskId, or taskName to resolve it by title. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"description":"Task id from list_tasks.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"taskName":{"description":"Task title to resolve when taskId is unknown; must match exactly one task.","type":"string","minLength":1,"maxLength":300},"action":{"type":"string","enum":["complete","reopen","rename","set_due","reassign","unassign"],"description":"Which operation to run; the tool description says what each one does and needs."},"newTitle":{"description":"rename: the new title.","type":"string","minLength":1,"maxLength":300},"dueAt":{"description":"set_due: ISO 8601 with offset. Omit to clear the due date.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"assigneeId":{"description":"reassign: the member's userId from search_people.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action"]},"example":{"action":"complete"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_cards":{"post":{"operationId":"list_cards","summary":"List cards","description":"List cards, newest first: optionally filtered by board, stage, or title text. Returns cardIds for get_card and update_card. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"description":"Only cards on this board (id from get_workspace_overview).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"stageId":{"description":"Only cards in this stage (id from get_workspace_overview).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"query":{"description":"Title text or a short id like KB-26.","type":"string","maxLength":120},"limit":{"description":"Max cards. Default 25, max 50.","type":"integer","minimum":1,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_card":{"post":{"operationId":"get_card","summary":"Get card","description":"One card in full: title, description, stage, board, due date, and its latest comments. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"cardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Card id from list_cards."}},"required":["cardId"]},"example":{"cardId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/update_card":{"post":{"operationId":"update_card","summary":"Update card","description":"One edit on a card (cardId from list_cards): move_stage (stageId from get_workspace_overview), rename (newTitle), set_due (dueAt ISO 8601, omit to clear), comment (body), complete, set_priority (priority, omit to clear), block (optional reason) or unblock. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"cardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Card id from list_cards."},"action":{"type":"string","enum":["move_stage","rename","set_due","comment","complete","set_priority","block","unblock"],"description":"Which operation to run; the tool description says what each one does and needs."},"stageId":{"description":"move_stage: target stage id on the card's board.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"newTitle":{"description":"rename: the new title.","type":"string","minLength":1,"maxLength":300},"dueAt":{"description":"set_due: ISO 8601 with offset. Omit to clear the due date.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"body":{"description":"comment: the comment text, up to 4,000 characters.","type":"string","minLength":1,"maxLength":4000},"priority":{"description":"set_priority: the new priority. Omit to clear it.","type":"string","enum":["urgent","high","medium","low"]},"reason":{"description":"block: why the card is blocked, up to 200 characters.","type":"string","maxLength":200}},"required":["cardId","action"]},"example":{"cardId":"00000000-0000-4000-8000-000000000000","action":"move_stage"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_card_template":{"post":{"operationId":"get_card_template","summary":"Get card template","description":"The board's card description template: the text new cards start from when created without a description. Empty when unset. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Board id from list_boards."}},"required":["boardId"]},"example":{"boardId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/set_card_template":{"post":{"operationId":"set_card_template","summary":"Set card template","description":"Set the board's card description template (up to 5000 chars; empty string clears it). New cards created without a description start from it. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Board id from list_boards."},"template":{"type":"string","maxLength":5000,"description":"The full template text (replaces the current one). Empty string clears it."}},"required":["boardId","template"]},"example":{"boardId":"00000000-0000-4000-8000-000000000000","template":"example template"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_boards":{"post":{"operationId":"list_boards","summary":"Boards and stages","description":"Every board's stages with live card counts. Ids feed create_card, list_cards, and update_card. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/create_document":{"post":{"operationId":"create_document","summary":"Create document","description":"Create a collaborative document in Drive from plain text or simple markdown (one paragraph per line). Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200,"description":"Document title (its Drive file name)."},"content":{"type":"string","minLength":1,"maxLength":60000,"description":"Body as plain text or simple Markdown, one paragraph per line, up to 60,000 characters."},"folderId":{"description":"Drive folder id (from search_drive or list_drive). Default: the Drive root.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["title","content"]},"example":{"title":"Episode 13: contrails","content":"example content"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/import_trello_board":{"post":{"operationId":"import_trello_board","summary":"Import trello board","description":"Import a Trello board through the workspace's connected Trello account: lists become columns, cards become cards (title, description, due date, order). Call WITHOUT trelloBoardId first to list the account's Trello boards, then pick one. Already-imported boards are reported, never doubled. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"trelloBoardId":{"description":"Trello board id from the list this tool returns when called without it. Omit to list them.","type":"string","minLength":1,"maxLength":64},"targetBoardId":{"description":"Existing kloudboard board id to import into. Omit to create a new board named after the source.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/import_notion_database":{"post":{"operationId":"import_notion_database","summary":"Import notion database","description":"Import a Notion database through the workspace's connected Notion account: the status (or select) property's options become columns, rows become cards (title, page body, due date, order). Call WITHOUT notionDatabaseId first to list the account's Notion databases, then pick one. Already-imported databases are reported, never doubled. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"notionDatabaseId":{"description":"Notion database id from the list this tool returns when called without it. Omit to list them.","type":"string","minLength":1,"maxLength":64},"targetBoardId":{"description":"Existing kloudboard board id to import into. Omit to create a new board named after the source.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/import_clickup_list":{"post":{"operationId":"import_clickup_list","summary":"Import clickup list","description":"Import a ClickUp list through the workspace's connected ClickUp account: the list's statuses become columns, tasks become cards (title, description, due date, order). Call WITHOUT clickupListId first to list the account's ClickUp lists, then pick one. Already-imported lists are reported, never doubled. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"clickupListId":{"description":"ClickUp list id from the list this tool returns when called without it. Omit to list them.","type":"string","minLength":1,"maxLength":64},"targetBoardId":{"description":"Existing kloudboard board id to import into. Omit to create a new board named after the source.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/import_monday_board":{"post":{"operationId":"import_monday_board","summary":"Import monday board","description":"Import a Monday.com board through the workspace's connected Monday account: status labels (or groups) become columns, items become cards (title, other columns folded into the description, due date, order). Call WITHOUT mondayBoardId first to list the account's Monday boards, then pick one. Already-imported boards are reported, never doubled. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"mondayBoardId":{"description":"monday.com board id from the list this tool returns when called without it. Omit to list them.","type":"string","minLength":1,"maxLength":64},"targetBoardId":{"description":"Existing kloudboard board id to import into. Omit to create a new board named after the source.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/import_asana_project":{"post":{"operationId":"import_asana_project","summary":"Import asana project","description":"Import an Asana project through the workspace's connected Asana account: sections become columns, tasks become cards (title, notes, completion marker, due date, order). Call WITHOUT asanaProjectId first to list the account's Asana projects, then pick one. Already-imported projects are reported, never doubled. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asanaProjectId":{"description":"Asana project id from the list this tool returns when called without it. Omit to list them.","type":"string","minLength":1,"maxLength":64},"targetBoardId":{"description":"Existing kloudboard board id to import into. Omit to create a new board named after the source.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/search_board_templates":{"post":{"operationId":"search_board_templates","summary":"Search board templates","description":"Search published board templates by name, topic, description or column names. Exact slugs are not required. Omit query to browse. Returns real templateIds; use these for apply_board_template, never invent a slug or templateId. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"description":"Words to match against template names, topics, descriptions and column names. Omit to browse.","type":"string","maxLength":200},"limit":{"description":"Max templates. Default 10, max 20.","type":"integer","minimum":1,"maximum":20}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/apply_board_template":{"post":{"operationId":"apply_board_template","summary":"Apply board template","description":"Create a new board from a published template chosen from search_board_templates. Needs board management permission. Copies its published columns and any included example cards. Use only when the user wants that template applied; if multiple search results fit, ask which one. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"templateId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"templateId from search_board_templates."}},"required":["templateId"]},"example":{"templateId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_affiliate_stats":{"post":{"operationId":"get_affiliate_stats","summary":"Get affiliate stats","description":"The API key creator's OWN affiliate partner standing: lifetime and trailing-30-day signups and commission earnings, grouped by commission status, plus recent events. Never another user's data. Free.\n\nPrice: Free.","tags":["account"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_channel_stats":{"post":{"operationId":"get_channel_stats","summary":"Get channel stats","description":"Every connected social channel with its latest synced stats (subscribers, views, videos, watch hours, estimated revenue) and a note when stats are missing or stale. With several channels, pass channel to read one. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"description":"One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_video_performance":{"post":{"operationId":"get_video_performance","summary":"Get video performance","description":"Per-video/post performance for this workspace, ranked by age-normalized views-per-day, with each item's engagement rate and multiple-vs-channel-average, a low_performers contrast set, and channel averages. Answers 'which of my videos did best', 'what's working', 'why did this flop'. Optionally filtered to one platform. Use get_channel_stats for channel totals. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"description":"Only this connected platform. Omit for all.","type":"string","enum":["youtube","tiktok","instagram","twitter","facebook"]},"channel":{"description":"One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all.","type":"string","maxLength":200},"limit":{"default":10,"description":"How many top videos to rank. Default 10, max 25.","type":"integer","minimum":1,"maximum":25}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_weekly_rollup":{"post":{"operationId":"get_weekly_rollup","summary":"Get weekly rollup","description":"Pre-aggregated weekly KPIs for the workspace's boards: cards completed, created, average cycle days, rework count/rate, per-stage dwell. Use for 'how was last week' and week-over-week questions. Pass boardName (or boardId) to scope to one board; since/until (ISO dates) to set the timeframe, else the last N weeks. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"weeks":{"default":4,"description":"Number of recent weeks when since is omitted. Default 4.","type":"integer","minimum":1,"maximum":52},"since":{"description":"Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window.","type":"string"},"until":{"description":"Window end (exclusive), same format. Default now.","type":"string"},"boardId":{"description":"Scope to this board (id from list_boards).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"boardName":{"description":"Scope to the board with this exact name (case-insensitive). Omit both for all boards.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_stage_dwell":{"post":{"operationId":"get_stage_dwell","summary":"Time in stage","description":"Time-in-stage statistics (average / p50 / p95 / max days) across a board's cards, from card stage-change history. Use for 'which stages are slow', 'where do cards bottleneck'. Pass boardName (or boardId) when the user names a board; omitting both aggregates every board. sinceDays (default 30) or since/until (ISO) sets the window. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"sinceDays":{"default":30,"description":"Look-back window in days when since is omitted. Default 30.","type":"integer","minimum":1,"maximum":365},"since":{"description":"Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window.","type":"string"},"until":{"description":"Window end (exclusive), same format. Default now.","type":"string"},"boardId":{"description":"Scope to this board (id from list_boards).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"boardName":{"description":"Scope to the board with this exact name (case-insensitive). Omit both for all boards.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/detect_inefficiencies":{"post":{"operationId":"detect_inefficiencies","summary":"Detect inefficiencies","description":"Ranked current process problems: the slowest bottleneck stages (avg/p95 days) plus a rework roll-up. Use for 'what's slowing us down', 'any bottlenecks'. Pass boardName (or boardId) to scope to one board; omitting both aggregates every board. sinceDays (default 30) or since/until (ISO). Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"sinceDays":{"default":30,"description":"Look-back window in days when since is omitted. Default 30.","type":"integer","minimum":1,"maximum":365},"since":{"description":"Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window.","type":"string"},"until":{"description":"Window end (exclusive), same format. Default now.","type":"string"},"boardId":{"description":"Scope to this board (id from list_boards).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"boardName":{"description":"Scope to the board with this exact name (case-insensitive). Omit both for all boards.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_card_timeline":{"post":{"operationId":"get_card_timeline","summary":"Get card timeline","description":"Chronological event history of one card, grouped into sessions (default), days, or individual events, with the columns each move went between; from/to are ISO and when reads them in the key owner's time zone. Use for 'walk me through this card', 'what happened to X', 'who worked on it'. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"cardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Card id from list_cards."},"granularity":{"default":"session","description":"session (default) groups bursts of activity, day groups by date, event lists every event.","type":"string","enum":["event","session","day"]}},"required":["cardId"]},"example":{"cardId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_recent_content":{"post":{"operationId":"list_recent_content","summary":"List recent content","description":"Recently published posts/videos across the workspace's connected channels, newest first, with per-item views/likes/comments. Optionally filtered to one platform. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"description":"Only this connected platform. Omit for all.","type":"string","enum":["youtube","tiktok","instagram","twitter","facebook"]},"channel":{"description":"One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all.","type":"string","maxLength":200},"limit":{"default":20,"description":"Max items, newest first. Default 20, max 50.","type":"integer","minimum":1,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_whats_new":{"post":{"operationId":"get_whats_new","summary":"What's new","description":"The published changelog, newest first: what shipped, with dates and bullet items. Use for 'what's new', 'what's new in <area>', 'did you ship X', 'when did Y land', release notes. Pass `query` for an area and `since` for a window. If nothing matches, the reply says so: then call search_help for the current product docs; an empty changelog never means nothing shipped. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"default":10,"description":"How many changelog entries, newest first. Default 10.","type":"integer","minimum":1,"maximum":25},"since":{"description":"Only entries dated on or after this ISO date (YYYY-MM-DD), e.g. the start of 'this month'.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"query":{"description":"Area or feature to filter by, matched against titles and bullet items, e.g. 'mcp', 'thumbnails', 'Drive'.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_payouts":{"post":{"operationId":"list_payouts","summary":"List payouts","description":"The workspace's freelancer payouts, newest first: who, amount, status, which video. Read-only.\n\nPrice: Free.","tags":["account"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"description":"Only payouts with this status. Omit for all.","type":"string","enum":["pending","approved","paid","denied"]},"limit":{"default":20,"description":"Max payouts, newest first. Default 20, max 50.","type":"integer","minimum":1,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_payout_summary":{"post":{"operationId":"get_payout_summary","summary":"Get payout summary","description":"Totals per payout status: how much is pending, approved, paid, denied in this workspace. Read-only.\n\nPrice: Free.","tags":["account"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/search_brain":{"post":{"operationId":"search_brain","summary":"Search the Brain","description":"Search the workspace's knowledge base (the kloudie Brain): synced docs, imported transcripts, uploaded files, notes, the voice profile and saved creations. Returns matching passages, each with a stable id (src:<uuid> or doc:<slug>), title and link to cite; the id reads the whole item. Pass several angles in `queries` in ONE call to explore broadly. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"description":"One search phrase. Give this, queries, or both.","type":"string","minLength":1,"maxLength":400},"queries":{"description":"Up to 6 phrasings searched together and merged into one ranked list.","maxItems":6,"type":"array","items":{"type":"string","minLength":1,"maxLength":400}},"k":{"description":"Passages per query. Default 8; total hits are capped at 50.","type":"integer","minimum":1,"maximum":50}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/save_to_brain":{"post":{"operationId":"save_to_brain","summary":"Save to the Brain","description":"Save a durable, team-visible note to the workspace knowledge base (the kloudie Brain) so it can be recalled later with search_brain. Each save creates a new note (saving the same text again is a no-op); pass `id` to update a note you saved. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Note title. Default: the first line of content.","type":"string","maxLength":120},"content":{"type":"string","minLength":2,"maxLength":20000,"description":"The note text (plain text or Markdown), up to 20,000 characters."},"id":{"description":"To update an existing note, its id from an earlier save_to_brain or search_brain (src:<uuid>). Omit to save a new note.","type":"string","maxLength":80}},"required":["content"]},"example":{"content":"example content"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_channel_content":{"post":{"operationId":"list_channel_content","summary":"List channel content","description":"List a social channel's recent videos/posts (title, date, already-in-Brain) WITHOUT importing. YouTube needs no connection: pass channel_url (channel link, @handle, or video link). Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["youtube","tiktok","instagram","twitter"],"description":"The platform the channel or links are on."},"channel_url":{"description":"YouTube: a channel link, @handle, or any video link. Other platforms: one or more full post/video links.","type":"string","maxLength":2000}},"required":["provider"]},"example":{"provider":"youtube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/import_channel_content":{"post":{"operationId":"import_channel_content","summary":"Import channel content to Brain","description":"Import a social channel's fresh content into the Brain (transcribing videos). Platforms: youtube, tiktok, instagram, twitter. Pass `query` to import a specific item by title words, `limit` (1-15 per call, default 10; the result says how many remain, so call again for the rest). Import without a connection by passing `channel_url`. Spends AI credits per transcribed item.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["brain"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["youtube","tiktok","instagram","twitter"],"description":"The platform the channel or links are on."},"channel_url":{"description":"YouTube: a channel link, @handle, or any video link. Other platforms: one or more full post/video links.","type":"string","maxLength":4000},"query":{"description":"Title words to import only the matching item(s).","type":"string","maxLength":200},"limit":{"description":"Max items to import this call, newest first. Default 10, max 15.","type":"integer","minimum":1,"maximum":15}},"required":["provider"]},"example":{"provider":"youtube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/create_board":{"post":{"operationId":"create_board","summary":"Create board","description":"Create a new board in this workspace, seeded with the default production pipeline stages (Idea, Script, Film, Edit, Publish). Returns the boardId and its stageIds. Needs board management permission. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"The board's name."}},"required":["name"]},"example":{"name":"Episode 13"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_stage":{"post":{"operationId":"manage_stage","summary":"Edit board stages","description":"Manage a board's kanban stages (columns): create (boardId + title), rename (stageId + title and/or color), or reorder (stageIds in the new order). Get ids from list_boards. Needs board management permission. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["create","rename","reorder"],"description":"Which operation to run; the tool description says what each one does and needs."},"boardId":{"description":"Board id from get_workspace_overview or list_boards. Required for create and reorder.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"stageId":{"description":"Stage id for rename or delete.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"description":"New stage name for create or rename.","type":"string","minLength":1,"maxLength":80},"color":{"description":"Stage dot color (a CSS var or value) for create or rename.","type":"string","maxLength":80},"stageIds":{"description":"For reorder: every stage id of the board in the new order.","minItems":1,"maxItems":50,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"moveToStageId":{"description":"For delete: move the deleted stage's cards here instead of orphaning them.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action"]},"example":{"action":"create"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_team":{"post":{"operationId":"manage_team","summary":"Team members and invites","description":"Manage the workspace team: list members and pending invitations, invite someone by email (seat member, admin, or guest), resend_invitation (invitationId from list), or set_role (memberId is a membership id from list). Inviting sends a real email: confirm the address with the person first. Inviting needs invite permission; changing roles needs member management permission. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","invite","resend_invitation","set_role"],"description":"Which operation to run; the tool description says what each one does and needs."},"email":{"description":"Invitee email for invite.","type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"seat":{"description":"Seat for invite or set_role. Default member. Admin is a member seat with the admin permission preset.","type":"string","enum":["member","admin","guest"]},"memberId":{"description":"Membership id (from list) for remove_member or set_role.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"invitationId":{"description":"Pending invitation id (from list) for resend_invitation or cancel_invitation.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_review":{"post":{"operationId":"manage_review","summary":"Review comments","description":"Work with review feedback on a Drive file (fileId from search_drive): list_comments, add_comment (optionally at a video timestampSeconds), resolve_comment (commentId from list_comments), approve or request_changes on a version (version number). Commenting needs drive view permission; approving or requesting changes needs drive upload permission. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list_comments","add_comment","resolve_comment","approve","request_changes"],"description":"Which operation to run; the tool description says what each one does and needs."},"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The Drive file under review (find it with search_drive). Required."},"content":{"description":"Comment text for add_comment.","type":"string","minLength":1,"maxLength":4000},"commentId":{"description":"Comment id (from list_comments) for resolve_comment.","type":"string","minLength":1,"maxLength":100},"version":{"description":"File version number. Required for approve and request_changes.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"timestampSeconds":{"description":"Anchor an add_comment at this playback second (video/audio files).","type":"number","minimum":0}},"required":["action","fileId"]},"example":{"action":"list_comments","fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/update_workspace_settings":{"post":{"operationId":"update_workspace_settings","summary":"Workspace settings","description":"Update this workspace's settings (only the fields you pass): name, description (empty string clears it), or logoUrl. Needs settings edit permission. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"New workspace name.","type":"string","minLength":1,"maxLength":120},"description":{"description":"Workspace description (empty string clears it).","type":"string","maxLength":2000},"logoUrl":{"description":"Workspace logo image url.","type":"string","maxLength":2000,"format":"uri"}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/search_drive":{"post":{"operationId":"search_drive","summary":"Search Drive","description":"Find a Drive file or folder by name (fuzzy). Returns each hit's id, name, type, and the folder it lives in. Use list_drive to list a folder's full contents by structure. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Part of the file or folder name; fuzzy matched."}},"required":["query"]},"example":{"query":"best time to post on YouTube"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_drive":{"post":{"operationId":"list_drive","summary":"List a Drive folder","description":"List the workspace Drive by structure: with no arguments returns the Drive root (folders with item counts, plus root files); with `folder` (a name or id) returns that folder's contents and its path. Use before organizing or moving files. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"folder":{"description":"A Drive folder's name (fuzzy) or id. Omit to list the Drive root.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_drive_url":{"post":{"operationId":"get_drive_url","summary":"Drive download link","description":"Mint a fresh (~6h) download URL for any file: a Drive file id (search_drive) or a Library asset id (asset_id, libraryId, creationId or thumbId from a generator). Use it whenever an earlier link expired. Returns url, expires_at, mime, bytes and both ids; also share_url (a durable watch link) when the file is shared publicly. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A Drive file id (search_drive, drive_file_id) or a Library asset id (asset_id, libraryId, creationId, thumbId)."}},"required":["fileId"]},"example":{"fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/manage_drive_item":{"post":{"operationId":"manage_drive_item","summary":"Organize Drive","description":"Organize the workspace Drive: create_folder (name, optional parentId), rename (fileId + name), or move (fileId + parentId, null for the Drive root). Resolve ids with search_drive first. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["create_folder","rename","move"],"description":"Which operation to run; the tool description says what each one does and needs."},"fileId":{"description":"The Drive file or folder id (rename / move / delete).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"description":"Folder name (create_folder) or the new name (rename).","type":"string","minLength":1,"maxLength":200},"parentId":{"description":"Parent/destination folder id; omit or null for the Drive root.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["action"]},"example":{"action":"create_folder"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/read_document":{"post":{"operationId":"read_document","summary":"Read a document","description":"Read a native workspace document's content as text (headings + paragraphs) so you can summarize, quote, or work from it. Find the file id with search_drive first. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The native document's Drive file id (from search_drive)."}},"required":["fileId"]},"example":{"fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/save_to_drive":{"post":{"operationId":"save_to_drive","summary":"Save a generation to Drive","description":"Copy a Library item (audio, image, video, thumbnail) into another Drive folder, e.g. \"kloudie/episode-12\" (created if missing). New generations are already filed under kloudie/<date>/; use this for older items or a second copy. Returns the Drive fileId and a 6h download link. Free; counts toward Drive storage.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"creationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Library id returned by a generator (libraryId / creationId)."},"name":{"description":"File name in Drive; defaults to the creation's title.","type":"string","minLength":1,"maxLength":200},"folder":{"description":"Drive folder path such as \"kloudie/voiceovers\". Missing folders are created. Default \"kloudie\".","type":"string","maxLength":300}},"required":["creationId"]},"example":{"creationId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/upload_file":{"post":{"operationId":"upload_file","summary":"Upload a local file","description":"Send a local file (audio, video, image, document, up to 2 GB) into the workspace Drive, for transcription, references, review or posting. Step 1 of 2: returns a presigned PUT uploadUrl and a ready curl command (valid 1 hour). Run it with the local path, then call finish_upload. The file never passes through this conversation. Free; counts toward Drive storage.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"File name with extension, no folders, e.g. \"interview.mp4\"."},"contentType":{"type":"string","minLength":3,"maxLength":120,"description":"MIME type, e.g. \"audio/mpeg\", \"video/mp4\", \"image/png\"."},"sizeBytes":{"type":"integer","exclusiveMinimum":0,"maximum":2147483648,"description":"Exact file size in bytes (max 2 GB), checked against the Drive quota."},"folder":{"description":"Drive folder path such as \"kloudie/voiceovers\". Missing folders are created. Default \"kloudie\".","type":"string","maxLength":300}},"required":["name","contentType","sizeBytes"]},"example":{"name":"Episode 13","contentType":"example contentType","sizeBytes":1}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/finish_upload":{"post":{"operationId":"finish_upload","summary":"Finish an upload","description":"Step 2 of 2 after upload_file: confirms the PUT landed and adds the file to Drive. Pass the same uploadId, name, contentType and folder. Returns the Drive fileId and a download link. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"uploadId returned by upload_file."},"name":{"type":"string","minLength":1,"maxLength":200,"description":"The same file name passed to upload_file."},"contentType":{"type":"string","minLength":3,"maxLength":120,"description":"The same MIME type passed to upload_file."},"folder":{"description":"Drive folder path such as \"kloudie/voiceovers\". Missing folders are created. Default \"kloudie\".","type":"string","maxLength":300}},"required":["uploadId","name","contentType"]},"example":{"uploadId":"00000000-0000-4000-8000-000000000000","name":"Episode 13","contentType":"example contentType"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/review_file":{"post":{"operationId":"review_file","summary":"AI review a video or audio","description":"AI review of a video or audio file in Drive: Gemini watches and listens to the whole version, scores it 0-10 against the workspace Quality standards, and adds timestamped review notes (marked AI) with severity, issue and fix, plus a summary note. Durable lessons are appended to the standards. Pass quoteOnly true first to get the price ('this review will cost N AI credits'), then run. Use in a loop: fix, upload a new version (upload_file / finish_upload, or the app), review again until the score is 9.5+ with no HIGH notes. A long film is scored in five-minute windows. After a fix that re-rendered only one part of the film (a range render), review just that part: fileId = the part's MP4, partOfFileId = the film's last full check cut, partStartSeconds/partEndSeconds = the range that render reported. Only the part is watched and paid for; its findings replace the old ones in that range and the film's score is updated on the film's own review.\n\nPrice: About 14 AI credits: AI review of about 60 s (review_file with quoteOnly gives the exact quote for a file).","tags":["create"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Drive fileId of the video or audio (search_drive, finish_upload, save_to_drive)."},"version":{"description":"Version to review. Default: the current version.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"context":{"description":"What changed in this version or what to focus on (the script, the brief, the last review's fixes).","type":"string","maxLength":4000},"partOfFileId":{"description":"Re-review of one part after a fix: the Drive fileId of the film (the last full check cut, already reviewed once) that fileId is a re-rendered part of.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"partStartSeconds":{"description":"Where the part starts in the film, in seconds (the range render's range.startSeconds). With partOfFileId.","type":"number","minimum":0},"partEndSeconds":{"description":"Where the part ends in the film, in seconds (the range render's range.endSeconds). With partOfFileId.","type":"number","exclusiveMinimum":0},"quoteOnly":{"description":"true = only return the price and the length it is based on; nothing runs or is charged.","type":"boolean"},"learn":{"description":"Append new durable lessons to the Quality standards. Default true.","type":"boolean"}},"required":["fileId"]},"example":{"fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"x-kloudboard-credits":14,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_quality_standards":{"post":{"operationId":"manage_quality_standards","summary":"Quality standards","description":"Read or replace the workspace Quality standards: the bar AI review judges every video and audio against (hook, retention, audio, visuals, text, accuracy, brand) plus the lessons past reviews added. Kept as the Brain doc \"Quality standards\". get is free; set replaces the whole text (owners and admins).\n\nPrice: Free.","tags":["create"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"],"description":"get returns the standards; set replaces them."},"content":{"description":"set only: the full new standards in markdown. Keep the '## Lessons from AI review' section if you want to keep past lessons.","type":"string","maxLength":40000}},"required":["action"]},"example":{"action":"get"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/publish_post":{"post":{"operationId":"publish_post","summary":"Publish post","description":"Publish a post to the workspace's connected X (Twitter) or LinkedIn account. Text over 280 characters auto-threads on X into a numbered thread (LinkedIn posts as one update). When the platform is not connected directly but is connected through Zernio (Settings, Apps, Publishing), the post goes out through Zernio. Posting is PUBLIC and cannot be undone. On success it returns the live post URL; relay it. Pass schedule_at (ISO, a future time) to queue the post for later instead of posting now. If no account is connected or it lacks posting permission, the result carries the honest connect/reconnect message; relay it verbatim. Free (no AI credits).\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"public","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"default":"x","description":"Where to post. Default x.","type":"string","enum":["x","linkedin"]},"text":{"type":"string","minLength":1,"maxLength":20000,"description":"The post text, up to 20,000 characters; on X anything over 280 becomes a numbered thread."},"schedule_at":{"description":"Future ISO 8601 datetime with offset (e.g. 2026-10-12T15:00:00Z) to schedule instead of posting now.","type":"string"},"idempotency_key":{"description":"Optional. Repeating a call with the same key (or the same text and time) within 10 minutes returns the first result instead of posting twice.","type":"string","maxLength":200}},"required":["text"]},"example":{"text":"example text"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_post_queue":{"post":{"operationId":"manage_post_queue","summary":"Scheduled posts","description":"See the scheduled social posts for this workspace: action list returns the upcoming queue (id, scheduled time, preview, status). Unscheduling a post is app-only. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list"],"description":"Which operation to run; the tool description says what each one does and needs."},"post_id":{"description":"Scheduled post id from list. Only cancel uses it, and cancelling is app-only.","type":"string"}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_connections":{"post":{"operationId":"list_connections","summary":"Connected accounts","description":"List the social accounts connected to this workspace (platform, name/handle, connected flag, last sync time, connection error). Use it to answer what's connected and before publish_post or a stats question. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/enable_niche_watch":{"post":{"operationId":"enable_niche_watch","summary":"Enable niche watch","description":"Turn on the weekly niche watch: every Monday kloudie scans the workspace niche and DMs the enabler the highlights, running the first scan immediately. Pass query to set the default niche; omit it to derive from the connected channels. Needs the niche research vendor configured; relay a not-configured message verbatim. Spends AI credits; get_pricing quotes it first.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["analytics"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"description":"The niche to watch, e.g. \"faceless finance shorts\". Omit to derive it from the connected channels.","type":"string","maxLength":200}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_niche_watch":{"post":{"operationId":"manage_niche_watch","summary":"Manage niche watch","description":"Check or stop the weekly niche watch. action status returns whether it is enabled, the default query, and when it last ran; action disable turns it off. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["status","disable"],"description":"Which operation to run; the tool description says what each one does and needs."}},"required":["action"]},"example":{"action":"status"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_social_accounts":{"post":{"operationId":"list_social_accounts","summary":"Publishing accounts","description":"List the social accounts this workspace publishes to through Zernio (YouTube, TikTok, Instagram, Facebook, X, LinkedIn): account_id, platform, username. Use before publish_video, analytics or comments. If nothing is connected the result says how to connect; relay it. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/publish_video":{"post":{"operationId":"publish_video","summary":"Publish video","description":"Publish a Drive video to one or more connected accounts (YouTube, TikTok, Instagram, Facebook, X, LinkedIn) through Zernio, now or at schedule_at. Uploads the video and thumbnail under keyword filenames from the title, sets title, description, tags, visibility, playlist and Shorts vs long-form handling. PUBLIC and cannot be undone: always confirm the exact title, platforms and time with the person first. Returns the post id, per-platform status and live URLs when ready; with cardId the card gets the links. Limits: 25 posts an hour per account, daily caps (TikTok 15, X 50, Instagram/Facebook 100). Free (no AI credits).\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"file_id":{"type":"string","minLength":1,"description":"Drive file id of the final video (search_drive or list_drive)."},"thumbnail_file_id":{"description":"Drive file id of the thumbnail (JPEG/PNG, 1280x720, at most 2 MB). Ignored by YouTube on Shorts.","type":"string"},"title":{"type":"string","minLength":1,"maxLength":100,"description":"The title. Both files go up named after its keywords (e.g. my-title.mp4, my-title-thumbnail.jpg): YouTube reads filenames as metadata."},"description":{"description":"Description / caption.","type":"string","maxLength":5000},"tags":{"description":"YouTube tags (500 characters combined).","maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"platforms":{"description":"Where to publish; the one connected account per platform is used. Use account_ids when a platform has several.","maxItems":6,"type":"array","items":{"type":"string","enum":["youtube","tiktok","instagram","facebook","twitter","linkedin"]}},"account_ids":{"description":"Exact account ids from list_social_accounts (overrides platforms).","maxItems":12,"type":"array","items":{"type":"string"}},"visibility":{"default":"public","description":"unlisted and private work on YouTube and TikTok only.","type":"string","enum":["public","unlisted","private"]},"schedule_at":{"description":"Future ISO 8601 datetime with offset to schedule instead of publishing now.","type":"string"},"timezone":{"description":"IANA timezone for schedule_at, e.g. Europe/Oslo.","type":"string","maxLength":64},"format":{"default":"auto","description":"short = vertical, 3 min or less (YouTube Short, Facebook Reel; no custom YouTube thumbnail). YouTube decides itself; this only steers thumbnails and Facebook.","type":"string","enum":["auto","short","long"]},"playlist_id":{"description":"YouTube playlist id to add the video to.","type":"string"},"category_id":{"description":"YouTube category id, e.g. 27 Education, 28 Science & Technology. Default 22.","type":"string"},"made_for_kids":{"default":false,"description":"YouTube COPPA flag: true turns off comments, the notification bell and personalized ads for good.","type":"boolean"},"contains_synthetic_media":{"default":false,"description":"Disclose realistic AI-made content (YouTube label, TikTok AI label).","type":"boolean"},"first_comment":{"description":"Posted (and pinned on YouTube) when the video goes live.","type":"string","maxLength":10000},"cardId":{"description":"Board card this video belongs to: its published links are added to the card.","type":"string"}},"required":["file_id","title"]},"example":{"file_id":"example file_id","title":"Episode 13: contrails"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_scheduled_posts":{"post":{"operationId":"list_scheduled_posts","summary":"Publishing queue","description":"The workspace's Zernio post queue: scheduled (default), publishing, published, failed or all, with post_id, time, preview and per-platform live URLs. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"default":"scheduled","description":"Which posts to list.","type":"string","enum":["scheduled","publishing","published","partial","failed","all"]},"limit":{"default":20,"description":"How many posts, newest schedule first.","type":"integer","minimum":1,"maximum":100}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_social_analytics":{"post":{"operationId":"get_social_analytics","summary":"Social analytics","description":"Analytics through Zernio: kind posts (per post), account (totals, followers, top posts for a date range), youtube_daily_views, youtube_retention (the audience retention curve) or youtube_demographics (age, gender, country). YouTube data runs 2-3 days behind; CTR and impressions are not available from the YouTube API. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["posts","account","youtube_daily_views","youtube_retention","youtube_demographics"],"description":"posts: per-post metrics (likes, comments, views, impressions where the platform gives them); account: totals, followers and top posts over a date range; youtube_*: one YouTube video's daily views, its retention curve, or channel/video demographics."},"account_id":{"description":"Required for youtube_*: the YouTube account id from list_social_accounts.","type":"string"},"post_id":{"description":"posts: one Zernio post id.","type":"string"},"video_id":{"description":"youtube_daily_views / youtube_retention (required) and youtube_demographics (optional): the YouTube video id.","type":"string"},"platform":{"description":"posts / account: only this platform.","type":"string","enum":["youtube","tiktok","instagram","facebook","twitter","linkedin"]},"from_date":{"description":"Start date, YYYY-MM-DD (UTC).","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to_date":{"description":"End date, YYYY-MM-DD (UTC). YouTube data ends about 3 days ago.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"page":{"description":"posts: page number.","type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"description":"posts: page size (default 20).","type":"integer","minimum":1,"maximum":100}},"required":["kind"]},"example":{"kind":"posts"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_post_comments":{"post":{"operationId":"list_post_comments","summary":"Read post comments","description":"Read the comments on one post of a connected account (Zernio inbox): comment_id, text, author, likes, reply count. Use before reply_to_comment. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"account_id":{"type":"string","minLength":1,"description":"The account the post is on (list_social_accounts)."},"post_id":{"type":"string","minLength":1,"description":"Zernio post id or the platform's own post id (a YouTube video id works)."},"comment_id":{"description":"List the replies to this comment instead.","type":"string"},"limit":{"description":"How many comments (default 25).","type":"integer","minimum":1,"maximum":100},"cursor":{"description":"The cursor from the previous page.","type":"string"}},"required":["account_id","post_id"]},"example":{"account_id":"example account_id","post_id":"example post_id"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/reply_to_comment":{"post":{"operationId":"reply_to_comment","summary":"Reply to a comment","description":"Reply publicly to a comment (or comment on a post) as a connected account through Zernio. PUBLIC and cannot be unsent: confirm the exact text with the person first. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"account_id":{"type":"string","minLength":1,"description":"The account to reply as (list_social_accounts)."},"post_id":{"type":"string","minLength":1,"description":"Zernio post id or the platform's own post id."},"comment_id":{"description":"The comment to answer (from list_post_comments). Omit to comment on the post itself.","type":"string"},"message":{"type":"string","minLength":1,"maxLength":5000,"description":"The reply, posted publicly under the account's name."}},"required":["account_id","post_id","message"]},"example":{"account_id":"example account_id","post_id":"example post_id","message":"Summarise this week's board."}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_dm_rules":{"post":{"operationId":"list_dm_rules","summary":"Comment → DM rules","description":"List the workspace's Comment → DM rules (keyword comment → automatic DM with a link and/or a public reply): rule_id, platforms, accounts, posts, keywords, messages, whether it is on, plus the connected accounts and what each platform supports. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/upsert_dm_rule":{"post":{"operationId":"upsert_dm_rule","summary":"Save a Comment → DM rule","description":"Create or edit a Comment → DM rule: when someone comments one of the keywords on the workspace's posts, they get the DM (Instagram, Facebook) and/or the public reply (also TikTok, Threads, LinkedIn, YouTube). Saving is a config change; active=true switches on unattended automatic replies, so confirm the keywords, messages and platforms with the person first. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"rule_id":{"description":"Edit this rule (from list_dm_rules); omit to create one.","type":"string"},"name":{"type":"string","minLength":1,"maxLength":80,"description":"A short name, e.g. 'REVERSE guide'."},"platforms":{"minItems":1,"type":"array","items":{"type":"string","enum":["instagram","facebook","tiktok","threads","linkedin","youtube"]},"description":"Where it listens. DMs work on instagram and facebook only; tiktok, threads, linkedin and youtube get the public reply only."},"account_ids":{"description":"Only these accounts (list_social_accounts). Omit for every connected account on those platforms.","maxItems":20,"type":"array","items":{"type":"string"}},"post_ids":{"description":"Only these posts (the platform's post id, e.g. a YouTube video id, or a Zernio post id). Omit for all posts.","maxItems":50,"type":"array","items":{"type":"string"}},"keywords":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"description":"Trigger words or phrases, matched as whole words, ignoring case, accents and punctuation."},"dm_message":{"description":"The DM sent to the commenter (Instagram, Facebook), usually with the link. {{first_name}}, {{name}} and {{username}} are filled in.","type":"string","maxLength":1000},"public_reply":{"description":"Optional public reply under the comment, e.g. 'Sent! Check your DMs'. Where a DM is planned it is only posted after the DM went out.","type":"string","maxLength":500},"active":{"description":"true switches the rule on: While on, kloudboard replies automatically to matching comments. Only with the person's explicit yes. Omit to keep the current state (new rules start off).","type":"boolean"}},"required":["name","platforms","keywords"]},"example":{"name":"Episode 13","platforms":["instagram"],"keywords":["example keywords"]}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_dm_rule_stats":{"post":{"operationId":"get_dm_rule_stats","summary":"Comment → DM results","description":"How a Comment → DM rule (or all of them) performs: matched comments, DMs and public replies sent, failures, and the latest sends with commenter, keyword, status and error. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"rule_id":{"description":"One rule (from list_dm_rules); omit for all rules.","type":"string"},"days":{"default":7,"description":"How many days back.","type":"integer","minimum":1,"maximum":90},"recent":{"default":20,"description":"How many of the latest sends to include.","type":"integer","minimum":0,"maximum":100}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/manage_automation":{"post":{"operationId":"manage_automation","summary":"Manage automation","description":"Create, update, enable, or disable a workspace automation (a kloudie recipe: a trigger plus a graph of steps). Always propose first: propose_create / propose_update validate and return a draft with plain-language summaryLines (nothing is saved). Show the person those lines; only after they approve, call create / update with the same name, trigger and graph (and recipeId for update) to save it, enabled. enable / disable act immediately (find recipeId with list_automations). Deleting is app-only. Free.\n\nPrice: Free.","tags":["automations"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["propose_create","propose_update","create","update","enable","disable"],"description":"Which operation to run; the tool description says what each one does and needs."},"recipeId":{"description":"Automation id from list_automations; required for propose_update, enable and disable.","type":"string"},"name":{"description":"propose_create/propose_update: the automation's name. Default \"Untitled automation\".","type":"string"},"trigger":{"description":"Trigger object or JSON string; preserve requested command/board restrictions. For example, {\"kind\":\"card_event\",\"types\":[\"card.completed\"]}","anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"card_event"},"types":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"boardId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"stageName":{"type":"string"},"allowKloudieEvents":{"type":"boolean"}},"required":["kind","types"]},{"type":"object","properties":{"kind":{"type":"string","const":"schedule"},"cron":{"type":"string","minLength":1},"timezone":{"type":"string","minLength":1,"maxLength":64}},"required":["kind","cron"]},{"type":"object","properties":{"kind":{"type":"string","const":"mention"},"command":{"type":"string"}},"required":["kind"]},{"type":"object","properties":{"kind":{"type":"string","const":"webhook"},"secret":{"type":"string","maxLength":200}},"required":["kind"]},{"type":"object","properties":{"kind":{"type":"string","const":"project_event"},"types":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["kind","types"]}]},{"type":"string"}]},"graph":{"description":"Schema:2 graph object or JSON string. Action tools: create_card, create_task, comment_on_card, complete_card, create_document, ask_kloudie, move_card, ai_review_card, draft_in_voice, notify_card_assignees, send_email. Node kinds: action, condition, ai_gate, delay, loop.","anyOf":[{"type":"object","properties":{"schema":{"type":"number","const":2},"nodes":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","const":"action"},"tool":{"type":"string","minLength":1},"input":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"approval":{"type":"string","enum":["auto","required"]}},"required":["id","kind","tool"]},{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","const":"condition"},"combine":{"type":"string","enum":["and","or"]},"clauses":{"minItems":1,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1},"op":{"type":"string","enum":["eq","neq","contains","not_contains","gt","gte","lt","lte","exists","not_exists","matches","in"]},"value":{}},"required":["path","op"]}}},"required":["id","kind","combine","clauses"]},{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","const":"ai_gate"},"prompt":{"type":"string","minLength":1}},"required":["id","kind","prompt"]},{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","const":"delay"},"for":{"type":"string"},"until":{"type":"string"}},"required":["id","kind"]},{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","const":"loop"},"over":{"type":"string","minLength":1},"maxItems":{"type":"integer","minimum":1,"maximum":25}},"required":["id","kind","over"]}]}},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1},"to":{"type":"string","minLength":1},"label":{"type":"string","enum":["true","false","each","done"]}},"required":["from","to"]}}},"required":["schema","nodes","edges"]},{"type":"string"}]}},"required":["action"]},"example":{"action":"propose_create"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_automations":{"post":{"operationId":"list_automations","summary":"List automations","description":"List the workspace's automations (id, name, enabled, trigger, latest run status). Use before updating, enabling, disabling, or deleting one. Free.\n\nPrice: Free.","tags":["automations"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/resume_automation":{"post":{"operationId":"resume_automation","summary":"Approve or deny an automation run","description":"Approve or deny an automation run paused awaiting approval (status waiting_approval). Approving executes the gated step and continues the run; denying rejects it. Find the runId with get_automation_runs. Free.\n\nPrice: Free.","tags":["automations"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string","description":"Id of a waiting_approval run, from get_automation_runs."},"decision":{"type":"string","enum":["approve","deny"],"description":"approve runs the gated step and continues the run; deny rejects it."}},"required":["runId","decision"]},"example":{"runId":"00000000-0000-4000-8000-000000000000","decision":"approve"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_automation_runs":{"post":{"operationId":"get_automation_runs","summary":"Get automation runs","description":"Recent automation runs for the workspace, optionally one automation: the automation name, the card it ran for (KB number + title), status, error, credits, when (in the key owner's time zone; created_at is ISO) and its steps in plain words. Refer to runs by automation and card, not by run id.\n\nPrice: Free.","tags":["automations"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"recipeId":{"description":"Only runs of this automation (id from list_automations). Omit for all.","type":"string"},"limit":{"description":"Max runs, newest first. Default 10, max 25.","type":"integer","minimum":1,"maximum":25}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_kloudie_instructions":{"post":{"operationId":"get_kloudie_instructions","summary":"Get kloudie instructions","description":"Read the workspace's current custom instructions for how kloudie should behave (tone, focus, preferences). Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/set_kloudie_instructions":{"post":{"operationId":"set_kloudie_instructions","summary":"Set kloudie instructions","description":"Set, replace, or clear the workspace's custom instructions for how kloudie should behave. Owner and admins only. Pass the FULL desired text (replaces the previous); empty string clears. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"instructions":{"type":"string","maxLength":32000,"description":"The full instruction text (replaces the current one), up to 32,000 characters. Empty string clears it."}},"required":["instructions"]},"example":{"instructions":"example instructions"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_memory":{"post":{"operationId":"manage_memory","summary":"kloudie memories","description":"Review the workspace's durable kloudie memories: list (active), list_pending (AI-proposed), approve / reject a pending one (memoryId), or add one for the whole workspace (title + content). To remember something for one board or System, use save_memory. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","list_pending","add","approve","reject"],"description":"Which operation to run; the tool description says what each one does and needs."},"memoryId":{"description":"Memory id: from list_pending for approve or reject.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"description":"add: short memory title.","type":"string","minLength":1,"maxLength":200},"content":{"description":"add: the memory itself, up to 8,000 characters.","type":"string","minLength":1,"maxLength":8000},"type":{"description":"Memory category. Defaults to brand_voice. Supported categories include golden_hook, golden_cta, golden_transition, audience_insight, brand_voice, content_pattern, and topic_expertise.","type":"string","maxLength":60}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/save_memory":{"post":{"operationId":"save_memory","summary":"Remember for a board or everywhere","description":"Remember a preference, rule, fact or link for every later kloudie turn, scoped to where it applies: workspace (everywhere), one board, or one System. Without a scope it returns status needs_scope with the options; ask the user which, then call again with scope and scopeId. Free.\n\nPrice: Free.","tags":["brain"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":8000,"description":"What to remember, written so it stands on its own later: the preference, rule or fact, and for a link what it showed and why it matters."},"title":{"description":"Short title. Defaults to the first sentence.","type":"string","minLength":1,"maxLength":200},"scope":{"description":"Where it applies: workspace (everywhere, every board), board, or system. Omit when the user did not say; the tool then returns status needs_scope with the options to ask about.","type":"string","enum":["workspace","board","system"]},"scopeId":{"description":"board or system: the id from a needs_scope option.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"description":"Memory category, as in manage_memory. Defaults to brand_voice.","type":"string","maxLength":60}},"required":["content"]},"example":{"content":"example content"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_calendar_event":{"post":{"operationId":"manage_calendar_event","summary":"Calendar events","description":"List, create or update plain calendar events in this workspace (card deadlines and meetings are managed elsewhere). Times are ISO 8601. create needs title + start; update needs eventId (from list), title and start. Deleting an event is app-only. Reading needs calendar access; changing it needs calendar create or edit permission. Free.\n\nPrice: Free.","tags":["workspace"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","create","update"],"description":"Which operation to run; the tool description says what each one does and needs."},"eventId":{"description":"The event's id from list; update and delete need it.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"description":"Event title; create and update need it.","type":"string","minLength":1,"maxLength":200},"start":{"description":"Start as ISO 8601, e.g. \"2026-10-12T13:00:00+02:00\"; create and update need it.","type":"string","minLength":1,"maxLength":40},"end":{"description":"End as ISO 8601; defaults to the start.","type":"string","minLength":1,"maxLength":40},"description":{"description":"Notes shown on the event.","type":"string","maxLength":4000},"allDay":{"description":"true for an all-day event.","type":"boolean"},"color":{"description":"Event color, e.g. \"blue\" or \"#3b82f6\".","type":"string","maxLength":64},"limit":{"description":"How many events list returns (default 50, max 100).","type":"integer","minimum":1,"maximum":100}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_competitors":{"post":{"operationId":"manage_competitors","summary":"Manage competitors","description":"Track competitor channels for this workspace across YouTube, Instagram, TikTok, and X. action list, or add (channel: @handle, URL, or name). Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","add"],"description":"Which operation to run; the tool description says what each one does and needs."},"channel":{"description":"The channel to add: @handle, profile URL, channel name, or YouTube UC… id.","type":"string","minLength":1,"maxLength":300},"platform":{"description":"Platform of channel. Default youtube; a platform profile URL overrides it.","type":"string","enum":["youtube","instagram","tiktok","x"]}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/analyze_channel":{"post":{"operationId":"analyze_channel","summary":"Analyze a YouTube channel","description":"Analyze any public YouTube channel from a @handle, URL, name, or UC… id: subscribers, views, and outlier uploads. Use it for competitors and channels you only know by name. Included with the plan. Instagram, TikTok, and X are not yet available. Free.\n\nPrice: Free.","tags":["research"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","minLength":1,"maxLength":300,"description":"YouTube @handle, channel URL, channel name, or UC… id."},"platform":{"description":"Default youtube; only YouTube lookups are available today.","type":"string","enum":["youtube","instagram","tiktok","x"]}},"required":["channel"]},"example":{"channel":"example channel"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_youtube_comments":{"post":{"operationId":"get_youtube_comments","summary":"Read YouTube comments","description":"Read what an audience says: public YouTube comments on given videos, or on a channel's top or latest videos (yours or a competitor's), most-liked first, each with a link to the comment. Use it to find repeated wants, pains, questions and the words viewers use before choosing topics, titles or a product. Free; read-only.\n\nPrice: Free.","tags":["research"],"x-kloudboard-effect":"read","x-kloudboard-default":true,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"videos":{"description":"YouTube video links or ids (up to 10). Use this or channel.","maxItems":10,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"channel":{"description":"YouTube @handle, channel URL, name, or UC… id: reads comments on that channel's videos.","type":"string","minLength":1,"maxLength":300},"pick":{"description":"With channel: its most-viewed videos (top, default) or latest uploads (recent).","type":"string","enum":["top","recent"]},"video_count":{"description":"With channel: how many videos to read. Default 5.","type":"integer","minimum":1,"maximum":10},"per_video":{"description":"Comments per video, most relevant first. Default 40, max 100; 300 in total.","type":"integer","minimum":5,"maximum":100},"order":{"description":"relevance (default) or time (newest first).","type":"string","enum":["relevance","time"]},"search":{"description":"Only comments containing this text, e.g. a question word or product name.","type":"string","minLength":1,"maxLength":100}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/analyze_my_content":{"post":{"operationId":"analyze_my_content","summary":"Analyze my content","description":"Quick overall read of the workspace's OWN content: top videos by age-normalized views-per-day with engagement and channel averages, plus a sample of recent uploads. For a deeper ranking with low performers to contrast, use get_video_performance. Optionally one platform. Free.\n\nPrice: Free.","tags":["analytics"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"description":"Only this connected platform. Omit for all connected channels.","type":"string","enum":["youtube","tiktok","instagram","twitter","facebook"]},"channel":{"description":"One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all.","type":"string","maxLength":200},"limit":{"description":"How many top videos to rank. Default 10, max 25.","type":"integer","minimum":1,"maximum":25}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/get_instagram_account":{"post":{"operationId":"get_instagram_account","summary":"Instagram account lookup","description":"Look up an Instagram business or creator account by username. Requires a connected Instagram professional account in this workspace. Returns the profile and follower/media counts through Instagram Graph; personal accounts are unavailable. Free.\n\nPrice: Free.","tags":["social"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"maxLength":120,"description":"Instagram username, with or without the leading @."}},"required":["username"]},"example":{"username":"example username"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/list_chat_channels":{"post":{"operationId":"list_chat_channels","summary":"List chat channels","description":"List the workspace's internal chat channels and DMs with unread counts and the latest preview. Returns ids for read_chat_channel and send_chat_message. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"description":"Max channels. Default 30, max 100.","type":"integer","minimum":1,"maximum":100}}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/read_chat_channel":{"post":{"operationId":"read_chat_channel","summary":"Read chat channel","description":"Read the most recent messages in one chat channel or DM by its id. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Channel or DM id from list_chat_channels."},"limit":{"description":"Most recent messages to return. Default 30, max 80.","type":"integer","minimum":1,"maximum":80}},"required":["channelId"]},"example":{"channelId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/send_chat_message":{"post":{"operationId":"send_chat_message","summary":"Send chat message","description":"Post a message to a workspace chat channel. Pass a channelId, or a channelName to reuse an existing channel of that name (a new one is created only when none matches). Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channelId":{"description":"Channel id from list_chat_channels. Give this or channelName.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"channelName":{"description":"Channel name, with or without #; reused if it exists, otherwise created.","type":"string","maxLength":80},"content":{"type":"string","minLength":1,"maxLength":8000,"description":"The message text, up to 8,000 characters."}},"required":["content"]},"example":{"content":"example content"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/get_affiliate_leaderboard":{"post":{"operationId":"get_affiliate_leaderboard","summary":"Get affiliate leaderboard","description":"The current-month kloudboard creator (affiliate) leaderboard: the anonymized top earners, the key owner's own rank and commission total, the active-affiliate count, and the monthly cash prize tiers. Free, read-only.\n\nPrice: Free.","tags":["account"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/edit_document":{"post":{"operationId":"edit_document","summary":"Edit document","description":"Read or edit an existing native Drive document. Always read first; edit needs the returned revision and replaces ONE tab with contentText (plain text, newlines become paragraphs). Preserve facts and all unrequested content. Other tabs and previous-version history survive. Returns a conflict if someone edited it meanwhile. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["read","edit"],"description":"Which operation to run; the tool description says what each one does and needs."},"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Drive file id of a native document (from search_drive or create_document)."},"tabId":{"description":"Tab id from read; required for multi-tab documents.","type":"string"},"revision":{"description":"The exact revision returned by read, required for edit.","type":"string"},"contentText":{"description":"Complete replacement plain text for ONE tab. Newlines become paragraphs.","type":"string","maxLength":80000}},"required":["action","fileId"]},"example":{"action":"read","fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/share_drive_file":{"post":{"operationId":"share_drive_file","summary":"Share Drive file publicly","description":"Share a Drive file publicly as view-only, or unshare to turn public access off. share makes it viewable by ANYONE with the link: explain that and only do it when the user asks to share publicly. unshare keeps existing individual invitations. Requires Drive management permission. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"public","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Drive file id (from search_drive)."},"action":{"type":"string","enum":["share","unshare"],"description":"Which operation to run; the tool description says what each one does and needs."}},"required":["fileId","action"]},"example":{"fileId":"00000000-0000-4000-8000-000000000000","action":"share"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/list_file_versions":{"post":{"operationId":"list_file_versions","summary":"List file versions","description":"List a Drive file's saved document snapshots and uploaded media versions. Requires access to the file. Free.\n\nPrice: Free.","tags":["drive"],"x-kloudboard-effect":"read","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Drive file id (from search_drive)."}},"required":["fileId"]},"example":{"fileId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"read","security":[{"bearer":["read"]}],"parameters":[]}},"/api/v1/tools/manage_notifications":{"post":{"operationId":"manage_notifications","summary":"Notification settings","description":"Read or change the authenticated caller's own notification settings. get returns the supported keys and current values. set changes one boolean key only; nChatMentions controls inbox mentions, mentions controls mention sounds. Other people cannot be targeted. Free.\n\nPrice: Free.","tags":["account"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"],"description":"get returns every setting; set changes one."},"key":{"description":"set only: which notification setting to change.","type":"string","enum":["email","desktop","allSounds","replies","mentions","starred","dms","nTaskAssignments","nCard","nDeadlines","nChatMentions","nMeetingInvites","nMeetingAdded","nProjectUpdates","nPaymentRequests","nPaymentConfirmations","nPaymentSent","nSystem","emailHigh","emailMedium","emailLow","emailCard","emailMentions","emailBoard","emailReviewMentions","emailPaymentRequests","emailDeadlines","emailMeetings","product","setup","offers"]},"value":{"description":"set only: true turns it on, false turns it off.","type":"boolean"}},"required":["action"]},"example":{"action":"get"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_chat_channel":{"post":{"operationId":"manage_chat_channel","summary":"Manage chat channel","description":"Create a channel without sending a message, rename a channel, or move it to a category (null ungroups). New channels initially include only you; isPrivate controls visibility. Management needs chat:manage and channel-manager access. General, support, and direct-message channels are protected. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["create","rename","move_category"],"description":"Which operation to run; the tool description says what each one does and needs."},"channelId":{"description":"Channel id from list_chat_channels; required for every action except create.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"description":"create/rename: the channel name, up to 80 characters.","type":"string","minLength":1,"maxLength":80},"categoryId":{"description":"Category id from manage_chat_category list; null ungroups (move_category), optional on create.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"isPrivate":{"description":"create only: true makes it a private channel. Default false.","type":"boolean"}},"required":["action"]},"example":{"action":"create"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_chat_category":{"post":{"operationId":"manage_chat_category","summary":"Manage chat category","description":"List, create, or rename chat sidebar categories. Changes require chat:manage. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","create","rename"],"description":"Which operation to run; the tool description says what each one does and needs."},"categoryId":{"description":"rename/delete: category id from list.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"description":"create/rename: the category name, up to 80 characters.","type":"string","minLength":1,"maxLength":80}},"required":["action"]},"example":{"action":"list"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/manage_member_permissions":{"post":{"operationId":"manage_member_permissions","summary":"Manage member permissions","description":"Read or set ONE member's permission boolean, without changing their seat or other settings. First get using their membership/user id; availableKeys are the supported keys. Restate the person, permission, and new value before changing access. Cannot edit owner access, structured grants, or grant more access than you hold. Requires members:manage. Free.\n\nPrice: Free.","tags":["team"],"x-kloudboard-effect":"write","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"],"description":"Which operation to run; the tool description says what each one does and needs."},"memberId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Membership id or user id from manage_team."},"permissionKey":{"description":"set: one key from get's availableKeys.","type":"string","minLength":1,"maxLength":100},"enabled":{"description":"set: true grants the permission, false removes it.","type":"boolean"}},"required":["action","memberId"]},"example":{"action":"get","memberId":"00000000-0000-4000-8000-000000000000"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"x-kloudboard-scope":"write","security":[{"bearer":["write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/tools/ask_kloudie":{"post":{"operationId":"ask_kloudie","summary":"Ask kloudie","description":"Ask kloudie, the \"your workspace\" workspace AI. kloudie acts as you inside this workspace: it runs the full chat agent loop and can search the Brain, read boards, cards, tasks and performance data, review scripts, and create or update cards, tasks and documents. Answers cite workspace sources. Pass conversation_id from a previous result to continue with full context. Billed by usage; the result reports the exact cost. A research-heavy turn can run long: instead of timing out it returns {running:true, job_id}; poll get_job with that job_id to read the reply when it is ready.\n\nPrice: Billed by usage; the result reports the exact cost.","tags":["kloudie"],"x-kloudboard-effect":"paid","x-kloudboard-default":false,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","minLength":1,"maxLength":32000,"description":"The request in plain language, as you would type it in chat (up to 32,000 characters)."},"conversation_id":{"description":"conversation_id from a previous ask_kloudie result to continue that thread. Omit to start a new one.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["question"]},"example":{"question":"What did my last three videos have in common?"}}}},"responses":{"200":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"202":{"description":"A job started: poll Location every Retry-After seconds (data.job_id).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-Credits-Charged":{"$ref":"#/components/headers/CreditsCharged"},"X-Credits-Remaining":{"$ref":"#/components/headers/CreditsRemaining"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"},"Location":{"$ref":"#/components/headers/Location"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-kloudboard-scope":"spend","security":[{"bearer":["spend","write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/api/v1/systems":{"get":{"operationId":"list_systems_rest","summary":"List Systems","description":"The workspace's cloud Systems with their head version, schedule and last run.","tags":["systems"],"responses":{"200":{"description":"{ data: { systems } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"systems":{"type":"array","items":{"type":"object"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"}},"security":[{"bearer":["read"]}]}},"/api/v1/systems/{systemId}/versions":{"parameters":[{"name":"systemId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"list_system_versions","summary":"Version history","description":"Every pushed version of one System, newest first, with the current head.","tags":["systems"],"responses":{"200":{"description":"{ data: { head, versions: [{ version, message, content_hash, created_at }] } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"head":{"type":["integer","null"],"description":"The current head version (null before the first push)."},"versions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"integer"},"message":{"type":["string","null"]},"content_hash":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}}}}}}}}}},"404":{"description":"No such System","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}}},"security":[{"bearer":["read"]}]},"post":{"operationId":"commit_system_version","summary":"Commit a pushed version","description":"Step 3 of a push. Fast-forward only: baseVersion must be the current head (null for the first version). Every file body must already be uploaded (step 2).","tags":["systems"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["baseVersion","manifest","files"],"properties":{"baseVersion":{"type":["integer","null"]},"manifest":{"type":"object","description":"system.json"},"message":{"type":"string","maxLength":500},"files":{"type":"array","maxItems":500,"items":{"type":"object","required":["path","sha256","size"],"properties":{"path":{"type":"string","description":"Relative path, e.g. prompts/script.md (never system.json, .kloudboard/ or .git/)."},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer","minimum":0,"maximum":209715200}}}}}}}}},"responses":{"200":{"description":"Identical content: { data: { version, unchanged: true } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"version":{"type":"integer"},"unchanged":{"type":"boolean"}}}}}}}},"201":{"description":"{ data: { version, unchanged: false } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"version":{"type":"integer"},"unchanged":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid manifest or files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}},"409":{"description":"Stale base: the head moved since this push was built. Pull, then push again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}},"422":{"description":"File bodies not uploaded yet: { error, missing: [sha256] }","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}}},"security":[{"bearer":["write"]}]}},"/api/v1/systems/{systemId}/versions/check":{"parameters":[{"name":"systemId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"check_system_push","summary":"Plan a push","description":"Step 1 of a push: send every file's hash, get a presigned PUT (Content-Type: application/octet-stream, valid 1 hour) for each body the server lacks. Step 2 is the PUTs.","tags":["systems"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["baseVersion","files"],"properties":{"baseVersion":{"type":["integer","null"]},"files":{"type":"array","maxItems":500,"items":{"type":"object","required":["path","sha256","size"],"properties":{"path":{"type":"string","description":"Relative path, e.g. prompts/script.md (never system.json, .kloudboard/ or .git/)."},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer","minimum":0,"maximum":209715200}}}}}}}}},"responses":{"200":{"description":"{ data: { head, missing: [{ sha256, uploadUrl }], upload: { method, headers } } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"head":{"type":["integer","null"],"description":"The current head version (null before the first push)."},"missing":{"type":"array","items":{"type":"object","properties":{"sha256":{"type":"string"},"uploadUrl":{"type":"string","format":"uri"}}}},"upload":{"type":"object","properties":{"method":{"type":"string"},"headers":{"type":"object"}}}}}}}}}},"409":{"description":"Stale base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}},"413":{"description":"The new bodies would pass the workspace's storage quota","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}}},"security":[{"bearer":["write"]}]}},"/api/v1/systems/{systemId}/versions/{version}":{"parameters":[{"name":"systemId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"version","in":"path","required":true,"schema":{"type":"string"},"description":"A version number or \"head\"."}],"get":{"operationId":"pull_system_version","summary":"Pull a version","description":"The manifest and a 6-hour download link per file.","tags":["systems"],"responses":{"200":{"description":"{ data: { head, version, manifest, message, files: [{ path, sha256, url }] } }","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"head":{"type":["integer","null"],"description":"The current head version (null before the first push)."},"version":{"type":"integer"},"manifest":{"type":"object"},"message":{"type":["string","null"]},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"sha256":{"type":"string"},"url":{"type":"string","format":"uri"}}}}}}}}}}},"404":{"description":"No such System or version","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSyncError"}}}}},"security":[{"bearer":["read"]}]}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key from Settings > API, acting as the member who created it in one workspace. Each operation lists the scope it needs: read (Look only: workspace, cards, tasks, Drive, the Brain, credits and jobs.); write (Change the workspace: create and move cards and tasks, publish, invite.); spend (Run tools that spend AI credits (ask_kloudie also needs write).)","x-scopes":{"read":"Look only: workspace, cards, tasks, Drive, the Brain, credits and jobs.","write":"Change the workspace: create and move cards and tasks, publish, invite.","spend":"Run tools that spend AI credits (ask_kloudie also needs write)."}}},"schemas":{"ToolResult":{"type":"object","required":["ok","tool","data"],"properties":{"ok":{"const":true},"tool":{"type":"string"},"data":{"description":"The tool's result (JSON, or text)."},"cost":{"$ref":"#/components/schemas/Cost"}}},"SystemSyncError":{"type":"object","required":["error"],"description":"System sync (/api/v1/systems/**) errors: the reason, plus the current head on a stale push and the bodies still missing on an incomplete one.","properties":{"error":{"type":"string"},"head":{"type":["integer","null"]},"missing":{"type":"array","items":{"type":"string","description":"sha256 of a file body not uploaded yet"}}}},"Error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string","enum":["invalid_request","unauthenticated","insufficient_credits","permission_denied","scope_missing","not_found","conflict","idempotency_in_progress","idempotency_key_reused","rate_limited","internal_error","upstream_error"],"description":"Stable machine-readable code: switch on this."},"message":{"type":"string","description":"What went wrong, for people."},"hint":{"type":"string","description":"What to do next."},"top_up_url":{"type":"string","format":"uri","description":"insufficient_credits only: where the owner buys credits."},"request_id":{"type":"string"}}},"ErrorResponse":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"tool":{"type":"string"},"error":{"$ref":"#/components/schemas/Error"},"cost":{"$ref":"#/components/schemas/Cost"}}},"Cost":{"type":["object","null"],"description":"What the call charged, null when free.","properties":{"credits":{"type":"integer"},"balance":{"type":["integer","null"]},"lowBalance":{"type":"boolean"}}}},"headers":{"RequestId":{"description":"Unique id of this request (yours when you sent a sane X-Request-Id). Quote it to support.","schema":{"type":"string"}},"CreditsCharged":{"description":"AI credits this call charged (paid tools; 0 when a job bills on completion).","schema":{"type":"integer"}},"CreditsRemaining":{"description":"The workspace's balance after this call, when known.","schema":{"type":"integer"}},"RetryAfter":{"description":"Seconds to wait before retrying (429) or polling again (202, running jobs).","schema":{"type":"integer"}},"RateLimit":{"description":"The quota left and when it resets (draft-ietf-httpapi-ratelimit-headers), e.g. \"requests\";r=0;t=600.","schema":{"type":"string"}},"RateLimitPolicy":{"description":"The hourly quota this request counts against, e.g. \"requests\";q=600;w=3600.","schema":{"type":"string"}},"Location":{"description":"The job to poll: /api/v1/jobs/{jobId}.","schema":{"type":"string"}},"IdempotentReplayed":{"description":"true when this is the stored response of an earlier request with the same Idempotency-Key.","schema":{"type":"string"}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string (a UUID). Retrying with the same key and the same arguments returns the first successful response for 24 hours instead of running (and charging) again. Same key, different arguments: 422. Still running: 409.","schema":{"type":"string","maxLength":255}}},"responses":{"ToolOk":{"description":"The tool's result","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"BadRequest":{"description":"Bad arguments, or the tool refused them","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"invalid_request","message":"Bad arguments, or the tool refused them","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"Unauthorized":{"description":"Missing, invalid or revoked API key","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"unauthenticated","message":"Missing, invalid or revoked API key","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"PaymentRequired":{"description":"Not enough AI credits; nothing was charged","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"insufficient_credits","message":"Not enough AI credits; nothing was charged","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"Forbidden":{"description":"The key's owner lacks the permission, or the key lacks the scope","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"permission_denied","message":"The key's owner lacks the permission, or the key lacks the scope","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"NotFound":{"description":"Unknown tool or id","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"not_found","message":"Unknown tool or id","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"Conflict":{"description":"A request with this Idempotency-Key is still running","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"idempotency_in_progress","message":"A request with this Idempotency-Key is still running","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"Unprocessable":{"description":"This Idempotency-Key was used with different arguments","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"idempotency_key_reused","message":"This Idempotency-Key was used with different arguments","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"RateLimited":{"description":"Rate limit reached","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"rate_limited","message":"Rate limit reached","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"ServerError":{"description":"Failed on our side; retry with the same Idempotency-Key","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"internal_error","message":"Failed on our side; retry with the same Idempotency-Key","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}},"BadGateway":{"description":"A provider failed; nothing was charged","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"ok":false,"error":{"code":"upstream_error","message":"A provider failed; nothing was charged","request_id":"req_5f0c6a1b2c3d4e5f6a7b8c9d"}}}}}}},"servers":[{"url":"https://www.kloudboard.com","description":"Production"}],"tags":[{"name":"api","description":"Discovery, credits and jobs"},{"name":"core","description":"Start here: overview, balance, pricing, jobs"},{"name":"create","description":"Voice, music, SFX, images, thumbnails, video, transcripts, the Library"},{"name":"research","description":"YouTube and web research"},{"name":"workspace","description":"Boards, cards, tasks, calendar, templates"},{"name":"drive","description":"Files and documents"},{"name":"brain","description":"The workspace's knowledge base"},{"name":"social","description":"Connected accounts and publishing"},{"name":"automations","description":"Automations and their runs"},{"name":"analytics","description":"Channel and workflow analytics"},{"name":"systems","description":"Systems: saved, runnable workflows"},{"name":"team","description":"Members, invites and team chat"},{"name":"kloudie","description":"Ask the assistant"},{"name":"account","description":"Affiliate, payouts and notifications"}]}