Quickstart

Three ways to create your first slide. Pick the path that fits your workflow.

1MCP — Connect your AI agent

Zero setup. No API key needed. Works with Claude Desktop, Cursor, Windsurf, and any MCP client.

🤖

Add one line to your MCP config

5 seconds · free to connect

Add this to your Claude Desktop config (claude_desktop_config.json):

Claude Desktop / Cursor
{
  "mcpServers": {
    "slideforge": {
      "url": "https://api.slideforge.dev/mcp"
    }
  }
}

Restart Claude Desktop. Then just ask:

“Create a KPI dashboard with Revenue $8.5M, Clients 234, Margin 71%, NPS 4.6”

Claude auto-authenticates via OAuth. You get 60 free slides on signup. Full MCP guide →

2Catalog Render — Instant slides

Pick a catalog pattern, send its content, get a .pptx back instantly. $0.05 per slide.

📐

POST /v1/render/intent

< 1 second · $0.05

curl
curl -X POST https://api.slideforge.dev/v1/render/intent \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prior_id": "kpi_metrics_delta_scoreboard",
    "content": {
      "title": "Q1 2026 KPIs",
      "metrics": [
        {"value": "$8.5M", "label": "Revenue", "trend": "+14%", "status": "green"},
        {"value": "234", "label": "Clients", "trend": "+9%", "status": "green"},
        {"value": "71%", "label": "Margin", "trend": "+2pp", "status": "green"},
        {"value": "4.6", "label": "NPS", "trend": "+0.3", "status": "green"}
      ],
      "takeaway": "All four KPIs trending up. Margin expansion is the headline."
    }
  }'
Python
import requests

resp = requests.post(
    "https://api.slideforge.dev/v1/render/intent",
    headers={"Authorization": "Bearer sf_live_YOUR_KEY"},
    json={
        "prior_id": "kpi_metrics_delta_scoreboard",
        "content": {
            "title": "Q1 2026 KPIs",
            "metrics": [
                {"value": "$8.5M", "label": "Revenue", "trend": "+14%", "status": "green"},
                {"value": "234", "label": "Clients", "trend": "+9%", "status": "green"},
            ],
            "takeaway": "All KPIs trending up.",
        },
    },
)
data = resp.json()
job_id = data["job_id"]

# Download with the same Bearer key — no signed URL needed.
pptx = requests.get(
    f"https://api.slideforge.dev/v1/jobs/{job_id}/pptx",
    headers={"Authorization": "Bearer sf_live_YOUR_KEY"},
)
open("slide.pptx", "wb").write(pptx.content)

Returns a job_id immediately (200 OK, no polling needed) — download the file with GET /v1/jobs/{job_id}/pptx using the same Bearer key. (Need to hand the link to someone else? Mint a short-lived, single-use one with POST /v1/jobs/{job_id}/download-url instead.) Find a prior_id + its sample content via GET /v1/catalog, or preview it for free with preview: true. Full reference →

3Auto — Brief → SSG intent

The default brief → slide path. The SSG intent engine routes the brief to a deterministic render pattern. Bounded at $0.05 — never escalates to a slower or more expensive engine.

POST /v1/render/auto

< 1 second · $0.05 on usable success

curl
curl -X POST https://api.slideforge.dev/v1/render/auto \
  -H "Authorization: Bearer sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brief": "Revenue bridge Q4 to Q1: Start $10.2M. New clients +$2.1M, upsell +$1.3M, churn -$0.8M, FX -$0.2M."
  }'
Python
import requests

resp = requests.post(
    "https://api.slideforge.dev/v1/render/auto",
    headers={"Authorization": "Bearer sf_live_YOUR_KEY"},
    json={
        "brief": "Revenue bridge Q4 to Q1: Start $10.2M. New clients +$2.1M, upsell +$1.3M, churn -$0.8M, FX -$0.2M.",
    },
)
data = resp.json()
job_id = data["job_id"]

# Download with the same Bearer key — no signed URL needed.
pptx = requests.get(
    f"https://api.slideforge.dev/v1/jobs/{job_id}/pptx",
    headers={"Authorization": "Bearer sf_live_YOUR_KEY"},
)
open("slide.pptx", "wb").write(pptx.content)  # synchronous — ready in 1-2s

Returns a job_id synchronously — download it with GET /v1/jobs/{job_id}/pptx using the same Bearer key. On vague or unusable briefs the endpoint returns HTTP 422 with an intent_unroutable envelope (cost: 0) and a repair_options list telling you what to add. Full reference →

Authentication

MCP: OAuth handles everything automatically — just connect and go.
API: Sign up, then create a key at Console → API Keys. Pass it as Authorization: Bearer sf_live_... Learn more →

What's next