PowerPoint in.
Clean SVG out.

Deckup is the conversion API you wish Aspose was. Drop a deck, get structured SVG plus a JSON sidecar in seconds — built for canvas editors, LMS platforms, and AI agents who need PPTX as a first-class input.

No credit cardTest keys free foreverLive API in ~5 minutes
app.deckup.io/conversions/conv_01HXR3K4P7T1G2Y9
test mode
Succeededconv_01HXR3K4P7T1G2Y9
sync24 slides6.4s wall3 skipped
01
02
03
04
05
06
Sidecar JSONSkipped 3WebhooksRaw response
{ "id": "conv_01HXR3K4P7T1G2Y9", "status": "succeeded", "slides": [ { "index": 0, "title": "Q4 Business Review", "svg_url": "https://cdn.deckup.io/…/slide_01.svg", "dimensions": { "w": 1280, "h": 720 } }, // … slides 2 – 23 … { "index": 3, "title": "Org chart", "skipped": [ { "kind": "smartart", "reason": "unsupported in v1" } ] } ] }
Pep the pangolin peeking out from behind the dashboard
Clean output

One SVG per slide.

Text stays text. Shapes stay shapes. Layers preserved. Drop straight into Fabric.js, Konva, or any custom canvas — no mystery flattening.

Honest pricing

$29 to $299. No "contact sales."

Public tiers, published overage rates, free tier you can actually integrate against. Test keys free forever. Watermark removed at Starter.

Built for developers

Docs that don't make you cry.

Real curl samples. SDKs in Python, Node, and Go. HMAC-signed webhooks with retry queue. Developer-led support in hours, not days.

One POST away

The HTTP shape is the contract.

No SDK required for v1 — though Python, Node, and Go ship before public launch. Send a multipart upload, choose sync or async, get back signed URLs plus the JSON sidecar that tells you exactly what rendered and what didn't.

curl POST "https://api.deckup.io/v1/convert?mode=sync" \
  -H "Authorization: Bearer sk_live_…" \
  -F "file=@quarterly-review.pptx"

# → 200 OK
# {
#   "id": "conv_01HXR3…",
#   "slides": [{ "svg_url": "…", "title": "Q4 results" }, …],
#   "skipped": [{ "slide": 4, "kind": "smartart" }]
# }
import requests

with open("quarterly-review.pptx", "rb") as f:
    r = requests.post(
        "https://api.deckup.io/v1/convert",
        params={"mode": "sync"},
        headers={"Authorization": "Bearer sk_live_…"},
        files={"file": f},
    )
conv = r.json()

for slide in conv["slides"]:
    print(slide["title"], slide["svg_url"])

# Skipped elements are listed honestly:
print(conv["skipped"])
# [{'slide': 4, 'kind': 'smartart', 'reason': 'unsupported in v1'}]
import fs from "node:fs";

const body = new FormData();
body.append("file", new Blob([fs.readFileSync("quarterly-review.pptx")]),
  "quarterly-review.pptx");

const r = await fetch("https://api.deckup.io/v1/convert?mode=sync", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.DECKUP_KEY}` },
  body,
});
const conv = await r.json();

for (const slide of conv.slides) {
  console.log(slide.title, slide.svg_url);
}

// conv.skipped tells you exactly what didn't render.
import (
    "bytes"
    "encoding/json"
    "mime/multipart"
    "net/http"
    "os"
)

f, _ := os.Open("quarterly-review.pptx")
defer f.Close()

var buf bytes.Buffer
w := multipart.NewWriter(&buf)
part, _ := w.CreateFormFile("file", "quarterly-review.pptx")
io.Copy(part, f)
w.Close()

req, _ := http.NewRequest("POST",
    "https://api.deckup.io/v1/convert?mode=sync", &buf)
req.Header.Set("Authorization", "Bearer "+os.Getenv("DECKUP_KEY"))
req.Header.Set("Content-Type", w.FormDataContentType())

resp, _ := http.DefaultClient.Do(req)
var conv Conversion
json.NewDecoder(resp.Body).Decode(&conv)
What "clean SVG" actually means

Editable layers, not a flattened image.

Each element from the source deck lands as its own SVG node with its original position, type, and z-order. Your editor can hit-test individual shapes, restyle text runs, and round-trip metadata — without ever touching OOXML.

quarterly-review.pptx
Q4 +18.4% YoY
POST /convert
slide_01.svg
<text>
<text>
<g id="callout">
Slides converted
24 / 24
Elements rendered
418
Skipped (sidecar)
3SmartArt
Wall time
6.4s
How it works

Three calls. No infrastructure to babysit.

The whole shape of the integration. From file upload to webhook callback, everything around it — queues, retries, signed URLs, dead-lettering — is ours to operate.

01 · upload

POST your .pptx.

Multipart upload to a single endpoint. Pick sync for files under ~40 slides, async with a webhook URL for anything bigger.

# multipart file=@deck.pptx mode="sync"
02 · convert

Workers do the rendering.

Provisioned serverless capacity, no cold starts. Typical 30-slide deck: 5–10 seconds. Larger decks stream a webhook in under 60s.

# in-flight status: "running" slides: 12 / 24
03 · ingest

Pull SVGs by signed URL.

Signed URLs expire in 5 minutes; assets live in your bucket if you want them to. The sidecar JSON tells you exactly what rendered and what was skipped.

GET /slides/slide_01.svg # Expires=300s, sig=…
For the Aspose escapees

Same job. Different decade.

We're not trying to replicate every Aspose feature. We're nailing the 80% of use cases that actually matter, with an experience that respects you. Honest comparison, no marketing hand-waving.

Deckup
Aspose
Public pricing
$29 to $299/mo, on the website
$3,000+/yr, often quote-gated
Free / trial tier
25 conversions/mo, no card
Time-limited trial
Test mode
Test keys, infinite use, free
Every call costs real money
Webhooks
HMAC-SHA256, retry queue, dead-letter replay
Polling or basic webhooks, no retry
Output
Structured SVG + JSON sidecar
SVG / HTML / PDF, varying quality
Support response
Hours, developer-led
Days to weeks
SmartArt, animations, embedded video
Skipped, listed in sidecar
Partial

We don't have feature parity with Aspose. We have a better experience for the 80% of use cases people actually have. If you need SmartArt rendered today, Aspose is your tool — for now.

I'd been paying Aspose for six years to convert PowerPoint into SVG for our procedure editor at Thruline. It worked. It was also the most painful integration in our stack. So I built the thing I wished existed — Deckup is what Aspose should have been if it had been built by people who actually use APIs.
JK
Jesse, developerCTO of Thruline · former Aspose customer · current Deckup user #1
Pep celebrating
Where it shows up

Built for the surfaces that have to ingest PowerPoint.

Three categories of customer drive most v1 traffic — editor-builders, AI/RAG pipelines, and compliance scanners. All have one thing in common: PowerPoint is a required input and rolling your own converter is a quarter you don't have.

In-app slide editors

LMS, training, and SOP platforms with Fabric.js or Konva editors. Customers walk in with hundreds of existing decks — they're not going to redraw them.

Thruline · Tulip · Trainual · Dozuki

AI & RAG pipelines

Document-processing automation that needs structured slide content for embeddings, prompts, or analysis. Get SVG for visual reference and JSON for everything else.

RAG · agents · automated analysis

Compliance & audit tools

Scanning customer documents for sensitive content. Your scanner operates on clean SVG and metadata — not undocumented OOXML internals.

DLP · GRC · content review

Ready to ditch the Aspose license?

25 free conversions a month to evaluate — plus a one-time +100 bonus credit when you upgrade. No card to start. Test keys free forever. Developer-led support that responds in hours, not days.

apiapi.deckup.io
regionus-east-1
statusall systems normal
latencyp50 6.1s · p95 12.4s
versionv1.0-rc3