Tool reference
All 156 tools, with parameters and cost. The server URL lists the 37 marked Default; add ?toolsets=all for every tool. Over plain HTTP with an API key, every tool is callable. Paid tools spend AI credits and every result reports what it cost.
MCP (Claude, Cursor, ChatGPT)
https://app.kloudboard.com/mcpREST (scripts, cron, your own code)
POST https://app.kloudboard.com/api/v1/tools/<tool>REST calls send Authorization: Bearer <key> (create a key in Settings, API) and the tool's arguments as the JSON body. The reply is { ok, data, cost }; out of credits answers 402. Connect guide · OpenAPI spec (Postman, Insomnia, SDK generators)
Start and credits (always on)?toolsets=core
buy_creditsFree · read-onlyDefaultHow to add AI credits: the credit packs and prices, and the kloudboard billing link where the workspace owner buys them (Stripe Checkout). Does not charge anything. Give the person the link; never retry a paid tool in a loop while out of credits.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/buy_credits \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_credit_balanceFree · read-onlyDefaultThis 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.
| Parameter | Type | Description |
|---|---|---|
recent | integer | How many recent charges to include.Default: 10 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_credit_balance \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_jobFree · read-onlyDefaultCheck a long job by the job_id a tool returned (generate_video, create_youtube_video, transcribe, render_composition, run_system, ask_kloudie, dub_video, translate_video, lipsync_video, edit_video, preview_video_frames or upload_to_youtube). Returns status running, 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.
| Parameter | Type | Description |
|---|---|---|
job_idrequired | string | The job_id from the tool that started the job, e.g. video:…, transcript:…, dub:…, translate:…, lipsync:…, edit:…, frames:…, youtube:…, system:… or kloudie:…. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_job \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id":"<job_id>"}'get_pricingFree · read-onlyDefaultQuote 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.
| Parameter | Type | Description |
|---|---|---|
jobs | object[] | Planned calls to quote. Omit for the price list. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_pricing \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_startedFree · read-onlyDefaultStart 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_started \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_workspace_overviewFree · read-onlyDefaultOrient 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_workspace_overview \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Create: voice, images, video, thumbnails?toolsets=create
attach_creation_to_cardFree · changes your workspaceAttach a Library creation to a board card as a file. Needs the card (video) id. Free.
| Parameter | Type | Description |
|---|---|---|
creationIdrequired | string | Library creationId to attach (from list_library). |
cardIdrequired | string | Card id from list_cards or create_card. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/attach_creation_to_card \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"creationId":"<creationId>","cardId":"<cardId>"}'check_video_projectFree · read-onlyCheck a Studio video after a change, without a browser: project.json against the video format, scene timing, every file a scene or audio track names, and each scene file's rules (one template, the scene id on its root, a paused timeline registered under the scene id, only allowed network hosts, no wall-clock animation). Returns problems with a severity, a code, the file and a line. Run it after every edit and fix each error before rendering. Free. What only a browser can see (layout overflow, contrast, runtime errors) comes back with the still-frame preview.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/check_video_project \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'comment_on_videoFree · changes your workspacePin a comment on a Studio video at a moment (time in seconds), shown on its timeline. send=true also asks the edit agent to make the change when one is available. Pinning is free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video to comment on. |
timerequired | number | Seconds into the video the comment is about. |
textrequired | string | What should change at that moment, in plain words. |
send | boolean | Also ask the edit agent to make the change (paid; shows its estimate first). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/comment_on_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","time":1,"text":"<text>"}'create_video_projectFree · changes your workspaceStart a new video in Studio from a starter template. It lands in Drive under Videos/<title> as an editable HyperFrames project and plays in the browser right away; nothing renders and nothing is charged. Returns projectId and studioUrl (open it to see and tweak the video). Free.
| Parameter | Type | Description |
|---|---|---|
templaterequired | enum | "talking-head" (your recording with title, name, captions, end card; 16:9), "explainer" (faceless text and captions; 16:9) or "short" (vertical 9:16 hook, three beats, call to action).One of: talking-headexplainershort |
title | string | The video's title. Also its Drive folder name under Videos/. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_video_project \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"template":"talking-head"}'create_youtube_videoSpends AI creditsCreate 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.
| Parameter | Type | Description |
|---|---|---|
topic | string | Short topic; used as the brief when brief is omitted. |
creationId | string | Library script id (list_library kind script, under 12,000 characters) to narrate word for word. |
brief | string | What the video is about plus the user's constraints (audience, tone, must-include points). Needed unless creationId is set. |
dryRun | boolean | Free deterministic preflight only. Does not generate narration, footage or a render, create a job, or spend credits. |
targetDuration | object | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_youtube_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'dub_videoSpends AI creditsThe studio dub: ElevenLabs Dubbing keeps every speaker's own voice, best for interviews, podcasts and videos with several speakers. For one narrator or presenter, translate_video does it in their voice at about a fifth of the price. 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.
| Parameter | Type | Description |
|---|---|---|
sourcerequired | string | 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_languagesrequired | enum[] | 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 | string | The language spoken in the source, e.g. en. Detected when omitted. |
watermark | boolean | Watermarked dubs cost about a third less. Default false (clean). |
num_speakers | integer | How many people speak. Detected when omitted. |
max_minutes | integer | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/dub_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source":"<source>","target_languages":"<target_languages>"}'edit_videoSpends AI creditsEdit a Studio video with AI: kloudie's video editor (Claude) changes the video's scenes in the cloud from a plain instruction ("make the hook faster", "bigger captions", "add the b-roll from my Drive") or a packaged recipe (faster_cuts, bigger_captions, add_broll, punch_in_zooms, swap_voice, tighten_hook, brand_colors), checks the result (render check + still frames) and saves it to the video in Drive. mode first_cut builds the scenes from the voice-over and script. Shows the price first: dryRun=true returns the estimate and hard cap for free. Credits: the cap is held, the real token and machine use is charged (never above the cap), and a failed or stopped edit pays only for what it used. Async: returns a runId; follow it with get_edit_run.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The Studio video (its Drive folder id). |
instruction | string | What to change, in plain words. Optional with a recipe.Default: "" |
mode | enum | "first_cut" builds the scenes from the script, voice-over and assets; "edit" changes the existing video.One of: first_cuteditDefault: "edit" |
model | enum | "sonnet" (default) or "opus" (best first cut, about twice the price).One of: sonnetopus |
recipe | object | A packaged edit instead of (or on top of) an instruction. |
time | number | A moment in seconds the instruction is about (comment on a moment). |
commentIds | string[] | Studio comments this run answers; marked done when it saves. |
script | string | First cut: the script text, when it is not in the project. |
maxCredits | integer | Hard cap in credits. Default: 2.5× the estimate. |
dryRun | boolean | Return the estimate and cap without starting. Free. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/edit_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'edit_video_project_fileFree · changes your workspaceChange part of a text file in a Studio video by exact match, like a code editor's find and replace: old_string must be in the file exactly once (or pass replace_all), and is swapped for new_string. Read the file first and copy old_string from it. Works on project.json (the result is checked against the video format) and scenes/*.html. Every save raises the video's revision and returns it. Free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
pathrequired | string | Path inside the video, e.g. "scenes/hook.html" or "project.json". list_video_project_files lists them. |
old_stringrequired | string | The exact text to replace, as it is in the file: same spaces, indentation and line breaks. It must match one place unless replace_all is true. |
new_stringrequired | string | The text to put there instead. Empty takes old_string out. |
replace_all | boolean | Replace every place old_string matches. Default false: more than one match is refused. |
baseRevision | integer | The revision you read (every read and write returns it). When the video was saved since, nothing is written and you get the current revision back. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/edit_video_project_file \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","path":"<path>","old_string":"<old_string>","new_string":"<new_string>"}'generate_audioSpends AI creditsDefaultGenerate 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.
| Parameter | Type | Description |
|---|---|---|
capabilityrequired | enum | tts = voiceover, sfx = sound effect, music = background track.One of: ttssfxmusic |
promptrequired | string | tts: the exact words to speak (up to 5,000 characters). sfx/music: a description of the sound or mood. |
voiceId | string | tts voice id (list_voices, in the create toolset, lists the workspace's voices). Default: a neutral stock voice. |
timestamps | boolean | tts only: also return word timings [{ word, start, end }] in seconds. |
quality | enum | tts only: standard (Multilingual v2, best) or fast (Flash v2.5, half the credits). Default standard.One of: standardfast |
durationSeconds | number | sfx only: clip length in seconds. Omit to let the model choose. |
lengthSeconds | number | music only: track length in seconds. Default 30. |
folder | string | Drive folder for the copy, e.g. "kloudie/episode-12" (created if missing). Default kloudie/<today>. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_audio \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"capability":"tts","prompt":"<prompt>"}'generate_imageSpends AI creditsDefaultGenerate 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.
| Parameter | Type | Description |
|---|---|---|
promptrequired | string | 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 | enum | Default nano-banana-2 (about 50 credits); nano-banana-pro is sharper (about 95).One of: nano-banana-2nano-banana-pro |
aspect | enum | Aspect ratio. Default 1:1.One of: 1:14:33:216:99:162:3 |
count | integer | How many images to generate, each charged. Default 1. |
referenceUrl | string | Public image URL (max 8 MB) to edit or use as a style/subject reference. Input image 1 when referenceUrls is also given. |
referenceUrls | string[] | Public image URLs (max 8 MB each), in order: input image 1, 2, … E.g. [outlier thumbnail, brand/subject reference]. |
referenceIds | string[] | Ids of the workspace's saved style references (studio toolset), after the URLs in order. Use for a brand reference saved once. |
folder | string | Drive folder for the copy, e.g. "kloudie/episode-12" (created if missing). Default kloudie/<today>. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_image \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"<prompt>"}'generate_reportSpends AI creditsWrite 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.
| Parameter | Type | Description |
|---|---|---|
briefrequired | string | The topic plus every fact the report should rely on; the brief is its only evidence. |
instructions | string | Extra direction on length, format or audience. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_report \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"brief":"<brief>"}'generate_thumbnailSpends AI creditsDefaultCreate 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).
| Parameter | Type | Description |
|---|---|---|
toolrequired | enum | generate = from text, recreate = model a reference image, edit = change an image per the prompt.One of: generaterecreateedit |
promptrequired | string | What the thumbnail should show (generate/recreate) or the change to make (edit). |
imageUrl | string | Public image URL; required for recreate (the reference) and edit (the image to change). |
model | enum | Pikzels model for generate/recreate. Default pkz_3; edit ignores it.One of: pkz_2pkz_3pkz_4pkz_4_5 |
format | enum | Aspect ratio. Default 16:9.One of: 16:99:161:1 |
folder | string | Drive folder for the copy, e.g. "kloudie/episode-12" (created if missing). Default kloudie/<today>. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_thumbnail \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tool":"generate","prompt":"<prompt>"}'generate_titlesSpends AI creditsDefaultThree to five YouTube title suggestions from Pikzels, from a topic, a thumbnail URL, or both. Costs about 55 credits.
| Parameter | Type | Description |
|---|---|---|
prompt | string | The video topic or idea. Give this, imageUrl, or both. |
imageUrl | string | Public URL of the thumbnail the titles should pair with. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_titles \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'generate_videoSpends AI creditsDefaultGenerate 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).
| Parameter | Type | Description |
|---|---|---|
promptrequired | string | What happens in the clip: subject, action, camera, style. |
model | enum | Default veo-3.1-lite (cheapest). Credits scale with model and duration.One of: veo-3.1-liteveo-3.1-fastveo-3.1 |
duration | integer | Clip length in seconds, 4 to 8. Default 6. |
aspect | enum | Aspect ratio. Default 16:9.One of: 16:99:16 |
referenceUrl | string | Public image URL to use as the first frame. Takes precedence over sourceCreationId. |
sourceCreationId | string | Library image creationId (from generate_image or list_library) to use as the first frame. |
generateAudio | boolean | Generate a native soundtrack with the clip. Default true. |
folder | string | Drive folder for the copy, e.g. "kloudie/episode-12" (created if missing). Default kloudie/<today>. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"<prompt>"}'generate_voiceoverSpends AI creditsGive a Studio video a voiceover: ElevenLabs reads the script in the workspace's voice, the audio becomes the video's voice track (the last scene holds longer if the voice runs past the end), and its word timing becomes the captions. Replaces an existing voiceover and its captions. Paid by script length (quote first with dryRun=true; a failure is not charged). Spends AI credits; get_pricing quotes it first.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video (projectId from list_video_projects). |
scriptrequired | string | What the voice says, in plain sentences. |
voiceId | string | A voice id from the workspace's voices; omit for the workspace's default voice. |
dryRun | boolean | Only quote the credits; nothing is generated or charged. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/generate_voiceover \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","script":"<script>"}'get_creationFree · read-onlyDefaultFetch 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.
| Parameter | Type | Description |
|---|---|---|
creationIdrequired | string | Creation id from list_library or from the tool that made it. |
offset | integer | Character offset to read from; pass the previous nextOffset. Default 0. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_creation \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"creationId":"<creationId>"}'get_edit_runFree · read-onlyFollow a video edit from edit_video: status (queued, starting, syncing, editing, checking, saving, completed, failed, aborted), what the editor is doing right now in plain words, the checks, and when done what changed, its summary and the credits it really cost. Free; advances the edit. Poll every 15-30 seconds.
| Parameter | Type | Description |
|---|---|---|
runIdrequired | string | runId from edit_video. |
since | integer | Return only events after this many (the previous call's eventCount). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_edit_run \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"runId":"<runId>"}'get_video_projectFree · read-onlyRead one Studio video: its scenes (id, label, start, length), overlays such as captions, audio tracks, every editable setting (id, type, allowed values, current value) and open comments, plus revision and studioUrl. Use the setting ids with update_video_project. Free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | projectId from list_video_projects or create_video_project. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_video_project \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'get_voice_profileFree · read-onlyRead 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.
| Parameter | Type | Description |
|---|---|---|
name | string | A named voice (as listed in "voices"), e.g. "X" or "Narrator". Omit for the workspace's own voice profile. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_voice_profile \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'lipsync_videoSpends AI creditsLip-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.
| Parameter | Type | Description |
|---|---|---|
videorequired | string | 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. |
audiorequired | string | 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 | enum | lipsync-2 (default, the cheapest), lipsync-2-pro (sharper teeth and detail, about 1.7x) or sync-3 (native 4K, about 2.7x).One of: lipsync-2lipsync-2-prosync-3 |
sync_mode | enum | When the audio and video lengths differ: cut_off (default), bounce, loop, silence or remap.One of: cut_offbounceloopsilenceremap |
temperature | number | How expressive the mouth is, 0-1 (lipsync-2 models only). |
occlusion_detection | boolean | Handle hands or objects in front of the face (slower). |
active_speaker_detection | boolean | Sync only the person who is speaking when several faces are on screen. |
model_mode | enum | lips (default), face or head: how much of the face is regenerated.One of: lipsfacehead |
segments | object[] | 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. |
duration_seconds | number | The clip's length in seconds when it is not known (a link). Used for the quote. |
name | string | Name for the result in the Library and Drive. Default: the video's name + "lip-sync". |
folder | string | Drive folder for the result; default kloudie/<date>. |
consent_confirmed | boolean | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/lipsync_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video":"<video>","audio":"<audio>"}'list_libraryFree · read-onlyBrowse the workspace Library: saved scripts, post packs, audio, images, videos and reports (titles only), with optional kind filter and title search. Free.
| Parameter | Type | Description |
|---|---|---|
kind | enum | Only this kind of creation. Omit for all kinds.One of: scriptpoststtsimagevideoreport |
query | string | Case-insensitive match on the title. |
limit | integer | Max items, newest first. Default 20, max 50. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_library \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_saved_referencesFree · read-onlyList the workspace's saved style references with preview links. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_saved_references \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_video_project_filesFree · read-onlyList the files of a Studio video the way a folder looks on disk: project.json (timing, settings, audio, captions), scenes/<id>.html (one HyperFrames scene each), assets/ (media and small text files) and the generated index.html. Each entry says its size, whether it is text or media, whether it can be edited here, and which scene or audio track uses it. Returns the video's revision. Free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_video_project_files \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'list_video_projectsFree · read-onlyList the workspace's Studio videos (newest first): projectId, title, shape (16:9 or 9:16), length, scene count and studioUrl. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_video_projects \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_voicesFree · read-onlyList the workspace's ElevenLabs voices (id, name, category) for generate_audio. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_voices \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_quality_standardsFree · changes your workspaceRead 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).
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | get returns the standards; set replaces them.One of: getset |
content | string | set only: the full new standards in markdown. Keep the '## Lessons from AI review' section if you want to keep past lessons. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_quality_standards \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"get"}'preview_video_framesSpends AI creditsLook at a Studio video: still frames at the seconds you name (up to 6, small JPEGs) plus the full browser check (layout overflow, contrast, runtime errors), taken on the video's own cloud machine. Costs about 10 credits, never more than 30: the cap is held and the measured machine time is charged, a video's first preview takes 2-3 minutes longer, and dryRun=true quotes for free. Async, about 3 minutes: returns a jobId; poll get_job with its job_id every 20 seconds; the finished job returns the frames as images. The stills are also filed in the video's folder under snapshots/. Use it after check_video_project passes, on the moments you changed, before paying for a render.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
times | number[] | Seconds into the video to take still frames at, up to 6 per call, e.g. [0, 2.5, 8]. Pick the moments you changed. |
width | integer | Width of each still in pixels, 320-960. Default 640: enough to judge layout and text. |
jobId | string | Read a preview that was started earlier (its jobId) instead of starting a new one. Free. |
dryRun | boolean | Only quote the credits; nothing runs and nothing is charged. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/preview_video_frames \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'read_video_project_fileFree · read-onlyRead a text file of a Studio video (project.json, a scene's HTML, a small text asset such as word timings, or the generated index.html), with the video's revision. A long file comes in parts: the result names nextOffset, pass it as offset for the rest. Media files are used by their path and are never read as text. Free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
pathrequired | string | Path inside the video, e.g. "scenes/hook.html" or "project.json". list_video_project_files lists them. |
offset | integer | First line to return, counting from 1. Default 1. |
limit | integer | How many lines to return. Default: as many as fit one result. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/read_video_project_file \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","path":"<path>"}'refresh_voice_profileSpends AI creditsDistill 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.
| Parameter | Type | Description |
|---|---|---|
name | string | Name for a separate named voice (saved as "Voice: <name>"). Omit to refresh the workspace's own voice profile. |
titleMatch | string | Channel name or title text picking which transcripts to study, or a platform (X, tiktok, instagram) to learn from imported posts. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/refresh_voice_profile \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'review_fileSpends AI creditsAI 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.
| Parameter | Type | Description |
|---|---|---|
fileIdrequired | string | Drive fileId of the video or audio (search_drive, finish_upload, save_to_drive). |
version | integer | Version to review. Default: the current version. |
context | string | What changed in this version or what to focus on (the script, the brief, the last review's fixes). |
partOfFileId | string | 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. |
partStartSeconds | number | Where the part starts in the film, in seconds (the range render's range.startSeconds). With partOfFileId. |
partEndSeconds | number | Where the part ends in the film, in seconds (the range render's range.endSeconds). With partOfFileId. |
quoteOnly | boolean | true = only return the price and the length it is based on; nothing runs or is charged. |
learn | boolean | Append new durable lessons to the Quality standards. Default true. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/review_file \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileId":"<fileId>"}'review_scriptSpends AI creditsBeat-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.
| Parameter | Type | Description |
|---|---|---|
scriptText | string | The script text to review, up to 60,000 characters. Give this or creationId. |
creationId | string | Library script creationId (from list_library or save_creation) to review instead of scriptText. |
channel | string | Which connected channel the script is for (name or @handle), when the workspace has several: grounds the review in that channel's retention. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/review_script \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'save_creationFree · changes your workspaceSave a script or social post pack into the workspace Library (Playground > Library). Free.
| Parameter | Type | Description |
|---|---|---|
kindrequired | enum | script = a video script, posts = a social post pack.One of: scriptposts |
titlerequired | string | Library title, up to 200 characters. |
bodyrequired | string | The full text to save (plain text or Markdown), up to 60,000 characters. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_creation \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"script","title":"<title>","body":"<body>"}'save_creation_to_brainFree · changes your workspaceSave a text creation (script, posts, or report) from the Library into the workspace Brain as a searchable note. Free.
| Parameter | Type | Description |
|---|---|---|
creationIdrequired | string | Library creationId of a script, post pack or report (from list_library). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_creation_to_brain \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"creationId":"<creationId>"}'save_referenceFree · changes your workspaceSave an image URL into the workspace style-reference set for reuse in image generation. Free.
| Parameter | Type | Description |
|---|---|---|
imageUrlrequired | string | Public image URL to save (max 10 MB). |
label | string | Short name to recognize the reference by. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_reference \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"imageUrl":"<imageUrl>"}'score_thumbnailSpends AI creditsDefaultGrade 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.
| Parameter | Type | Description |
|---|---|---|
imageUrlrequired | string | Public URL of the thumbnail image to grade. |
title | string | The video title it will run with, so the grade judges the pair. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/score_thumbnail \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"imageUrl":"<imageUrl>"}'stop_edit_runFree · changes your workspaceStop a running video edit: the editor is stopped, the video stays as it was (anything it had started saving is put back), you pay only for what it used and the rest of the hold is refunded. An edit that is already saving cannot be stopped. Only the person who started it or an admin can stop it. Free.
| Parameter | Type | Description |
|---|---|---|
runIdrequired | string | runId from edit_video. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/stop_edit_run \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"runId":"<runId>"}'swap_video_mediaFree · changes your workspaceReplace a scene's recording, a picture setting, or the voice/music track of a Studio video with a Drive file (copied into the video's assets/, the original stays). Free. Use get_video_project for scene and setting ids.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video to change. |
driveFileIdrequired | string | The Drive image, video or audio file to use. |
targetrequired | any | What the file replaces. |
revision | integer | The revision you read; a newer saved video returns a conflict instead of overwriting. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/swap_video_media \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","driveFileId":"<driveFileId>","target":"<target>"}'transcribeSpends AI creditsDefaultTranscribe 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.
| Parameter | Type | Description |
|---|---|---|
url | string | Video URL on YouTube, Instagram, TikTok or Facebook. Give this or fileId. |
fileId | string | Drive fileId of an audio or video file (from finish_upload, save_to_drive or search_drive). Give this or url. |
withTimestamps | boolean | fileId only: also return start times per line (for captions and cuts). Default false. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/transcribe \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'transcribe_captionsSpends AI creditsMake a Studio video's captions from the voice in its recording or voiceover: ElevenLabs Scribe reads the words and their exact timing, and the captions follow them. Paid by length of the media (quote first with dryRun=true; the charge never exceeds the quote and a failure is not charged). Replaces the current captions. Caption wording can then be fixed for free with update_video_project captionText. Spends AI credits; get_pricing quotes it first.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video (projectId from list_video_projects). |
fromrequired | string | The recording scene id or the voice audio track id to caption (get_video_project lists them). |
dryRun | boolean | Only quote the credits; nothing is transcribed or charged. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/transcribe_captions \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","from":"<from>"}'translate_videoSpends AI creditsTranslate a video into other languages in the speaker's own voice: the voice is separated from the music, transcribed, translated natively per language, re-voiced segment by segment to the original timing, mixed back over the background and muxed into an MP4. Each language also gets the voice-only track, SRT and VTT subtitles and, when given, the translated title and description. Best for one narrator or presenter; for interviews or several speakers use dub_video (the ElevenLabs studio dub, about 6x the price). source is a Drive file id, a Library creation id or a public link. A long job: returns a job_id at once; poll get_job every 30-60 seconds (separation and the first language take several minutes, then each language a few more). Every language is filed in Drive under kloudie/<date>/<video>/<language> as it finishes; one that fails is refunded while the others still deliver. Costs about 60 AI credits a minute per language plus a one-time part for the video (a 10-minute video: 300 + 620 per language). The quote is held and settled on the real length.
| Parameter | Type | Description |
|---|---|---|
sourcerequired | string | The video to translate: a Drive file id (search_drive, finish_upload), a Library creation id (list_library), or a public https link (a direct file works best; YouTube or TikTok pages are fetched when the platform allows it). |
target_languagesrequired | enum[] | Languages to translate into, as codes: es (Spanish), pt (Portuguese), fr (French), de (German), it (Italian), hi (Hindi), bn (Bengali), ja (Japanese), ko (Korean), id (Indonesian), tr (Turkish), pl (Polish), ar (Arabic), nl (Dutch), zh-Hant (Chinese (Traditional)), vi (Vietnamese), ru (Russian). |
source_language | string | The language spoken in the video, e.g. en. Detected when omitted. |
voice | string | "clone" (default): a temporary instant clone of the speaker, made from the video and deleted when the job ends; only for videos where the caller is the speaker or has their permission. Or a voice id from list_voices. |
voice_track | string | Optional: the source's voice-only stem (Drive file id, Library id or link). Gives a cleaner transcript and clone. |
background_track | string | Optional: the source's music and effects stem. With voice_track, skips the voice separation step. |
output | enum | "video" (default): a translated MP4 per language. "audio": the audio-master mode for a finished film: pass the film's audio master (or its video) as source, ideally with voice_track + background_track; each language is delivered as a mastered audio track (-14 LUFS, mastered to a true peak of at most -1 dBTP; the encoded file is measured and one still above it is flagged) + SRT and VTT subtitles in Drive under dubs/<video>/<language>, with no video copy. For a video platform the subtitles go up as captions and the track as an extra audio language in its studio.One of: videoaudio |
audio_format | enum | output "audio" only: "m4a" (AAC, default) or "opus" (sized to stay under 10 MB, for studio uploads that cap the file).One of: m4aopus |
source_subtitles | string | Optional: the narration's own subtitles (an .srt or .vtt Drive file id, or a public link). Its timed lines become the segments, so no transcription runs and the exact script is translated; the quote is sized from its text. It must be this cut's file: lines past the end of the source, or more text than can be spoken in its length, are refused before anything is charged. |
title | string | The video's title, translated per language for its audio track. |
description | string | The video's description, translated per language (timestamps, links and hashtags kept). |
dry_run | boolean | Return the credit quote and what the job would skip (separation, transcription, video copies) without starting or charging anything. Free. |
max_minutes | integer | The source's length in minutes, at most, when it is not known (a link). Held per language; the real length is charged and the rest refunded. Default 10. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/translate_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source":"<source>","target_languages":"<target_languages>"}'update_video_projectFree · changes your workspaceChange a Studio video without AI: settings such as text, caption size and style, brand colours (values / sceneValues), scene lengths (sceneDurations), scene order (sceneOrder), audio volumes and the title. Saves at once and the Studio preview updates; free. Call get_video_project first for the setting ids and allowed values.
| Parameter | Type | Description |
|---|---|---|
title | string | New video title. |
values | object | Settings for the whole video by id, e.g. {"captionSize": 72, "accent": "#ff5500", "headline": "New title"}. get_video_project lists the ids, types and allowed values. |
sceneValues | object[] | Settings for one scene only (overrides the video-wide value there). |
sceneDurations | object[] | New scene lengths in seconds; later scenes move to stay back to back. |
sceneOrder | string[] | Every scene id once, in the new order. |
captionText | object[] | Fix caption wording; each line keeps its timing. |
audioVolumes | object[] | Audio track volumes (0 = silent, 1 = as recorded). |
projectIdrequired | string | The video to change. |
revision | integer | The revision you read. When given and the video changed since, nothing is saved and you get the latest revision back. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/update_video_project \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>"}'write_video_project_fileFree · changes your workspaceCreate or replace one text file of a Studio video: project.json (checked against the video format before it is saved), scenes/<id>.html, or a small text file under assets/. No media, nothing outside the video, and never index.html: it is rebuilt from project.json on every save. Every save raises the video's revision and returns it, and the Studio preview shows the change. A new scene file plays once project.json lists it. Free.
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | string | The video: projectId from list_video_projects or create_video_project. |
pathrequired | string | Path inside the video, e.g. "scenes/hook.html" or "project.json". list_video_project_files lists them. |
contentrequired | string | The whole new file as text (at most 400 KB). For a small change use edit_video_project_file instead of resending the file. |
baseRevision | integer | The revision you read (every read and write returns it). When the video was saved since, nothing is written and you get the current revision back. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/write_video_project_file \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectId":"<projectId>","path":"<path>","content":"<content>"}'Research?toolsets=research
analyze_channelFree · read-onlyAnalyze 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.
| Parameter | Type | Description |
|---|---|---|
channelrequired | string | YouTube @handle, channel URL, channel name, or UC… id. |
platform | enum | Default youtube; only YouTube lookups are available today.One of: youtubeinstagramtiktokx |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/analyze_channel \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel":"<channel>"}'deep_researchSpends AI creditsDefaultResearch 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.
| Parameter | Type | Description |
|---|---|---|
topicrequired | string | The topic to research. Be specific. |
angle | string | Optional framing/audience, e.g. 'for a faceless finance channel'. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/deep_research \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"topic":"<topic>"}'find_nichesSpends AI creditsFind YouTube niches and winning channels using a curated research database: describe a topic, or leave the query empty to browse by filters (size, views, revenue, RPM, channel age). 24 channels per page. Included with the active plan, subject to the research allowance.
| Parameter | Type | Description |
|---|---|---|
query | string | The niche or topic in plain words. Omit to browse by filters only. |
shorts | boolean | true searches Shorts channels; the long-form-only filters are then rejected. |
facelessOnly | boolean | true keeps only faceless channels. |
minSubscribers | integer | Minimum subscriber count. |
maxSubscribers | integer | Maximum subscriber count. |
minAvgViewsPerVideo | integer | Minimum average views per video. |
minMonthlyRevenue | number | Minimum estimated revenue per month, in USD. Long-form only. |
minRpm | number | Minimum estimated RPM (USD per 1,000 views). Long-form only. |
firstUploadAfter | string | Channel's first upload on or after this date (YYYY-MM-DD). Good for finding new channels. |
page | integer | Results page, 1 to 20. Default 1. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/find_niches \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'find_outlier_videosSpends AI creditsDefaultFind faceless YouTube outlier videos from a curated research database. Describe a topic to find uploads substantially outperforming their channel's usual results. Included with the active plan, subject to the research allowance.
| Parameter | Type | Description |
|---|---|---|
query | string | Describe the niche, or leave empty / use * to browse by filters only.Default: "" |
page | integer | Results page, 1 to 20. Default 1.Default: 1 |
limit | integer | Videos per page, 1 to 50. Default 24.Default: 24 |
minOutlierScore | number | Minimum outlier score: the video's views as a multiple of its channel's usual views. Default 3 (3x).Default: 3 |
maxOutlierScore | number | Maximum outlier score. |
minSubscribers | integer | Minimum subscribers of the uploading channel. |
maxSubscribers | integer | Maximum subscribers of the uploading channel. |
minViews | integer | Minimum video views. |
maxViews | integer | Maximum video views. |
minDuration | number | Minimum video length in seconds. |
maxDuration | number | Maximum video length in seconds. |
minUploadDate | string | Uploaded on or after this date (YYYY-MM-DD). |
maxUploadDate | string | Uploaded on or before this date (YYYY-MM-DD). |
videoType | enum | long = long-form only, shorts = Shorts only. Omit for both.One of: longshorts |
ytChannelId | string | Only videos from this channel (UC… id, from search_youtube or find_niches). |
isAiContent | boolean | true keeps only videos flagged as AI-made; false excludes them. |
sortBy | enum | Sort field. Omit for best match to the query.One of: outlierScorevideoViewschannelSubCountvideoPublishedAt |
sortDirection | enum | Sort direction for sortBy.One of: ascdesc |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/find_outlier_videos \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_channel_thumbnailsFree · read-onlyList a YouTube channel's recent thumbnails from a channel or video link, to copy its style. Public data, free.
| Parameter | Type | Description |
|---|---|---|
urlrequired | string | A YouTube channel URL, @handle URL, UC… channel id, or any video link from the channel. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_channel_thumbnails \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"<url>"}'get_youtube_channelSpends AI creditsLook 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. Included with the active plan, subject to the research allowance.
| Parameter | Type | Description |
|---|---|---|
channelIdrequired | string | YouTube channel id starting with UC (from search_youtube or a channel URL). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_youtube_channel \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channelId":"<channelId>"}'get_youtube_commentsFree · read-onlyDefaultRead 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.
| Parameter | Type | Description |
|---|---|---|
videos | string[] | YouTube video links or ids (up to 10). Use this or channel. |
channel | string | YouTube @handle, channel URL, name, or UC… id: reads comments on that channel's videos. |
pick | enum | With channel: its most-viewed videos (top, default) or latest uploads (recent).One of: toprecent |
video_count | integer | With channel: how many videos to read. Default 5. |
per_video | integer | Comments per video, most relevant first. Default 40, max 100; 300 in total. |
order | enum | relevance (default) or time (newest first).One of: relevancetime |
search | string | Only comments containing this text, e.g. a question word or product name. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_youtube_comments \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'read_urlSpends AI creditsDefaultOpen 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.
| Parameter | Type | Description |
|---|---|---|
urlrequired | string | The absolute http(s) URL to open and read. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/read_url \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"<url>"}'search_youtubeSpends AI creditsDefaultSearch live YouTube results with current views and recency for keyword and packaging research. Included with the active plan, subject to the research allowance.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | Search terms, as typed into YouTube search. |
type | enum | Only this result type. Omit for mixed results.One of: videochannelplaylistshorts |
sortBy | enum | Result order.One of: relevancepopularityratingdateviews |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_youtube \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<query>"}'web_searchSpends AI creditsDefaultSearch 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.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | The search query. Be specific. |
maxResults | integer | How many results (default 5, max 8). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/web_search \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<query>"}'Drive and files?toolsets=drive
create_documentFree · changes your workspaceCreate a collaborative document in Drive from plain text or simple markdown (one paragraph per line). Free.
| Parameter | Type | Description |
|---|---|---|
titlerequired | string | Document title (its Drive file name). |
contentrequired | string | Body as plain text or simple Markdown, one paragraph per line, up to 60,000 characters. |
folderId | string | Drive folder id (from search_drive or list_drive). Default: the Drive root. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_document \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"<title>","content":"<content>"}'edit_documentFree · changes your workspaceRead 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: readedit |
fileIdrequired | string | Drive file id of a native document (from search_drive or create_document). |
tabId | string | Tab id from read; required for multi-tab documents. |
revision | string | The exact revision returned by read, required for edit. |
contentText | string | Complete replacement plain text for ONE tab. Newlines become paragraphs. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/edit_document \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"read","fileId":"<fileId>"}'finish_uploadFree · changes your workspaceDefaultStep 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.
| Parameter | Type | Description |
|---|---|---|
uploadIdrequired | string | uploadId returned by upload_file. |
namerequired | string | The same file name passed to upload_file. |
contentTyperequired | string | The same MIME type passed to upload_file. |
folder | string | Drive folder path such as "kloudie/voiceovers". Missing folders are created. Default "kloudie". |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/finish_upload \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"uploadId":"<uploadId>","name":"<name>","contentType":"<contentType>"}'get_drive_urlFree · read-onlyMint 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.
| Parameter | Type | Description |
|---|---|---|
fileIdrequired | string | A Drive file id (search_drive, drive_file_id) or a Library asset id (asset_id, libraryId, creationId, thumbId). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_drive_url \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileId":"<fileId>"}'list_driveFree · read-onlyList 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.
| Parameter | Type | Description |
|---|---|---|
folder | string | A Drive folder's name (fuzzy) or id. Omit to list the Drive root. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_drive \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_file_versionsFree · read-onlyList a Drive file's saved document snapshots and uploaded media versions. Requires access to the file. Free.
| Parameter | Type | Description |
|---|---|---|
fileIdrequired | string | Drive file id (from search_drive). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_file_versions \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileId":"<fileId>"}'manage_drive_itemFree · changes your workspaceOrganize 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: create_folderrenamemove |
fileId | string | The Drive file or folder id (rename / move / delete). |
name | string | Folder name (create_folder) or the new name (rename). |
parentId | string | Parent/destination folder id; omit or null for the Drive root. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_drive_item \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create_folder"}'read_documentFree · read-onlyDefaultRead 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.
| Parameter | Type | Description |
|---|---|---|
fileIdrequired | string | The native document's Drive file id (from search_drive). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/read_document \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileId":"<fileId>"}'save_to_driveFree · changes your workspaceDefaultCopy 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.
| Parameter | Type | Description |
|---|---|---|
creationIdrequired | string | Library id returned by a generator (libraryId / creationId). |
name | string | File name in Drive; defaults to the creation's title. |
folder | string | Drive folder path such as "kloudie/voiceovers". Missing folders are created. Default "kloudie". |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_to_drive \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"creationId":"<creationId>"}'search_driveFree · read-onlyDefaultFind 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.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | Part of the file or folder name; fuzzy matched. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_drive \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<query>"}'upload_fileFree · changes your workspaceDefaultSend 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.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | File name with extension, no folders, e.g. "interview.mp4". |
contentTyperequired | string | MIME type, e.g. "audio/mpeg", "video/mp4", "image/png". |
sizeBytesrequired | integer | Exact file size in bytes (max 2 GB), checked against the Drive quota. |
folder | string | Drive folder path such as "kloudie/voiceovers". Missing folders are created. Default "kloudie". |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/upload_file \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","contentType":"<contentType>","sizeBytes":1}'Boards, cards and tasks?toolsets=workspace
apply_board_templateFree · changes your workspaceCreate 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.
| Parameter | Type | Description |
|---|---|---|
templateIdrequired | string | templateId from search_board_templates. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/apply_board_template \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"templateId":"<templateId>"}'complete_stage_cardsFree · changes your workspaceMark 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.
| Parameter | Type | Description |
|---|---|---|
boardIdrequired | string | Board id from list_boards. |
stageIdrequired | string | The column (stage) id on that board, from list_boards. |
assigneeId | string | Existing teammate userId from search_people. Adds editor credit without replacing assignees or creating payouts. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/complete_stage_cards \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"boardId":"<boardId>","stageId":"<stageId>"}'create_boardFree · changes your workspaceCreate 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.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | The board's name. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_board \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"<name>"}'create_cardFree · changes your workspaceDefaultCreate 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.
| Parameter | Type | Description |
|---|---|---|
boardIdrequired | string | Board id from get_workspace_overview. |
titlerequired | string | Card title, usually the working video title. |
description | string | Card body (plain text or Markdown). Empty keeps the board's card template.Default: "" |
stageId | string | Stage id on that board (get_workspace_overview). Default: the board's first stage. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_card \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"boardId":"<boardId>","title":"<title>"}'create_taskFree · changes your workspaceDefaultCreate 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.
| Parameter | Type | Description |
|---|---|---|
titlerequired | string | Task title, up to 300 characters. |
dueAt | string | Due date-time, ISO 8601 with offset, e.g. 2026-10-12T17:00:00Z. |
cardId | string | Card id (from list_cards) to attach the task to. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_task \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"<title>"}'get_cardFree · read-onlyDefaultOne card in full: title, description, stage, board, due date, and its latest comments. Free.
| Parameter | Type | Description |
|---|---|---|
cardIdrequired | string | Card id from list_cards. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_card \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cardId":"<cardId>"}'get_card_templateFree · read-onlyThe board's card description template: the text new cards start from when created without a description. Empty when unset. Free.
| Parameter | Type | Description |
|---|---|---|
boardIdrequired | string | Board id from list_boards. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_card_template \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"boardId":"<boardId>"}'get_card_timelineFree · read-onlyChronological 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.
| Parameter | Type | Description |
|---|---|---|
cardIdrequired | string | Card id from list_cards. |
granularity | enum | session (default) groups bursts of activity, day groups by date, event lists every event.One of: eventsessiondayDefault: "session" |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_card_timeline \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cardId":"<cardId>"}'get_whats_newFree · read-onlyDefaultThe 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.
| Parameter | Type | Description |
|---|---|---|
limit | integer | How many changelog entries, newest first. Default 10.Default: 10 |
since | string | Only entries dated on or after this ISO date (YYYY-MM-DD), e.g. the start of 'this month'. |
query | string | Area or feature to filter by, matched against titles and bullet items, e.g. 'mcp', 'thumbnails', 'Drive'. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_whats_new \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_asana_projectFree · changes your workspaceImport 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.
| Parameter | Type | Description |
|---|---|---|
asanaProjectId | string | Asana project id from the list this tool returns when called without it. Omit to list them. |
targetBoardId | string | Existing kloudboard board id to import into. Omit to create a new board named after the source. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_asana_project \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_clickup_listFree · changes your workspaceImport 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.
| Parameter | Type | Description |
|---|---|---|
clickupListId | string | ClickUp list id from the list this tool returns when called without it. Omit to list them. |
targetBoardId | string | Existing kloudboard board id to import into. Omit to create a new board named after the source. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_clickup_list \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_monday_boardFree · changes your workspaceImport 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.
| Parameter | Type | Description |
|---|---|---|
mondayBoardId | string | monday.com board id from the list this tool returns when called without it. Omit to list them. |
targetBoardId | string | Existing kloudboard board id to import into. Omit to create a new board named after the source. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_monday_board \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_notion_databaseFree · changes your workspaceImport 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.
| Parameter | Type | Description |
|---|---|---|
notionDatabaseId | string | Notion database id from the list this tool returns when called without it. Omit to list them. |
targetBoardId | string | Existing kloudboard board id to import into. Omit to create a new board named after the source. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_notion_database \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_trello_boardFree · changes your workspaceImport 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.
| Parameter | Type | Description |
|---|---|---|
trelloBoardId | string | Trello board id from the list this tool returns when called without it. Omit to list them. |
targetBoardId | string | Existing kloudboard board id to import into. Omit to create a new board named after the source. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_trello_board \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_boardsFree · read-onlyEvery board's stages with live card counts. Ids feed create_card, list_cards, and update_card. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_boards \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_cardsFree · read-onlyDefaultList cards, newest first: optionally filtered by board, stage, or title text. Returns cardIds for get_card and update_card. Free.
| Parameter | Type | Description |
|---|---|---|
boardId | string | Only cards on this board (id from get_workspace_overview). |
stageId | string | Only cards in this stage (id from get_workspace_overview). |
query | string | Title text or a short id like KB-26. |
limit | integer | Max cards. Default 25, max 50. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_cards \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_tasksFree · read-onlyDefaultList 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.
| Parameter | Type | Description |
|---|---|---|
scope | enum | Which tasks; see the tool description. Default mine.One of: minecreatedassignedprojectDefault: "mine" |
completed | boolean | false = open only, true = done only, omit for both. |
query | string | Case-insensitive match on the task title. |
limit | integer | Max tasks, newest first. Default 25, max 100.Default: 25 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_tasks \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_calendar_eventFree · changes your workspaceList, 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: listcreateupdate |
eventId | string | The event's id from list; update and delete need it. |
title | string | Event title; create and update need it. |
start | string | Start as ISO 8601, e.g. "2026-10-12T13:00:00+02:00"; create and update need it. |
end | string | End as ISO 8601; defaults to the start. |
description | string | Notes shown on the event. |
allDay | boolean | true for an all-day event. |
color | string | Event color, e.g. "blue" or "#3b82f6". |
limit | integer | How many events list returns (default 50, max 100). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_calendar_event \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'manage_reviewFree · changes your workspaceWork 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: list_commentsadd_commentresolve_commentapproverequest_changes |
fileIdrequired | string | The Drive file under review (find it with search_drive). Required. |
content | string | Comment text for add_comment. |
commentId | string | Comment id (from list_comments) for resolve_comment. |
version | integer | File version number. Required for approve and request_changes. |
timestampSeconds | number | Anchor an add_comment at this playback second (video/audio files). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_review \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list_comments","fileId":"<fileId>"}'manage_stageFree · changes your workspaceManage 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: createrenamereorder |
boardId | string | Board id from get_workspace_overview or list_boards. Required for create and reorder. |
stageId | string | Stage id for rename or delete. |
title | string | New stage name for create or rename. |
color | string | Stage dot color (a CSS var or value) for create or rename. |
stageIds | string[] | For reorder: every stage id of the board in the new order. |
moveToStageId | string | For delete: move the deleted stage's cards here instead of orphaning them. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_stage \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create"}'search_board_templatesFree · read-onlySearch 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.
| Parameter | Type | Description |
|---|---|---|
query | string | Words to match against template names, topics, descriptions and column names. Omit to browse. |
limit | integer | Max templates. Default 10, max 20. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_board_templates \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'search_helpFree · read-onlyDefaultCurated, 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.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | The question or topic in plain words, e.g. "how do guest permissions work". |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_help \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<query>"}'set_card_templateFree · changes your workspaceSet the board's card description template (up to 5000 chars; empty string clears it). New cards created without a description start from it. Free.
| Parameter | Type | Description |
|---|---|---|
boardIdrequired | string | Board id from list_boards. |
templaterequired | string | The full template text (replaces the current one). Empty string clears it. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/set_card_template \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"boardId":"<boardId>","template":"<template>"}'update_cardFree · changes your workspaceDefaultOne 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.
| Parameter | Type | Description |
|---|---|---|
cardIdrequired | string | Card id from list_cards. |
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: move_stagerenameset_duecommentcompleteset_priorityblockunblock |
stageId | string | move_stage: target stage id on the card's board. |
newTitle | string | rename: the new title. |
dueAt | string | set_due: ISO 8601 with offset. Omit to clear the due date. |
body | string | comment: the comment text, up to 4,000 characters. |
priority | enum | set_priority: the new priority. Omit to clear it.One of: urgenthighmediumlow |
reason | string | block: why the card is blocked, up to 200 characters. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/update_card \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cardId":"<cardId>","action":"move_stage"}'update_taskFree · changes your workspaceDefaultOne 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.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Task id from list_tasks. |
taskName | string | Task title to resolve when taskId is unknown; must match exactly one task. |
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: completereopenrenameset_duereassignunassign |
newTitle | string | rename: the new title. |
dueAt | string | set_due: ISO 8601 with offset. Omit to clear the due date. |
assigneeId | string | reassign: the member's userId from search_people. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/update_task \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"complete"}'update_workspace_settingsFree · changes your workspaceUpdate this workspace's settings (only the fields you pass): name, description (empty string clears it), or logoUrl. Needs settings edit permission. Free.
| Parameter | Type | Description |
|---|---|---|
name | string | New workspace name. |
description | string | Workspace description (empty string clears it). |
logoUrl | string | Workspace logo image url. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/update_workspace_settings \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Brain and memory?toolsets=brain
get_kloudie_instructionsFree · read-onlyRead the workspace's current custom instructions for how kloudie should behave (tone, focus, preferences). Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_kloudie_instructions \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import_channel_contentSpends AI creditsImport 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.
| Parameter | Type | Description |
|---|---|---|
providerrequired | enum | The platform the channel or links are on.One of: youtubetiktokinstagramtwitter |
channel_url | string | YouTube: a channel link, @handle, or any video link. Other platforms: one or more full post/video links. |
query | string | Title words to import only the matching item(s). |
limit | integer | Max items to import this call, newest first. Default 10, max 15. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/import_channel_content \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"youtube"}'list_brainFree · read-onlyList 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.
| Parameter | Type | Description |
|---|---|---|
folder | string | A folder or source-group name from a previous list_brain call. Omit to list folders and groups. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_brain \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_channel_contentFree · read-onlyList 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.
| Parameter | Type | Description |
|---|---|---|
providerrequired | enum | The platform the channel or links are on.One of: youtubetiktokinstagramtwitter |
channel_url | string | YouTube: a channel link, @handle, or any video link. Other platforms: one or more full post/video links. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_channel_content \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"youtube"}'manage_memoryFree · changes your workspaceReview 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: listlist_pendingaddapprovereject |
memoryId | string | Memory id: from list_pending for approve or reject. |
title | string | add: short memory title. |
content | string | add: the memory itself, up to 8,000 characters. |
type | string | Memory category. Defaults to brand_voice. Supported categories include golden_hook, golden_cta, golden_transition, audience_insight, brand_voice, content_pattern, and topic_expertise. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_memory \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'read_brain_itemFree · read-onlyRead 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.
| Parameter | Type | Description |
|---|---|---|
id | string | Item id from search_brain (src:<uuid> or doc:<slug>) or list_brain (a source uuid or a doc slug). Give this or title. |
title | string | Item title, fuzzy matched, when the id is unknown. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/read_brain_item \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'save_memoryFree · changes your workspaceRemember 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.
| Parameter | Type | Description |
|---|---|---|
contentrequired | string | 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 | string | Short title. Defaults to the first sentence. |
scope | enum | 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.One of: workspaceboardsystem |
scopeId | string | board or system: the id from a needs_scope option. |
type | string | Memory category, as in manage_memory. Defaults to brand_voice. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_memory \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"<content>"}'save_to_brainFree · changes your workspaceDefaultSave 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.
| Parameter | Type | Description |
|---|---|---|
title | string | Note title. Default: the first line of content. |
contentrequired | string | The note text (plain text or Markdown), up to 20,000 characters. |
id | string | To update an existing note, its id from an earlier save_to_brain or search_brain (src:<uuid>). Omit to save a new note. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/save_to_brain \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"<content>"}'search_brainFree · read-onlyDefaultSearch 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.
| Parameter | Type | Description |
|---|---|---|
query | string | One search phrase. Give this, queries, or both. |
queries | string[] | Up to 6 phrasings searched together and merged into one ranked list. |
k | integer | Passages per query. Default 8; total hits are capped at 50. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_brain \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'set_kloudie_instructionsFree · changes your workspaceSet, 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.
| Parameter | Type | Description |
|---|---|---|
instructionsrequired | string | The full instruction text (replaces the current one), up to 32,000 characters. Empty string clears it. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/set_kloudie_instructions \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"instructions":"<instructions>"}'Social posting?toolsets=social
get_dm_rule_statsFree · read-onlyHow 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.
| Parameter | Type | Description |
|---|---|---|
rule_id | string | One rule (from list_dm_rules); omit for all rules. |
days | integer | How many days back.Default: 7 |
recent | integer | How many of the latest sends to include.Default: 20 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_dm_rule_stats \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_instagram_accountFree · read-onlyLook 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.
| Parameter | Type | Description |
|---|---|---|
usernamerequired | string | Instagram username, with or without the leading @. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_instagram_account \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username":"<username>"}'list_connectionsFree · read-onlyList 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_connections \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_dm_rulesFree · read-onlyList 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_dm_rules \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_post_commentsFree · read-onlyRead the comments on one post of a connected account (Zernio inbox): comment_id, text, author, likes, reply count. Use before reply_to_comment. Free.
| Parameter | Type | Description |
|---|---|---|
account_idrequired | string | The account the post is on (list_social_accounts). |
post_idrequired | string | Zernio post id or the platform's own post id (a YouTube video id works). |
comment_id | string | List the replies to this comment instead. |
limit | integer | How many comments (default 25). |
cursor | string | The cursor from the previous page. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_post_comments \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id":"<account_id>","post_id":"<post_id>"}'list_scheduled_postsFree · read-onlyThe workspace's Zernio post queue: scheduled (default), publishing, published, failed or all, with post_id, time, preview and per-platform live URLs. Free.
| Parameter | Type | Description |
|---|---|---|
status | enum | Which posts to list.One of: scheduledpublishingpublishedpartialfailedallDefault: "scheduled" |
limit | integer | How many posts, newest schedule first.Default: 20 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_scheduled_posts \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_post_queueFree · read-onlySee 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: list |
post_id | string | Scheduled post id from list. Only cancel uses it, and cancelling is app-only. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_post_queue \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'publish_postFree · reaches people outsideDefaultPublish 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).
| Parameter | Type | Description |
|---|---|---|
platform | enum | Where to post. Default x.One of: xlinkedinDefault: "x" |
textrequired | string | The post text, up to 20,000 characters; on X anything over 280 becomes a numbered thread. |
schedule_at | string | Future ISO 8601 datetime with offset (e.g. 2026-10-12T15:00:00Z) to schedule instead of posting now. |
idempotency_key | string | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/publish_post \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"<text>"}'publish_videoFree · reaches people outsidePublish 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).
| Parameter | Type | Description |
|---|---|---|
file_idrequired | string | Drive file id of the final video (search_drive or list_drive). |
thumbnail_file_id | string | Drive file id of the thumbnail (JPEG/PNG, 1280x720, at most 2 MB). Ignored by YouTube on Shorts. |
titlerequired | string | 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 | string | Description / caption. |
tags | string[] | YouTube tags (500 characters combined). |
platforms | enum[] | Where to publish; the one connected account per platform is used. Use account_ids when a platform has several. |
account_ids | string[] | Exact account ids from list_social_accounts (overrides platforms). |
visibility | enum | unlisted and private work on YouTube and TikTok only.One of: publicunlistedprivateDefault: "public" |
schedule_at | string | Future ISO 8601 datetime with offset to schedule instead of publishing now. |
timezone | string | IANA timezone for schedule_at, e.g. Europe/Oslo. |
format | enum | short = vertical, 3 min or less (YouTube Short, Facebook Reel; no custom YouTube thumbnail). YouTube decides itself; this only steers thumbnails and Facebook.One of: autoshortlongDefault: "auto" |
playlist_id | string | YouTube playlist id to add the video to. |
category_id | string | YouTube category id, e.g. 27 Education, 28 Science & Technology. Default 22. |
made_for_kids | boolean | YouTube COPPA flag: true turns off comments, the notification bell and personalized ads for good.Default: false |
contains_synthetic_media | boolean | Disclose realistic AI-made content (YouTube label, TikTok AI label).Default: false |
first_comment | string | Posted (and pinned on YouTube) when the video goes live. |
cardId | string | Board card this video belongs to: its published links are added to the card. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/publish_video \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_id":"<file_id>","title":"<title>"}'reply_to_commentFree · reaches people outsideReply 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.
| Parameter | Type | Description |
|---|---|---|
account_idrequired | string | The account to reply as (list_social_accounts). |
post_idrequired | string | Zernio post id or the platform's own post id. |
comment_id | string | The comment to answer (from list_post_comments). Omit to comment on the post itself. |
messagerequired | string | The reply, posted publicly under the account's name. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/reply_to_comment \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id":"<account_id>","post_id":"<post_id>","message":"<message>"}'upsert_dm_ruleFree · reaches people outsideCreate 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.
| Parameter | Type | Description |
|---|---|---|
rule_id | string | Edit this rule (from list_dm_rules); omit to create one. |
namerequired | string | A short name, e.g. 'REVERSE guide'. |
platformsrequired | enum[] | Where it listens. DMs work on instagram and facebook only; tiktok, threads, linkedin and youtube get the public reply only. |
account_ids | string[] | Only these accounts (list_social_accounts). Omit for every connected account on those platforms. |
post_ids | string[] | Only these posts (the platform's post id, e.g. a YouTube video id, or a Zernio post id). Omit for all posts. |
keywordsrequired | string[] | Trigger words or phrases, matched as whole words, ignoring case, accents and punctuation. |
dm_message | string | The DM sent to the commenter (Instagram, Facebook), usually with the link. {{first_name}}, {{name}} and {{username}} are filled in. |
public_reply | string | 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. |
active | boolean | 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). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/upsert_dm_rule \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","platforms":"<platforms>","keywords":"<keywords>"}'Analytics?toolsets=analytics
analyze_my_contentFree · read-onlyQuick 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.
| Parameter | Type | Description |
|---|---|---|
platform | enum | Only this connected platform. Omit for all connected channels.One of: youtubetiktokinstagramtwitterfacebook |
channel | string | One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all. |
limit | integer | How many top videos to rank. Default 10, max 25. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/analyze_my_content \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'detect_inefficienciesFree · read-onlyRanked 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.
| Parameter | Type | Description |
|---|---|---|
sinceDays | integer | Look-back window in days when since is omitted. Default 30.Default: 30 |
since | string | Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window. |
until | string | Window end (exclusive), same format. Default now. |
boardId | string | Scope to this board (id from list_boards). |
boardName | string | Scope to the board with this exact name (case-insensitive). Omit both for all boards. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/detect_inefficiencies \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'enable_niche_watchSpends AI creditsTurn 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.
| Parameter | Type | Description |
|---|---|---|
query | string | The niche to watch, e.g. "faceless finance shorts". Omit to derive it from the connected channels. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/enable_niche_watch \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_channel_profileFree · read-onlyRead 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.
| Parameter | Type | Description |
|---|---|---|
format | enum | short (Shorts, up to 3 minutes) or long (long-form). Omit for both.One of: shortlong |
channel | string | Channel name, when the workspace has more than one connected YouTube channel. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_channel_profile \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_channel_statsFree · read-onlyEvery 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.
| Parameter | Type | Description |
|---|---|---|
channel | string | One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_channel_stats \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_stage_dwellFree · read-onlyTime-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.
| Parameter | Type | Description |
|---|---|---|
sinceDays | integer | Look-back window in days when since is omitted. Default 30.Default: 30 |
since | string | Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window. |
until | string | Window end (exclusive), same format. Default now. |
boardId | string | Scope to this board (id from list_boards). |
boardName | string | Scope to the board with this exact name (case-insensitive). Omit both for all boards. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_stage_dwell \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_video_performanceFree · read-onlyPer-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.
| Parameter | Type | Description |
|---|---|---|
platform | enum | Only this connected platform. Omit for all.One of: youtubetiktokinstagramtwitterfacebook |
channel | string | One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all. |
limit | integer | How many top videos to rank. Default 10, max 25.Default: 10 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_video_performance \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_weekly_rollupFree · read-onlyPre-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.
| Parameter | Type | Description |
|---|---|---|
weeks | integer | Number of recent weeks when since is omitted. Default 4.Default: 4 |
since | string | Window start: ISO date (YYYY-MM-DD) or datetime with timezone. Overrides the default window. |
until | string | Window end (exclusive), same format. Default now. |
boardId | string | Scope to this board (id from list_boards). |
boardName | string | Scope to the board with this exact name (case-insensitive). Omit both for all boards. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_weekly_rollup \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_recent_contentFree · read-onlyRecently published posts/videos across the workspace's connected channels, newest first, with per-item views/likes/comments. Optionally filtered to one platform. Free.
| Parameter | Type | Description |
|---|---|---|
platform | enum | Only this connected platform. Omit for all.One of: youtubetiktokinstagramtwitterfacebook |
channel | string | One connected channel: its name, @handle, URL or connectionId (list_connections). Omit for all. |
limit | integer | Max items, newest first. Default 20, max 50.Default: 20 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_recent_content \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_competitorsFree · changes your workspaceTrack competitor channels for this workspace across YouTube, Instagram, TikTok, and X. action list, or add (channel: @handle, URL, or name). Free.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: listadd |
channel | string | The channel to add: @handle, profile URL, channel name, or YouTube UC… id. |
platform | enum | Platform of channel. Default youtube; a platform profile URL overrides it.One of: youtubeinstagramtiktokx |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_competitors \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'manage_niche_watchFree · changes your workspaceCheck 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: statusdisable |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_niche_watch \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"status"}'Automations?toolsets=automations
answer_autopilot_proposalFree · reaches people outsideAccept a proposal (creates and schedules the System, or switches on the Comment → DM rule, under the Autopilot rules), dismiss it for good, or snooze it. Accepting starts weekly spending: confirm the price with the person first. Free.
| Parameter | Type | Description |
|---|---|---|
proposal_idrequired | string | id from list_autopilot_proposals. |
decisionrequired | enum | accept creates and schedules it; dismiss never offers it again; snooze hides it for `days`.One of: acceptdismisssnooze |
days | integer | snooze only: how many days (default 7). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/answer_autopilot_proposal \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"proposal_id":"<proposal_id>","decision":"accept"}'answer_held_runFree · reaches people outsideApprove or skip a run Autopilot held (a post waiting for an OK, or a run held by the weekly budget or a pause). Approving a post publishes it publicly: only with the person's explicit yes, and never by an agent over MCP or the API (the person approves it in chat, on the System page or in the mobile app; skipping works everywhere). Free.
| Parameter | Type | Description |
|---|---|---|
run_idrequired | string | run_id from get_autopilot's held list. |
decisionrequired | enum | approve posts it (or starts it); deny skips it.One of: approvedeny |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/answer_held_run \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"run_id":"<run_id>","decision":"approve"}'get_automation_runsFree · read-onlyRecent 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.
| Parameter | Type | Description |
|---|---|---|
recipeId | string | Only runs of this automation (id from list_automations). Omit for all. |
limit | integer | Max runs, newest first. Default 10, max 25. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_automation_runs \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_autopilotFree · read-onlyRead the workspace's Autopilot: its rules in plain words (approval, weekly credit budget, posting window, posts per day, quality bar, platforms, pause), every System with its schedule, next run, last result and spend this week, runs waiting for approval (held posts with title and platforms) and open proposals with their weekly price. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_autopilot \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_automationsFree · read-onlyList the workspace's automations (id, name, enabled, trigger, latest run status). Use before updating, enabling, disabling, or deleting one. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_automations \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_autopilot_proposalsFree · read-onlykloudie's priced proposals for this workspace (automate shorts, Comment → DM, weekly outlier report), made from its Brain profiles and connected accounts: id, title, what it does and its price per week. Free.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_autopilot_proposals \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_automationFree · changes your workspaceCreate, 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: propose_createpropose_updatecreateupdateenabledisable |
recipeId | string | Automation id from list_automations; required for propose_update, enable and disable. |
name | string | propose_create/propose_update: the automation's name. Default "Untitled automation". |
trigger | any | string | Trigger object or JSON string; preserve requested command/board restrictions. For example, {"kind":"card_event","types":["card.completed"]} |
graph | object | string | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_automation \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"propose_create"}'resume_automationFree · changes your workspaceApprove 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.
| Parameter | Type | Description |
|---|---|---|
runIdrequired | string | Id of a waiting_approval run, from get_automation_runs. |
decisionrequired | enum | approve runs the gated step and continues the run; deny rejects it.One of: approvedeny |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/resume_automation \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"runId":"<runId>","decision":"approve"}'update_autopilot_rulesFree · reaches people outsideChange the Autopilot rules for the workspace (or one System with systemId + override): approval {mode: always | first_n | never, n}, weekly_budget_credits, publish_windows {days 1-7 Mon-Sun, start, end HH:MM, timezone}, max_posts_per_day per platform, quality_gate (true: posts alone only when the System's quality gate passed), min_quality_score (optional extra score floor 0-10, default null; real scores sit at 4-6.5), platforms, pause_all. first_n / never let Systems post without asking each time: only with the person's explicit yes. Free.
| Parameter | Type | Description |
|---|---|---|
rules | object | Workspace rules to change; the rest stay. |
systemId | string | Change this System's own rules instead of the workspace's. |
override | object | With systemId: the System's rules on top of the workspace's (null clears them). |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/update_autopilot_rules \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Systems: repeatable production lines?toolsets=systems
create_system_from_templateFree · changes your workspaceFork 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 with update_system, run it with run_system. Free to create; each run spends credits.
| Parameter | Type | Description |
|---|---|---|
templateIdrequired | enum | templateId from list_system_templates.One of: daily-shortlongform-packagerepurpose-postsocial-launchoutlier-reportcomment-listenerweekly-learndubbing-pack |
title | string | Name for the new System; defaults to the template's name. |
schedule | object | Also put the new System on a schedule. Only when the person asked for one; tell them the monthly forecast and cap. |
publish | object | 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. |
approve_script | boolean | 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. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/create_system_from_template \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"templateId":"daily-short"}'list_system_templatesFree · read-onlyList 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_system_templates \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'run_systemSpends AI creditsRun 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.
| Parameter | Type | Description |
|---|---|---|
workflowIdrequired | string | System id from get_workspace_overview (saved Systems). |
briefrequired | string | What this run should produce: topic, angle, audience, any must-haves. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/run_system \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflowId":"<workflowId>","brief":"<brief>"}'Team and chat?toolsets=team
list_chat_channelsFree · read-onlyList 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.
| Parameter | Type | Description |
|---|---|---|
limit | integer | Max channels. Default 30, max 100. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_chat_channels \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_chat_categoryFree · changes your workspaceList, create, or rename chat sidebar categories. Changes require chat:manage. Free.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: listcreaterename |
categoryId | string | rename/delete: category id from list. |
name | string | create/rename: the category name, up to 80 characters. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_chat_category \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'manage_chat_channelFree · changes your workspaceCreate 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: createrenamemove_category |
channelId | string | Channel id from list_chat_channels; required for every action except create. |
name | string | create/rename: the channel name, up to 80 characters. |
categoryId | string | Category id from manage_chat_category list; null ungroups (move_category), optional on create. |
isPrivate | boolean | create only: true makes it a private channel. Default false. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_chat_channel \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create"}'manage_member_permissionsFree · changes your workspaceRead 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: getset |
memberIdrequired | string | Membership id or user id from manage_team. |
permissionKey | string | set: one key from get's availableKeys. |
enabled | boolean | set: true grants the permission, false removes it. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_member_permissions \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"get","memberId":"<memberId>"}'manage_teamFree · reaches people outsideManage 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | Which operation to run; the tool description says what each one does and needs.One of: listinviteresend_invitationset_role |
email | string | Invitee email for invite. |
seat | enum | Seat for invite or set_role. Default member. Admin is a member seat with the admin permission preset.One of: memberadminguest |
memberId | string | Membership id (from list) for remove_member or set_role. |
invitationId | string | Pending invitation id (from list) for resend_invitation or cancel_invitation. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_team \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"list"}'read_chat_channelFree · read-onlyRead the most recent messages in one chat channel or DM by its id. Free.
| Parameter | Type | Description |
|---|---|---|
channelIdrequired | string | Channel or DM id from list_chat_channels. |
limit | integer | Most recent messages to return. Default 30, max 80. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/read_chat_channel \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channelId":"<channelId>"}'search_peopleFree · read-onlyFind 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.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | Part of a teammate's name or email. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/search_people \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<query>"}'send_chat_messageFree · reaches people outsidePost 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.
| Parameter | Type | Description |
|---|---|---|
channelId | string | Channel id from list_chat_channels. Give this or channelName. |
channelName | string | Channel name, with or without #; reused if it exists, otherwise created. |
contentrequired | string | The message text, up to 8,000 characters. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/send_chat_message \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"<content>"}'kloudie?toolsets=kloudie
ask_kloudieSpends AI creditsAsk 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.
| Parameter | Type | Description |
|---|---|---|
questionrequired | string | The request in plain language, as you would type it in chat (up to 32,000 characters). |
conversation_id | string | conversation_id from a previous ask_kloudie result to continue that thread. Omit to start a new one. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/ask_kloudie \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question":"<question>"}'Account?toolsets=account
get_affiliate_leaderboardFree · read-onlyThe 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_affiliate_leaderboard \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_affiliate_statsFree · read-onlyThe 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.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_affiliate_stats \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'get_payout_summaryFree · read-onlyTotals per payout status: how much is pending, approved, paid, denied in this workspace. Read-only.
No parameters.
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/get_payout_summary \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'list_payoutsFree · read-onlyThe workspace's freelancer payouts, newest first: who, amount, status, which video. Read-only.
| Parameter | Type | Description |
|---|---|---|
status | enum | Only payouts with this status. Omit for all.One of: pendingapprovedpaiddenied |
limit | integer | Max payouts, newest first. Default 20, max 50.Default: 20 |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/list_payouts \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'manage_notificationsFree · changes your workspaceRead 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.
| Parameter | Type | Description |
|---|---|---|
actionrequired | enum | get returns every setting; set changes one.One of: getset |
key | enum | set only: which notification setting to change.One of: emaildesktopallSoundsrepliesmentionsstarreddmsnTaskAssignmentsnCardnDeadlinesnChatMentionsnMeetingInvitesnMeetingAddednProjectUpdatesnPaymentRequestsnPaymentConfirmationsnPaymentSentnSystememailHighemailMediumemailLowemailCardemailMentionsemailBoardemailReviewMentionsemailPaymentRequestsemailDeadlinesemailMeetingsproductsetupoffers |
value | boolean | set only: true turns it on, false turns it off. |
REST
curl -X POST https://app.kloudboard.com/api/v1/tools/manage_notifications \
-H "Authorization: Bearer $KLOUDBOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"get"}'