Tutorializer Video Tutorials

Write and update video tutorials, voiceovers and pronunciation rules across your projects.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
98%
Naming quality
99%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'get_video' description lacks action verbin get_video
  • LOWTool 'get_speech' description lacks action verbin get_speech
  • LOWTool 'get_project_localization_summary' name length outside 3-30 rangein get_project_localization_summary

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~12,739Tokens (tool definitions)
~5.3 KBTypical response size
Significant attention impact (9.95% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "tutorializer": {
      "url": "https://mcp.tutorializer.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.tutorializer.com/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_projects(limit, cursor)

Use this when someone asks which Tutorializer projects they have, or a project's id is needed. Returns each project's id, name, vanity id, domain and created and edited times, sorted by name, 25 per page by default. Not for a project's languages or voice settings.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Projects per page, from 1 to 100; defaults to 25"
    },
    "cursor": {
      "type": "string",
      "maxLength": 4096,
      "description": "The nextCursor of the previous page; absent for the first page"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "projects": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "vanityId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 63
              },
              {
                "type": "null"
              }
            ]
          },
          "domain": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 253
              },
              {
                "type": "null"
              }
            ]
          },
          "creationTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "vanityId",
          "domain",
          "creationTime",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    },
    "nextCursor": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4096
        },
        {
          "type": "null"
        }
      ],
      "description": "Cursor for the next page; null on the last page"
    }
  },
  "required": [
    "status",
    "projects",
    "offset",
    "returned",
    "hasMore",
    "nextCursor"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_project(projectId)

Use this when someone asks about one project's languages, default voice, narration speed or pronunciation rules. Returns its name, domain, default and configured locales, voice settings and up to 50 pronunciation rules, looked up by project id or vanity id. Not for finding languages or devices that lack videos.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project id or its stable public vanity id"
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "project": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "vanityId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 63
                },
                {
                  "type": "null"
                }
              ]
            },
            "domain": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 253
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "locales": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              },
              "maxItems": 100
            },
            "defaultVoice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "stability": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "similarityBoost": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "style": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "speed": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0.1,
                  "maximum": 10
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "pronunciationRules": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "word": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 120
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "phonemes": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "alphabet": {
                    "type": "string",
                    "enum": [
                      "ipa",
                      "cmu"
                    ]
                  }
                },
                "required": [
                  "word",
                  "phonemes",
                  "alphabet"
                ],
                "additionalProperties": false
              },
              "maxItems": 50
            },
            "pronunciationRuleCount": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "pronunciationRuleCountIsLowerBound": {
              "type": "boolean"
            },
            "pronunciationRulesTruncated": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "name",
            "vanityId",
            "domain",
            "defaultLocale",
            "locales",
            "defaultVoice",
            "stability",
            "similarityBoost",
            "style",
            "speed",
            "creationTime",
            "lastEditTime",
            "pronunciationRules",
            "pronunciationRuleCount",
            "pronunciationRuleCountIsLowerBound",
            "pronunciationRulesTruncated"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Project settings; null when not found. Organization ids and pronunciation-dictionary ids are never returned."
    }
  },
  "required": [
    "status",
    "project"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_project_localization_summary(projectId, expectedDevices)

Use this when someone asks which languages or devices a project still lacks tutorial videos or voiceovers for, or how complete its translations are. Returns video and voiceover counts per language and video counts per device, plus the missing ones, from the latest 100 of each. Not for one tutorial's videos.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project id or its stable public vanity id"
    },
    "expectedDevices": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      },
      "minItems": 1,
      "maxItems": 10,
      "description": "Devices each language should have videos for, 1 to 10 names such as computer, tablet or smartphone; defaults to those three"
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "summary": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "project": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 200
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "defaultLocale": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 32
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "configuredLocales": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 32
                  },
                  "maxItems": 100
                },
                "configuredLocalesTruncated": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "name",
                "defaultLocale",
                "configuredLocales",
                "configuredLocalesTruncated"
              ],
              "additionalProperties": false
            },
            "totals": {
              "type": "object",
              "properties": {
                "tutorials": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "isLowerBound": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "count",
                    "isLowerBound"
                  ],
                  "additionalProperties": false
                },
                "videos": {
                  "$ref": "#/properties/summary/anyOf/0/properties/totals/properties/tutorials"
                },
                "speeches": {
                  "$ref": "#/properties/summary/anyOf/0/properties/totals/properties/tutorials"
                }
              },
              "required": [
                "tutorials",
                "videos",
                "speeches"
              ],
              "additionalProperties": false
            },
            "localeCoverage": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "locale": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 32
                  },
                  "configured": {
                    "type": "boolean"
                  },
                  "videos": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "speeches": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [
                  "locale",
                  "configured",
                  "videos",
                  "speeches"
                ],
                "additionalProperties": false
              },
              "maxItems": 50
            },
            "localeCoverageTotal": {
              "type": "integer",
              "minimum": 0,
              "maximum": 300
            },
            "localeCoverageTruncated": {
              "type": "boolean"
            },
            "deviceCoverage": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "device": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "videos": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [
                  "device",
                  "videos"
                ],
                "additionalProperties": false
              },
              "maxItems": 10
            },
            "missingVideoLocales": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              },
              "maxItems": 100
            },
            "missingSpeechLocales": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              },
              "maxItems": 100
            },
            "missingDevices": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 40
              },
              "maxItems": 10
            },
            "coverageDerivedFromTruncatedData": {
              "type": "boolean"
            }
          },
          "required": [
            "project",
            "totals",
            "localeCoverage",
            "localeCoverageTotal",
            "localeCoverageTruncated",
            "deviceCoverage",
            "missingVideoLocales",
            "missingSpeechLocales",
            "missingDevices",
            "coverageDerivedFromTruncatedData"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Coverage from at most the 100 most recently edited tutorials, videos and voiceover lines; coverageDerivedFromTruncatedData is true when more exist. Null when the project is not found."
    }
  },
  "required": [
    "status",
    "summary"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_tutorials(projectId, limit, cursor)

Use this when someone asks which tutorials a project has, or when another tool needs a tutorial id. Returns each tutorial's id, name, project, default voice and times, most recently edited first, 25 per page by default. Not for the rendered videos of each language or device.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "maxLength": 200,
      "description": "Only tutorials in this project; every project when absent"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Tutorials per page, from 1 to 100; defaults to 25"
    },
    "cursor": {
      "type": "string",
      "maxLength": 4096,
      "description": "The nextCursor of the previous page with the same filters; absent for the first page"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "projectIdFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "tutorials": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "projectId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "defaultVoice": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "creationTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "projectId",
          "defaultVoice",
          "creationTime",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    },
    "nextCursor": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4096
        },
        {
          "type": "null"
        }
      ],
      "description": "Cursor for the next page; null on the last page"
    }
  },
  "required": [
    "status",
    "projectIdFilter",
    "tutorials",
    "offset",
    "returned",
    "hasMore",
    "nextCursor"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_tutorial(tutorialId)

Use this when someone asks about one tutorial and the videos rendered from it. Returns the tutorial's name, project and default voice plus up to 8 of its most recently edited videos with language, device, format, size and media links. Not for every video in a project.

Input Schema

{
  "type": "object",
  "properties": {
    "tutorialId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tutorial id"
    }
  },
  "required": [
    "tutorialId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "tutorial": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultVoice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "projectId",
            "defaultVoice",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "videoCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8
    },
    "videoCountIsLowerBound": {
      "type": "boolean"
    },
    "videos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "device": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "format": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100000
              },
              {
                "type": "null"
              }
            ]
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100000
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "chaptersUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "subtitlesUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "thumbnailUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "locale",
          "device",
          "format",
          "width",
          "height",
          "url",
          "chaptersUrl",
          "subtitlesUrl",
          "thumbnailUrl"
        ],
        "additionalProperties": false
      },
      "maxItems": 8
    }
  },
  "required": [
    "status",
    "tutorial",
    "videoCount",
    "videoCountIsLowerBound",
    "videos"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_videos(projectId, tutorialId, locale, device, limit, ...)

Use this when someone asks which tutorial videos exist, optionally for one project, tutorial, language or device. Returns each video's id, tutorial, language, device, format, dimensions, file size and URL, most recently edited first, 25 per page by default. Not for checking missing languages.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "maxLength": 200,
      "description": "Only videos in this project"
    },
    "tutorialId": {
      "type": "string",
      "maxLength": 200,
      "description": "Only videos of this tutorial"
    },
    "locale": {
      "type": "string",
      "maxLength": 32,
      "description": "Only videos in this language code, e.g. en or pt-BR"
    },
    "device": {
      "type": "string",
      "maxLength": 100,
      "description": "Only videos for this device: computer, tablet or smartphone"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Videos per page, from 1 to 100; defaults to 25"
    },
    "cursor": {
      "type": "string",
      "maxLength": 4096,
      "description": "The nextCursor of the previous page with the same filters; absent for the first page"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "projectIdFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "tutorialIdFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "localeFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "deviceFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "videos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "tutorialId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "projectId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "device": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "format": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100000
              },
              {
                "type": "null"
              }
            ]
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100000
              },
              {
                "type": "null"
              }
            ]
          },
          "fileSize": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "creationTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "tutorialId",
          "projectId",
          "url",
          "locale",
          "device",
          "format",
          "width",
          "height",
          "fileSize",
          "creationTime",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    },
    "nextCursor": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4096
        },
        {
          "type": "null"
        }
      ],
      "description": "Cursor for the next page; null on the last page"
    }
  },
  "required": [
    "status",
    "projectIdFilter",
    "tutorialIdFilter",
    "localeFilter",
    "deviceFilter",
    "videos",
    "offset",
    "returned",
    "hasMore",
    "nextCursor"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_video(videoId)

Use this when someone asks about one tutorial video, such as its link, subtitles, chapters or thumbnail. Returns its tutorial, language, device, dimensions and its video, chapters, subtitles and thumbnail URLs. Not for changing those details.

Input Schema

{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Video id"
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "video": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "tutorialId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "locale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "device": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "theme": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "format": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "width": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100000
                },
                {
                  "type": "null"
                }
              ]
            },
            "height": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100000
                },
                {
                  "type": "null"
                }
              ]
            },
            "fileSize": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000000000000000
                },
                {
                  "type": "null"
                }
              ]
            },
            "url": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "chaptersUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "subtitlesUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "thumbnailUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "projectId",
            "tutorialId",
            "locale",
            "device",
            "theme",
            "format",
            "width",
            "height",
            "fileSize",
            "url",
            "chaptersUrl",
            "subtitlesUrl",
            "thumbnailUrl",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "video"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_speeches(projectId, language, limit, cursor)

