@mindstudio-ai/agent 0.1.125 → 0.1.127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3437,7 +3437,7 @@ var stepMetadata = {
3437
3437
  "convertPdfToImages": {
3438
3438
  stepType: "convertPdfToImages",
3439
3439
  description: "Convert each page of a PDF document into a PNG image.",
3440
- usageNotes: "- Each page is converted to a separate PNG and re-hosted on the CDN.\n- Returns an array of image URLs, one per page.",
3440
+ usageNotes: "- Each page is converted to a separate PNG.\n- The page images go to the public CDN by default, or into one of the app's own file stores when the call passes `store` \u2014 a private store keeps them private.\n- The source PDF is never published: one of the app's own files is read where it sits, and any other URL is staged privately for the renderer and discarded afterwards.\n- Returns an array of image URLs, one per page.",
3441
3441
  inputSchema: { "type": "object", "properties": { "pdfUrl": { "type": "string", "description": "URL of the PDF document to convert" } }, "required": ["pdfUrl"] },
3442
3442
  outputSchema: { "type": "object", "properties": { "imageUrls": { "type": "array", "items": { "type": "string" }, "description": "CDN URLs of the generated page images, one per page of the PDF" } }, "required": ["imageUrls"] }
3443
3443
  },
@@ -3527,27 +3527,6 @@ var stepMetadata = {
3527
3527
  inputSchema: { "type": "object", "properties": { "input": { "type": "string", "description": "Text to scan for personally identifiable information" }, "language": { "type": "string", "description": 'Language code of the input text (e.g. "en")' }, "entities": { "type": "array", "items": { "type": "string" }, "description": 'PII entity types to scan for (e.g. ["PHONE_NUMBER", "EMAIL_ADDRESS"]). Empty array means nothing is scanned.' }, "detectedStepId": { "type": "string", "description": "Step to transition to if PII is detected (workflow mode)" }, "notDetectedStepId": { "type": "string", "description": "Step to transition to if no PII is detected (workflow mode)" }, "outputLogVariable": { "type": "string", "description": "Variable name to store the raw detection results" } }, "required": ["input", "language", "entities"] },
3528
3528
  outputSchema: { "type": "object", "properties": { "detected": { "type": "boolean", "description": "Whether any PII was found in the input text" }, "detections": { "type": "array", "items": { "type": "object", "properties": { "entity_type": { "type": "string", "description": 'PII entity type (e.g. "PHONE_NUMBER", "EMAIL_ADDRESS", "PERSON")' }, "start": { "type": "number", "description": "Start character index in the input text" }, "end": { "type": "number", "description": "End character index in the input text" }, "score": { "type": "number", "description": "Confidence score between 0 and 1" } }, "required": ["entity_type", "start", "end", "score"] }, "description": "List of detected PII entities with type, location, and confidence" } }, "required": ["detected", "detections"] }
3529
3529
  },
3530
- "discordEditMessage": {
3531
- stepType: "discordEditMessage",
3532
- description: "Edit a previously sent Discord channel message. Use with the message ID returned by Send Discord Message.",
3533
- usageNotes: "- Only messages sent by the bot can be edited.\n- The messageId is returned by the Send Discord Message step.\n- Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.\n- When editing with an attachment, the new attachment replaces any previous attachments on the message.\n- URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).",
3534
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": "Discord bot token for authentication" }, "channelId": { "type": "string", "description": "Discord channel ID containing the message" }, "messageId": { "type": "string", "description": "ID of the message to edit (returned by Send Discord Message)" }, "text": { "type": "string", "description": "New message text to replace the existing content" }, "attachmentUrl": { "type": "string", "description": "URL of a file to download and attach to the message (replaces any previous attachments)" } }, "required": ["botToken", "channelId", "messageId", "text"] },
3535
- outputSchema: { "description": "This step does not produce output data." }
3536
- },
3537
- "discordSendFollowUp": {
3538
- stepType: "discordSendFollowUp",
3539
- description: "Send a follow-up message to a Discord slash command interaction.",
3540
- usageNotes: "- Requires the applicationId and interactionToken from the Discord trigger variables.\n- Follow-up messages appear as new messages in the channel after the initial response.\n- Returns the sent message ID.\n- Interaction tokens expire after 15 minutes.\n- Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.\n- URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).",
3541
- inputSchema: { "type": "object", "properties": { "applicationId": { "type": "string", "description": "Discord application ID from the bot registration" }, "interactionToken": { "type": "string", "description": "Interaction token provided by the Discord trigger \u2014 expires after 15 minutes" }, "text": { "type": "string", "description": "Message text to send as a follow-up" }, "attachmentUrl": { "type": "string", "description": "URL of a file to download and attach to the message" } }, "required": ["applicationId", "interactionToken", "text"] },
3542
- outputSchema: { "type": "object", "properties": { "messageId": { "type": "string", "description": "ID of the sent follow-up message" } }, "required": ["messageId"] }
3543
- },
3544
- "discordSendMessage": {
3545
- stepType: "discordSendMessage",
3546
- description: "Send a message to Discord \u2014 either edit the loading message or send a new channel message.",
3547
- usageNotes: '- mode "edit" replaces the loading message (interaction response) with the final result. Uses applicationId and interactionToken from trigger variables. No bot permissions required.\n- mode "send" sends a new message to a channel. Uses botToken and channelId from trigger variables. Returns a messageId that can be used with Edit Discord Message.\n- Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.\n- URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).\n- Interaction tokens expire after 15 minutes.',
3548
- inputSchema: { "type": "object", "properties": { "mode": { "enum": ["edit", "send"], "type": "string", "description": '"edit" replaces the loading message, "send" sends a new channel message' }, "text": { "type": "string", "description": "Message text to send" }, "applicationId": { "type": "string", "description": 'Discord application ID from the bot registration (required for "reply" mode)' }, "interactionToken": { "type": "string", "description": 'Interaction token provided by the Discord trigger \u2014 expires after 15 minutes (required for "reply" mode)' }, "botToken": { "type": "string", "description": 'Discord bot token for authentication (required for "send" mode)' }, "channelId": { "type": "string", "description": 'Discord channel ID to send the message to (required for "send" mode)' }, "attachmentUrl": { "type": "string", "description": "URL of a file to download and attach to the message" } }, "required": ["mode", "text"] },
3549
- outputSchema: { "type": "object", "properties": { "messageId": { "type": "string", "description": 'ID of the sent Discord message, only present in "send" mode (use with Edit Discord Message)' } } }
3550
- },
3551
3530
  "downloadVideo": {
3552
3531
  stepType: "downloadVideo",
3553
3532
  description: "Download a video file",
@@ -3586,7 +3565,7 @@ var stepMetadata = {
3586
3565
  "extractText": {
3587
3566
  stepType: "extractText",
3588
3567
  description: "Download a file from a URL and extract its text content. Supports PDFs (including scanned/image-based PDFs via OCR), plain text files, and other document formats.",
3589
- usageNotes: "- Best suited for PDFs and raw text/document files. For web pages, use the scrapeUrl step instead.\n- Handles both text-layer PDFs and image-based/scanned PDFs (e.g. Figma/Canva exports, scanned documents). Image-based PDFs are processed with OCR automatically \u2014 there is no need to convert PDF pages to images first.\n- Accepts a single URL, a comma-separated list of URLs, or a JSON array of URLs.\n- Files are rehosted on the MindStudio CDN before extraction.\n- Optionally set `model` to a specific document-extraction model (`mistral-ocr-latest`, `llamaparse`, `google-document-ai`); omit to use the platform default.\n- Maximum file size is 50MB per URL.",
3568
+ usageNotes: "- Best suited for PDFs and raw text/document files. For web pages, use the scrapeUrl step instead.\n- Handles both text-layer PDFs and image-based/scanned PDFs (e.g. Figma/Canva exports, scanned documents). Image-based PDFs are processed with OCR automatically \u2014 there is no need to convert PDF pages to images first.\n- Accepts a single URL, a comma-separated list of URLs, or a JSON array of URLs.\n- Nothing is published. One of the app's own files \u2014 including a private one, or a share link \u2014 is read where it sits; any other URL is downloaded and staged privately for the extraction model, then discarded when extraction finishes.\n- Optionally set `model` to a specific document-extraction model (`mistral-ocr-latest`, `llamaparse`, `google-document-ai`); omit to use the platform default.\n- Maximum file size is 50MB per URL.",
3590
3569
  inputSchema: { "type": "object", "properties": { "url": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] }, "model": { "type": "string", "description": "Optional extraction model id (a `document_extraction` model, e.g. `mistral-ocr-latest`, `llamaparse`, `google-document-ai`). Defaults to the platform default when omitted." } }, "required": ["url"] },
3591
3570
  outputSchema: { "type": "object", "properties": { "text": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] } }, "required": ["text"] }
3592
3571
  },
