---
title: "PREFERRED step 2: render a deck from slots you wrote (free, zero MagicSlides AI)"
method: POST
path: "/gpt/create-presentation-from-slots"
tags: ["Studio"]
---

# PREFERRED step 2: render a deck from slots you wrote (free, zero MagicSlides AI)

`POST /gpt/create-presentation-from-slots`

## Request

- Base URL: `https://www.magicslides.app/api`
- URL: `https://www.magicslides.app/api/gpt/create-presentation-from-slots`
- Auth: API key in header `x-api-key`

Render a finished deck from slot content YOU wrote (from getStudioTemplateSchema). MagicSlides writes none of the copy, so this is free. Returns preview image, live slideshow URL, edit URL and PDF.

## Request body

- object
  - `templateKey` string, required: The same slotsReady templateKey you got the schema for.
  - `title` string: Deck title.
  - `language` string
  - `includeImages` 'stock' | 'none' | 'ai': How to fill *_QUERY image slots you did not give a *_URL for.
  - `slides` object[], required
    - `layoutKey` string: layoutKey from the schema.
    - `slots` object, required: Every slot key from the schema → your copy.

## Response `200`

The finished deck.

- object
  - `status` string
  - `previewImageUrl` string, uri: PNG of the first slide.
  - `previewUrl` string, uri: Live slideshow.
  - `shareUrl` string, uri
  - `editUrl` string, uri: Open in MagicSlides Studio.
  - `pdfUrl` string, uri
  - `slideCount` integer
  - `templateKey` string
  - `conversationId` string

## Other responses

- `400`: Invalid or missing parameters. Note: legacy endpoints answer missing parameters with 404, not 400.
- `500`: Generation failed. Safe to retry once.

---

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