Use this when someone asks which voiceover or narration lines a project has, optionally in one language. Returns each line's id, a short text preview, language, project and audio URL, most recently edited first, 25 per page by default. Not for the full text of one line.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "maxLength": 200,
      "description": "Only voiceover lines in this project"
    },
    "language": {
      "type": "string",
      "maxLength": 32,
      "description": "Only lines in this language code, e.g. en, es or de"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Voiceover lines per page, from 1 to 100; defaults to 25"
    },
    "cursor": {
      "type": "string",
      "maxLength": 4096,
      "description": "The nextCursor of the previous page with the same filters; absent for the first page"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "projectIdFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "languageFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "speeches": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "textPreview": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120
              },
              {
                "type": "null"
              }
            ]
          },
          "textTruncated": {
            "type": "boolean"
          },
          "language": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "projectId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "creationTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "textPreview",
          "textTruncated",
          "language",
          "projectId",
          "url",
          "creationTime",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100,
      "description": "Voiceover lines with a text preview of up to 120 characters, not the full text"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    },
    "nextCursor": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4096
        },
        {
          "type": "null"
        }
      ],
      "description": "Cursor for the next page; null on the last page"
    }
  },
  "required": [
    "status",
    "projectIdFilter",
    "languageFilter",
    "speeches",
    "offset",
    "returned",
    "hasMore",
    "nextCursor"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_speech(speechId)

Use this when someone needs the full wording or translation of one voiceover line, or its audio link. Returns its source text, translation, language, voice, duration, project and audio URL. Not for changing the words.

Input Schema

{
  "type": "object",
  "properties": {
    "speechId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Voiceover line id"
    }
  },
  "required": [
    "speechId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "speech": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "language": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "voice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "duration": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 86400
                },
                {
                  "type": "null"
                }
              ]
            },
            "url": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "text": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4000
                },
                {
                  "type": "null"
                }
              ]
            },
            "textTruncated": {
              "type": "boolean"
            },
            "translatedText": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 4000
                },
                {
                  "type": "null"
                }
              ]
            },
            "translatedTextTruncated": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "projectId",
            "language",
            "voice",
            "duration",
            "url",
            "creationTime",
            "lastEditTime",
            "text",
            "textTruncated",
            "translatedText",
            "translatedTextTruncated"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "speech"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_project(name, domain, defaultLocale)