@@ -3660,17 +3639,10 @@ var stepMetadata = {
3660
3639
  inputSchema: { "type": "object", "properties": { "source": { "type": "string", "description": "The HTML or Markdown source template for the asset" }, "sourceType": { "enum": ["html", "markdown", "spa", "raw", "dynamic", "customInterface"], "type": "string", "description": "Source type: html, markdown (auto-formatted), spa (single page app), raw (pre-generated HTML in a variable), dynamic (AI-generated from prompt), or customInterface" }, "outputFormat": { "enum": ["pdf", "png", "html", "mp4", "openGraph"], "type": "string", "description": "The output format for the generated asset" }, "pageSize": { "enum": ["full", "letter", "A4", "custom"], "type": "string", "description": "Page size for PDF, PNG, or MP4 output" }, "testData": { "type": "object", "properties": {}, "required": [], "description": "Test data used for previewing the template with sample variable values" }, "options": { "type": "object", "properties": { "pageWidthPx": { "type": "number", "description": "Custom page width in pixels (for custom pageSize)" }, "pageHeightPx": { "type": "number", "description": "Custom page height in pixels (for custom pageSize)" }, "pageOrientation": { "enum": ["portrait", "landscape"], "type": "string", "description": "Page orientation for the rendered output" }, "rehostMedia": { "type": "boolean", "description": "Whether to re-host third-party images on the MindStudio CDN" }, "videoDurationSeconds": { "type": "number", "description": "Duration in seconds for MP4 video output" } }, "description": "Additional rendering options" }, "spaSource": { "type": "object", "properties": { "source": { "type": "string", "description": "Source code of the SPA (legacy, use files instead)" }, "lastCompiledSource": { "type": "string", "description": "Last compiled source (cached)" }, "files": { "type": "object", "properties": {}, "required": [], "description": "Multi-file SPA source" }, "paths": { "type": "array", "items": { "type": "string" }, "description": "Available route paths in the SPA" }, "root": { "type": "string", "description": "Root URL of the SPA bundle" }, "zipUrl": { "type": "string", "description": "URL of the zipped SPA bundle" } }, "required": ["paths", "root", "zipUrl"], "description": "Single page app source configuration (advanced)" }, "rawSource": { "type": "string", "description": "Raw HTML source stored in a variable, using handlebars syntax (e.g. {{myHtmlVariable}})" }, "dynamicPrompt": { "type": "string", "description": 'Prompt to generate the HTML dynamically when sourceType is "dynamic"' }, "dynamicSourceModelOverride": { "type": "object", "properties": { "model": { "type": "string", "description": 'Model identifier (e.g. "gpt-4", "claude-3-opus")' }, "temperature": { "type": "number", "description": "Sampling temperature for the model (0-2)" }, "maxResponseTokens": { "type": "number", "description": "Maximum number of tokens in the model's response" }, "ignorePreamble": { "type": "boolean", "description": "Whether to skip the system preamble/instructions" }, "userMessagePreprocessor": { "type": "object", "properties": { "dataSource": { "type": "string", "description": "Data source identifier for the preprocessor" }, "messageTemplate": { "type": "string", "description": "Template string applied to user messages before sending to the model" }, "maxResults": { "type": "number", "description": "Maximum number of results to include from the data source" }, "enabled": { "type": "boolean", "description": "Whether the preprocessor is active" }, "shouldInherit": { "type": "boolean", "description": "Whether child steps should inherit this preprocessor configuration" } }, "description": "Preprocessor applied to user messages before sending to the model" }, "preamble": { "type": "string", "description": "System preamble/instructions for the model" }, "multiModelEnabled": { "type": "boolean", "description": "Whether multi-model candidate generation is enabled" }, "editResponseEnabled": { "type": "boolean", "description": "Whether the user can edit the model's response" }, "config": { "type": "object", "properties": {}, "required": [], "description": "Additional model-specific configuration" } }, "required": ["model", "temperature", "maxResponseTokens"], "description": "Model override for dynamic HTML generation. Leave undefined to use the default model" }, "transitionControl": { "enum": ["default", "native"], "type": "string", "description": "Controls how the step transitions after displaying in foreground mode" }, "shareControl": { "enum": ["default", "hidden"], "type": "string", "description": "Controls visibility of the share button on displayed assets" }, "shareImageUrl": { "type": "string", "description": "URL of a custom Open Graph share image" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" } }, "required": ["source", "sourceType", "outputFormat", "pageSize", "testData"] },
3661
3640
  outputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "CDN URL of the generated asset (PDF, PNG, HTML, or MP4 depending on outputFormat)" } }, "required": ["url"] }
3662
3641
  },
