Server definition
- Hash
- sha256:49a5710ebf2f407dcde8b6d19dc79720e9dfe9c9df13062e50017bde7e1436af
- What it is
- What a remote MCP server returned when asked what it offers: 23 tools
The blob, as servednamed by its sha256
{
"instructions": "# Tutorial library audit with Tutorializer\n\nThis skill drives the Tutorializer MCP connector. The user must connect\nTutorializer and authorize an account with a live role in the intended\norganization. If authorization fails, ask the user to connect Tutorializer;\nnever request or embed an API key.\n\nReads need the `tutorializer:read` grant and every change needs\n`tutorializer:write`. A read-only grant does not list the write tools at all,\nso if a change tool is missing, ask the user to reconnect and approve write\naccess rather than reporting the capability as unavailable.\n\n## Resource identifiers\n\nKeep these ids distinct:\n\n- `projectId` selects one product tutorial library. `get_project`,\n `get_project_localization_summary`, `update_project` and\n `show_project_overview` also accept a stable public vanity id, but never the\n display name; list filters should use the immutable id from `list_projects`.\n- `tutorialId` selects one tutorial definition. A tutorial has a name and\n optional default voice; it does **not** have one locale, device, status, or\n video URL.\n- `videoId` selects one rendered output. Locale, device, dimensions, format,\n media URL, chapters, subtitles and thumbnail belong here.\n- `speechId` selects one voiceover segment with a source text, language,\n optional translation, voice, duration and audio URL.\n\nResolve names with a list tool before using an id. Do not guess identifiers or\nreuse an id from another organization.\n\n## Available read tools\n\n| Tool | Use it when someone asks… |\n| ---------------------------------- | ---------------------------------------------------------------------------------- |\n| `list_projects` | which projects they have; also resolves the project id every other tool needs |\n| `get_project` | about a project's languages, default voice, narration speed or pronunciation rules |\n| `get_project_localization_summary` | which languages or devices still lack videos or voiceovers |\n| `show_project_overview` | for a quick visual card of one project with recent tutorials and content counts |\n| `list_tutorials` | which tutorials a project has |\n| `get_tutorial` | about one tutorial and up to eight of its rendered videos, in the detail card |\n| `list_videos` | which videos exist for a project, tutorial, language or device |\n| `get_video` | for one video's link, subtitles, chapters, thumbnail or dimensions |\n| `list_speeches` | which voiceover lines a project has, optionally in one language |\n| `get_speech` | for one voiceover line's full text, translation or audio link |\n\nList tools return 25 rows by default and at most 100, and can return an opaque\n`cursor`. Reuse the\ncursor only with the same filters. Counts ending in `+` are lower bounds; do\nnot report them as exact.\n\n## State-changing tools\n\n| Tool | Semantics |\n| --------------------------- | --------------------------------------------------------------------------- |\n| `create_project` | Non-idempotent: a repeated call creates another project |\n| `update_project` | Idempotent rewrite of name, domain, locales, default voice, speed |\n| `create_tutorial` | Non-idempotent: a repeated call creates another tutorial definition |\n| `update_tutorial` | Idempotent rename or default-voice change |\n| `create_video` | Non-idempotent: registers one already-hosted rendered output |\n| `update_video` | Idempotent metadata correction for one registered output |\n| `create_speech` | Non-idempotent: **synthesizes billable narration audio** unless given a url |\n| `update_speech` | Idempotent, but a real change **re-synthesizes** and replaces the audio |\n| `set_pronunciation_rule` | Idempotent add-or-replace of one exact word/phrase |\n| `remove_pronunciation_rule` | Idempotent removal of one exact rule |\n| `delete_tutorial` | Idempotent permanent deletion of one definition |\n| `delete_speech` | Idempotent permanent deletion of one record plus audio/alignment |\n| `delete_video` | Idempotent permanent deletion of one record plus its primary media object |\n\nEvery create, update and delete is annotated destructive, so hosts ask the user\nto approve each one. Get the user's confirmation for the exact target before\neach state-changing call even when it is idempotent.\n\n- Before `create_project` or `create_tutorial`, list what already exists, show\n the intended values, and explain that retrying creates duplicates.\n- Before any `update_*`, read the record first and show the user the old and\n new values. An update rewrites the whole stored record, so never invent a\n field the user did not ask to change.\n- Before `create_speech` without a `url`, and before any `update_speech` that\n changes text, translation, language or voice, say plainly that Tutorializer\n will synthesize new audio and that this consumes the organization's\n synthesis credits. Get explicit approval. Submitting values a segment\n already has is a no-op and synthesizes nothing.\n- Before `remove_pronunciation_rule`, show the exact existing rule. Removing a\n rule does not regenerate existing speech audio.\n- Before `delete_tutorial`, list its rendered videos. Deleting the definition\n does not delete them, and they become orphaned.\n- Before `delete_speech` or `delete_video`, read the record and show id,\n language or locale, and URL. Delete only the named record.\n\nNever turn a request to \"clean everything\" into loops of single-record deletes.\nThere is intentionally no bulk-delete tool.\n\n## Authoring workflow\n\nAdding a tutorial to a product is four steps, and only the middle two happen\noutside this connector.\n\n1. `list_projects`, or `create_project` when the product has no library yet.\n2. `create_tutorial` with the project id and a name describing the task the\n viewer will learn, for example \"Create and complete a task\".\n3. Write the walkthrough in the product's own repository. Tutorializer's public\n browser runtimes `@tutorializer/tours` and `@tutorializer/react` execute the\n steps against the real UI. **This connector has no tool for authoring step\n selectors or actions, and none for recording or rendering a file.** Point\n the user at those packages and at the published examples rather than\n inventing a tool call.\n4. `create_speech` per narration line, then record the walkthrough locally and\n host the resulting file. Register the result with `create_video`, passing\n the tutorial id, the public https URL, and the locale, device, format and\n dimensions of that render.\n\n`create_video` records a URL you already have. It does not upload bytes, and\nthere is no upload tool: host the file first, on the product's own CDN or\nthrough Tutorializer's dashboard and publishing CLI.\n\nFor a second locale, repeat steps 4 with the new language: one `create_speech`\nper line in that language, one render, one `create_video`. Then confirm with\n`get_project_localization_summary` that the gap closed.\n\n## Localization audit workflow\n\n1. Use `list_projects` to resolve the project.\n2. Call `get_project_localization_summary` with the project id. The default\n expected devices are `computer`, `tablet`, and `smartphone`; pass an\n explicit list only when the user names a different publishing matrix.\n3. Use `list_tutorials` to establish the definitions that should have outputs.\n4. For a gap, call `list_videos` with the specific project/tutorial/locale or\n device filter.\n5. Use `get_tutorial` for one bounded interactive output view, and `get_video`\n when captions, chapters, dimensions or a full URL matter.\n\nReport configured locales with no recent video, configured locales with no\nspeech, expected devices with no video, and any observed locale not configured\non the project. If the summary warns that a content type exceeded 100 rows,\nsay that the coverage is based on the most recently edited 100.\n\n`update_project` sets the `locales` list as a complete replacement. Dropping a\nlocale stops the audit expecting it; it does not delete anything already\npublished in that locale.\n\n## Pronunciation workflow\n\n1. `get_project` to inspect project-level pronunciation rules.\n2. Identify the exact word/phrase and phonetic alphabet (`ipa` or `cmu`).\n3. Explain whether `set_pronunciation_rule` adds or replaces and confirm.\n4. Apply one rule.\n5. A rule change does not rewrite audio that already exists, and\n `update_speech` synthesizes only when a segment's text, translation,\n language or voice actually changes: resubmitting the same values is a\n no-op. To re-voice an unchanged segment, create it again with\n `create_speech` and, once the user confirms, delete the old one — one\n confirmed segment at a time, saying that this spends synthesis credits.\n\nTutorializer synthesizes speech only. There is no image or video generation\ntool in this connector, and video rendering happens in the user's own\nrecording pipeline.\n\n## Interactive views\n\n`show_project_overview` renders a project card and `get_tutorial` renders a\ntutorial/output card in MCP App hosts. Add analysis the card cannot show\n(coverage gaps, lower-bound caveats, or next actions) instead of restating\nevery visible field.\n",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"defaultLocale": {
"description": "Main language code of the tutorials, e.g. en or pt-BR; optional",
"maxLength": 16,
"minLength": 2,
"type": "string"
},
"domain": {
"description": "Domain of the product the tutorials cover, e.g. example.com; optional",
"maxLength": 253,
"minLength": 1,
"type": "string"
},
"name": {
"description": "Project name as people will see it, up to 120 characters",
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"project": {
"additionalProperties": false,
"properties": {
"defaultLocale": {
"anyOf": [
{
"maxLength": 16,
"type": "string"
},
{
"type": "null"
}
]
},
"domain": {
"anyOf": [
{
"maxLength": 253,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"vanityId": {
"anyOf": [
{
"maxLength": 63,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"vanityId",
"domain",
"defaultLocale"
],
"type": "object"
},
"status": {
"const": "created",
"type": "string"
}
},
"required": [
"status",
"project"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"language": {
"description": "Language code of the narration, e.g. en or pt-BR",
"maxLength": 32,
"minLength": 2,
"type": "string"
},
"projectId": {
"description": "Project the voiceover line belongs to",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"text": {
"description": "Words to speak, up to 5000 characters",
"maxLength": 5000,
"minLength": 1,
"type": "string"
},
"translatedText": {
"description": "Optional translation spoken instead of the source text",
"maxLength": 5000,
"minLength": 1,
"type": "string"
},
"url": {
"description": "Public https URL of audio you already produced. Supplying it records the segment without synthesizing anything.",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"voice": {
"description": "Optional voice id; defaults to the project's default voice",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"text",
"language"
],
"type": "object"
},
"name": "create_speech",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"speech": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"duration": {
"anyOf": [
{
"maximum": 86400,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"textPreview": {
"anyOf": [
{
"maxLength": 5000,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"voice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"language",
"voice",
"url",
"duration",
"textPreview",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"status": {
"enum": [
"created",
"recorded"
],
"type": "string"
},
"synthesized": {
"description": "True when audio was synthesized and synthesis credits were spent; false when a url was recorded",
"type": "boolean"
}
},
"required": [
"status",
"synthesized",
"speech"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"defaultVoice": {
"description": "Optional voice id used when narration is synthesized for this tutorial",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"name": {
"description": "Tutorial name, up to 200 characters",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"projectId": {
"description": "Project the tutorial belongs to",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"name"
],
"type": "object"
},
"name": "create_tutorial",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"const": "created",
"type": "string"
},
"tutorial": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"defaultVoice",
"creationTime",
"lastEditTime"
],
"type": "object"
}
},
"required": [
"status",
"tutorial"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"$ref": "#/properties/url",
"description": "Public https URL of the chapters track"
},
"device": {
"description": "Device the video was rendered for: computer, tablet or smartphone",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"duration": {
"description": "Duration in seconds, up to 86400",
"maximum": 86400,
"minimum": 0,
"type": "number"
},
"fileSize": {
"description": "File size in bytes",
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
"format": {
"description": "Container or codec, e.g. mp4 or webm",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"height": {
"description": "Height in pixels, 1 to 100000",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "integer"
},
"locale": {
"description": "Language code of this video, e.g. en or pt-BR",
"maxLength": 32,
"minLength": 2,
"type": "string"
},
"projectId": {
"description": "Project that owns the tutorial",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"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"
},
"tutorialId": {
"description": "Tutorial this video is a rendering of",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"url": {
"description": "Public https URL of the already-uploaded video file",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"width": {
"description": "Width in pixels, 1 to 100000",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "integer"
}
},
"required": [
"projectId",
"tutorialId",
"url"
],
"type": "object"
},
"name": "create_video",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"const": "created",
"type": "string"
},
"video": {
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"device": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"duration": {
"anyOf": [
{
"maximum": 86400,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"fileSize": {
"anyOf": [
{
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"subtitlesUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"thumbnailUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"tutorialId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"tutorialId",
"url",
"locale",
"device",
"format",
"width",
"height",
"duration",
"fileSize",
"chaptersUrl",
"subtitlesUrl",
"thumbnailUrl",
"creationTime",
"lastEditTime"
],
"type": "object"
}
},
"required": [
"status",
"video"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"speechId": {
"description": "Voiceover line to delete",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"speechId"
],
"type": "object"
},
"name": "delete_speech",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"speechId": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"status": {
"const": "deleted",
"type": "string"
}
},
"required": [
"status",
"speechId"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"tutorialId": {
"description": "Tutorial to delete",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"tutorialId"
],
"type": "object"
},
"name": "delete_tutorial",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"const": "deleted",
"type": "string"
},
"tutorialId": {
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"status",
"tutorialId"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"videoId": {
"description": "Video to delete",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"videoId"
],
"type": "object"
},
"name": "delete_video",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"const": "deleted",
"type": "string"
},
"videoId": {
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"status",
"videoId"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectId": {
"description": "Project id or its stable public vanity id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "get_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"project": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultLocale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"domain": {
"anyOf": [
{
"maxLength": 253,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locales": {
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"pronunciationRuleCount": {
"maximum": 1000000,
"minimum": 0,
"type": "integer"
},
"pronunciationRuleCountIsLowerBound": {
"type": "boolean"
},
"pronunciationRules": {
"items": {
"additionalProperties": false,
"properties": {
"alphabet": {
"enum": [
"ipa",
"cmu"
],
"type": "string"
},
"phonemes": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
]
},
"word": {
"anyOf": [
{
"maxLength": 120,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"word",
"phonemes",
"alphabet"
],
"type": "object"
},
"maxItems": 50,
"type": "array"
},
"pronunciationRulesTruncated": {
"type": "boolean"
},
"similarityBoost": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"speed": {
"anyOf": [
{
"maximum": 10,
"minimum": 0.1,
"type": "number"
},
{
"type": "null"
}
]
},
"stability": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"style": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"vanityId": {
"anyOf": [
{
"maxLength": 63,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"vanityId",
"domain",
"defaultLocale",
"locales",
"defaultVoice",
"stability",
"similarityBoost",
"style",
"speed",
"creationTime",
"lastEditTime",
"pronunciationRules",
"pronunciationRuleCount",
"pronunciationRuleCountIsLowerBound",
"pronunciationRulesTruncated"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Project settings; null when not found. Organization ids and pronunciation-dictionary ids are never returned."
},
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
}
},
"required": [
"status",
"project"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"expectedDevices": {
"description": "Devices each language should have videos for, 1 to 10 names such as computer, tablet or smartphone; defaults to those three",
"items": {
"maxLength": 40,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"projectId": {
"description": "Project id or its stable public vanity id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "get_project_localization_summary",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
},
"summary": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"coverageDerivedFromTruncatedData": {
"type": "boolean"
},
"deviceCoverage": {
"items": {
"additionalProperties": false,
"properties": {
"device": {
"maxLength": 40,
"minLength": 1,
"type": "string"
},
"videos": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"device",
"videos"
],
"type": "object"
},
"maxItems": 10,
"type": "array"
},
"localeCoverage": {
"items": {
"additionalProperties": false,
"properties": {
"configured": {
"type": "boolean"
},
"locale": {
"maxLength": 32,
"minLength": 1,
"type": "string"
},
"speeches": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"videos": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"locale",
"configured",
"videos",
"speeches"
],
"type": "object"
},
"maxItems": 50,
"type": "array"
},
"localeCoverageTotal": {
"maximum": 300,
"minimum": 0,
"type": "integer"
},
"localeCoverageTruncated": {
"type": "boolean"
},
"missingDevices": {
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"missingSpeechLocales": {
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"missingVideoLocales": {
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"project": {
"additionalProperties": false,
"properties": {
"configuredLocales": {
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"configuredLocalesTruncated": {
"type": "boolean"
},
"defaultLocale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"defaultLocale",
"configuredLocales",
"configuredLocalesTruncated"
],
"type": "object"
},
"totals": {
"additionalProperties": false,
"properties": {
"speeches": {
"$ref": "#/properties/summary/anyOf/0/properties/totals/properties/tutorials"
},
"tutorials": {
"additionalProperties": false,
"properties": {
"count": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"isLowerBound": {
"type": "boolean"
}
},
"required": [
"count",
"isLowerBound"
],
"type": "object"
},
"videos": {
"$ref": "#/properties/summary/anyOf/0/properties/totals/properties/tutorials"
}
},
"required": [
"tutorials",
"videos",
"speeches"
],
"type": "object"
}
},
"required": [
"project",
"totals",
"localeCoverage",
"localeCoverageTotal",
"localeCoverageTruncated",
"deviceCoverage",
"missingVideoLocales",
"missingSpeechLocales",
"missingDevices",
"coverageDerivedFromTruncatedData"
],
"type": "object"
},
{
"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"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"speechId": {
"description": "Voiceover line id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"speechId"
],
"type": "object"
},
"name": "get_speech",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"speech": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"duration": {
"anyOf": [
{
"maximum": 86400,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"language": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"text": {
"anyOf": [
{
"maxLength": 4000,
"type": "string"
},
{
"type": "null"
}
]
},
"textTruncated": {
"type": "boolean"
},
"translatedText": {
"anyOf": [
{
"maxLength": 4000,
"type": "string"
},
{
"type": "null"
}
]
},
"translatedTextTruncated": {
"type": "boolean"
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"voice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"language",
"voice",
"duration",
"url",
"creationTime",
"lastEditTime",
"text",
"textTruncated",
"translatedText",
"translatedTextTruncated"
],
"type": "object"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
}
},
"required": [
"status",
"speech"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"tutorialId": {
"description": "Tutorial id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"tutorialId"
],
"type": "object"
},
"name": "get_tutorial",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
},
"tutorial": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"defaultVoice",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
},
"videoCount": {
"maximum": 8,
"minimum": 0,
"type": "integer"
},
"videoCountIsLowerBound": {
"type": "boolean"
},
"videos": {
"items": {
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"device": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"locale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"subtitlesUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"thumbnailUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"locale",
"device",
"format",
"width",
"height",
"url",
"chaptersUrl",
"subtitlesUrl",
"thumbnailUrl"
],
"type": "object"
},
"maxItems": 8,
"type": "array"
}
},
"required": [
"status",
"tutorial",
"videoCount",
"videoCountIsLowerBound",
"videos"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"videoId": {
"description": "Video id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"videoId"
],
"type": "object"
},
"name": "get_video",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
},
"video": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"device": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"fileSize": {
"anyOf": [
{
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"subtitlesUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"theme": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"thumbnailUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"tutorialId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"tutorialId",
"locale",
"device",
"theme",
"format",
"width",
"height",
"fileSize",
"url",
"chaptersUrl",
"subtitlesUrl",
"thumbnailUrl",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"video"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "The nextCursor of the previous page; absent for the first page",
"maxLength": 4096,
"type": "string"
},
"limit": {
"description": "Projects per page, from 1 to 100; defaults to 25",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
}
},
"type": "object"
},
"name": "list_projects",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
],
"description": "Cursor for the next page; null on the last page"
},
"offset": {
"maximum": 1000000,
"minimum": 0,
"type": "integer"
},
"projects": {
"items": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"domain": {
"anyOf": [
{
"maxLength": 253,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"vanityId": {
"anyOf": [
{
"maxLength": 63,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"vanityId",
"domain",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"returned": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"status": {
"enum": [
"found",
"empty"
],
"type": "string"
}
},
"required": [
"status",
"projects",
"offset",
"returned",
"hasMore",
"nextCursor"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "The nextCursor of the previous page with the same filters; absent for the first page",
"maxLength": 4096,
"type": "string"
},
"language": {
"description": "Only lines in this language code, e.g. en, es or de",
"maxLength": 32,
"type": "string"
},
"limit": {
"description": "Voiceover lines per page, from 1 to 100; defaults to 25",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
},
"projectId": {
"description": "Only voiceover lines in this project",
"maxLength": 200,
"type": "string"
}
},
"type": "object"
},
"name": "list_speeches",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"hasMore": {
"type": "boolean"
},
"languageFilter": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
],
"description": "Cursor for the next page; null on the last page"
},
"offset": {
"maximum": 1000000,
"minimum": 0,
"type": "integer"
},
"projectIdFilter": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"returned": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"speeches": {
"description": "Voiceover lines with a text preview of up to 120 characters, not the full text",
"items": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"textPreview": {
"anyOf": [
{
"maxLength": 120,
"type": "string"
},
{
"type": "null"
}
]
},
"textTruncated": {
"type": "boolean"
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"textPreview",
"textTruncated",
"language",
"projectId",
"url",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"status": {
"enum": [
"found",
"empty"
],
"type": "string"
}
},
"required": [
"status",
"projectIdFilter",
"languageFilter",
"speeches",
"offset",
"returned",
"hasMore",
"nextCursor"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "The nextCursor of the previous page with the same filters; absent for the first page",
"maxLength": 4096,
"type": "string"
},
"limit": {
"description": "Tutorials per page, from 1 to 100; defaults to 25",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
},
"projectId": {
"description": "Only tutorials in this project; every project when absent",
"maxLength": 200,
"type": "string"
}
},
"type": "object"
},
"name": "list_tutorials",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
],
"description": "Cursor for the next page; null on the last page"
},
"offset": {
"maximum": 1000000,
"minimum": 0,
"type": "integer"
},
"projectIdFilter": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"returned": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"status": {
"enum": [
"found",
"empty"
],
"type": "string"
},
"tutorials": {
"items": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"defaultVoice",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"status",
"projectIdFilter",
"tutorials",
"offset",
"returned",
"hasMore",
"nextCursor"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "The nextCursor of the previous page with the same filters; absent for the first page",
"maxLength": 4096,
"type": "string"
},
"device": {
"description": "Only videos for this device: computer, tablet or smartphone",
"maxLength": 100,
"type": "string"
},
"limit": {
"description": "Videos per page, from 1 to 100; defaults to 25",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
},
"locale": {
"description": "Only videos in this language code, e.g. en or pt-BR",
"maxLength": 32,
"type": "string"
},
"projectId": {
"description": "Only videos in this project",
"maxLength": 200,
"type": "string"
},
"tutorialId": {
"description": "Only videos of this tutorial",
"maxLength": 200,
"type": "string"
}
},
"type": "object"
},
"name": "list_videos",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"deviceFilter": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"hasMore": {
"type": "boolean"
},
"localeFilter": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
],
"description": "Cursor for the next page; null on the last page"
},
"offset": {
"maximum": 1000000,
"minimum": 0,
"type": "integer"
},
"projectIdFilter": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"returned": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"status": {
"enum": [
"found",
"empty"
],
"type": "string"
},
"tutorialIdFilter": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"videos": {
"items": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"device": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"fileSize": {
"anyOf": [
{
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"tutorialId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"tutorialId",
"projectId",
"url",
"locale",
"device",
"format",
"width",
"height",
"fileSize",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"status",
"projectIdFilter",
"tutorialIdFilter",
"localeFilter",
"deviceFilter",
"videos",
"offset",
"returned",
"hasMore",
"nextCursor"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectId": {
"description": "Project the rule belongs to",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"word": {
"description": "Exact word or phrase whose pronunciation rule should be removed",
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"word"
],
"type": "object"
},
"name": "remove_pronunciation_rule",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectId": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"remainingRuleCount": {
"anyOf": [
{
"maximum": 500,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"remainingRuleCountIsLowerBound": {
"type": "boolean"
},
"status": {
"enum": [
"removed",
"unchanged",
"project-not-found"
],
"type": "string"
},
"word": {
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"status",
"projectId",
"word",
"remainingRuleCount",
"remainingRuleCountIsLowerBound"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"alphabet": {
"description": "Phonetic alphabet: ipa or cmu; defaults to ipa",
"enum": [
"ipa",
"cmu"
],
"type": "string"
},
"phonemes": {
"description": "How to say it, in the chosen phonetic alphabet, up to 500 characters",
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"projectId": {
"description": "Project whose narration to fix",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"word": {
"description": "Exact word or phrase to match, up to 120 characters",
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId",
"word",
"phonemes"
],
"type": "object"
},
"name": "set_pronunciation_rule",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectId": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"rule": {
"additionalProperties": false,
"properties": {
"alphabet": {
"enum": [
"ipa",
"cmu"
],
"type": "string"
},
"phonemes": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"word": {
"maxLength": 120,
"minLength": 1,
"type": "string"
}
},
"required": [
"word",
"phonemes",
"alphabet"
],
"type": "object"
},
"ruleCount": {
"anyOf": [
{
"maximum": 500,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"ruleCountIsLowerBound": {
"type": "boolean"
},
"status": {
"enum": [
"added",
"replaced",
"unchanged",
"project-not-found"
],
"type": "string"
}
},
"required": [
"status",
"projectId",
"rule",
"ruleCount",
"ruleCountIsLowerBound"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"description": "Project id or its stable public vanity id",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "show_project_overview",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"project": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"domain": {
"anyOf": [
{
"maxLength": 253,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"logo": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"id",
"name",
"domain",
"logo"
],
"type": "object"
},
{
"type": "null"
}
]
},
"speechCount": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"speechCountIsLowerBound": {
"type": "boolean"
},
"tutorialCount": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"tutorialCountIsLowerBound": {
"type": "boolean"
},
"tutorials": {
"items": {
"additionalProperties": false,
"properties": {
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"id",
"name",
"defaultVoice",
"lastEditTime"
],
"type": "object"
},
"maxItems": 8,
"type": "array"
},
"videoCount": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"videoCountIsLowerBound": {
"type": "boolean"
}
},
"required": [
"project",
"tutorialCount",
"tutorialCountIsLowerBound",
"videoCount",
"videoCountIsLowerBound",
"speechCount",
"speechCountIsLowerBound",
"tutorials"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"defaultLocale": {
"description": "New main language code, e.g. en or pt-BR",
"maxLength": 16,
"minLength": 2,
"type": "string"
},
"defaultVoice": {
"description": "New default voice id for synthesized narration",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"domain": {
"description": "New product domain, e.g. example.com",
"maxLength": 253,
"minLength": 1,
"type": "string"
},
"locales": {
"description": "Complete list of language codes the project publishes, 1 to 100; it replaces the current list, and languages left out stop being expected",
"items": {
"maxLength": 32,
"minLength": 2,
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
"name": {
"description": "New project name, up to 120 characters",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"projectId": {
"description": "Project id or its stable public vanity id",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"speed": {
"description": "New narration speed multiplier, from 0.1 to 10",
"maximum": 10,
"minimum": 0.1,
"type": "number"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "update_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"project": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultLocale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"domain": {
"anyOf": [
{
"maxLength": 253,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locales": {
"items": {
"maxLength": 32,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"speed": {
"anyOf": [
{
"maximum": 10,
"minimum": 0.1,
"type": "number"
},
{
"type": "null"
}
]
},
"vanityId": {
"anyOf": [
{
"maxLength": 63,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"vanityId",
"domain",
"defaultLocale",
"locales",
"defaultVoice",
"speed",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"updated",
"unchanged",
"not-found"
],
"type": "string"
}
},
"required": [
"status",
"project"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"language": {
"description": "New language code, e.g. en or pt-BR",
"maxLength": 32,
"minLength": 2,
"type": "string"
},
"speechId": {
"description": "Voiceover line to edit",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"text": {
"description": "New words to speak, up to 5000 characters",
"maxLength": 5000,
"minLength": 1,
"type": "string"
},
"translatedText": {
"description": "New translation spoken instead of the source text",
"maxLength": 5000,
"minLength": 1,
"type": "string"
},
"voice": {
"description": "New voice id for this line",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"speechId"
],
"type": "object"
},
"name": "update_speech",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"resynthesized": {
"description": "True when the change re-synthesized the audio and spent synthesis credits",
"type": "boolean"
},
"speech": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"duration": {
"anyOf": [
{
"maximum": 86400,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"textPreview": {
"anyOf": [
{
"maxLength": 5000,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"voice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"language",
"voice",
"url",
"duration",
"textPreview",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"updated",
"unchanged",
"not-found"
],
"type": "string"
}
},
"required": [
"status",
"resynthesized",
"speech"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"defaultVoice": {
"description": "New default voice id for synthesized narration",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"name": {
"description": "New tutorial name, up to 200 characters",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"tutorialId": {
"description": "Tutorial to edit",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"tutorialId"
],
"type": "object"
},
"name": "update_tutorial",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"enum": [
"updated",
"unchanged",
"not-found"
],
"type": "string"
},
"tutorial": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"defaultVoice": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"projectId",
"defaultVoice",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"tutorial"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"$ref": "#/properties/url",
"description": "New public https URL of the chapters track"
},
"device": {
"description": "New device: computer, tablet or smartphone",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"duration": {
"description": "New duration in seconds, up to 86400",
"maximum": 86400,
"minimum": 0,
"type": "number"
},
"fileSize": {
"description": "New file size in bytes",
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
"format": {
"description": "New container or codec, e.g. mp4 or webm",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"height": {
"description": "New height in pixels, 1 to 100000",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "integer"
},
"locale": {
"description": "New language code, e.g. en or pt-BR",
"maxLength": 32,
"minLength": 2,
"type": "string"
},
"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"
},
"url": {
"description": "New public https URL of the video file",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"videoId": {
"description": "Video to correct",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"width": {
"description": "New width in pixels, 1 to 100000",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "integer"
}
},
"required": [
"videoId"
],
"type": "object"
},
"name": "update_video",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"enum": [
"updated",
"unchanged",
"not-found"
],
"type": "string"
},
"video": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"chaptersUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"creationTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"device": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"duration": {
"anyOf": [
{
"maximum": 86400,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"fileSize": {
"anyOf": [
{
"maximum": 1000000000000000,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"format": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"id": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"locale": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"subtitlesUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"thumbnailUrl": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"tutorialId": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"tutorialId",
"url",
"locale",
"device",
"format",
"width",
"height",
"duration",
"fileSize",
"chaptersUrl",
"subtitlesUrl",
"thumbnailUrl",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"video"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:49a5710ebf2f407dcde8b6d19dc79720e9dfe9c9df13062e50017bde7e1436af | sha256sum