composer_billing_state
ChatGPTReturns the workspace's remaining credits, whether takes are watermarked (free plan), and each tool's price.
composer_edit_file
ChatGPTReplaces exact text in a project file. old_string must occur exactly once unless replace_all is true.
composer_edit_image
ChatGPTComposes or edits a keyframe image (GPT Image 2.5, 2K) as an async task. Returns task_id and the credit cost.
composer_exec
ChatGPTRuns a shell command in the project's network-isolated sandbox (ffmpeg, python, lib.compose check/sheet/strip, lib.beats, lib.audio_check, lib.screen_replace). Files it writes are saved to the project. Returns the output, or a task_id if it runs longer than about 50 s. Billed for sandbox time: 0.1 credit per minute, at least 0.1 per command.
composer_generate_clip
ChatGPTGenerates one Boreal-H3 clip (5-15 s) into the project as an async task. Returns task_id and the credit cost; the finished task's result includes the clip's CDN URL.
composer_generate_music
ChatGPTGenerates a music track (Lyria 3 Pro) as an async task. Returns task_id and the credit cost.
composer_import_asset
ChatGPTDownloads a reference file into assets/. Returns its media probe and a downscaled preview image.
composer_list_ad_accounts
ChatGPTLists the ad accounts connected to the user's Creatify workspace (Meta, Google, TikTok, AppLovin, OpenAI, Snapchat, Reddit) with currency and timezone. Use an account's platform and account_id with composer_ads_read.
composer_list_voices
ChatGPTLists eligible library or this workspace's voices with provider voice_id, languages and previews. Select a voice with the user; pass its voice_id to composer_voice_line, never a record UUID. Read-only, no generation or credits.
composer_project_create
ChatGPTCreates an Ad Agent project: a persistent working copy (assets/, gen/, index.html, stage.js) kept across conversations. Returns its project_id.
composer_project_get
ChatGPTReturns a project's files, take count, recent tasks and running tasks.
composer_project_list
ChatGPTLists this workspace's Ad Agent projects, most recently active first.
composer_read_file
ChatGPTReturns a text file from the project (index.html, stage.js, ...) with line numbers. Text files only.
composer_share
ChatGPTUploads an image, video or audio file from the project and returns its URL. On free plans, videos are watermarked.
composer_ship
ChatGPTRenders index.html, runs the ship gate and uploads the take as an async task (1 credit, refunded if the gate fails). The finished result has video_url, take and library_url.
composer_task_status
ChatGPTReturns an Ad Agent task's status, waiting up to wait seconds for it to finish. A finished clip's result includes probe and a contact sheet path; show_sheet=true attaches the sheet image.
composer_transcribe
ChatGPTTranscribes a clip or track (ElevenLabs Scribe) as an async task: word timings, plus differences from the script when one is given. 0.05 credit per minute of media, at least 0.1.
composer_view
ChatGPTReturns an image from the project (or a video's first frame), downscaled to max_edge.
composer_voice_line
ChatGPTSpeaks one or more lines using exactly one provider voice_id or authorized like samples. No voice design. Several lines write out_1.wav, out_2.wav, ...; a single line writes out. Returns task_id and credit cost.
composer_write_file
ChatGPTCreates or overwrites a text file in the project.
upload_file
ChatGPTUpload a file to the workspace CDN — ONLY for callers that can run shell commands / send HTTP requests themselves . If you are not capable of sending HTTP requests to an endpoint, call `upload_file_widget instead and ask the user to drop the file into the panel. Two modes, keyed on base64_content: - base64_content OMITTED → **presigned** (preferred, any size): returns {"upload_url", "cdn_url", "storage_path", "content_type", "expires_in"}. PUT the bytes to upload_url (sending Content-Type: <content_type> when provided), then reference cdn_url from other tools. Bytes stream client → S3; nothing goes through the model. NOTE: cdn_url is dead until your PUT completes — never pass it to other tools before then. This is the path the upload widget drives. If you cannot send HTTP requests or the endpoint is blocked, call upload_file_widget instead. - base64_content GIVEN → **inline** (tiny blobs only, <= ~1.5 MB): decode + upload in one call. ONLY pass bytes you actually hold — read from a real file or returned by an API. NEVER construct base64 from an image you can merely see in the chat: you do not have access to attachment bytes, and fabricated base64 fails validation or uploads corrupt data. For a file on the user's machine, call upload_file_widget instead. Returns {"cdn_url", "storage_path", "content_type", "bytes_uploaded"}. Larger bodies are rejected and can exceed the transport's request-size limit, so omit it and use the presigned mode. Mirrors api.views.uploads.ApiUploadView`'s two modes over MCP.
upload_file_widget
ChatGPTOpens a panel where the user can pick a local file to upload to their workspace. The panel uploads it from the browser and posts the file's URL into the chat. For clients that cannot send HTTP requests, including files attached to the chat.