Import a deck
Importing is how an artifact made anywhere becomes a Renza deck. You can bring in a single HTML file, a multi-file bundle, or paste markup directly. Renza hosts it as-is — your exact design is never flattened into a template.
Ways to import
| Source | What it is | Limit |
|---|---|---|
| Upload a file | A single .html file | 8 MB |
| Paste markup | Raw HTML pasted into the importer | 8 MB |
Folder or .zip bundle | index.html plus local assets (images, video, CSS) | 100 MB total |
For a bundle, Renza auto-detects the entry file (it looks for index.html). Relative asset
references resolve through an isolated capability gate when the deck is served.
What happens on import
- Renza reads your HTML against the slide contract to find slide boundaries.
- The content is stored and a deck plus its first artifact are created.
- The deck opens in the viewer with present mode, thumbnails, and a shareable link ready.
If a deck ships its own chrome — nav buttons, a progress bar, keyboard handling — Renza detects
that and adapts rather than fighting it. If a deck is clean (each slide marked
data-renza-slide, no embedded navigation), Renza supplies present mode and navigation itself.
The slide contract
To get reliable slide parsing, mark each slide as a section with the data-renza-slide attribute:
<section data-renza-slide>
<h2>Net revenue retention</h2>
<!-- slide content -->
</section>
<section data-renza-slide>
<h2>What we shipped this quarter</h2>
<!-- slide content -->
</section>
A conforming deck delegates all chrome to Renza — you provide the slides, Renza provides present mode, keyboard navigation, and the comment layer.
Two CLI helpers keep you inside the contract: renza guide prints the full authoring contract
(pipe it into a prompt to teach your agent), and renza check deck.html validates a deck against
it without publishing.
Missing local assets
If you upload a single file whose markup references local images or video that weren't included, the import wizard lists the missing paths and lets you drop the files (or the folder) in. It matches by filename. You can also import anyway — unreferenced assets simply 404 in the viewer until provided.
Import programmatically
The same flow is available over the API, CLI, and SDK. Three steps: create the import, check it, then work with the deck it made.
1. Import a file
POST /v1/imports takes your HTML (a file over the CLI, pasted markup
or a base64 bundle over the API) and creates a deck plus its first artifact:
renza import deck.html --title "Q3 Board Deck"curl https://api.renza.io/v1/imports \
-H "Authorization: Bearer $RENZA_API_KEY" \
-X POST \
-H "Content-Type: application/json" \
-d '{
"source": "paste",
"html": "<!doctype html><section data-renza-slide>Slide 1</section>…",
"title": "Q3 Board Deck"
}'import { createRenzaClient } from "renza-sdk";
const renza = createRenzaClient({ apiKey: process.env.RENZA_API_KEY! });
const imported = await renza.imports.create({
source: "paste",
html: "<!doctype html><section data-renza-slide>Slide 1</section>…",
title: "Q3 Board Deck",
});(renza publish deck.html is the same call with more porcelain — it scans the folder, writes the
assigned id back into the file, and opens the link.)
2. Check the import
The import record tells you what happened — status, the deck and artifact it created, and any parse problems:
renza imports get imp_5d2a…curl https://api.renza.io/v1/imports/imp_5d2a… \
-H "Authorization: Bearer $RENZA_API_KEY"import { createRenzaClient } from "renza-sdk";
const renza = createRenzaClient({ apiKey: process.env.RENZA_API_KEY! });
const imported = await renza.imports.get("imp_5d2a…");3. The deck
The import's deck field is the durable document — fetch it to get the title, status, share mode,
and current artifact:
renza decks get deck_2a9f8c1bcurl https://api.renza.io/v1/decks/deck_2a9f8c1b \
-H "Authorization: Bearer $RENZA_API_KEY"import { createRenzaClient } from "renza-sdk";
const renza = createRenzaClient({ apiKey: process.env.RENZA_API_KEY! });
const deck = await renza.decks.get("deck_2a9f8c1b");From here, share it or keep iterating.
Re-import to version, not duplicate
Provide an external_id on import to upsert: the first call creates the deck, and later calls
with the same external_id add a new artifact version to that same deck. This is how an agent keeps
one deck up to date instead of creating duplicates. See
Comments & versions for what a new version means for open feedback.