StableDesign API
StableDesign wraps the Canva Connect API behind MPP micropayments on Tempo. Create designs, list them, export to images/PDFs, and upload assets — all via simple HTTP calls. A one-time OAuth flow connects your Canva account.
Setup
Before calling paid endpoints, complete the Canva OAuth flow once:
- Visit
/api/oauth/authorizein a browser. - Authorize the StableDesign integration in Canva.
- The server stores the token — all subsequent API calls use it automatically.
Endpoints
GET /api/health— free. Returns{"status":"ok"}.GET /api/user— free. Returns the authenticated Canva user profile (user_id, team_id).POST /api/designs/create— $0.01. Body:preset("doc" | "presentation" | "email" | "whiteboard"), optionaltitle, optionalasset_id, orwidth+heightfor custom dimensions.GET /api/designs/list— $0.01. Query params:ownership("owned" | "shared" | "any"),sort_by,continuationfor pagination.POST /api/designs/get— $0.01. Body:design_id(required). Returns design details with edit URL, view URL, thumbnail, page count.POST /api/designs/export— $0.02. Body:design_id(required),format({"type": "pdf"}or "png" | "jpg" | "gif" | "pptx" | "mp4"). Returns export job with download URL. Note: Not all formats work with all design types — e.g. "doc" designs only support PDF export, not PNG/JPG. Use PDF as the safe default.POST /api/assets/upload— $0.01. Body:name(1–50 chars),url(public URL of image/video). Supports JPEG, PNG, GIF, WebP, HEIC, TIFF, MP4, WebM, MKV.
Pricing
| Endpoint | USD |
|---|---|
| designs/create | $0.01 |
| designs/list | $0.01 |
| designs/get | $0.01 |
| designs/export | $0.02 |
| assets/upload | $0.01 |
| user | free |
Payments are in pathUSD (USDC equivalent on Tempo testnet). Use an MPP-compatible client to handle the 402 challenge automatically.
Export format compatibility
| Design type | Supported formats |
|---|---|
| doc | |
| presentation | pdf, pptx, png, jpg |
| pdf, png, jpg | |
| whiteboard | pdf, png, jpg |
| custom (width+height) | pdf, png, jpg, gif |
Requesting an unsupported format returns a 400 error from Canva. Use PDF as the safe default — it works with all design types.
Notes
- Blank designs auto-delete after 7 days if not edited in Canva.
- Export download URLs are valid for 24 hours.
- Canva rate limits: ~20 requests/minute per user for most operations.
- Design export is async — the API polls for up to 30 seconds. If the export is still in progress, you'll receive the job status and can poll manually.
- Asset upload is also async — the API polls for up to 15 seconds before returning the job status.
- All paid endpoints charge on request, even if the underlying Canva operation fails (e.g. invalid design_id, unsupported format). Check your inputs before calling.
Upstream
All design operations are backed by the Canva Connect API. Outage or breakage is forwarded as 502.