Use this when someone wants to start a new Tutorializer project for a product or app. Returns the new project's id, name, vanity id, domain and default locale. Each call creates another project. Not for changing an existing project.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Project name as people will see it, up to 120 characters"
    },
    "domain": {
      "type": "string",
      "minLength": 1,
      "maxLength": 253,
      "description": "Domain of the product the tutorials cover, e.g. example.com; optional"
    },
    "defaultLocale": {
      "type": "string",
      "minLength": 2,
      "maxLength": 16,
      "description": "Main language code of the tutorials, e.g. en or pt-BR; optional"
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "created"
    },
    "project": {
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "vanityId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 63
            },
            {
              "type": "null"
            }
          ]
        },
        "domain": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 253
            },
            {
              "type": "null"
            }
          ]
        },
        "defaultLocale": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 16
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "name",
        "vanityId",
        "domain",
        "defaultLocale"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "status",
    "project"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_project(projectId, name, domain, defaultLocale, locales, ...)

Use this when someone wants to rename a project or change its domain, languages, default voice or narration speed. Returns the updated settings; fields left out keep their values, and a new locales list replaces the whole set. Not for pronunciation fixes.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project id or its stable public vanity id"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "New project name, up to 120 characters"
    },
    "domain": {
      "type": "string",
      "minLength": 1,
      "maxLength": 253,
      "description": "New product domain, e.g. example.com"
    },
    "defaultLocale": {
      "type": "string",
      "minLength": 2,
      "maxLength": 16,
      "description": "New main language code, e.g. en or pt-BR"
    },
    "locales": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 2,
        "maxLength": 32
      },
      "minItems": 1,
      "maxItems": 100,
      "description": "Complete list of language codes the project publishes, 1 to 100; it replaces the current list, and languages left out stop being expected"
    },
    "defaultVoice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "New default voice id for synthesized narration"
    },
    "speed": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 10,
      "description": "New narration speed multiplier, from 0.1 to 10"
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "updated",
        "unchanged",
        "not-found"
      ]
    },
    "project": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "vanityId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 63
                },
                {
                  "type": "null"
                }
              ]
            },
            "domain": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 253
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "locales": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              },
              "maxItems": 100
            },
            "defaultVoice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "speed": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0.1,
                  "maximum": 10
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "vanityId",
            "domain",
            "defaultLocale",
            "locales",
            "defaultVoice",
            "speed",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "project"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_tutorial(projectId, name, defaultVoice)

