---
title: "Add a slide with a heading, some text and a background colour or picture"
method: POST
path: "/v1/slideshows/{id}/slides/design"
tags: ["Slideshows"]
---

# Add a slide with a heading, some text and a background colour or picture

`POST /v1/slideshows/{id}/slides/design`

## Request

- Base URL: `https://infoslides.app`
- URL: `https://infoslides.app/v1/slideshows/{id}/slides/design`
- Auth: none declared

The first choice for a slide that is only words: adds a designed text slide from plain parameters, rendered as an image at the slideshow's size with no AI: `{"heading": "Lunch moved to 1pm", "text": "Same menu, new time.", "backgroundColor": "#0F172A"}`. Only `heading` is required; `text` and `cta` are optional. How much each carries depends on the layout and the screen (a `heading` up to 60 characters, `text` up to 200 with `heading-text`, a `cta` up to 55 with `heading-text-cta`, and a `heading` of 50 to 80 characters beside a picture, depending on the screen; the full table is in agents.md), and text in capitals fits about 30% fewer. The background is one of `backgroundColor` (hex), `mediaAssetId` (an image from `POST /v1/media`) or `mediaUrl` (an image URL, downloaded and stored); with none it is the workspace accent colour (a dark navy when it has none), with text colour chosen to stay readable. A separate picture beside the text is `imageMediaAssetId` or `imageUrl`. `branding: true` adds the workspace logo and accent colour (nothing is added for a workspace without a logo). Once the workspace has a confirmed brand guide (`GET /v1/brand`), branding is on by default and the slide takes the guide's colours, font, logo and header band; send `branding: false` to opt out. A `backgroundColor` you name still wins. `layout` is `heading`, `heading-text`, `heading-text-cta`, `heading-image-right` or `heading-image-left` (the picture layouts need a picture, and take `text` and `cta` as optional), chosen from the fields when omitted. `position` (zero-based, appended when omitted) and `durationSeconds` (1 to 99, sized to the text when omitted) are optional. Returns the slide `id`, the `designId` the web app can edit, a `previewUrl` image link and the `layout` used. Text longer than the layout fits, a duration outside 1 to 99, a layout that does not fit the fields, or two backgrounds answer `ValidationFailed` naming the field (and, for text, the number that fits); nothing is clipped. The text is shown exactly as sent and is not checked for accuracy, and the slide is already in the slideshow when the answer arrives (`undo` removes it). When the layouts do not offer enough flexibility, add a finished image with `POST /v1/slideshows/{id}/slides` instead. Open on every plan.

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- V1DesignedSlideRequest
  - `heading` string, nullable
  - `text` string, nullable
  - `cta` string, nullable
  - `backgroundColor` string, nullable
  - `mediaAssetId` string, uuid, nullable
  - `mediaUrl` string, nullable
  - `imageMediaAssetId` string, uuid, nullable
  - `imageUrl` string, nullable
  - `branding` boolean, nullable
  - `layout` string, nullable
  - `position` integer, nullable
  - `durationSeconds` number, double, nullable

## Response `200`

OK

---

[API](https://skmtc.dev/infoslides/apis/infoslides-agent-api.md) · [All operations](https://skmtc.dev/infoslides/apis/infoslides-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/infoslides/apis/infoslides-agent-api/revisions/d15bb7f8ee9d?raw)
