Themes

Control slide branding. 9 built-in themes, custom themes with your brand colors, fonts, and logo — or upload your company's .pptx template and render natively on your own file. Pass theme_id to any endpoint.

GET /v1/themes

List all available themes (built-in + your saved custom themes).

curl
curl https://api.slideforge.dev/v1/themes \
  -H "Authorization: Bearer sf_live_YOUR_KEY"
Response
{
  "themes": [
    { "id": "slideforge_standard", "name": "Default", "source": "default", "is_default": true,
      "register": "general business / agent default", "primary": "#12355B", "accent": "#2563EB" },
    { "id": "consulting_graphite", "name": "Consulting Graphite", "source": "default",
      "register": "board / consulting", "primary": "#2F343B", "accent": "#0F766E" },
    { "id": "dark_keynote", "name": "Dark Keynote", "source": "default",
      "register": "investor / founder keynote", "primary": "#0F172A", "accent": "#3B82F6" },
    // ...product_bold, technical_lab, education_warm, healthcare_calm,
    //    scientific_paper, sales_warm (9 built-ins) + your saved themes
  ]
}

POST /v1/themes

Save a custom theme. Only colors is required — everything else has sensible defaults.

curl
curl -X POST https://api.slideforge.dev/v1/themes \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "colors": {
      "primary": "#003366",
      "secondary": "#336699",
      "accent": "#FF6600",
      "neutral": "#666666"
    },
    "typography": {
      "font_family": "Calibri"
    }
  }'
Response
{
  "theme_id": "t_abc123",
  "name": "Acme Corp",
  "source": "custom"
}

Using a theme

Pass theme_id to any create endpoint (render/intent, render/auto, render/code, render/intent/deck).

curl
# Use your custom theme with any endpoint
curl -X POST https://api.slideforge.dev/v1/render/auto \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brief": "Q1 KPI dashboard: revenue, clients, margin, NPS",
    "theme_id": "t_abc123"
  }'

POST /v1/themes/upload — render on your own template

Upload your company's .pptx template and slides render natively on your own file — slide master, layouts, fonts, and theme intact. The output opens in PowerPoint as a deck built on your corporate template, not a lookalike. Responses report brand_fidelity_level: "native" so your agent can verify it. Colors, fonts, and logo are also extracted for the standard theme pipeline.

curl
# Upload your company template (≤50MB)
curl -X POST https://api.slideforge.dev/v1/themes/upload \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -F "file=@company_template.pptx"

Your template's own layouts (cover, agenda, dividers)

Uploaded templates expose their own designed slides — cover, agenda, section dividers, closing — as fillable layouts. Discover them with GET /v1/themes/{id}/layouts (fill schemas + preview images), then fill one literally with form=template_layout. Deterministic and LLM-free: your text lands in the template's designed placeholders, verbatim.

curl
# Discover your template's own designed layouts
curl https://api.slideforge.dev/v1/themes/t_abc123/layouts \
  -H "Authorization: Bearer sf_live_YOUR_KEY"
curl
# Fill your template's own cover slide
curl -X POST https://api.slideforge.dev/v1/render/intent \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "form": "template_layout",
    "theme_id": "t_abc123",
    "data": {
      "layout": "cover",
      "fills": { "title": "FY26 Strategy Review", "subtitle": "Executive Board — July 2026" }
    }
  }'

Theme JSON schema

Get the full schema with field descriptions:

curl
curl https://api.slideforge.dev/v1/themes/template \
  -H "Authorization: Bearer sf_live_YOUR_KEY"

Returns the complete theme structure with all configurable fields: colors (primary, secondary, accent, neutral), typography (font family, sizes), spacing (margins, gaps, content zones), and design rules (whitespace, max hues).

Adding a logo

Upload a logo (PNG/JPG/SVG, max 5MB) and reference it in your theme's chrome:

curl
# Upload logo
curl -X POST https://api.slideforge.dev/v1/assets/logo \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -F "file=@logo.png"

# Use in chrome
{ "chrome": { "logo": "logo_id_from_upload" } }