> ## Documentation Index
> Fetch the complete documentation index at: https://docs.presenton.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create and use a Smart Design

> List Smart Designs, create one from a reference PPTX with an access token, and use it to generate a Cloud presentation.

Smart generation applies the visual language of an existing presentation to a
new deck. Use an existing Smart Design or create one from a reference PPTX.

This workflow crosses two API versions:

1. List available Smart Designs with Cloud API v3.
2. Check fonts, upload the PPTX and fonts, generate previews, and create a
   Smart Design with API v2.
3. Pass the resulting design ID to Cloud API v3 presentation generation.

## Before you begin

Use a user access token that is authorized to create designs. Pass it as a
Bearer token on every request in this workflow:

```http theme={null}
Authorization: Bearer YOUR_ACCESS_TOKEN
```

<Note>
  All endpoints in this workflow require a user access token. Use the same
  access token for the v2 design-creation and Cloud v3 requests.
</Note>

## 1. List Smart Designs with v3

List the Smart Designs available to the authenticated account:

```bash theme={null}
curl --request GET \
  --url "https://api.presenton.ai/api/v3/smart-design/all?page=1&page_size=10" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

The response is paginated. Use the `id` of a design as `smart_design` when
generating a presentation.

```json theme={null}
{
  "total_pages": 1,
  "page": 1,
  "page_size": 10,
  "results": [
    {
      "id": "7e49d7f0-3667-4f48-936a-60b0ca97810f",
      "name": "Acme Brand",
      "thumbnail_url": "https://example.com/designs/acme-brand.png",
      "created_at": "2026-08-07T08:30:00Z",
      "updated_at": "2026-08-07T08:30:00Z"
    }
  ]
}
```

See [List Smart Designs](../api-reference/v3-smart-design/list-smart-designs).
If the design you need is already listed, skip to
[Generate with the Smart Design](#3-generate-with-the-smart-design-using-v3).

## 2. Create a Smart Design with v2

Design creation is asynchronous. Check the reference deck's fonts, upload any
required replacements and generate previews, then start design creation and
poll its status.

### Check fonts in the reference PPTX

Upload the PPTX to identify fonts Presenton can resolve and fonts for which you
must provide files:

```bash theme={null}
curl --request POST \
  --url https://api.presenton.ai/api/v2/ppt/fonts/check \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --form "pptx_file=@./acme-brand.pptx"
```

```json theme={null}
{
  "available_fonts": [
    {
      "name": "Inter Regular",
      "url": "https://fonts.googleapis.com/css2?family=Inter",
      "original_name": "Inter",
      "variant": "regular"
    }
  ],
  "unavailable_fonts": [
    {
      "name": "Acme Sans Regular",
      "url": null,
      "original_name": "Acme Sans",
      "variant": "regular"
    }
  ]
}
```

See [Check fonts in a PPTX](../api-reference/v2-fonts/check-fonts-in-a-pptx).

### Upload fonts and generate previews

Upload the same PPTX. For each font you want to replace, add one `font_files`
field and one matching `original_font_names` field. Presenton pairs repeated
fields by order.

```bash theme={null}
curl --request POST \
  --url https://api.presenton.ai/api/v2/ppt/fonts/upload-and-preview \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --form "pptx_file=@./acme-brand.pptx" \
  --form "font_files=@./AcmeSans-Regular.ttf" \
  --form "original_font_names=Acme Sans"
```

If no font files are required, omit `font_files` and `original_font_names`.

```json theme={null}
{
  "slide_image_urls": [
    "https://example.com/previews/acme-brand/slide-1.png",
    "https://example.com/previews/acme-brand/slide-2.png"
  ],
  "pptx_url": "https://example.com/uploads/acme-brand.pptx",
  "modified_pptx_url": "https://example.com/uploads/acme-brand.pptx",
  "fonts": {
    "Inter": "https://fonts.googleapis.com/css2?family=Inter",
    "Acme Sans Regular": "https://example.com/fonts/AcmeSans-Regular.ttf"
  }
}
```

Review every URL in `slide_image_urls` before creating the design. Then retain
`pptx_url`, `slide_image_urls`, and `fonts` for the next request.

See [Upload fonts and generate slide previews](../api-reference/v2-fonts/upload-fonts-and-generate-slide-previews).

### Start asynchronous design creation

Pass `pptx_url`, `slide_image_urls`, and `fonts` from the preview response
without modifying them:

```bash theme={null}
curl --request POST \
  --url https://api.presenton.ai/api/v2/ppt/design/create/async \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Acme Brand",
    "pptx_url": "https://example.com/uploads/acme-brand.pptx",
    "slide_image_urls": [
      "https://example.com/previews/acme-brand/slide-1.png",
      "https://example.com/previews/acme-brand/slide-2.png"
    ],
    "fonts": {
      "Inter": "https://fonts.googleapis.com/css2?family=Inter",
      "Acme Sans Regular": "https://example.com/fonts/AcmeSans-Regular.ttf"
    }
  }'
```

The response contains the task ID used to monitor design creation:

```json theme={null}
{
  "id": "task-9a827c13f4",
  "status": "pending",
  "message": "Queued for extraction",
  "created_at": "2026-08-07T08:35:00Z",
  "updated_at": "2026-08-07T08:35:00Z",
  "data": null
}
```

See [Create a Smart Design asynchronously](../api-reference/v2-design/create-a-smart-design-asynchronously).

### Check design creation status

Poll the status endpoint until `status` is `completed` or `error`:

```bash theme={null}
curl --request GET \
  --url https://api.presenton.ai/api/v2/ppt/design/status/task-9a827c13f4 \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

While the task runs, `status` is `pending` or `processing`. A completed
response contains the new Smart Design ID in `data.design_id`:

```json theme={null}
{
  "id": "task-9a827c13f4",
  "status": "completed",
  "message": "Design created",
  "created_at": "2026-08-07T08:35:00Z",
  "updated_at": "2026-08-07T08:43:00Z",
  "data": {
    "id": "7e49d7f0-3667-4f48-936a-60b0ca97810f",
    "design_id": "7e49d7f0-3667-4f48-936a-60b0ca97810f",
    "slides": 12
  },
  "error": null
}
```

If `status` is `error`, inspect `message` and `error` before retrying. See
[Get Smart Design creation status](../api-reference/v2-design/get-smart-design-creation-status).

## 3. Generate with the Smart Design using v3

Set `smart_design` to an ID returned by the list endpoint or to
`data.design_id` from the completed design-creation task:

```bash theme={null}
curl --request POST \
  --url https://api.presenton.ai/api/v3/presentation/generate \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "content": "Create an eight-slide Acme quarterly business review.",
    "n_slides": 8,
    "language": "English",
    "smart_design": "7e49d7f0-3667-4f48-936a-60b0ca97810f",
    "export_as": "pptx"
  }'
```

```json theme={null}
{
  "presentation_id": "d3000f96-096c-4768-b67b-e99aed029b57",
  "path": "https://example.com/presentations/Acme-quarterly-business-review.pptx",
  "edit_path": "https://presenton.ai/presentation?id=d3000f96-096c-4768-b67b-e99aed029b57",
  "credits_consumed": 8
}
```

See [Generate a presentation synchronously](../api-reference/v3-presentation/generate-a-presentation-synchronously).
For background generation, send the same `smart_design` value to
`POST /api/v3/presentation/generate/async` and follow the
[asynchronous generation guide](../cloud/guides/async-generation).