3663
- "generateChart": {
3664
- stepType: "generateChart",
3665
- description: "Create a chart image using QuickChart (Chart.js) and return the URL.",
3666
- usageNotes: "- The data field must be a Chart.js-compatible JSON object serialized as a string.\n- Supported chart types: bar, line, pie.",
3667
- inputSchema: { "type": "object", "properties": { "chart": { "type": "object", "properties": { "chartType": { "enum": ["bar", "line", "pie"], "type": "string", "description": "The type of chart to generate" }, "data": { "type": "string", "description": "Chart.js-compatible JSON data serialized as a string" }, "options": { "type": "object", "properties": { "width": { "type": "string", "description": 'Image width in pixels (e.g. "500")' }, "height": { "type": "string", "description": 'Image height in pixels (e.g. "300")' } }, "required": ["width", "height"], "description": "Image rendering options" } }, "required": ["chartType", "data", "options"], "description": "Chart configuration including type, data, and rendering options" } }, "required": ["chart"] },
3668
- outputSchema: { "type": "object", "properties": { "chartUrl": { "type": "string", "description": "URL of the generated chart image" } }, "required": ["chartUrl"] }
3669
- },
3670
3642
  "generateImage": {
3671
3643
  stepType: "generateImage",
3672
3644
  description: "Generate an image from a text prompt using an AI model.",
3673
- usageNotes: "- Prompts should be descriptive but concise (roughly 3\u20136 sentences).\n- Images are automatically hosted on a CDN.\n- In foreground mode, the image is displayed to the user. In background mode, the URL is saved to a variable.\n- When generateVariants is true with numVariants > 1, multiple images are generated in parallel.\n- In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.",
3645
+ usageNotes: "- Prompts should be descriptive but concise (roughly 3\u20136 sentences).\n- Images are hosted on the public CDN by default, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps the image private.\n- In foreground mode, the image is displayed to the user. In background mode, the URL is saved to a variable.\n- When generateVariants is true with numVariants > 1, multiple images are generated in parallel.\n- In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.",
3674
3646
  inputSchema: { "type": "object", "properties": { "prompt": { "type": "string", "description": "Text prompt describing the image to generate" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" }, "imageModelOverride": { "type": "object", "properties": { "model": { "type": "string", "description": "Image generation model identifier" }, "config": { "type": "object", "properties": {}, "required": [], "description": "Additional model-specific configuration" } }, "required": ["model"], "description": "Optional model configuration override. Uses the workflow's default image model if not specified" }, "generateVariants": { "type": "boolean", "description": "Whether to generate multiple image variants in parallel" }, "numVariants": { "type": "number", "description": "Number of variants to generate (max 10)" }, "addWatermark": { "type": "boolean", "description": "Whether to add a MindStudio watermark to the generated image.\n\nThe watermark is a product mark on assets generated in the MindStudio UI. A step run directly via the SDK or API is producing the app's own asset, so it is never watermarked and this flag has no effect there." } }, "required": ["prompt"] },
3675
3647
  outputSchema: { "type": "object", "properties": { "imageUrl": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] } }, "required": ["imageUrl"] }
3676
3648
  },
@@ -3695,6 +3667,13 @@ var stepMetadata = {
3695
3667
  inputSchema: { "type": "object", "properties": { "source": { "type": "string", "description": "The HTML or Markdown source template for the asset" }, "sourceType": { "enum": ["html", "markdown", "spa", "raw", "dynamic", "customInterface"], "type": "string", "description": "Source type: html, markdown (auto-formatted), spa (single page app), raw (pre-generated HTML in a variable), dynamic (AI-generated from prompt), or customInterface" }, "outputFormat": { "enum": ["pdf", "png", "html", "mp4", "openGraph"], "type": "string", "description": "The output format for the generated asset" }, "pageSize": { "enum": ["full", "letter", "A4", "custom"], "type": "string", "description": "Page size for PDF, PNG, or MP4 output" }, "testData": { "type": "object", "properties": {}, "required": [], "description": "Test data used for previewing the template with sample variable values" }, "options": { "type": "object", "properties": { "pageWidthPx": { "type": "number", "description": "Custom page width in pixels (for custom pageSize)" }, "pageHeightPx": { "type": "number", "description": "Custom page height in pixels (for custom pageSize)" }, "pageOrientation": { "enum": ["portrait", "landscape"], "type": "string", "description": "Page orientation for the rendered output" }, "rehostMedia": { "type": "boolean", "description": "Whether to re-host third-party images on the MindStudio CDN" }, "videoDurationSeconds": { "type": "number", "description": "Duration in seconds for MP4 video output" } }, "description": "Additional rendering options" }, "spaSource": { "type": "object", "properties": { "source": { "type": "string", "description": "Source code of the SPA (legacy, use files instead)" }, "lastCompiledSource": { "type": "string", "description": "Last compiled source (cached)" }, "files": { "type": "object", "properties": {}, "required": [], "description": "Multi-file SPA source" }, "paths": { "type": "array", "items": { "type": "string" }, "description": "Available route paths in the SPA" }, "root": { "type": "string", "description": "Root URL of the SPA bundle" }, "zipUrl": { "type": "string", "description": "URL of the zipped SPA bundle" } }, "required": ["paths", "root", "zipUrl"], "description": "Single page app source configuration (advanced)" }, "rawSource": { "type": "string", "description": "Raw HTML source stored in a variable, using handlebars syntax (e.g. {{myHtmlVariable}})" }, "dynamicPrompt": { "type": "string", "description": 'Prompt to generate the HTML dynamically when sourceType is "dynamic"' }, "dynamicSourceModelOverride": { "type": "object", "properties": { "model": { "type": "string", "description": 'Model identifier (e.g. "gpt-4", "claude-3-opus")' }, "temperature": { "type": "number", "description": "Sampling temperature for the model (0-2)" }, "maxResponseTokens": { "type": "number", "description": "Maximum number of tokens in the model's response" }, "ignorePreamble": { "type": "boolean", "description": "Whether to skip the system preamble/instructions" }, "userMessagePreprocessor": { "type": "object", "properties": { "dataSource": { "type": "string", "description": "Data source identifier for the preprocessor" }, "messageTemplate": { "type": "string", "description": "Template string applied to user messages before sending to the model" }, "maxResults": { "type": "number", "description": "Maximum number of results to include from the data source" }, "enabled": { "type": "boolean", "description": "Whether the preprocessor is active" }, "shouldInherit": { "type": "boolean", "description": "Whether child steps should inherit this preprocessor configuration" } }, "description": "Preprocessor applied to user messages before sending to the model" }, "preamble": { "type": "string", "description": "System preamble/instructions for the model" }, "multiModelEnabled": { "type": "boolean", "description": "Whether multi-model candidate generation is enabled" }, "editResponseEnabled": { "type": "boolean", "description": "Whether the user can edit the model's response" }, "config": { "type": "object", "properties": {}, "required": [], "description": "Additional model-specific configuration" } }, "required": ["model", "temperature", "maxResponseTokens"], "description": "Model override for dynamic HTML generation. Leave undefined to use the default model" }, "transitionControl": { "enum": ["default", "native"], "type": "string", "description": "Controls how the step transitions after displaying in foreground mode" }, "shareControl": { "enum": ["default", "hidden"], "type": "string", "description": "Controls visibility of the share button on displayed assets" }, "shareImageUrl": { "type": "string", "description": "URL of a custom Open Graph share image" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" } }, "required": ["source", "sourceType", "outputFormat", "pageSize", "testData"] },
3696
3668
  outputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "CDN URL of the generated asset (PDF, PNG, HTML, or MP4 depending on outputFormat)" } }, "required": ["url"] }
3697
3669
  },
3670
+ "generateSound": {
3671
+ stepType: "generateSound",
3672
+ description: "Generate a sound effect from a text description using a sound model.",
3673
+ usageNotes: "- The text field contains the description of the sound effect to generate.\n- In foreground mode, the audio is displayed to the user. In background mode, the URL is saved to a variable.",
3674
+ inputSchema: { "type": "object", "properties": { "text": { "type": "string", "description": "The description of the sound effect to generate" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" }, "soundModelOverride": { "type": "object", "properties": { "model": { "type": "string" }, "config": { "type": "object", "properties": {}, "required": [] } }, "required": ["model"], "description": "Optional model configuration override. Uses the workflow's default sound model if not specified" } }, "required": ["text"] },
3675
+ outputSchema: { "type": "object", "properties": { "audioUrl": { "type": "string", "description": "URL of the generated audio file" } }, "required": ["audioUrl"] }
3676
+ },
3698
3677
  "generateStaticVideoFromImage": {
3699
3678
  stepType: "generateStaticVideoFromImage",
3700
3679
  description: "Convert a static image to an MP4",
@@ -3723,14 +3702,14 @@ var stepMetadata = {
3723
3702
  "generateVideo": {
3724
3703
  stepType: "generateVideo",
3725
3704
  description: "Generate a video from a text prompt using an AI model.",
3726
- usageNotes: "- Prompts should be descriptive but concise (roughly 3\u20136 sentences).\n- Videos are automatically hosted on a CDN.\n- In foreground mode, the video is displayed to the user. In background mode, the URL is saved to a variable.\n- When generateVariants is true with numVariants > 1, multiple videos are generated in parallel.\n- In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.",
3705
+ usageNotes: "- Prompts should be descriptive but concise (roughly 3\u20136 sentences).\n- Videos are hosted on the public CDN by default, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps the video private, with no public copy left behind.\n- In foreground mode, the video is displayed to the user. In background mode, the URL is saved to a variable.\n- When generateVariants is true with numVariants > 1, multiple videos are generated in parallel.\n- In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.",
3727
3706
  inputSchema: { "type": "object", "properties": { "prompt": { "type": "string", "description": "Text prompt describing the video to generate" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" }, "videoModelOverride": { "type": "object", "properties": { "model": { "type": "string", "description": "Video generation model identifier" }, "config": { "type": "object", "properties": {}, "required": [], "description": "Additional model-specific configuration" } }, "required": ["model"], "description": "Optional model configuration override. Uses the workflow's default video model if not specified" }, "generateVariants": { "type": "boolean", "description": "Whether to generate multiple video variants in parallel" }, "numVariants": { "type": "number", "description": "Number of variants to generate (max 10)" }, "addWatermark": { "type": "boolean", "description": "Whether to add a MindStudio watermark to the generated video.\n\nThe watermark is a product mark on assets generated in the MindStudio UI. A step run directly via the SDK or API is producing the app's own asset, so it is never watermarked and this flag has no effect there." } }, "required": ["prompt"] },
3728
3707
  outputSchema: { "type": "object", "properties": { "videoUrl": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] } }, "required": ["videoUrl"] }
3729
3708
  },
3730
3709
  "getGmailAttachments": {
3731
3710
  stepType: "getGmailAttachments",
3732
- description: "Download attachments from a Gmail email and re-host them on CDN.",
3733
- usageNotes: "- Requires a Google OAuth connection with Gmail readonly scope.\n- Attachments are uploaded to CDN and returned as URLs.\n- Attachments larger than 25MB are skipped.\n- Use the message ID from Search Gmail Emails, List Recent Gmail Emails, or Get Gmail Email steps.",
3711
+ description: "Download attachments from a Gmail email and store them on the app's own storage.",
3712
+ usageNotes: "- Requires a Google OAuth connection with Gmail readonly scope.\n- Attachments are stored and returned as URLs \u2014 on the public CDN by default, or in one of the app's own file stores when the call passes `store`. Use a private store for anything confidential; a public CDN URL is readable by anyone who has it.\n- Attachments larger than 25MB are skipped.\n- Use the message ID from Search Gmail Emails, List Recent Gmail Emails, or Get Gmail Email steps.",
3734
3713
  inputSchema: { "type": "object", "properties": { "messageId": { "type": "string", "description": "Gmail message ID" }, "connectionId": { "type": "string", "description": "Google OAuth connection ID" } }, "required": ["messageId"] },
3735
3714
  outputSchema: { "description": "This step does not produce output data." }
3736
3715
  },
@@ -3765,7 +3744,7 @@ var stepMetadata = {
3765
3744
  "getGoogleDriveFile": {
3766
3745
  stepType: "getGoogleDriveFile",
3767
3746
  description: "Download a file from Google Drive and rehost it on the CDN. Returns a public CDN URL.",
3768
- usageNotes: "- Requires a Google OAuth connection with Drive scope.\n- Google-native files (Docs, Sheets, Slides) cannot be downloaded \u2014 use dedicated steps instead.\n- Maximum file size: 200MB.\n- The file is downloaded and re-uploaded to the CDN; the returned URL is publicly accessible.",
3747
+ usageNotes: "- Requires a Google OAuth connection with Drive scope.\n- Google-native files (Docs, Sheets, Slides) cannot be downloaded \u2014 use dedicated steps instead.\n- Maximum file size: 200MB.\n- The file is downloaded and stored on the public CDN, where the returned URL is publicly accessible \u2014 pass `store` to put it in one of the app's own file stores instead, which for a private store means the URL only loads for an authorized session.",
3769
3748
  inputSchema: { "type": "object", "properties": { "fileId": { "type": "string", "description": "Google Drive file ID" }, "connectionId": { "type": "string", "description": "Google OAuth connection ID" } }, "required": ["fileId"] },
3770
3749
  outputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "CDN URL of the downloaded file" }, "name": { "type": "string", "description": "Original file name" }, "mimeType": { "type": "string", "description": "File MIME type" }, "size": { "type": "number", "description": "File size in bytes" } }, "required": ["url", "name", "mimeType", "size"] }
3771
3750
  },
@@ -3849,14 +3828,14 @@ var stepMetadata = {
3849
3828
  "imageFaceSwap": {
3850
3829
  stepType: "imageFaceSwap",
3851
3830
  description: "Replace a face in an image with a face from another image using AI.",
3852
- usageNotes: "- Requires both a target image and a face source image.\n- Output is re-hosted on the CDN as a PNG.",
3831
+ usageNotes: "- Requires both a target image and a face source image.\n- Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps it private.",
3853
3832
  inputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "URL of the target image containing the face to replace" }, "faceImageUrl": { "type": "string", "description": "URL of the image containing the replacement face" }, "engine": { "type": "string", "description": "Face swap engine to use" } }, "required": ["imageUrl", "faceImageUrl", "engine"] },
3854
3833
  outputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "CDN URL of the face-swapped image (PNG)" } }, "required": ["imageUrl"] }
3855
3834
  },