Use this when someone wants to add a new tutorial to a project. Returns the new tutorial's id, name, project and default voice. Each call creates another tutorial; it records the tutorial without recording or rendering a video. Not for adding a rendered video.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project the tutorial belongs to"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tutorial name, up to 200 characters"
    },
    "defaultVoice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Optional voice id used when narration is synthesized for this tutorial"
    }
  },
  "required": [
    "projectId",
    "name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "created"
    },
    "tutorial": {
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "defaultVoice": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "creationTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        },
        "lastEditTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "name",
        "projectId",
        "defaultVoice",
        "creationTime",
        "lastEditTime"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "status",
    "tutorial"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_tutorial(tutorialId, name, defaultVoice)

Use this when someone wants to rename a tutorial or change the default voice of its narration. Returns the updated tutorial; fields left out keep their values, and repeating the same values changes nothing. Not for editing narration text.

Input Schema

{
  "type": "object",
  "properties": {
    "tutorialId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tutorial to edit"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "New tutorial name, up to 200 characters"
    },
    "defaultVoice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "New default voice id for synthesized narration"
    }
  },
  "required": [
    "tutorialId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "updated",
        "unchanged",
        "not-found"
      ]
    },
    "tutorial": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultVoice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "projectId",
            "defaultVoice",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "tutorial"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_video(projectId, tutorialId, url, locale, device, ...)

