SlideSync API Reference
The SlideSync API gives you programmatic access to everything you can do in the app — generate decks from briefs, manage projects, upload brand kits, iterate on slides, and export to PPTX, PDF, or Google Slides. Build custom integrations, automate deck creation, or embed SlideSync into your product.
https://api.slidesync.ai/v1Quick start
curl -X POST "https://api.slidesync.ai/v1/projects/proj_abc/decks" \
-H "Authorization: Bearer sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"brief": "Create a 10-slide investor pitch deck for a SaaS startup",
"style": "investor-pitch",
"slide_count": 10
}'Authentication
All API requests must include your API key in the Authorization header as a Bearer token. API keys are scoped to your workspace and inherit the permissions of the account that created them.
GET /v1/projects HTTP/1.1
Host: api.slidesync.ai
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxx
Content-Type: application/jsonAPI Keys & Billing
API keys are generated from your Dashboard Settings. Each key is tied to your account’s subscription plan and usage is billed against your plan’s quota.
How billing works
Every API call that generates, iterates, or exports a deck consumes credits from your plan. Read-only operations (listing projects, getting deck details) are free and unlimited within rate limits.
Free
5 generations/month
- All read endpoints
- PDF export
- 1 project
Pro Recommended
200 generations/month
- All endpoints
- PPTX + Google Slides + PDF export
- Unlimited projects
- Brand kit upload
- Webhooks
- Priority rate limits
Enterprise
Custom volume
- Dedicated infrastructure
- Custom rate limits
- SLA guarantee
- SSO / SAML
- Dedicated support
/v1/auth/keysCreate a new API key for your workspace.
Request body
{
"name": "Production Key",
"permissions": ["read", "write", "export"],
"rate_limit_tier": "pro"
}Response
{
"id": "key_xk2m9f",
"key": "sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"name": "Production Key",
"created_at": "2026-05-19T10:00:00Z",
"permissions": ["read", "write", "export"],
"last_used_at": null
}/v1/auth/keysList all API keys in your workspace.
Response
{
"keys": [
{
"id": "key_xk2m9f",
"name": "Production Key",
"prefix": "sk_live_xxxx...xxxx",
"created_at": "2026-05-19T10:00:00Z",
"last_used_at": "2026-05-19T14:32:00Z",
"permissions": ["read", "write", "export"]
}
]
}/v1/auth/keys/:key_idRevoke an API key. This action is immediate and irreversible.
Parameters
key_idrequiredResponse
{
"deleted": true,
"id": "key_xk2m9f"
}/v1/usageGet current billing period usage for your workspace.
Response
{
"plan": "pro",
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-05-31T23:59:59Z",
"generations_used": 47,
"generations_limit": 200,
"exports_used": 12,
"overage_charges": 0.00,
"spending_cap": 50.00
}Projects
Projects are workspace containers that hold decks, brand kits, uploaded files, and design settings. Each project has its own design context that influences all AI-generated decks within it.
/v1/projectsList all projects in your workspace, ordered by last modified.
Parameters
limitoffsetResponse
{
"projects": [
{
"id": "proj_abc123",
"name": "Q3 Board Presentation",
"created_at": "2026-05-10T09:00:00Z",
"updated_at": "2026-05-18T14:22:00Z",
"deck_count": 3,
"design_settings": {
"palette": "corporate-navy",
"font_direction": "swiss-precision"
}
}
],
"total": 12,
"has_more": false
}/v1/projectsCreate a new project. Optionally include a brief to auto-generate design settings.
Request body
{
"name": "Product Launch Deck",
"brief": "Modern tech product launch for developer audience",
"template_id": "tmpl_startup_pitch"
}Response
{
"id": "proj_def456",
"name": "Product Launch Deck",
"created_at": "2026-05-19T10:15:00Z",
"design_settings": {
"palette": "electric-indigo",
"font_direction": "neo-grotesque",
"primary_color": "#6D28FF",
"background": "#FAFAFE"
},
"template": {
"id": "tmpl_startup_pitch",
"name": "Startup Pitch"
}
}/v1/projects/:project_idGet full project details including design system, file count, and deck list.
Parameters
project_idrequiredResponse
{
"id": "proj_abc123",
"name": "Q3 Board Presentation",
"created_at": "2026-05-10T09:00:00Z",
"updated_at": "2026-05-18T14:22:00Z",
"design_settings": { ... },
"design_system": { ... },
"decks": [...],
"files": [...],
"brand_kit": { ... }
}/v1/projects/:project_idUpdate project name, design settings, or configuration.
Parameters
project_idrequiredRequest body
{
"name": "Updated Project Name",
"design_settings": {
"palette": "warm-sunset",
"font_direction": "humanist-warm"
}
}Response
{
"id": "proj_abc123",
"name": "Updated Project Name",
"updated_at": "2026-05-19T11:00:00Z",
"design_settings": {
"palette": "warm-sunset",
"font_direction": "humanist-warm"
}
}/v1/projects/:project_idPermanently delete a project and all its decks, files, and exports.
Parameters
project_idrequiredResponse
{
"deleted": true,
"id": "proj_abc123"
}Deck Generation
The core of SlideSync. Generate complete presentation decks from a text brief using AI. Each generation consumes one credit from your plan quota. The AI analyzes your brief, creates a design system, assigns slide roles, and generates professional HTML slides.
/v1/projects/:project_id/decksGenerate a new deck from a brief. This is an async operation — poll the deck status or use webhooks.
Parameters
project_idrequiredRequest body
{
"brief": "Create a 10-slide investor pitch for an AI startup that helps restaurants optimize their menu pricing using machine learning",
"slide_count": 10,
"genre": "investor-pitch",
"style_preferences": {
"palette": "corporate-navy",
"font_direction": "swiss-precision"
},
"context_files": ["file_abc123"],
"webhook_url": "https://yourapp.com/webhooks/slidesync"
}Response
{
"id": "deck_xyz789",
"project_id": "proj_abc123",
"status": "generating",
"brief": "Create a 10-slide investor pitch...",
"slide_count": 10,
"genre": "investor-pitch",
"created_at": "2026-05-19T10:30:00Z",
"estimated_completion": "2026-05-19T10:31:30Z",
"credits_consumed": 1
}/v1/decks/:deck_idGet deck details, status, and all slides. Slides include full HTML content.
Parameters
deck_idrequiredinclude_htmlResponse
{
"id": "deck_xyz789",
"status": "complete",
"title": "MenuAI — Investor Pitch",
"slide_count": 10,
"design_system": {
"genre": "investor-pitch",
"palette": { "primary": "#1A1A2E", "accent": "#6D28FF" },
"typography": { "heading": "Inter", "body": "Inter" }
},
"slides": [
{
"id": "slide_001",
"index": 0,
"role": "cover",
"title": "MenuAI",
"html": "<!DOCTYPE html>...",
"notes": "Opening slide with company name and tagline"
}
],
"created_at": "2026-05-19T10:30:00Z",
"completed_at": "2026-05-19T10:31:28Z"
}/v1/decks/:deck_id/iterateIterate on an existing deck with natural language feedback. Consumes one credit.
Parameters
deck_idrequiredRequest body
{
"feedback": "Make slide 3 more data-focused with a chart showing revenue growth. Also change the color scheme to be warmer.",
"target_slides": [2],
"regenerate_all": false
}Response
{
"id": "deck_xyz789",
"status": "iterating",
"version": 2,
"changes": ["slide_003"],
"credits_consumed": 1
}/v1/projects/:project_id/decksList all decks in a project.
Parameters
project_idrequiredstatusResponse
{
"decks": [
{
"id": "deck_xyz789",
"title": "MenuAI — Investor Pitch",
"status": "complete",
"slide_count": 10,
"version": 2,
"created_at": "2026-05-19T10:30:00Z"
}
],
"total": 3
}/v1/decks/:deck_idDelete a deck and all its slide versions.
Parameters
deck_idrequiredResponse
{
"deleted": true,
"id": "deck_xyz789"
}Slides
Access and manipulate individual slides within a deck. Each slide has a role (cover, content, data-viz, etc.), HTML content, and speaker notes.
/v1/decks/:deck_id/slidesList all slides in a deck with metadata.
Parameters
deck_idrequiredResponse
{
"slides": [
{
"id": "slide_001",
"index": 0,
"role": "cover",
"title": "MenuAI",
"thumbnail_url": "https://cdn.slidesync.ai/thumbs/slide_001.png"
},
{
"id": "slide_002",
"index": 1,
"role": "agenda",
"title": "Today's Agenda",
"thumbnail_url": "https://cdn.slidesync.ai/thumbs/slide_002.png"
}
]
}/v1/slides/:slide_idGet a single slide with full HTML content and version history.
Parameters
slide_idrequiredResponse
{
"id": "slide_001",
"deck_id": "deck_xyz789",
"index": 0,
"role": "cover",
"title": "MenuAI",
"html": "<!DOCTYPE html><html>...</html>",
"notes": "Opening slide — company name, tagline, and visual identity",
"version": 2,
"versions": [
{ "version": 1, "created_at": "2026-05-19T10:31:00Z" },
{ "version": 2, "created_at": "2026-05-19T10:45:00Z" }
]
}/v1/slides/:slide_idUpdate a slide's HTML content or notes directly.
Parameters
slide_idrequiredRequest body
{
"html": "<!DOCTYPE html><html>...updated content...</html>",
"notes": "Updated speaker notes"
}Response
{
"id": "slide_001",
"version": 3,
"updated_at": "2026-05-19T11:00:00Z"
}/v1/decks/:deck_id/slides/reorderReorder slides within a deck.
Parameters
deck_idrequiredRequest body
{
"order": ["slide_001", "slide_003", "slide_002", "slide_004"]
}Response
{
"reordered": true,
"slide_count": 4
}Exports
Export decks to PowerPoint (.pptx), PDF, or Google Slides format. Exports are async — the API returns immediately with a status URL to poll, or you can use webhooks.
/v1/decks/:deck_id/exportStart an export job. Supported formats: pptx, pdf, google-slides.
Parameters
deck_idrequiredRequest body
{
"format": "pptx",
"options": {
"embed_fonts": true,
"include_notes": true,
"resolution": "high"
}
}Response
{
"id": "export_abc",
"deck_id": "deck_xyz789",
"format": "pptx",
"status": "processing",
"created_at": "2026-05-19T11:10:00Z",
"estimated_seconds": 15
}/v1/exports/:export_idCheck the status of an export job.
Parameters
export_idrequiredResponse
{
"id": "export_abc",
"status": "complete",
"format": "pptx",
"file_size_bytes": 2847291,
"download_url": "https://cdn.slidesync.ai/exports/export_abc.pptx",
"expires_at": "2026-05-20T11:10:00Z"
}/v1/exports/:export_id/downloadDownload the exported file. Returns a redirect to the CDN URL.
Parameters
export_idrequiredResponse
HTTP/1.1 302 Found
Location: https://cdn.slidesync.ai/exports/export_abc.pptxBrand Kits
Upload brand assets — logos, color palettes, typography rules, and placement constraints. Once set, the AI enforces these as hard constraints on every deck generated in that project.
/v1/projects/:project_id/brandGet the brand kit configuration for a project.
Parameters
project_idrequiredResponse
{
"id": "brand_xyz",
"project_id": "proj_abc123",
"logo_url": "https://cdn.slidesync.ai/brands/logo.svg",
"colors": {
"primary": "#1A1A2E",
"secondary": "#6D28FF",
"accent": "#2FB4FF",
"background": "#FFFFFF"
},
"typography": {
"heading_font": "Inter",
"body_font": "Inter",
"heading_weight": 800,
"body_weight": 400
},
"rules": {
"logo_placement": "top-left",
"logo_max_height": 32
}
}/v1/projects/:project_id/brandUpload or update the brand kit. Supports multipart/form-data for logo upload.
Parameters
project_idrequiredRequest body
{
"colors": {
"primary": "#0F172A",
"secondary": "#3B82F6",
"accent": "#F59E0B"
},
"typography": {
"heading_font": "Satoshi",
"body_font": "Inter"
},
"rules": {
"logo_placement": "top-right",
"logo_max_height": 28
}
}Response
{
"id": "brand_xyz",
"updated_at": "2026-05-19T11:30:00Z",
"status": "active"
}/v1/projects/:project_id/brandRemove the brand kit from a project. Future decks will use AI-inferred styling.
Parameters
project_idrequiredResponse
{
"deleted": true,
"project_id": "proj_abc123"
}Templates
Browse and apply pre-built template packs to projects. Templates provide starting structure and design direction that the AI builds upon.
/v1/templatesList all available templates.
Parameters
categoryResponse
{
"templates": [
{
"id": "tmpl_startup_pitch",
"name": "Startup Pitch",
"category": "pitch",
"slide_count": 12,
"preview_url": "https://cdn.slidesync.ai/templates/startup_pitch.png",
"description": "Clean, modern pitch deck optimized for investor meetings"
}
],
"total": 18
}/v1/projects/:project_id/apply-templateApply a template to a project. Sets design context and optional starter slides.
Parameters
project_idrequiredRequest body
{
"template_id": "tmpl_startup_pitch",
"include_starter_slides": true
}Response
{
"applied": true,
"template": "tmpl_startup_pitch",
"starter_slides_created": 12
}Webhooks
Receive real-time notifications when async operations complete. Webhooks are sent as POST requests with a JSON payload and include a signature header for verification.
Supported events
deck.generation.completeDeck generation finished successfullydeck.generation.failedDeck generation faileddeck.iteration.completeDeck iteration finishedexport.completeExport job finished, download URL availableexport.failedExport job failedWebhook payload
{
"id": "evt_abc123",
"type": "deck.generation.complete",
"created_at": "2026-05-19T10:31:28Z",
"data": {
"deck_id": "deck_xyz789",
"project_id": "proj_abc123",
"slide_count": 10,
"status": "complete"
}
}Verifying signatures
Each webhook includes a X-SlideSync-Signature header. Verify it using your webhook secret:
import crypto from 'crypto';
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}/v1/webhooksRegister a webhook endpoint.
Request body
{
"url": "https://yourapp.com/webhooks/slidesync",
"events": ["deck.generation.complete", "export.complete"],
"secret": "whsec_your_secret"
}Response
{
"id": "wh_abc123",
"url": "https://yourapp.com/webhooks/slidesync",
"events": ["deck.generation.complete", "export.complete"],
"active": true,
"created_at": "2026-05-19T12:00:00Z"
}/v1/webhooks/:webhook_idRemove a webhook endpoint.
Parameters
webhook_idrequiredResponse
{
"deleted": true,
"id": "wh_abc123"
}Rate Limits
API requests are rate-limited per workspace to ensure fair usage and platform stability. Rate limit headers are included in every response.
Response headers
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
X-RateLimit-Reset: 1716112800Limits by plan
429 Too Many Requests with aRetry-After header indicating when you can retry.Errors
The API uses standard HTTP status codes. Errors include a machine-readable code and human-readable message.
{
"error": {
"code": "insufficient_credits",
"message": "Your workspace has used all available generation credits for this billing period.",
"status": 402,
"details": {
"credits_used": 200,
"credits_limit": 200,
"upgrade_url": "https://slidesync.ai/dashboard/billing"
}
}
}Error codes
invalid_requestRequest body is malformed or missing required fieldsunauthorizedAPI key is missing, invalid, or revokedinsufficient_creditsNo remaining credits — upgrade plan or wait for resetforbiddenAPI key doesn't have permission for this operationnot_foundThe requested resource doesn't existconflictResource state conflict (e.g., deck still generating)rate_limitedToo many requests — check Retry-After headerinternal_errorServer error — retry with exponential backoffservice_unavailableAI generation temporarily at capacitySDKs & Libraries
Official client libraries to get started faster. All SDKs are open-source and fully typed.
Node.js / TypeScript
npm install @slidesync/sdkimport { SlideSync } from '@slidesync/sdk';
const client = new SlideSync('sk_live_your_key');
const deck = await client.decks.create('proj_abc', {
brief: 'Q3 board presentation',
slide_count: 12,
});
const exported = await client.exports.create(deck.id, {
format: 'pptx',
});Python
pip install slidesyncfrom slidesync import SlideSync
client = SlideSync(api_key="sk_live_your_key")
deck = client.decks.create(
project_id="proj_abc",
brief="Q3 board presentation",
slide_count=12,
)
export = client.exports.create(
deck_id=deck.id,
format="pptx",
)