home / skills / openclaw / skills / prezentit
This skill quickly creates beautiful AI-powered presentations with custom themes, visuals, and speaker notes from natural language prompts.
npx playbooks add skill openclaw/skills --skill prezentitReview the files below or copy the command above to add this skill to your agents.
```skill
---
name: prezentit
description: Generate beautiful AI-powered presentations instantly. Create professional slides with custom themes, visual designs, and speaker notesβall through natural language commands.
homepage: https://prezentit.net
emoji: "π½"
metadata:
clawdbot:
emoji: "π½"
skillKey: prezentit
homepage: https://prezentit.net
requires:
config:
- PREZENTIT_API_KEY
config:
requiredEnv:
- name: PREZENTIT_API_KEY
description: Your Prezentit API key (starts with pk_). Get one free at https://prezentit.net/api-keys
example: |
export PREZENTIT_API_KEY=pk_your_api_key_here
permissions:
network:
- https://prezentit.net/api/v1/*
fileSystem: none
env:
reads:
- PREZENTIT_API_KEY
writes: none
---
# Prezentit - AI Presentation Generator
**Base URL**: `https://prezentit.net/api/v1`
**Auth Header**: `Authorization: Bearer {PREZENTIT_API_KEY}`
> **This skill requires a `PREZENTIT_API_KEY` environment variable.** Get a free API key at https://prezentit.net/api-keys β new accounts include 100 free credits.
## β οΈ CRITICAL FOR AI AGENTS
**ALWAYS use `"stream": false`** in generation requests! Without this, you get streaming responses that cause issues.
---
## Complete Workflow (FOLLOW THIS ORDER)
### Step 1: Check Credits First
```http
GET /api/v1/me/credits
Authorization: Bearer {PREZENTIT_API_KEY}
```
**Response:**
```json
{
"credits": 100,
"pricing": {
"outlinePerSlide": 5,
"designPerSlide": 10,
"estimatedCostPerSlide": 15
},
"_ai": {
"canGenerate": true,
"maxSlidesAffordable": 6,
"nextSteps": ["..."]
}
}
```
β If `_ai.canGenerate` is false, direct user to https://prezentit.net/buy-credits
β Use `_ai.maxSlidesAffordable` to know the limit
### Step 2: Choose a Theme
**Option A β Browse all available themes and pick by ID:**
```http
GET /api/v1/themes
Authorization: Bearer {PREZENTIT_API_KEY}
```
**Response:**
```json
{
"themes": [
{ "id": "corporate_blue", "name": "Corporate Blue", "category": "Corporate & Professional" },
{ "id": "nature_earth", "name": "Nature Earth", "category": "Nature & Organic" }
],
"categories": ["Corporate & Professional", "Creative & Visual", "Data & Analytics", ...],
"_ai": {
"totalThemes": 20,
"popularThemes": ["corporate_blue", "midnight_tech", "nature_earth", "storyteller", "data_dashboard"]
}
}
```
β Use the exact `id` value in your generation request
**Option B β Search for a theme by keyword:**
```http
GET /api/v1/themes?search=minimalist
Authorization: Bearer {PREZENTIT_API_KEY}
```
β Returns best matches ranked by relevance. Use the `id` from `bestMatch`.
**Option C β Describe a custom style (no theme ID needed):**
Use the `customDesignPrompt` parameter instead. See the Custom Design Prompt section below.
### Step 3: Generate Presentation
```http
POST /api/v1/presentations/generate
Authorization: Bearer {PREZENTIT_API_KEY}
Content-Type: application/json
{
"topic": "User's topic here",
"slideCount": 5,
"theme": "corporate_blue",
"stream": false
}
```
**β±οΈ IMPORTANT: Generation takes 1-3 minutes. The API will return when complete.**
**Full Request Parameters:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `topic` | string | Yes* | Presentation topic (2-500 chars). Required if no `outline`. `prompt` is also accepted as an alias. |
| `outline` | object | No | Pre-built outline (saves ~33% credits). See Outline section below. |
| `slideCount` | number | No | Number of slides (3-50, default: 5). Ignored if outline provided. |
| `theme` | string | No | Theme ID from `GET /api/v1/themes`. Use the exact `id` value. |
| `customDesignPrompt` | string | No | Custom visual style description (see below). Overrides theme ID. |
| `details` | string | No | Additional context about the presentation content. |
| `confirmPartial` | boolean | No | Set `true` to confirm partial generation when credits are limited. |
| `stream` | boolean | **ALWAYS false** | **AI agents must always set `stream: false`**. |
*`topic` is required even when providing an `outline` (used for presentation metadata).
### Step 4: Get the Result
**Success Response:**
```json
{
"presentationId": "uuid-here",
"viewUrl": "https://prezentit.net/view/abc123",
"creditsUsed": 75,
"remainingCredits": 25
}
```
β Share the `viewUrl` with the user. That's their presentation!
### Step 5: Download (Optional)
```http
GET /api/v1/presentations/{presentationId}/download?format=pptx
Authorization: Bearer {PREZENTIT_API_KEY}
```
**Formats:** `pptx` (PowerPoint), `pdf`, `json` (raw data)
---
## Pricing
| Scenario | Cost per Slide | Example (5 slides) |
|----------|----------------|-------------------|
| Auto-generate outline | 15 credits | 75 credits |
| Provide your own outline | 10 credits | 50 credits (~33% savings!) |
- New accounts get **100 free credits**
- Buy more at: https://prezentit.net/buy-credits
---
## Theme Selection
### How to Pick a Theme
1. **Fetch the theme list**: `GET /api/v1/themes` β returns all available themes with `id`, `name`, and `category`
2. **Pick the best match** for the user's topic and style preference
3. **Pass the `id`** in the generation request as the `theme` parameter
You can also search: `GET /api/v1/themes?search=KEYWORD` or filter by category: `GET /api/v1/themes?category=CATEGORY_NAME`
### Custom Design Prompt (Skip the Theme List)
If no existing theme fits, use `customDesignPrompt` to describe a fully custom visual style. **This must be a detailed, structured description** β not just a color palette.
**REQUIRED structure for customDesignPrompt** (include ALL of these sections):
```
COLOR SYSTEM: Primary [hex], secondary [hex], accent [hex], background [hex/gradient], text colors for headings and body.
TYPOGRAPHY: Heading font style [e.g., bold geometric sans-serif like Montserrat], body font style [e.g., clean humanist sans-serif like Open Sans], size hierarchy [large/medium/small], weight contrast.
LAYOUT SYSTEM: Slide structure [e.g., asymmetric split with 60/40 content-to-visual ratio], alignment [left-aligned text with right visual panel], spacing philosophy [generous whitespace vs. dense information], grid approach.
VISUAL ELEMENTS: Background treatment [solid/gradient/textured/patterned], decorative motifs [geometric shapes, organic curves, line art, etc.], image style [photography with overlay, illustrations, icons, data visualizations], border/frame treatments.
MOOD & TONE: Overall aesthetic [e.g., corporate authority, playful creativity, academic rigor, tech-forward], energy level [calm/dynamic/bold], intended audience impression.
```
**Example β Good customDesignPrompt:**
```json
{
"topic": "AI in Healthcare",
"customDesignPrompt": "COLOR SYSTEM: Primary deep medical blue (#1B3A5C), secondary teal (#2A9D8F), accent warm coral (#E76F51) for callouts, backgrounds alternate between clean white (#FAFAFA) and very subtle blue-gray (#F0F4F8), heading text dark navy, body text #333333. TYPOGRAPHY: Headings in bold geometric sans-serif (Montserrat style), body in clean humanist sans (Source Sans style), strong size hierarchy with 48pt titles, 24pt subtitles, 16pt body. LAYOUT SYSTEM: Asymmetric layouts with 60/40 content-to-visual split, left-aligned text blocks with right-side data visualizations or medical imagery, generous padding (60px margins), clean grid structure. VISUAL ELEMENTS: Subtle DNA helix watermark in corners at 5% opacity, thin teal accent lines as section dividers, medical iconography (stethoscope, heartbeat, molecular structures) as small decorative elements, photography with blue-tinted overlay for full-bleed backgrounds. MOOD & TONE: Professional medical authority balanced with approachable warmth, calm and trustworthy, designed for hospital executives and medical professionals.",
"stream": false
}
```
**Example β Bad customDesignPrompt (TOO VAGUE, will produce generic results):**
```
"blue and white medical theme"
```
---
## Creating Outlines (Save ~33% Credits)
Providing your own outline saves credits and gives you full control over content.
### Outline Structure
The outline is an object with a `slides` array. Each slide has these fields:
```json
{
"topic": "Your Presentation Topic",
"outline": {
"slides": [
{
"title": "Slide Title Here",
"mainIdea": "A clear sentence explaining the core message of this slide and what the audience should take away from it.",
"talkingPoints": [
"First key point with enough detail to be meaningful (at least 10 characters)",
"Second key point expanding on the main idea",
"Third key point providing supporting evidence or examples"
],
"visualGuide": "Detailed description of the visual layout: background style, image placement, icon suggestions, chart types, color emphasis areas, and decorative elements for this specific slide."
}
]
},
"stream": false
}
```
### Slide Field Reference
| Field | Required | Constraints | Description |
|-------|----------|-------------|-------------|
| `title` | Yes | 3-100 chars, 1-15 words | Slide heading |
| `mainIdea` | Yes | 10-500 chars, 3-75 words | Core message of the slide |
| `talkingPoints` | Yes | 2-7 items, each 10-300 chars (3-50 words) | Key points to cover |
| `visualGuide` | Yes | 20-500 chars, 5-75 words | Visual design instructions for this slide |
### Validation Rules
**Overall:**
- Minimum **3 slides**, maximum **50 slides**
- `topic` is still required (used for presentation metadata)
- All four fields (`title`, `mainIdea`, `talkingPoints`, `visualGuide`) are required per slide
**The API returns detailed error messages with `fix` suggestions if validation fails.**
### Complete Example
```json
{
"topic": "Introduction to Machine Learning",
"outline": {
"slides": [
{
"title": "Introduction to Machine Learning",
"mainIdea": "Machine learning is transforming how businesses operate by enabling systems to learn from data and improve automatically without explicit programming.",
"talkingPoints": [
"Machine learning is a subset of artificial intelligence focused on pattern recognition",
"ML systems improve through experience rather than manual rule-writing",
"Global ML market projected to reach $209 billion by 2029"
],
"visualGuide": "Bold title slide with futuristic tech aesthetic. Dark gradient background transitioning from deep navy to midnight blue. Large bold title text centered with a subtle neural network node pattern behind it. Accent glow in electric blue."
},
{
"title": "How Machine Learning Works",
"mainIdea": "Machine learning algorithms are categorized into supervised, unsupervised, and reinforcement learning based on how they learn from data.",
"talkingPoints": [
"Supervised learning uses labeled data for classification and regression tasks",
"Unsupervised learning discovers hidden patterns in unlabeled data through clustering",
"Reinforcement learning optimizes decisions through trial, error, and reward signals"
],
"visualGuide": "Three distinct visual sections showing each ML type with representative icons: labeled data pairs for supervised, clustered groups for unsupervised, and a game-like reward loop for reinforcement. Use consistent color coding with blue, green, and purple."
},
{
"title": "Business Applications",
"mainIdea": "Companies across industries are leveraging machine learning for competitive advantage in customer experience, operations, and decision-making.",
"talkingPoints": [
"Customer churn prediction reduces revenue loss by identifying at-risk accounts early",
"Fraud detection systems process millions of transactions in real-time",
"Personalized recommendation engines drive significant increases in engagement and sales"
],
"visualGuide": "Clean content layout with left-aligned text and right-side icons or mini-charts for each application. Use a white background with subtle grid lines. Each talking point gets a small illustrative icon (shield for fraud, chart for prediction, user icon for personalization)."
},
{
"title": "Getting Started with ML",
"mainIdea": "Successful ML adoption requires starting with clear use cases, quality data, and the right team rather than jumping straight to complex algorithms.",
"talkingPoints": [
"Identify high-impact use cases where prediction or automation adds clear value",
"Invest in clean, well-structured data before selecting algorithms",
"Build or partner with ML expertise and start with proven frameworks"
],
"visualGuide": "Conclusion slide with a numbered roadmap or step layout. Three large numbered circles (1, 2, 3) each containing a step. Background with subtle upward-pointing arrows suggesting progress. Call-to-action feel with bold accent color on the final step."
}
]
},
"theme": "midnight_tech",
"stream": false
}
```
### Get Schema Programmatically
```http
GET /api/v1/docs/outline-format
Authorization: Bearer {PREZENTIT_API_KEY}
```
Returns the full JSON schema with all constraints and example slides.
---
## Error Handling
### Error Response Format
```json
{
"error": "Human readable message",
"code": "ERROR_CODE",
"fix": "Guidance on how to resolve this"
}
```
### Common Errors & Solutions
| HTTP | Code | Message | Solution |
|------|------|---------|----------|
| 400 | `MISSING_TOPIC` | Topic or prompt is required | Provide a `topic` or `prompt` field |
| 400 | `INVALID_OUTLINE` | Outline validation failed | Check outline structure β response includes detailed `validationErrors` with `fix` per field |
| 400 | `INVALID_SLIDE_COUNT` | Slide count must be 3-50 | Adjust `slideCount` to be between 3 and 50 |
| 401 | `UNAUTHORIZED` | Invalid or missing API key | Check `Authorization: Bearer pk_...` header |
| 402 | `INSUFFICIENT_CREDITS` | Not enough credits | Response includes `required`, `available`, and `purchaseUrl` |
| 404 | `PRESENTATION_NOT_FOUND` | Presentation doesn't exist | Verify presentation ID |
| 409 | `DUPLICATE_REQUEST` | Same request within cooldown | Wait and retry β don't resend identical requests |
| 409 | `GENERATION_IN_PROGRESS` | Already generating | Check status at `GET /api/v1/me/generation/status` or cancel at `POST /api/v1/me/generation/cancel` |
| 429 | `RATE_LIMITED` | Too many requests | Wait `retryAfter` seconds before retrying |
| 500 | `GENERATION_FAILED` | Internal error | Retry once, then contact support |
| 503 | `SERVICE_UNAVAILABLE` | System overloaded | Retry after `retryAfter` seconds |
### Handling Insufficient Credits
```json
{
"error": "Insufficient credits",
"code": "INSUFFICIENT_CREDITS",
"required": 75,
"available": 50,
"purchaseUrl": "https://prezentit.net/buy-credits"
}
```
**AI Agent Response:** "You need 75 credits but only have 50. Purchase more at https://prezentit.net/buy-credits"
### Handling Partial Generation
If the user has some credits but not enough for full generation, the API returns a `confirmation_required` response with options. Read the `_ai.options` array and present them to the user. To proceed with partial generation, resend the request with `"confirmPartial": true`.
### Handling Rate Limits
```json
{
"error": "Too many requests",
"code": "RATE_LIMITED",
"retryAfter": 30
}
```
**AI Agent Action:** Wait `retryAfter` seconds before retrying.
---
## Additional Endpoints
### Check Generation Status
```http
GET /api/v1/me/generation/status
Authorization: Bearer {PREZENTIT_API_KEY}
```
Returns current progress if a generation is running: stage, percentage, designs completed.
### Cancel Active Generation
```http
POST /api/v1/me/generation/cancel
Authorization: Bearer {PREZENTIT_API_KEY}
```
Cancels the current generation in progress.
### Get Presentation Details
```http
GET /api/v1/presentations/{presentationId}
Authorization: Bearer {PREZENTIT_API_KEY}
```
### List User's Presentations
```http
GET /api/v1/me/presentations
Authorization: Bearer {PREZENTIT_API_KEY}
```
Optional: `?limit=20&offset=0`
### List All Themes
```http
GET /api/v1/themes
Authorization: Bearer {PREZENTIT_API_KEY}
```
Optional query params:
- `?search=keyword` β Filter by name
- `?category=corporate` β Filter by category
---
## Anti-Spam Rules
| Rule | Limit | What Happens |
|------|-------|--------------|
| Duplicate detection | ~30 seconds | 409 error for identical requests |
| Rate limit | Varies by key | 429 error with `retryAfter` |
| One generation at a time | 1 concurrent | 409 `GENERATION_IN_PROGRESS` error |
**Best Practice:** Always check for `retryAfter` in error responses and wait that duration.
---
## Quick Copy-Paste Examples
### Minimal Generation
```json
POST /api/v1/presentations/generate
{
"topic": "Introduction to Climate Change",
"stream": false
}
```
### With Theme (Fetch ID First)
```
1. GET /api/v1/themes β find the theme ID
2. POST /api/v1/presentations/generate
```
```json
{
"topic": "Q4 Sales Report",
"slideCount": 8,
"theme": "corporate_blue",
"stream": false
}
```
### With Custom Design Prompt
```json
{
"topic": "Startup Pitch Deck",
"slideCount": 10,
"customDesignPrompt": "COLOR SYSTEM: Primary electric indigo (#4F46E5), secondary cyan (#06B6D4), accent hot pink (#EC4899), background dark charcoal (#111827) with subtle radial gradient to #1F2937, heading text white, body text #D1D5DB. TYPOGRAPHY: Headings in extra-bold wide-tracking sans-serif (Inter/Poppins style), body in medium-weight clean sans, dramatic size contrast with 56pt titles and 18pt body. LAYOUT SYSTEM: Full-bleed dark slides with asymmetric content placement, bold left-aligned headlines with supporting text below, large visual areas for mockups and charts, 80px margins. VISUAL ELEMENTS: Subtle dot grid pattern at 3% opacity on backgrounds, neon-glow accent lines, rounded corners on all containers, glassmorphism cards with frosted backgrounds for data callouts, gradient mesh blobs as decorative elements. MOOD & TONE: Bold tech-startup energy, confident and forward-looking, designed to impress venture capital investors.",
"stream": false
}
```
### With Outline (~33% Savings)
```json
{
"topic": "Weekly Team Sync",
"outline": {
"slides": [
{
"title": "Weekly Team Sync",
"mainIdea": "Kickoff slide for the January 15, 2024 weekly team synchronization meeting covering accomplishments and upcoming goals.",
"talkingPoints": [
"Welcome the team and set the agenda for today's sync",
"Cover last week's wins and this week's priorities"
],
"visualGuide": "Clean title slide with company colors. Bold centered title, date as subtitle below. Simple professional background with subtle geometric pattern."
},
{
"title": "Last Week's Accomplishments",
"mainIdea": "The team delivered significant progress across feature development, bug resolution, and performance optimization last week.",
"talkingPoints": [
"Feature X completed and merged into the main branch ahead of schedule",
"Resolved three critical production bugs affecting checkout flow",
"Database query optimization improved page load times by twenty percent"
],
"visualGuide": "Content slide with checkmark icons next to each accomplishment. Green accent color for completed items. Left-aligned text with small celebration graphic in the corner."
},
{
"title": "This Week's Goals",
"mainIdea": "This week focuses on the beta launch, initial user testing, and completing documentation before the public release.",
"talkingPoints": [
"Launch beta version to internal testers by Wednesday",
"Conduct user testing sessions with five pilot customers",
"Complete API documentation and developer onboarding guide"
],
"visualGuide": "Forward-looking slide with numbered steps or timeline visual. Blue accent color for upcoming items. Arrow or roadmap graphic showing progression from current state to launch."
},
{
"title": "Open Discussion",
"mainIdea": "Time for team questions, blockers, and any items not covered in the structured agenda.",
"talkingPoints": [
"Open floor for questions and discussion of blockers",
"Next sync meeting scheduled for Monday at ten AM"
],
"visualGuide": "Simple closing slide with question mark icon or discussion bubble graphic. Calm colors, minimal text, large font for the key info. Meeting time prominently displayed."
}
]
},
"theme": "corporate_blue",
"stream": false
}
```
---
## Getting Help
- **Website**: https://prezentit.net
- **Buy Credits**: https://prezentit.net/buy-credits
- **Support**: https://prezentit.net/support
- **API Key Management**: https://prezentit.net/api-keys
```
This skill generates beautiful AI-powered presentations instantly. It lets you create professional slide decks with custom themes, detailed visual designs, and speaker notes using natural language commands. The service optimizes credit usage with options for auto-outline or user-provided outlines to save credits.
The skill talks to the Prezentit API using an API key and a POST generate endpoint to produce a finished presentation (view URL and optional downloads). First check remaining credits to determine slide limits, pick a theme or provide a structured custom design prompt, then request generation with stream: false. The API returns a presentationId, view URL, and credits used when generation completes (1β3 minutes).
Do I need an API key?
Yes. You must provide PREZENTIT_API_KEY (starts with pk_) as an environment variable to authorize requests.
How do I control visual style if no theme fits?
Use customDesignPrompt with the required structured sections (COLOR SYSTEM, TYPOGRAPHY, LAYOUT SYSTEM, VISUAL ELEMENTS, MOOD & TONE) for a detailed custom design.
Can I reduce credits used?
Yes. Providing a full outline reduces per-slide cost by about 33% compared with auto-generated outlines.