3856
3835
  "imageRemoveWatermark": {
3857
3836
  stepType: "imageRemoveWatermark",
3858
3837
  description: "Remove watermarks from an image using AI.",
3859
- usageNotes: "- Output is re-hosted on the CDN as a PNG.",
3838
+ usageNotes: "- Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps it private.",
3860
3839
  inputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "URL of the image to remove the watermark from" }, "engine": { "type": "string", "description": "Watermark removal engine to use" }, "intermediateAsset": { "type": "boolean", "description": "When true, the asset is created but hidden from the user's gallery (tagged as intermediate)" } }, "required": ["imageUrl", "engine"] },
3861
3840
  outputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "CDN URL of the processed image with watermark removed (PNG)" } }, "required": ["imageUrl"] }
3862
3841
  },
@@ -4018,48 +3997,6 @@ var stepMetadata = {
4018
3997
  inputSchema: { "type": "object", "properties": { "pageId": { "type": "string", "description": "Notion page ID to update" }, "content": { "type": "string", "description": "New content in markdown format" }, "mode": { "enum": ["append", "overwrite"], "type": "string", "description": "How to apply the content: 'append' adds to end, 'overwrite' replaces all existing content" }, "connectionId": { "type": "string", "description": "Notion OAuth connection ID" } }, "required": ["pageId", "content", "mode"] },
4019
3998
  outputSchema: { "type": "object", "properties": { "pageId": { "type": "string", "description": "Notion page ID of the updated page" }, "pageUrl": { "type": "string", "description": "URL to view the page in Notion" } }, "required": ["pageId", "pageUrl"] }
4020
3999
  },
4021
- "particlePodcastsFindMentions": {
4022
- stepType: "particlePodcastsFindMentions",
4023
- description: "Find every dialogue line mentioning a specific entity or company across all podcasts.",
4024
- usageNotes: "- Provide `entityId` (for people, products, places) OR `companyId` (for organizations). At least one is required.\n- Use `contextLines` to include surrounding dialogue with each mention (default behavior is set by Particle).\n- Resolve a name to an `entityId` / `companyId` first via Search Companies (or by inspecting a Search Dialogue response).\n- Cursor-paginated; expect potentially large result sets for popular entities.",
4025
- inputSchema: { "type": "object", "properties": { "entityId": { "type": "string", "description": "Knowledge-graph entity ID (person, product, place, etc.)" }, "companyId": { "type": "string", "description": "Company ID" }, "contextLines": { "type": "number", "description": "Surrounding dialogue lines to include with each mention" }, "limit": { "type": "number", "description": "Max results, up to 100" }, "cursor": { "type": "string", "description": "Pagination cursor" } } },
4026
- outputSchema: { "type": "string" }
4027
- },
4028
- "particlePodcastsGetEpisode": {
4029
- stepType: "particlePodcastsGetEpisode",
4030
- description: "Fetch full metadata for a single episode: details, speakers, entities, clips, and ads \u2014 merged into one response.",
4031
- usageNotes: "- Pass an episode ID or slug as `id`.\n- Returns five sub-resources merged: `episode` (metadata), `speakers` (diarized speaker list), `entities` (knowledge-graph mentions), `clips` (AI-extracted highlights), `ads` (detected ad spots).\n- Use Get Episode Transcript separately when you need the full transcript text \u2014 it isn't bundled here because the payload is large and has its own format/range options.\n- Bills as 5 units against the get-episode event type (one per sub-call).",
4032
- inputSchema: { "type": "object", "properties": { "id": { "type": "string", "description": "Episode ID or slug" } }, "required": ["id"] },
4033
- outputSchema: { "type": "string" }
4034
- },
4035
- "particlePodcastsGetEpisodeTranscript": {
4036
- stepType: "particlePodcastsGetEpisodeTranscript",
4037
- description: "Fetch the diarized transcript for an episode in dialogue, plain text, or SRT subtitle format.",
4038
- usageNotes: '- Pass an episode ID or slug as `id`.\n- Use `format` = "dialogue" (default, with speaker turns), "text" (plain), or "srt" (subtitle).\n- Filter to a single speaker with `speaker`, or to a time range with `start` / `end` (seconds).\n- Transcripts are large \u2014 prefer time-range filtering when you only need a snippet.',
4039
- inputSchema: { "type": "object", "properties": { "id": { "type": "string", "description": "Episode ID or slug" }, "format": { "enum": ["dialogue", "text", "srt"], "type": "string", "description": "Transcript format" }, "speaker": { "type": "string", "description": "Filter to a single speaker" }, "start": { "type": "number", "description": "Start time in seconds" }, "end": { "type": "number", "description": "End time in seconds" } }, "required": ["id"] },
4040
- outputSchema: { "type": "string" }
4041
- },
4042
- "particlePodcastsSearchCompanies": {
4043
- stepType: "particlePodcastsSearchCompanies",
4044
- description: "Search the Particle knowledge graph for companies by name, ticker, domain, CIK, or QID.",
4045
- usageNotes: '- Provide one or more identifiers: `q` (free-text name), `ticker` (e.g. "TSLA"), `domain` (e.g. "tesla.com"), `cik` (SEC), or `qid` (Wikidata).\n- Use this to resolve a company name to a canonical `companyId` for use with Find Mentions or Search Dialogue.\n- Returned company objects include slugs, domains, and IDs \u2014 any of these can be passed to downstream blocks.',
4046
- inputSchema: { "type": "object", "properties": { "q": { "type": "string", "description": "Free-text company name" }, "ticker": { "type": "string", "description": "Stock ticker" }, "domain": { "type": "string", "description": "Company domain" }, "cik": { "type": "string", "description": "SEC CIK" }, "qid": { "type": "string", "description": "Wikidata QID" }, "entityId": { "type": "string", "description": "Knowledge-graph entity ID" }, "updatedAfter": { "type": "string", "description": "Only include companies updated after this ISO timestamp" }, "limit": { "type": "number", "description": "Max results" }, "cursor": { "type": "string", "description": "Pagination cursor" } } },
4047
- outputSchema: { "type": "string" }
4048
- },
4049
- "particlePodcastsSearchDialogue": {
4050
- stepType: "particlePodcastsSearchDialogue",
4051
- description: "Search across podcast dialogue using semantic or keyword search. Returns matched lines grouped by episode.",
4052
- usageNotes: '- Provide `semanticSearch` for meaning-based discovery ("find moments where someone talks about market timing") or `keywordSearch` for exact phrase/proper-noun matching. At least one must be provided.\n- Filter to a specific entity or company by passing `entityId` / `companyId`.\n- Each returned dialogue line carries the source episode + speaker so you can chain to Get Episode or Get Episode Transcript for context.\n- Cursor-paginated.',
4053
- inputSchema: { "type": "object", "properties": { "semanticSearch": { "type": "string", "description": "Meaning-based dialogue search" }, "keywordSearch": { "type": "string", "description": "Exact-phrase dialogue search" }, "entityId": { "type": "string", "description": "Restrict to dialogue mentioning this entity" }, "companyId": { "type": "string", "description": "Restrict to dialogue mentioning this company" }, "limit": { "type": "number", "description": "Max results, up to 100" }, "cursor": { "type": "string", "description": "Pagination cursor" } } },
4054
- outputSchema: { "type": "string" }
4055
- },
4056
- "particlePodcastsSearchPodcasts": {
4057
- stepType: "particlePodcastsSearchPodcasts",
4058
- description: "Search and list podcasts in the Particle catalog by keyword, topic, or language.",
4059
- usageNotes: '- Use `q` for free-text keyword search across podcast titles and descriptions.\n- Use `topic` to filter to a Particle taxonomy topic.\n- Use `language` (BCP 47, e.g. "en") to restrict to a language.\n- Returns podcast objects with canonical IDs and slugs. Pass either to other Particle Podcasts blocks.\n- Cursor-paginated; pass the returned `cursor` back to `cursor` for the next page.',
4060
- inputSchema: { "type": "object", "properties": { "q": { "type": "string", "description": "Free-text query across podcast title and description" }, "topic": { "type": "string", "description": "Particle taxonomy topic slug" }, "language": { "type": "string", "description": "BCP 47 language code" }, "suitabilityTier": { "type": "string", "description": "Brand-suitability tier filter" }, "limit": { "type": "number", "description": "Max results, up to 100" }, "cursor": { "type": "string", "description": "Pagination cursor" } } },
4061
- outputSchema: { "type": "string" }
4062
- },
4063
4000
  "peopleSearch": {
4064
4001
  stepType: "peopleSearch",
4065
4002
  description: "Search for people matching specific criteria using Apollo.io. Supports natural language queries and advanced filters.",
@@ -4109,6 +4046,13 @@ var stepMetadata = {
4109
4046
  inputSchema: { "type": "object", "properties": { "connectionId": { "type": "string", "description": "Database connection ID configured in the workspace" }, "query": { "type": "string", "description": "SQL query to execute (supports variable interpolation)" }, "outputFormat": { "enum": ["json", "csv"], "type": "string", "description": "Output format for the result variable" } }, "required": ["query", "outputFormat"], "description": "Configuration for the external database query step" },
4110
4047
  outputSchema: { "type": "object", "properties": { "data": { "description": "Query result rows (array of objects for JSON, CSV string for CSV format)" } }, "required": ["data"] }
4111
4048
  },
4049
+ "quickbooksApiRequest": {
4050
+ stepType: "quickbooksApiRequest",
4051
+ description: "Call any QuickBooks Online Accounting API route using a connected company.",
4052
+ usageNotes: '- Requires a QuickBooks OAuth connection (connectionId).\n- Route is relative to /v3/company/{realmId}/, e.g. "account", "account/93", "query", "invoice".\n- Use queryParams for query-string values such as query=select * from Account.\n- Body is JSON for POST, PUT, and PATCH.',
4053
+ inputSchema: { "type": "object", "properties": { "connectionId": { "type": "string", "description": "QuickBooks OAuth connection ID" }, "method": { "type": "string", "description": "HTTP method" }, "route": { "type": "string", "description": 'Relative Accounting API path (e.g. "account" or "query")' }, "queryParams": { "type": "object", "properties": {}, "required": [], "description": "Query string parameters" }, "body": { "type": "string", "description": "JSON body for POST, PUT, and PATCH" } }, "required": ["method", "route", "queryParams", "body"] },
4054
+ outputSchema: { "type": "object", "properties": { "ok": { "type": "boolean", "description": "Whether the HTTP response status code is in the 2xx range" }, "status": { "type": "number", "description": "HTTP response status code" }, "body": { "description": "Parsed JSON response body, or a string if not JSON" } }, "required": ["ok", "status", "body"] }
4055
+ },
4112
4056
  "redactPII": {
4113
4057
  stepType: "redactPII",
4114
4058
  description: "Replace personally identifiable information in text with placeholders using Microsoft Presidio.",
@@ -4119,9 +4063,7 @@ var stepMetadata = {
4119
4063
  "removeBackgroundFromImage": {
4120
4064
  stepType: "removeBackgroundFromImage",
4121
4065
  description: "Remove the background from an image using AI, producing a transparent PNG.",
4122
- usageNotes: `- Uses the Bria background removal model via fal.ai by default.
4123
- - Uses WaveSpeed's Ideogram background removal model when type is "advanced".
4124
- - Output is re-hosted on the CDN as a PNG with transparency.`,
4066
+ usageNotes: "- Uses the Bria background removal model via fal.ai by default.\n- Uses WaveSpeed's Ideogram background removal model when type is \"advanced\".\n- Output is a PNG with transparency on the public CDN, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps it private, `autoCrop` included.",
4125
4067
  inputSchema: { "type": "object", "properties": { "type": { "enum": ["standard", "advanced"], "type": "string", "description": "Background removal quality tier" }, "imageUrl": { "type": "string", "description": "URL of the source image to remove the background from" }, "autoCrop": { "type": "boolean", "description": "Whether to automatically trim transparent padding from the result, on by default" } }, "required": ["imageUrl"] },
4126
4068
  outputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "CDN URL of the image with background removed (transparent PNG)" } }, "required": ["imageUrl"] }
4127
4069
  },
