160+ finished slide layouts and 41 themes your agent can search, fetch and build a deck from
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <api key>. Issue a key at https://getdeck.co/mypage after signing in.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add text boxes and images on top of one slide of a saved template, up to 50 per call and 50 per slide. Requires a Pro account. Use this instead of update_template to place objects: it never touches slots, other slides or other objects. Each item is {type:"text", text, ...} or {type:"image", asset, ...}; position and size are optional (a text box lands near the middle, an image is centered and fitted). Coordinates are pixels on a 1920x1080 slide and are kept inside it. Colors are theme tokens, not hex. Images come only from list_media ids. Set behind:true to put an object under the layout's own title and text (a background picture behind the default title); it is hidden wherever a layout card or panel has a solid fill. All items are added or none. Returns the slide's objects with their ids and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.
The slide's id from get_template.
From list_templates.
The version from get_template. Given, the call fails with conflict if the template changed since.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add text boxes and images on top of one slide of a saved template, up to 50 per call and 50 per slide. Requires a Pro account. Use this instead of update_template to place objects: it never touches slots, other slides or other objects. Each item is {type:"text", text, ...} or {type:"image", asset, ...}; position and size are optional (a text box lands near the middle, an image is centered and fitted). Coordinates are pixels on a 1920x1080 slide and are kept inside it. Colors are theme tokens, not hex. Images come only from list_media ids. Set behind:true to put an object under the layout's own title and text (a background picture behind the default title); it is hidden wherever a layout card or panel has a solid fill. All items are added or none. Returns the slide's objects with their ids and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.
| Argument | Type | Description |
|---|---|---|
| objects* | array | |
| slide_id* | string | The slide's id from get_template. |
| template_id* | string | From list_templates. |
| expected_version | integer | The version from get_template. Given, the call fails with conflict if the template changed since. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id",
"slide_id",
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"h": {
"type": "number",
"description": "Height in pixels. For an image, leave it out."
},
"w": {
"type": "number",
"description": "Width in pixels. For an image, send w alone and the height follows the picture."
},
"x": {
"type": "number",
"description": "Left edge in pixels on the 1920x1080 slide."
},
"y": {
"type": "number",
"description": "Top edge in pixels."
},
"z": {
"type": "number",
"description": "Stacking order, larger is in front. Default: in front of everything in its layer. Each layer (see behind) is ordered on its own."
},
"id": {
"type": "string",
"description": "Optional. Leave out and the server makes one."
},
"alt": {
"type": "string",
"description": "Image only: what the picture shows, up to 300 characters."
},
"text": {
"type": "string",
"description": "Text box only. Up to 1000 characters."
},
"type": {
"enum": [
"text",
"image"
],
"type": "string"
},
"asset": {
"type": "string",
"description": "Image only: an id from list_media."
},
"style": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Font size, 8 to 400."
},
"align": {
"type": "string",
"description": "\"left\", \"center\" or \"right\"."
},
"color": {
"type": "string",
"description": "A theme token such as \"ink\", \"ink-soft\", \"accent\", \"bg\", \"danger\". Not a color value."
},
"weight": {
"type": "number",
"description": "400 or 700."
}
},
"description": "Text box look. Only the fields you send change.",
"additionalProperties": false
},
"behind": {
"type": "boolean",
"description": "true: draw this object behind the layout's own elements (title, body, shapes), on top of the slide background. Default false: in front of the layout."
},
"rotate": {
"type": "number",
"description": "Degrees, -360 to 360."
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"slide_id": {
"type": "string",
"description": "The slide's id from get_template."
},
"template_id": {
"type": "string",
"description": "From list_templates."
},
"expected_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The version from get_template. Given, the call fails with conflict if the template changed since."
}
}
}Turn a deck into a downloadable .pptx file. Requests like "make it a PowerPoint", "PPT로 뽑아줘", or "export this deck" mean this tool. Takes the layout ids and the text for each slot, and returns a signed download link. Coordinates come from our measurements, so the file matches what the gallery shows, but the boxes are fixed, so text longer than slots[].max_chars will be clipped.
| Argument | Type | Description |
|---|---|---|
| theme | string | Theme id. Only measured themes work; omit to use the default. A My Theme id ("custom:...") from list_themes also works: its base theme's layout with the user's colors. |
| slides | array | Up to 25 slides, in order. Required unless template_id is given. |
| embed_fonts | boolean | Put the fonts inside the file so it looks the same where they are not installed. On by default; pass false to leave them out. The result lists fonts that could not be embedded. |
| template_id | string | A saved template id from list_templates. Exports that template with its own theme and slides; theme and slides are then ignored. Errors for it: not_found, template_lookup_failed. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"theme": {
"type": "string",
"description": "Theme id. Only measured themes work; omit to use the default. A My Theme id (\"custom:...\") from list_themes also works: its base theme's layout with the user's colors."
},
"slides": {
"type": "array",
"items": {
"type": "object",
"required": [
"layout"
],
"properties": {
"slots": {
"type": "object",
"description": "Slot id to text. Ids and their max_chars come from get_layout.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"layout": {
"type": "string"
}
}
},
"maxItems": 25,
"minItems": 1,
"description": "Up to 25 slides, in order. Required unless template_id is given."
},
"embed_fonts": {
"type": "boolean",
"description": "Put the fonts inside the file so it looks the same where they are not installed. On by default; pass false to leave them out. The result lists fonts that could not be embedded."
},
"template_id": {
"type": "string",
"description": "A saved template id from list_templates. Exports that template with its own theme and slides; theme and slides are then ignored. Errors for it: not_found, template_lookup_failed."
}
}
}Return one layout as a ready-to-use, self-contained document: HTML, theme CSS, and its slot definitions. Call this once the user knows which layout they want, or with ids returned by suggest_deck.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| lang | string | Language for slot hints and usage notes. Pass the language the user is writing in. |
| theme_id | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"lang": {
"enum": [
"ko",
"en"
],
"type": "string",
"default": "ko",
"description": "Language for slot hints and usage notes. Pass the language the user is writing in."
},
"theme_id": {
"type": "string"
}
}
}Call this when joining several fetched layouts into one deck file. Requests like "merge these into one file", "bundle it as a deck", or "make it one HTML" mean this tool. Returns the base CSS, assembly rules, spacing tokens, and a viewport snippet for standalone viewing.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Return one saved template: name, theme_id and slides as [{id, layout, slots, objects, overrides?}], plus each slide's slot definitions with max_chars. Use it to fill the same structure with new text, then save with update_template or export with export_pptx(template_id), both of which need Pro. To place or change only the objects of one slide, use add_objects, update_objects and remove_objects. Needs an API key; reading works on any plan.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Return one theme in full: its complete CSS and design tokens.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Search or filter the layout catalog to find a specific layout. Returns metadata only, no HTML. Also the tool for "what is new", "any new layouts?", "what got added since last month" - pass `since` and it returns only what landed after that date. If the user asked for a whole deck rather than one slide, call suggest_deck first instead of this.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | |
| since | string | ISO date (YYYY-MM-DD). Only layouts added after it. Use for "what is new" questions; if the user gave no date, a month back is a sensible default. |
| category | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 150,
"exclusiveMinimum": 0
},
"query": {
"type": "string"
},
"since": {
"type": "string",
"description": "ISO date (YYYY-MM-DD). Only layouts added after it. Use for \"what is new\" questions; if the user gave no date, a month back is a sensible default."
},
"category": {
"type": "string"
}
}
}List the images the user uploaded to their media library on the web: id, name, width, height, aspect_ratio (width/height), bytes, mime and created_at, newest first, plus used_bytes. Pass an id to add_objects to place the picture on a slide. You cannot upload an image or fetch one from a web address; if the picture you need is missing, ask the user to upload it to their media library on the web. Needs an API key; works on any plan.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the templates the user saved in My Templates: id, name, slide_count, theme_id, source, updated_at and version. Use it to find a template the user refers to, and to read slide_count before appending with update_template. Needs an API key; works on any plan.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Search or filter the theme catalog. Returns metadata and key colors only, not the full CSS. With an API key, the user's own saved themes (My Themes, id "custom:...") come last with custom: true; their ids work anywhere a theme id does.
| Argument | Type | Description |
|---|---|---|
| mood | string | |
| scheme | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"mood": {
"type": "string"
},
"scheme": {
"enum": [
"light",
"dark"
],
"type": "string"
}
}
}Remove objects from a slide by id. Requires a Pro account. The slide, its slots and the other objects stay. Only objects can be removed here; slides and templates are deleted on the web. If any id is not on the slide, nothing is removed. Returns the objects that remain and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.
| Argument | Type | Description |
|---|---|---|
| ids* | array | |
| slide_id* | string | The slide's id from get_template. |
| template_id* | string | From list_templates. |
| expected_version | integer | The version from get_template. Given, the call fails with conflict if the template changed since. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id",
"slide_id",
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1
},
"slide_id": {
"type": "string",
"description": "The slide's id from get_template."
},
"template_id": {
"type": "string",
"description": "From list_templates."
},
"expected_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The version from get_template. Given, the call fails with conflict if the template changed since."
}
}
}Save a deck as a named template in the user's My Templates so it can be reused later. Requires a Pro account; without one the call fails and nothing is saved. Use it after you have built a deck the user wants to keep, for example from suggest_deck. Input: name, optional theme_id (a catalog theme id or custom:<uuid>), and slides as [{layout, slots}], the same shape export_pptx takes. A template holds 1 to 25 slides. Returns template_id, url (the template's page), slide_count, version (use it as expected_version in update_template), overflow[] (slots whose text is longer than max_chars) and unknown_layouts[]. Deleting is not available here, only on the web. Errors: pro_required, slide_limit, template_limit (the account already has the most templates it can hold), unknown_theme, invalid_input.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| slides* | array | |
| theme_id | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"slides"
],
"properties": {
"name": {
"type": "string"
},
"slides": {
"type": "array",
"items": {
"type": "object",
"required": [
"layout"
],
"properties": {
"id": {
"type": "string",
"description": "The slide's id from get_template. Keep it when you resend a slide; leave it out for a new slide and the server assigns one."
},
"slots": {
"type": "object",
"description": "Slot id to text. Ids and their max_chars come from get_layout.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"layout": {
"type": "string"
},
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"x",
"y",
"w",
"h",
"z"
],
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"z": {
"type": "number",
"description": "Stacking order; larger is in front. Each layer (see behind) is ordered on its own."
},
"id": {
"type": "string"
},
"alt": {
"type": "string",
"description": "For type \"image\": a short description of the picture for screen readers (up to 300 characters)."
},
"text": {
"type": "string",
"description": "For type \"text\"."
},
"type": {
"type": "string",
"description": "\"image\" or \"text\"."
},
"asset": {
"type": "string",
"description": "For type \"image\": the id of an image in the user's media library."
},
"style": {
"type": "object",
"properties": {
"size": {
"type": "number"
},
"align": {
"type": "string"
},
"color": {
"type": "string",
"description": "A theme token name such as \"ink\" or \"accent\", not a color value."
},
"weight": {
"type": "number"
}
},
"additionalProperties": {}
},
"behind": {
"type": "boolean",
"description": "true: drawn behind the layout's own elements, on top of the slide background. Absent or false: in front of the layout."
},
"rotate": {
"type": "number"
}
},
"additionalProperties": {}
},
"description": "Images and text boxes laid over the slide, in 1920x1080 pixels. Resend the objects you got from get_template or they are removed. At most 50 per slide."
},
"overrides": {
"type": "object",
"description": "Changes to the layout's own elements, by element key: { \"top-accent-bar\": { \"deleted\": true }, \"title\": { \"x\": 40, \"y\": 62 } }. Only the values that changed are given; x, y, w, h are pixels on the 1920x1080 slide and the rest stays as the layout draws it. Resend the overrides you got from get_template or they are removed. Requires Pro.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"deleted": {
"type": "boolean",
"description": "true: the element is not drawn on this slide (not in the export either)."
}
},
"additionalProperties": {}
}
}
}
},
"minItems": 1
},
"theme_id": {
"type": "string"
}
}
}Compose a deck and return a preview link the user can open in the browser right away. The user sees what the finished deck looks like without a single file being generated. Use this for requests like "make me a pitch deck", "I need a sales deck", "10 slides for an investor update", "put together a product overview", or "show me a deck outline" - anything where the user has a topic but has not picked layouts yet. ALSO use it when the user already has layouts in hand - "이 레이아웃들 모아서 프리뷰 만들어줘", "combine these layouts into a preview", "추천 프리뷰 만들어줘", "show these together as a deck" - pass them as layout_ids and it returns ONE deck preview link for the whole set. Never answer that kind of request with a list of individual layout links: one deck preview is the deliverable. Returns one theme + a slide order + the preview link, plus a `clarify` question to put to the user so the composition and theme are their call, not a guess. Always pass the preview link through to the user verbatim, ask clarify.question with its options, and wait for the answer - then call this tool again with deck_id / theme_id as clarify.answer_with says. Do not start generating files while a clarify question is unanswered. Once it is settled, fetch each layout id with get_layout, then call get_starter_kit to join them into one deck.
| Argument | Type | Description |
|---|---|---|
| tone | string | Desired mood. e.g. "minimal", "bold", "warm". Omit if the user did not mention one. |
| deck_id | string | The composition the user picked from a previous call's clarify.options. Skips topic matching. |
| purpose* | string | The user's topic or goal, in their own words. e.g. "startup pitch deck", "quarterly business review" |
| theme_id | string | The theme the user picked from a previous call's clarify.options. Pass deck_id along with it. |
Change objects already on a slide, by id: position, size, rotation, text, text style, the image's alt text or picture, stacking order, and behind (true sends it behind the layout's own elements, false brings it back in front). Requires a Pro account. Send only the fields to change; the style is merged. An image keeps its proportions (send w alone). Up to 50 changes per call, all applied or none. Read ids and the current version with get_template. Returns the slide's objects and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.
| Argument | Type | Description |
|---|---|---|
| changes* | array | |
| slide_id* | string | The slide's id from get_template. |
| template_id* | string | From list_templates. |
| expected_version | integer | The version from get_template. Given, the call fails with conflict if the template changed since. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id",
"slide_id",
"changes"
],
"properties": {
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"h": {
"type": "number",
"description": "Height in pixels. For an image, leave it out."
},
"w": {
"type": "number",
"description": "Width in pixels. For an image, send w alone and the height follows the picture."
},
"x": {
"type": "number",
"description": "Left edge in pixels on the 1920x1080 slide."
},
"y": {
"type": "number",
"description": "Top edge in pixels."
},
"z": {
"type": "number",
"description": "Stacking order. Or use order."
},
"id": {
"type": "string",
"description": "The object id from get_template."
},
"alt": {
"type": "string"
},
"text": {
"type": "string"
},
"asset": {
"type": "string",
"description": "Image only: another id from list_media to swap the picture."
},
"order": {
"enum": [
"front",
"forward",
"backward",
"back"
],
"type": "string",
"description": "Move in the stacking order, within the object's layer (behind the layout, or in front of it). Applied after behind."
},
"style": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Font size, 8 to 400."
},
"align": {
"type": "string",
"description": "\"left\", \"center\" or \"right\"."
},
"color": {
"type": "string",
"description": "A theme token such as \"ink\", \"ink-soft\", \"accent\", \"bg\", \"danger\". Not a color value."
},
"weight": {
"type": "number",
"description": "400 or 700."
}
},
"description": "Text box look. Only the fields you send change.",
"additionalProperties": false
},
"behind": {
"type": "boolean",
"description": "true: send the object behind the layout's own elements; false: bring it back in front of them. Place and size stay; the object arrives at the front of its new layer unless z is given."
},
"rotate": {
"type": "number",
"description": "Degrees, -360 to 360."
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"slide_id": {
"type": "string",
"description": "The slide's id from get_template."
},
"template_id": {
"type": "string",
"description": "From list_templates."
},
"expected_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The version from get_template. Given, the call fails with conflict if the template changed since."
}
}
}Change a template the user already saved. Requires a Pro account; without one the call fails and nothing is changed. Pass the template id and any of: name, theme_id, slides (replaces all slides), or append_slides (adds slides to the end). A template holds at most 25 slides. If the result would be more than 25, nothing is changed and the response is a slide_limit error that includes how many slides still fit. Call list_templates first to read slide_count when you plan to append. The response has the same fields as save_template. Deleting is not available here, only on the web. Errors: pro_required, not_found, slide_limit, conflict (the template changed since expected_version, or kept changing during an append; nothing was saved), unknown_theme, invalid_input.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| name | string | |
| slides | array | |
| theme_id | string | |
| append_slides | array | |
| expected_version | integer | The version from get_template or a previous save. Given, the call fails with conflict if the template changed since. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slides": {
"type": "array",
"items": {
"type": "object",
"required": [
"layout"
],
"properties": {
"id": {
"type": "string",
"description": "The slide's id from get_template. Keep it when you resend a slide; leave it out for a new slide and the server assigns one."
},
"slots": {
"type": "object",
"description": "Slot id to text. Ids and their max_chars come from get_layout.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"layout": {
"type": "string"
},
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"x",
"y",
"w",
"h",
"z"
],
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"z": {
"type": "number",
"description": "Stacking order; larger is in front. Each layer (see behind) is ordered on its own."
},
"id": {
"type": "string"
},
"alt": {
"type": "string",
"description": "For type \"image\": a short description of the picture for screen readers (up to 300 characters)."
},
"text": {
"type": "string",
"description": "For type \"text\"."
},
"type": {
"type": "string",
"description": "\"image\" or \"text\"."
},
"asset": {
"type": "string",
"description": "For type \"image\": the id of an image in the user's media library."
},
"style": {
"type": "object",
"properties": {
"size": {
"type": "number"
},
"align": {
"type": "string"
},
"color": {
"type": "string",
"description": "A theme token name such as \"ink\" or \"accent\", not a color value."
},
"weight": {
"type": "number"
}
},
"additionalProperties": {}
},
"behind": {
"type": "boolean",
"description": "true: drawn behind the layout's own elements, on top of the slide background. Absent or false: in front of the layout."
},
"rotate": {
"type": "number"
}
},
"additionalProperties": {}
},
"description": "Images and text boxes laid over the slide, in 1920x1080 pixels. Resend the objects you got from get_template or they are removed. At most 50 per slide."
},
"overrides": {
"type": "object",
"description": "Changes to the layout's own elements, by element key: { \"top-accent-bar\": { \"deleted\": true }, \"title\": { \"x\": 40, \"y\": 62 } }. Only the values that changed are given; x, y, w, h are pixels on the 1920x1080 slide and the rest stays as the layout draws it. Resend the overrides you got from get_template or they are removed. Requires Pro.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"deleted": {
"type": "boolean",
"description": "true: the element is not drawn on this slide (not in the export either)."
}
},
"additionalProperties": {}
}
}
}
},
"minItems": 1
},
"theme_id": {
"type": "string"
},
"append_slides": {
"type": "array",
"items": {
"type": "object",
"required": [
"layout"
],
"properties": {
"id": {
"type": "string",
"description": "The slide's id from get_template. Keep it when you resend a slide; leave it out for a new slide and the server assigns one."
},
"slots": {
"type": "object",
"description": "Slot id to text. Ids and their max_chars come from get_layout.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"layout": {
"type": "string"
},
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"x",
"y",
"w",
"h",
"z"
],
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"z": {
"type": "number",
"description": "Stacking order; larger is in front. Each layer (see behind) is ordered on its own."
},
"id": {
"type": "string"
},
"alt": {
"type": "string",
"description": "For type \"image\": a short description of the picture for screen readers (up to 300 characters)."
},
"text": {
"type": "string",
"description": "For type \"text\"."
},
"type": {
"type": "string",
"description": "\"image\" or \"text\"."
},
"asset": {
"type": "string",
"description": "For type \"image\": the id of an image in the user's media library."
},
"style": {
"type": "object",
"properties": {
"size": {
"type": "number"
},
"align": {
"type": "string"
},
"color": {
"type": "string",
"description": "A theme token name such as \"ink\" or \"accent\", not a color value."
},
"weight": {
"type": "number"
}
},
"additionalProperties": {}
},
"behind": {
"type": "boolean",
"description": "true: drawn behind the layout's own elements, on top of the slide background. Absent or false: in front of the layout."
},
"rotate": {
"type": "number"
}
},
"additionalProperties": {}
},
"description": "Images and text boxes laid over the slide, in 1920x1080 pixels. Resend the objects you got from get_template or they are removed. At most 50 per slide."
},
"overrides": {
"type": "object",
"description": "Changes to the layout's own elements, by element key: { \"top-accent-bar\": { \"deleted\": true }, \"title\": { \"x\": 40, \"y\": 62 } }. Only the values that changed are given; x, y, w, h are pixels on the 1920x1080 slide and the rest stays as the layout draws it. Resend the overrides you got from get_template or they are removed. Requires Pro.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"h": {
"type": "number"
},
"w": {
"type": "number"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"deleted": {
"type": "boolean",
"description": "true: the element is not drawn on this slide (not in the export either)."
}
},
"additionalProperties": {}
}
}
}
},
"minItems": 1
},
"expected_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The version from get_template or a previous save. Given, the call fails with conflict if the template changed since."
}
}
}| layout_ids | array | Layout ids the user or you already picked, in slide order. Skips topic matching and slide_count: the preview link is built from exactly these layouts. |
| slide_count | integer | How many slides. If the user did not say, use the default of 10 rather than asking. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"purpose"
],
"properties": {
"tone": {
"type": "string",
"description": "Desired mood. e.g. \"minimal\", \"bold\", \"warm\". Omit if the user did not mention one."
},
"deck_id": {
"type": "string",
"description": "The composition the user picked from a previous call's clarify.options. Skips topic matching."
},
"purpose": {
"type": "string",
"description": "The user's topic or goal, in their own words. e.g. \"startup pitch deck\", \"quarterly business review\""
},
"theme_id": {
"type": "string",
"description": "The theme the user picked from a previous call's clarify.options. Pass deck_id along with it."
},
"layout_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Layout ids the user or you already picked, in slide order. Skips topic matching and slide_count: the preview link is built from exactly these layouts."
},
"slide_count": {
"type": "integer",
"default": 10,
"maximum": 30,
"description": "How many slides. If the user did not say, use the default of 10 rather than asking.",
"exclusiveMinimum": 0
}
}
}