Use this when someone has an already uploaded tutorial video file and wants it listed under a tutorial. Returns the new video record with its language, device, dimensions and URLs. Host the file first and pass its public https URL; each call adds another record. Not for recording, rendering or uploading a video.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project that owns the tutorial"
    },
    "tutorialId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tutorial this video is a rendering of"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public https URL of the already-uploaded video file"
    },
    "locale": {
      "type": "string",
      "minLength": 2,
      "maxLength": 32,
      "description": "Language code of this video, e.g. en or pt-BR"
    },
    "device": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Device the video was rendered for: computer, tablet or smartphone"
    },
    "format": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Container or codec, e.g. mp4 or webm"
    },
    "width": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "description": "Width in pixels, 1 to 100000"
    },
    "height": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "description": "Height in pixels, 1 to 100000"
    },
    "duration": {
      "type": "number",
      "minimum": 0,
      "maximum": 86400,
      "description": "Duration in seconds, up to 86400"
    },
    "fileSize": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000000000,
      "description": "File size in bytes"
    },
    "chaptersUrl": {
      "$ref": "#/properties/url",
      "description": "Public https URL of the chapters track"
    },
    "subtitlesUrl": {
      "$ref": "#/properties/chaptersUrl",
      "description": "Public https URL of a WebVTT subtitle track"
    },
    "thumbnailUrl": {
      "$ref": "#/properties/chaptersUrl",
      "description": "Public https URL of the poster image"
    }
  },
  "required": [
    "projectId",
    "tutorialId",
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "created"
    },
    "video": {
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "tutorialId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "url": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2048
            },
            {
              "type": "null"
            }
          ]
        },
        "locale": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32
            },
            {
              "type": "null"
            }
          ]
        },
        "device": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "format": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            },
            {
              "type": "null"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            },
            {
              "type": "null"
            }
          ]
        },
        "duration": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 86400
            },
            {
              "type": "null"
            }
          ]
        },
        "fileSize": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000000000
            },
            {
              "type": "null"
            }
          ]
        },
        "chaptersUrl": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2048
            },
            {
              "type": "null"
            }
          ]
        },
        "subtitlesUrl": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2048
            },
            {
              "type": "null"
            }
          ]
        },
        "thumbnailUrl": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2048
            },
            {
              "type": "null"
            }
          ]
        },
        "creationTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        },
        "lastEditTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "projectId",
        "tutorialId",
        "url",
        "locale",
        "device",
        "format",
        "width",
        "height",
        "duration",
        "fileSize",
        "chaptersUrl",
        "subtitlesUrl",
        "thumbnailUrl",
        "creationTime",
        "lastEditTime"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "status",
    "video"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_video(videoId, url, locale, device, format, ...)

Use this when someone wants to correct a tutorial video's language, device, dimensions, file link, subtitles, chapters or thumbnail. Returns the updated video record; fields left out keep their values and identical values change nothing. Not for re-rendering the video itself.

Input Schema

{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Video to correct"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "New public https URL of the video file"
    },
    "locale": {
      "type": "string",
      "minLength": 2,
      "maxLength": 32,
      "description": "New language code, e.g. en or pt-BR"
    },
    "device": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "New device: computer, tablet or smartphone"
    },
    "format": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "New container or codec, e.g. mp4 or webm"
    },
    "width": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "description": "New width in pixels, 1 to 100000"
    },
    "height": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "description": "New height in pixels, 1 to 100000"
    },
    "duration": {
      "type": "number",
      "minimum": 0,
      "maximum": 86400,
      "description": "New duration in seconds, up to 86400"
    },
    "fileSize": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000000000,
      "description": "New file size in bytes"
    },
    "chaptersUrl": {
      "$ref": "#/properties/url",
      "description": "New public https URL of the chapters track"
    },
    "subtitlesUrl": {
      "$ref": "#/properties/url",
      "description": "New public https URL of a WebVTT subtitle track"
    },
    "thumbnailUrl": {
      "$ref": "#/properties/url",
      "description": "New public https URL of the poster image"
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "updated",
        "unchanged",
        "not-found"
      ]
    },
    "video": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "tutorialId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "url": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "locale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "device": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "format": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "width": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100000
                },
                {
                  "type": "null"
                }
              ]
            },
            "height": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100000
                },
                {
                  "type": "null"
                }
              ]
            },
            "duration": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 86400
                },
                {
                  "type": "null"
                }
              ]
            },
            "fileSize": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000000000000000
                },
                {
                  "type": "null"
                }
              ]
            },
            "chaptersUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "subtitlesUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "thumbnailUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "projectId",
            "tutorialId",
            "url",
            "locale",
            "device",
            "format",
            "width",
            "height",
            "duration",
            "fileSize",
            "chaptersUrl",
            "subtitlesUrl",
            "thumbnailUrl",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "video"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_speech(projectId, text, language, translatedText, voice, ...)