@@ -4146,15 +4088,6 @@ var stepMetadata = {
4146
4088
  inputSchema: { "type": "object", "properties": { "actionId": { "type": "string", "description": "The connector action identifier in the format serviceId/actionId" }, "displayName": { "type": "string", "description": "Human-readable name of the connector action" }, "icon": { "type": "string", "description": "Icon URL for the connector" }, "configurationValues": { "type": "object", "properties": {}, "required": [], "description": "Key-value configuration parameters for the connector action" }, "__connectionId": { "type": "string", "description": "OAuth connection ID used to authenticate the connector request" } }, "required": ["actionId", "displayName", "icon", "configurationValues"], "description": "Configuration for the connector registry step" },
4147
4089
  outputSchema: { "type": "object", "properties": { "data": { "type": "object", "properties": {}, "required": [], "description": "Key-value map of output variables set by the connector" } }, "required": ["data"] }
4148
4090
  },
4149
- "runPackagedWorkflow": {
4150
- stepType: "runPackagedWorkflow",
4151
- description: 'Run a packaged workflow ("custom block")',
4152
- usageNotes: `- From the user's perspective, packaged workflows are just ordinary blocks. Behind the scenes, they operate like packages/libraries in a programming language, letting the user execute custom functionality.
4153
- - Some of these packaged workflows are available as part of MindStudio's "Standard Library" and available to every user.
4154
- - Available packaged workflows are documented here as individual blocks, but the runPackagedWorkflow block is how they need to be wrapped in order to be executed correctly.`,
4155
- inputSchema: { "type": "object", "properties": { "appId": { "type": "string", "description": "The app ID of the packaged workflow source" }, "workflowId": { "type": "string", "description": "The source workflow ID to execute" }, "inputVariables": { "type": "object", "properties": {}, "required": [], "description": "Variables to pass as input to the packaged workflow" }, "outputVariables": { "type": "object", "properties": {}, "required": [], "description": "Variables to capture from the packaged workflow output" }, "name": { "type": "string", "description": "Display name of the packaged workflow" } }, "required": ["appId", "workflowId", "inputVariables", "outputVariables", "name"], "description": "Configuration for the packaged workflow step" },
4156
- outputSchema: { "type": "object", "properties": { "data": { "description": "The result data returned from the packaged workflow" } }, "required": ["data"] }
4157
- },
4158
4091
  "scrapeLinkedInCompany": {
4159
4092
  stepType: "scrapeLinkedInCompany",
4160
4093
  description: "Scrape public company data from a LinkedIn company page.",
@@ -4172,7 +4105,7 @@ var stepMetadata = {
4172
4105
  "scrapeUrl": {
4173
4106
  stepType: "scrapeUrl",
4174
4107
  description: "Extract text, HTML, or structured content from one or more web pages.",
4175
- usageNotes: '- Accepts a single URL or multiple URLs (as a JSON array, comma-separated, or newline-separated).\n- Output format controls the result shape: "text" returns markdown, "html" returns raw HTML, "json" returns structured scraper data, "summary" returns a model-written summary and requires the "firecrawl" service.\n- Can optionally capture a screenshot of each page.\n- Handles bot protection automatically; no proxy or rendering configuration is needed.',
4108
+ usageNotes: '- Accepts a single URL or multiple URLs (as a JSON array, comma-separated, or newline-separated).\n- Output format controls the result shape: "text" returns markdown, "html" returns raw HTML, "json" returns structured scraper data, "summary" returns a model-written summary and requires the "firecrawl" service.\n- Can optionally capture a screenshot of each page. Screenshots go to the public CDN by default, or into one of the app\'s own file stores when the call passes `store`.\n- Handles bot protection automatically; no proxy or rendering configuration is needed.',
4176
4109
  inputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "URL(s) to scrape. Accepts a single URL, JSON array, or comma/newline-separated list" }, "service": { "enum": ["default", "firecrawl"], "type": "string", "description": "Scraping service to use" }, "autoEnhance": { "type": "boolean", "description": "No longer selects a provider \u2014 the default service's anti-bot engine decides per request how hard to work. Retained because existing workflows set it and the builder still renders it." }, "outputFormat": { "enum": ["text", "json", "html", "summary"], "type": "string", "description": "Output format: text returns markdown, html returns raw HTML, json returns structured scraper data, summary returns a model-written summary (Firecrawl only)" }, "pageOptions": { "type": "object", "properties": { "onlyMainContent": { "type": "boolean", "description": "Whether to extract only the main content of the page, excluding navigation, footers, etc." }, "screenshot": { "type": "boolean", "description": "Whether to capture a screenshot of the page" }, "waitFor": { "type": "number", "description": "Milliseconds to wait before scraping (0 for immediate)" }, "replaceAllPathsWithAbsolutePaths": { "type": "boolean", "description": "Whether to convert relative URLs to absolute URLs in the result" }, "headers": { "type": "object", "properties": {}, "required": [], "description": "Custom HTTP request headers as key-value pairs" }, "removeTags": { "type": "array", "items": { "type": "string" }, "description": "HTML tags to remove from the scraped result" }, "mobile": { "type": "boolean", "description": "Whether to scrape using a mobile user-agent" } }, "required": ["onlyMainContent", "screenshot", "waitFor", "replaceAllPathsWithAbsolutePaths", "headers", "removeTags", "mobile"], "description": "Page-level scraping options (content filtering, screenshots, headers, etc.)" } }, "required": ["url"] },