Use this when someone wants new narration or voiceover in a project. Returns the new line's id, language, voice and audio URL. Without url the audio is synthesized from the text with the project's voice provider, spending the organization's synthesis credits; with url it records audio you already have. Not for fixing an existing line.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project the voiceover line belongs to"
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Words to speak, up to 5000 characters"
    },
    "language": {
      "type": "string",
      "minLength": 2,
      "maxLength": 32,
      "description": "Language code of the narration, e.g. en or pt-BR"
    },
    "translatedText": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Optional translation spoken instead of the source text"
    },
    "voice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Optional voice id; defaults to the project's default voice"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Public https URL of audio you already produced. Supplying it records the segment without synthesizing anything."
    }
  },
  "required": [
    "projectId",
    "text",
    "language"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "created",
        "recorded"
      ]
    },
    "synthesized": {
      "type": "boolean",
      "description": "True when audio was synthesized and synthesis credits were spent; false when a url was recorded"
    },
    "speech": {
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "language": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32
            },
            {
              "type": "null"
            }
          ]
        },
        "voice": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "url": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2048
            },
            {
              "type": "null"
            }
          ]
        },
        "duration": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 86400
            },
            {
              "type": "null"
            }
          ]
        },
        "textPreview": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 5000
            },
            {
              "type": "null"
            }
          ]
        },
        "creationTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        },
        "lastEditTime": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "projectId",
        "language",
        "voice",
        "url",
        "duration",
        "textPreview",
        "creationTime",
        "lastEditTime"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "status",
    "synthesized",
    "speech"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_speech(speechId, text, translatedText, language, voice)

Use this when someone wants to change the words, translation, language or voice of one voiceover line. Returns the updated line. A real change re-synthesizes its audio with the project's voice provider, spending synthesis credits and replacing the old audio; identical values change nothing. Not for project-wide pronunciation fixes.

Input Schema

{
  "type": "object",
  "properties": {
    "speechId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Voiceover line to edit"
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "New words to speak, up to 5000 characters"
    },
    "translatedText": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "New translation spoken instead of the source text"
    },
    "language": {
      "type": "string",
      "minLength": 2,
      "maxLength": 32,
      "description": "New language code, e.g. en or pt-BR"
    },
    "voice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "New voice id for this line"
    }
  },
  "required": [
    "speechId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "updated",
        "unchanged",
        "not-found"
      ]
    },
    "resynthesized": {
      "type": "boolean",
      "description": "True when the change re-synthesized the audio and spent synthesis credits"
    },
    "speech": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "projectId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "language": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "voice": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "url": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "duration": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 86400
                },
                {
                  "type": "null"
                }
              ]
            },
            "textPreview": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 5000
                },
                {
                  "type": "null"
                }
              ]
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "projectId",
            "language",
            "voice",
            "url",
            "duration",
            "textPreview",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "resynthesized",
    "speech"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴set_pronunciation_rule(projectId, word, phonemes, alphabet)

Use this when narration mispronounces a word, name or brand in a project's voiceovers. Returns the rule and the project's rule count after adding or replacing it (IPA or CMU phonemes, up to 500 rules) and syncing the pronunciation dictionary used for later synthesis. Not for re-voicing lines that already have audio.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project whose narration to fix"
    },
    "word": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Exact word or phrase to match, up to 120 characters"
    },
    "phonemes": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "How to say it, in the chosen phonetic alphabet, up to 500 characters"
    },
    "alphabet": {
      "type": "string",
      "enum": [
        "ipa",
        "cmu"
      ],
      "description": "Phonetic alphabet: ipa or cmu; defaults to ipa"
    }
  },
  "required": [
    "projectId",
    "word",
    "phonemes"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "added",
        "replaced",
        "unchanged",
        "project-not-found"
      ]
    },
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "rule": {
      "type": "object",
      "properties": {
        "word": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "phonemes": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500
        },
        "alphabet": {
          "type": "string",
          "enum": [
            "ipa",
            "cmu"
          ]
        }
      },
      "required": [
        "word",
        "phonemes",
        "alphabet"
      ],
      "additionalProperties": false
    },
    "ruleCount": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 500
        },
        {
          "type": "null"
        }
      ]
    },
    "ruleCountIsLowerBound": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "projectId",
    "rule",
    "ruleCount",
    "ruleCountIsLowerBound"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴remove_pronunciation_rule(projectId, word)

Use this when someone wants to drop a pronunciation rule so a word is spoken the default way again. Returns whether it was removed and the remaining rule count; a missing rule changes nothing, and existing audio is kept as it is. Not for changing a rule's phonemes.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project the rule belongs to"
    },
    "word": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Exact word or phrase whose pronunciation rule should be removed"
    }
  },
  "required": [
    "projectId",
    "word"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "removed",
        "unchanged",
        "project-not-found"
      ]
    },
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "word": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "remainingRuleCount": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 500
        },
        {
          "type": "null"
        }
      ]
    },
    "remainingRuleCountIsLowerBound": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "projectId",
    "word",
    "remainingRuleCount",
    "remainingRuleCountIsLowerBound"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_tutorial(tutorialId)

Use this when someone wants a tutorial permanently deleted. Returns the deleted tutorial id; its videos and voiceover lines stay and each needs its own delete. Deleting it again changes nothing. Not for removing one language or device version.

Input Schema

{
  "type": "object",
  "properties": {
    "tutorialId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tutorial to delete"
    }
  },
  "required": [
    "tutorialId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "deleted"
    },
    "tutorialId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "status",
    "tutorialId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_speech(speechId)

Use this when someone wants one voiceover line permanently deleted with its audio. Returns the deleted line id; the audio and timing files are erased, so restoring it means synthesizing again, which spends credits. Deleting it again changes nothing. Not for changing its words.

Input Schema

{
  "type": "object",
  "properties": {
    "speechId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Voiceover line to delete"
    }
  },
  "required": [
    "speechId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "deleted"
    },
    "speechId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "status",
    "speechId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_video(videoId)

Use this when someone wants one rendered tutorial video permanently deleted. Returns the deleted video id; the record and its video file in Tutorializer storage are erased, so restoring it means uploading or rendering again. Not for deleting the whole tutorial.

Input Schema

{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Video to delete"
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "deleted"
    },
    "videoId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "status",
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢show_project_overview(projectId)

Use this when someone wants a quick visual overview of one Tutorializer project. Returns a card with the project's name, domain and logo, how many tutorials, videos and voiceover lines it has (counted up to 100 each) and its 8 most recently edited tutorials. Not for missing languages or devices.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project id or its stable public vanity id"
    }
  },
  "required": [
    "projectId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "project": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "domain": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 253
                },
                {
                  "type": "null"
                }
              ]
            },
            "logo": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "domain",
            "logo"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "tutorialCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "tutorialCountIsLowerBound": {
      "type": "boolean"
    },
    "videoCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "videoCountIsLowerBound": {
      "type": "boolean"
    },
    "speechCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "speechCountIsLowerBound": {
      "type": "boolean"
    },
    "tutorials": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "defaultVoice": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "defaultVoice",
          "lastEditTime"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "project",
    "tutorialCount",
    "tutorialCountIsLowerBound",
    "videoCount",
    "videoCountIsLowerBound",
    "speechCount",
    "speechCountIsLowerBound",
    "tutorials"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools
verifiedversion not recorded23 tools
verifiedversion not recorded23 tools
verifiedversion not recorded23 tools
verifiedversion not recorded23 tools
verifiedversion not recorded23 tools