4177
4110
  outputSchema: { "type": "object", "properties": { "content": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }, { "type": "object", "properties": { "text": { "type": "string", "description": "Markdown/plain-text content of the scraped page" }, "html": { "type": "string", "description": "Raw HTML content of the scraped page" }, "json": { "type": "object", "properties": {}, "required": [], "description": "Structured data extracted from the page" }, "screenshotUrl": { "type": "string", "description": "Screenshot URL of the page (if requested)" }, "metadata": { "type": "object", "properties": { "title": { "type": "string", "description": "Page title" }, "description": { "type": "string", "description": "Page meta description" }, "url": { "type": "string", "description": "Canonical URL" }, "image": { "type": "string", "description": "Open Graph image URL" } }, "required": ["title", "description", "url", "image"], "description": "Page metadata (Open Graph / meta tags)" }, "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": ["code", "message"], "description": "Set when the scrape failed. `text`/`html` still carry the human-readable error so existing callers behave as before, but callers that care \u2014 billing, in particular \u2014 can tell a failure from real page content." }, "costUnits": { "type": "number", "description": "What the provider actually charged, when it tells us. Scrapfly returns an exact per-request credit total that varies with how hard the target fought back (6 for an unprotected page, 80 for Glassdoor), so billing a flat rate would either overcharge the easy case or eat the hard one. Providers that report nothing leave this undefined and fall back to the route's estimate.\n\nIncludes every attempt made on the caller's behalf, not just the last one." } }, "required": ["text", "html"] }, { "type": "array", "items": { "type": "object", "properties": { "text": { "type": "string", "description": "Markdown/plain-text content of the scraped page" }, "html": { "type": "string", "description": "Raw HTML content of the scraped page" }, "json": { "type": "object", "properties": {}, "required": [], "description": "Structured data extracted from the page" }, "screenshotUrl": { "type": "string", "description": "Screenshot URL of the page (if requested)" }, "metadata": { "type": "object", "properties": { "title": { "type": "string", "description": "Page title" }, "description": { "type": "string", "description": "Page meta description" }, "url": { "type": "string", "description": "Canonical URL" }, "image": { "type": "string", "description": "Open Graph image URL" } }, "required": ["title", "description", "url", "image"], "description": "Page metadata (Open Graph / meta tags)" }, "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": ["code", "message"], "description": "Set when the scrape failed. `text`/`html` still carry the human-readable error so existing callers behave as before, but callers that care \u2014 billing, in particular \u2014 can tell a failure from real page content." }, "costUnits": { "type": "number", "description": "What the provider actually charged, when it tells us. Scrapfly returns an exact per-request credit total that varies with how hard the target fought back (6 for an unprotected page, 80 for Glassdoor), so billing a flat rate would either overcharge the easy case or eat the hard one. Providers that report nothing leave this undefined and fall back to the route's estimate.\n\nIncludes every attempt made on the caller's behalf, not just the last one." } }, "required": ["text", "html"] } }] }, "screenshot": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] } }, "required": ["content"] }
4178
4111
  },
@@ -4193,7 +4126,7 @@ var stepMetadata = {
4193
4126
  "screenshotUrl": {
4194
4127
  stepType: "screenshotUrl",
4195
4128
  description: "Capture a screenshot of a web page as a PNG image.",
4196
- usageNotes: "- Takes a viewport or full-page screenshot of the given URL.\n- Returns a CDN-hosted PNG image URL.\n- Viewport mode captures only the visible area; fullPage captures the entire scrollable page, scrolling it first so lazy-loaded content is included.\n- Works on sites behind bot protection (Cloudflare and similar).\n- Cookie-consent banners and similar overlays are suppressed automatically.\n- `width` and `height` are the exact output pixel dimensions.\n- You can add a delay or wait for a CSS selector before capturing. A selector that never appears fails the step rather than capturing early.",
4129
+ usageNotes: "- Takes a viewport or full-page screenshot of the given URL.\n- Returns a PNG image URL: on the public CDN by default, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps the screenshot private.\n- Viewport mode captures only the visible area; fullPage captures the entire scrollable page, scrolling it first so lazy-loaded content is included.\n- Works on sites behind bot protection (Cloudflare and similar).\n- Cookie-consent banners and similar overlays are suppressed automatically.\n- `width` and `height` are the exact output pixel dimensions.\n- You can add a delay or wait for a CSS selector before capturing. A selector that never appears fails the step rather than capturing early.",
4197
4130
  inputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "URL to screenshot" }, "mode": { "enum": ["viewport", "fullPage"], "type": "string", "description": "Screenshot mode: viewport captures visible area, fullPage captures entire page" }, "width": { "type": "number", "description": "Viewport width in pixels (default: 1280)" }, "height": { "type": "number", "description": "Viewport height in pixels (default: 800, ignored for fullPage mode)" }, "delay": { "type": "number", "description": "Milliseconds to wait before capturing (default: 0)" }, "waitFor": { "type": "string", "description": "CSS selector to wait for before capturing" } }, "required": ["url"] },
4198
4131
  outputSchema: { "type": "object", "properties": { "screenshotUrl": { "type": "string" } }, "required": ["screenshotUrl"] }
4199
4132
  },
@@ -4355,62 +4288,6 @@ var stepMetadata = {
4355
4288
  inputSchema: { "type": "object", "properties": { "value": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }] } }, "required": ["value"], "description": "Configuration for the set variable step" },
4356
4289
  outputSchema: { "type": "object", "properties": {}, "required": [] }
4357
4290
  },
4358
- "telegramEditMessage": {
4359
- stepType: "telegramEditMessage",
4360
- description: "Edit a previously sent Telegram message. Use with the message ID returned by Send Telegram Message.",
4361
- usageNotes: '- Only text messages sent by the bot can be edited.\n- The messageId is returned by the Send Telegram Message step.\n- Common pattern: send a "Processing..." message, do work, then edit it with the result.',
4362
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID containing the message" }, "messageId": { "type": "string", "description": "ID of the message to edit" }, "text": { "type": "string", "description": "New message text (MarkdownV2 formatting supported)" } }, "required": ["botToken", "chatId", "messageId", "text"] },
4363
- outputSchema: { "description": "This step does not produce output data." }
4364
- },
4365
- "telegramReplyToMessage": {
4366
- stepType: "telegramReplyToMessage",
4367
- description: "Send a reply to a specific Telegram message. The reply will be visually threaded in the chat.",
4368
- usageNotes: "- Use the rawMessage.message_id from the incoming trigger variables to reply to the user's message.\n- Especially useful in group chats where replies provide context.\n- Returns the sent message ID, which can be used with Edit Telegram Message.",
4369
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the reply to" }, "replyToMessageId": { "type": "string", "description": "ID of the message to reply to" }, "text": { "type": "string", "description": "Reply text (MarkdownV2 formatting supported)" } }, "required": ["botToken", "chatId", "replyToMessageId", "text"] },
4370
- outputSchema: { "type": "object", "properties": { "messageId": { "type": "number", "description": "ID of the sent reply message" } }, "required": ["messageId"] }
4371
- },
4372
- "telegramSendAudio": {
4373
- stepType: "telegramSendAudio",
4374
- description: "Send an audio file to a Telegram chat as music or a voice note via a bot.",
4375
- usageNotes: '- "audio" mode sends as a standard audio file. "voice" mode sends as a voice message (re-uploads the file for large file support).',
4376
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the audio to" }, "audioUrl": { "type": "string", "description": "URL of the audio file to send" }, "mode": { "enum": ["audio", "voice"], "type": "string", "description": 'Send as a standard audio track ("audio") or as a voice note ("voice")' }, "caption": { "type": "string", "description": "Optional caption text for the audio" } }, "required": ["botToken", "chatId", "audioUrl", "mode"] },
4377
- outputSchema: { "description": "This step does not produce output data." }
4378
- },
4379
- "telegramSendFile": {
4380
- stepType: "telegramSendFile",
4381
- description: "Send a document/file to a Telegram chat via a bot.",
4382
- usageNotes: "",
4383
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the file to" }, "fileUrl": { "type": "string", "description": "URL of the document/file to send" }, "caption": { "type": "string", "description": "Optional caption text for the file" } }, "required": ["botToken", "chatId", "fileUrl"] },
4384
- outputSchema: { "description": "This step does not produce output data." }
4385
- },
4386
- "telegramSendImage": {
4387
- stepType: "telegramSendImage",
4388
- description: "Send an image to a Telegram chat via a bot.",
4389
- usageNotes: "",
4390
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the image to" }, "imageUrl": { "type": "string", "description": "URL of the image to send" }, "caption": { "type": "string", "description": "Optional caption text for the image" } }, "required": ["botToken", "chatId", "imageUrl"] },
4391
- outputSchema: { "description": "This step does not produce output data." }
4392
- },
4393
- "telegramSendMessage": {
4394
- stepType: "telegramSendMessage",
4395
- description: "Send a text message to a Telegram chat via a bot.",
4396
- usageNotes: '- Messages are sent using MarkdownV2 formatting. Special characters are auto-escaped.\n- botToken format is "botId:token" \u2014 both parts are required.\n- Returns the sent message ID, which can be used with Edit Telegram Message to update the message later.',
4397
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the message to" }, "text": { "type": "string", "description": "Message text to send (MarkdownV2 formatting supported)" } }, "required": ["botToken", "chatId", "text"] },
4398
- outputSchema: { "type": "object", "properties": { "messageId": { "type": "number", "description": "ID of the sent Telegram message" } }, "required": ["messageId"] }
4399
- },
4400
- "telegramSendVideo": {
4401
- stepType: "telegramSendVideo",
4402
- description: "Send a video to a Telegram chat via a bot.",
4403
- usageNotes: "",
4404
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to send the video to" }, "videoUrl": { "type": "string", "description": "URL of the video to send" }, "caption": { "type": "string", "description": "Optional caption text for the video" } }, "required": ["botToken", "chatId", "videoUrl"] },
4405
- outputSchema: { "description": "This step does not produce output data." }
4406
- },
4407
- "telegramSetTyping": {
4408
- stepType: "telegramSetTyping",
4409
- description: 'Show the "typing..." indicator in a Telegram chat via a bot.',
4410
- usageNotes: "- The typing indicator automatically expires after a few seconds. Use this right before sending a message for a natural feel.",
4411
- inputSchema: { "type": "object", "properties": { "botToken": { "type": "string", "description": 'Telegram bot token in "botId:token" format' }, "chatId": { "type": "string", "description": "Telegram chat ID to show the typing indicator in" } }, "required": ["botToken", "chatId"] },
4412
- outputSchema: { "description": "This step does not produce output data." }
4413
- },
4414
4291
  "textToSpeech": {
4415
4292
  stepType: "textToSpeech",
4416
4293
  description: "Generate an audio file from provided text using a speech model.",
@@ -4470,7 +4347,7 @@ var stepMetadata = {
4470
4347
  "upscaleImage": {
4471
4348
  stepType: "upscaleImage",
4472
4349
  description: "Increase the resolution of an image using AI upscaling.",
4473
- usageNotes: "- Output is re-hosted on the CDN as a PNG.",
4350
+ usageNotes: "- Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` \u2014 a private store keeps it private.",
4474
4351
  inputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "URL of the image to upscale" }, "targetResolution": { "enum": ["2k", "4k", "8k"], "type": "string", "description": "Target output resolution" }, "engine": { "enum": ["standard", "pro"], "type": "string", "description": "Upscaling engine quality tier" } }, "required": ["imageUrl", "targetResolution", "engine"] },
4475
4352
  outputSchema: { "type": "object", "properties": { "imageUrl": { "type": "string", "description": "CDN URL of the upscaled image (PNG)" } }, "required": ["imageUrl"] }
4476
4353
  },
@@ -5572,15 +5449,6 @@ function applyStepMethods(AgentClass) {
5572
5449
  proto.detectPII = function(step, options) {
5573
5450
  return this.executeStep("detectPII", step, options);
5574
5451
  };
5575
- proto.discordEditMessage = function(step, options) {
5576
- return this.executeStep("discordEditMessage", step, options);
5577
- };
5578
- proto.discordSendFollowUp = function(step, options) {
5579
- return this.executeStep("discordSendFollowUp", step, options);
5580
- };
5581
- proto.discordSendMessage = function(step, options) {
5582
- return this.executeStep("discordSendMessage", step, options);
5583
- };
5584
5452
  proto.downloadVideo = function(step, options) {
5585
5453
  return this.executeStep("downloadVideo", step, options);
5586
5454
  };
@@ -5626,9 +5494,6 @@ function applyStepMethods(AgentClass) {
5626
5494
  proto.generate3dModel = function(step, options) {
5627
5495
  return this.executeStep("generate3dModel", step, options);
5628
5496
  };
5629
- proto.generateChart = function(step, options) {
5630
- return this.executeStep("generateChart", step, options);
5631
- };
5632
5497
  proto.generateImage = function(step, options) {
5633
5498
  return this.executeStep("generateImage", step, options);
5634
5499
  };
@@ -5641,6 +5506,9 @@ function applyStepMethods(AgentClass) {
5641
5506
  proto.generateAsset = function(step, options) {
5642
5507
  return this.executeStep("generatePdf", step, options);
5643
5508
  };
5509
+ proto.generateSound = function(step, options) {
5510
+ return this.executeStep("generateSound", step, options);
5511
+ };
5644
5512
  proto.generateStaticVideoFromImage = function(step, options) {
5645
5513
  return this.executeStep("generateStaticVideoFromImage", step, options);
5646
5514
  };
@@ -5770,24 +5638,6 @@ function applyStepMethods(AgentClass) {
5770
5638
  proto.notionUpdatePage = function(step, options) {
5771
5639
  return this.executeStep("notionUpdatePage", step, options);
5772
5640
  };
5773
- proto.particlePodcastsFindMentions = function(step, options) {
5774
- return this.executeStep("particlePodcastsFindMentions", step, options);
5775
- };
5776
- proto.particlePodcastsGetEpisode = function(step, options) {
5777
- return this.executeStep("particlePodcastsGetEpisode", step, options);
5778
- };
5779
- proto.particlePodcastsGetEpisodeTranscript = function(step, options) {
5780
- return this.executeStep("particlePodcastsGetEpisodeTranscript", step, options);
5781
- };
5782
- proto.particlePodcastsSearchCompanies = function(step, options) {
5783
- return this.executeStep("particlePodcastsSearchCompanies", step, options);
5784
- };
5785
- proto.particlePodcastsSearchDialogue = function(step, options) {
5786
- return this.executeStep("particlePodcastsSearchDialogue", step, options);
5787
- };
5788
- proto.particlePodcastsSearchPodcasts = function(step, options) {
5789
- return this.executeStep("particlePodcastsSearchPodcasts", step, options);
5790
- };
5791
5641
  proto.peopleSearch = function(step, options) {
5792
5642
  return this.executeStep("peopleSearch", step, options);
5793
5643
  };
@@ -5809,6 +5659,9 @@ function applyStepMethods(AgentClass) {
5809
5659
  proto.queryExternalDatabase = function(step, options) {
5810
5660
  return this.executeStep("queryExternalDatabase", step, options);
5811
5661
  };
5662
+ proto.quickbooksApiRequest = function(step, options) {
5663
+ return this.executeStep("quickbooksApiRequest", step, options);
5664
+ };
5812
5665
  proto.redactPII = function(step, options) {
5813
5666
  return this.executeStep("redactPII", step, options);
5814
5667
  };
@@ -5824,9 +5677,6 @@ function applyStepMethods(AgentClass) {
5824
5677
  proto.runFromConnectorRegistry = function(step, options) {
5825
5678
  return this.executeStep("runFromConnectorRegistry", step, options);
5826
5679
  };
5827
- proto.runPackagedWorkflow = function(step, options) {
5828
- return this.executeStep("runPackagedWorkflow", step, options);
5829
- };
5830
5680
  proto.scrapeLinkedInCompany = function(step, options) {
5831
5681
  return this.executeStep("scrapeLinkedInCompany", step, options);
5832
5682
  };
@@ -5902,30 +5752,6 @@ function applyStepMethods(AgentClass) {
5902
5752
  proto.setVariable = function(step, options) {
5903
5753
  return this.executeStep("setVariable", step, options);
5904
5754
  };
5905
- proto.telegramEditMessage = function(step, options) {
5906
- return this.executeStep("telegramEditMessage", step, options);
5907
- };
5908
- proto.telegramReplyToMessage = function(step, options) {
5909
- return this.executeStep("telegramReplyToMessage", step, options);
5910
- };
5911
- proto.telegramSendAudio = function(step, options) {
5912
- return this.executeStep("telegramSendAudio", step, options);
5913
- };
5914
- proto.telegramSendFile = function(step, options) {
5915
- return this.executeStep("telegramSendFile", step, options);
5916
- };
5917
- proto.telegramSendImage = function(step, options) {
5918
- return this.executeStep("telegramSendImage", step, options);
5919
- };
5920
- proto.telegramSendMessage = function(step, options) {
5921
- return this.executeStep("telegramSendMessage", step, options);
5922
- };
5923
- proto.telegramSendVideo = function(step, options) {
5924
- return this.executeStep("telegramSendVideo", step, options);
5925
- };
5926
- proto.telegramSetTyping = function(step, options) {
5927
- return this.executeStep("telegramSetTyping", step, options);
5928
- };
5929
5755
  proto.textToSpeech = function(step, options) {
5930
5756
  return this.executeStep("textToSpeech", step, options);
5931
5757
  };
@@ -8131,9 +7957,6 @@ var monacoSnippets = {
8131
7957
  "deleteGoogleSheetRows": { fields: [["documentId", "string"], ["startRow", "string"], ["endRow", "string"]], outputKeys: [] },
8132
7958
  "detectChanges": { fields: [["mode", ["ai", "comparison"]], ["input", "string"]], outputKeys: ["hasChanged", "currentValue", "previousValue", "isFirstRun"] },
8133
7959
  "detectPII": { fields: [["input", "string"], ["language", "string"], ["entities", "array"]], outputKeys: ["detected", "detections"] },
8134
- "discordEditMessage": { fields: [["botToken", "string"], ["channelId", "string"], ["messageId", "string"], ["text", "string"]], outputKeys: [] },
8135
- "discordSendFollowUp": { fields: [["applicationId", "string"], ["interactionToken", "string"], ["text", "string"]], outputKeys: ["messageId"] },
8136
- "discordSendMessage": { fields: [["mode", ["edit", "send"]], ["text", "string"]], outputKeys: [] },
8137
7960
  "downloadVideo": { fields: [["videoUrl", "string"], ["format", ["mp4", "mp3"]]], outputKeys: ["videoUrl"] },
8138
7961
  "enhanceImageGenerationPrompt": { fields: [["initialPrompt", "string"], ["includeNegativePrompt", "boolean"], ["systemPrompt", "string"]], outputKeys: ["prompt"] },
8139
7962
  "enhanceVideoGenerationPrompt": { fields: [["initialPrompt", "string"], ["includeNegativePrompt", "boolean"], ["systemPrompt", "string"]], outputKeys: ["prompt"] },
@@ -8150,11 +7973,11 @@ var monacoSnippets = {
8150
7973
  "fetchYoutubeVideo": { fields: [["videoUrl", "string"]], outputKeys: [] },
8151
7974
  "generate3dModel": { fields: [], outputKeys: ["glbUrl"] },
8152
7975
  "generateAsset": { fields: [["source", "string"], ["sourceType", ["html", "markdown", "spa", "raw", "dynamic", "customInterface"]], ["outputFormat", ["pdf", "png", "html", "mp4", "openGraph"]], ["pageSize", ["full", "letter", "A4", "custom"]], ["testData", "object"]], outputKeys: ["url"] },
8153
- "generateChart": { fields: [["chart", "object"]], outputKeys: ["chartUrl"] },
8154
7976
  "generateImage": { fields: [["prompt", "string"]], outputKeys: ["imageUrl"] },
8155
7977
  "generateLipsync": { fields: [], outputKeys: [] },
8156
7978
  "generateMusic": { fields: [["text", "string"]], outputKeys: [] },
8157
7979
  "generatePdf": { fields: [["source", "string"], ["sourceType", ["html", "markdown", "spa", "raw", "dynamic", "customInterface"]], ["outputFormat", ["pdf", "png", "html", "mp4", "openGraph"]], ["pageSize", ["full", "letter", "A4", "custom"]], ["testData", "object"]], outputKeys: ["url"] },
7980
+ "generateSound": { fields: [["text", "string"]], outputKeys: ["audioUrl"] },
8158
7981
  "generateStaticVideoFromImage": { fields: [["imageUrl", "string"], ["duration", "string"]], outputKeys: ["videoUrl"] },
8159
7982
  "generateText": { fields: [["message", "string"]], outputKeys: ["content"] },
8160
7983
  "generateVideo": { fields: [["prompt", "string"]], outputKeys: ["videoUrl"] },
@@ -8199,12 +8022,6 @@ var monacoSnippets = {
8199
8022
  "n8nRunNode": { fields: [["method", "string"], ["authentication", ["none", "basic", "string"]], ["user", "string"], ["password", "string"], ["webhookUrl", "string"], ["input", "object"]], outputKeys: ["data"] },
8200
8023
  "notionCreatePage": { fields: [["pageId", "string"], ["content", "string"], ["title", "string"]], outputKeys: ["pageId", "pageUrl"] },
8201
8024
  "notionUpdatePage": { fields: [["pageId", "string"], ["content", "string"], ["mode", ["append", "overwrite"]]], outputKeys: ["pageId", "pageUrl"] },
8202
- "particlePodcastsFindMentions": { fields: [], outputKeys: [] },
8203
- "particlePodcastsGetEpisode": { fields: [["id", "string"]], outputKeys: [] },
8204
- "particlePodcastsGetEpisodeTranscript": { fields: [["id", "string"]], outputKeys: [] },
8205
- "particlePodcastsSearchCompanies": { fields: [], outputKeys: [] },
8206
- "particlePodcastsSearchDialogue": { fields: [], outputKeys: [] },
8207
- "particlePodcastsSearchPodcasts": { fields: [], outputKeys: [] },
8208
8025
  "peopleSearch": { fields: [["smartQuery", "string"], ["enrichPeople", "boolean"], ["enrichOrganizations", "boolean"], ["limit", "string"], ["page", "string"], ["params", "object"]], outputKeys: ["results"] },
8209
8026
  "postToLinkedIn": { fields: [["message", "string"], ["visibility", ["PUBLIC", "CONNECTIONS"]]], outputKeys: [] },
8210
8027
  "postToSlackChannel": { fields: [["channelId", "string"], ["messageType", ["string", "blocks"]], ["message", "string"]], outputKeys: [] },
@@ -8212,12 +8029,12 @@ var monacoSnippets = {
8212
8029
  "postToZapier": { fields: [["webhookUrl", "string"], ["input", "object"]], outputKeys: ["data"] },
8213
8030
  "queryDataSource": { fields: [["dataSourceId", "string"], ["query", "string"], ["maxResults", "number"]], outputKeys: ["text", "chunks", "query", "citations", "latencyMs"] },
8214
8031
  "queryExternalDatabase": { fields: [["query", "string"], ["outputFormat", ["json", "csv"]]], outputKeys: ["data"] },
8032
+ "quickbooksApiRequest": { fields: [["method", "string"], ["route", "string"], ["queryParams", "object"], ["body", "string"]], outputKeys: ["ok", "status", "body"] },
8215
8033
  "redactPII": { fields: [["input", "string"], ["language", "string"], ["entities", "array"]], outputKeys: ["text"] },
8216
8034
  "removeBackgroundFromImage": { fields: [["imageUrl", "string"]], outputKeys: ["imageUrl"] },
8217
8035
  "replyToGmailEmail": { fields: [["messageId", "string"], ["message", "string"], ["messageType", ["plain", "html", "markdown"]]], outputKeys: ["messageId"] },
8218
8036
  "resizeVideo": { fields: [["videoUrl", "string"], ["mode", ["fit", "exact"]]], outputKeys: ["videoUrl"] },
8219
8037
  "runFromConnectorRegistry": { fields: [["actionId", "string"], ["displayName", "string"], ["icon", "string"], ["configurationValues", "object"]], outputKeys: ["data"] },
8220
- "runPackagedWorkflow": { fields: [["appId", "string"], ["workflowId", "string"], ["inputVariables", "object"], ["outputVariables", "object"], ["name", "string"]], outputKeys: ["data"] },
8221
8038
  "scrapeLinkedInCompany": { fields: [["url", "string"]], outputKeys: ["company"] },
8222
8039
  "scrapeLinkedInProfile": { fields: [["url", "string"]], outputKeys: ["profile"] },
8223
8040
  "scrapeUrl": { fields: [["url", "string"]], outputKeys: ["content"] },
@@ -8243,14 +8060,6 @@ var monacoSnippets = {
8243
8060
  "setGmailReadStatus": { fields: [["messageIds", "string"], ["markAsRead", "boolean"]], outputKeys: [] },
8244
8061
  "setRunTitle": { fields: [["title", "string"]], outputKeys: [] },
8245
8062
  "setVariable": { fields: [["value", "string"]], outputKeys: [] },
8246
- "telegramEditMessage": { fields: [["botToken", "string"], ["chatId", "string"], ["messageId", "string"], ["text", "string"]], outputKeys: [] },
8247
- "telegramReplyToMessage": { fields: [["botToken", "string"], ["chatId", "string"], ["replyToMessageId", "string"], ["text", "string"]], outputKeys: ["messageId"] },
8248
- "telegramSendAudio": { fields: [["botToken", "string"], ["chatId", "string"], ["audioUrl", "string"], ["mode", ["audio", "voice"]]], outputKeys: [] },
8249
- "telegramSendFile": { fields: [["botToken", "string"], ["chatId", "string"], ["fileUrl", "string"]], outputKeys: [] },
8250
- "telegramSendImage": { fields: [["botToken", "string"], ["chatId", "string"], ["imageUrl", "string"]], outputKeys: [] },
8251
- "telegramSendMessage": { fields: [["botToken", "string"], ["chatId", "string"], ["text", "string"]], outputKeys: ["messageId"] },
8252
- "telegramSendVideo": { fields: [["botToken", "string"], ["chatId", "string"], ["videoUrl", "string"]], outputKeys: [] },
8253
- "telegramSetTyping": { fields: [["botToken", "string"], ["chatId", "string"]], outputKeys: [] },
8254
8063
  "textToSpeech": { fields: [["text", "string"]], outputKeys: ["audioUrl"] },
8255
8064
  "transcribeAudio": { fields: [["audioUrl", "string"], ["prompt", "string"]], outputKeys: ["text"] },
8256
8065
  "trimMedia": { fields: [["inputUrl", "string"]], outputKeys: ["mediaUrl"] },