Getting started
Create a key from your profile.
Send it as a Bearer token.
Use public HTTPS URLs for media.
Authentication
Every documented public endpoint accepts the same key. Resources are always scoped to the authenticated owner.
Authorization: Bearer qqm_live_REPLACE_WITH_YOUR_KEY
Content-Type: application/jsonGeneration
/api/studio/generateGenerates a hosted PNG or MP4 and can add it to My creations.
Endpoint limit: 20 requests per minute.
Quick mode
Quick mode covers common settings without requiring a complete Studio snapshot.
curl --request POST "https://www.quickquotemaker.com/api/studio/generate" \
--header "Authorization: Bearer qqm_live_REPLACE_WITH_YOUR_KEY" \
--header "Content-Type: application/json" \
--data '{
"mode": "quick",
"name": "Daily inspiration",
"quick": {
"text": "The future depends on what you do today.",
"author": "Mahatma Gandhi",
"ratio": "instagramPost",
"fontFamily": "Playfair Display",
"textColor": "#ffffff",
"align": "center",
"quoteMark": "curly",
"bold": true,
"background": {
"type": "gradient",
"from": "#0f172a",
"to": "#2563eb"
}
}
}'| Field | Required | Description |
|---|---|---|
| quick.text | Yes | 1–2,000 characters |
| quick.author | No | Up to 300 characters |
| quick.freeText | No | Up to 2,000 characters |
| quick.ratio | No | Any supported output ratio |
| quick.background | No | Solid, gradient, or public image |
| name | No | Name in My creations |
| record | No | Defaults to true |
Snapshot mode
Snapshot mode accepts the complete Quote Studio design: independent typography for all three text areas, background, filters, overlay, border, shadows, text boxes, transforms, positions, and watermarks.
{
"mode": "snapshot",
"name": "Story campaign",
"design": {
"quote": "Build something worth sharing.",
"author": "QuickQuoteMaker",
"freeText": "@yourbrand",
"ratio": "tiktok",
"bgMode": "image",
"overlayOn": true,
"overlayColor": "#020617",
"overlayOpacity": 45,
"fontFamily": "Comfortaa",
"fontSize": 68,
"textColor": "#ffffff",
"align": "center",
"bold": true,
"watermarkTextOn": true,
"watermarkText": "quickquotemaker.com"
},
"backgroundUrl": "https://images.example.com/background.jpg",
"record": true
}backgroundUrl overrides the image in design. Omitted fields use the Studio’s normalized defaults.
Video background
A public HTTPS video URL produces a silent MP4 with Studio text, filters, overlay, watermarks, and border.
{
"mode": "snapshot",
"design": {
"quote": "Motion makes the message visible.",
"author": "QuickQuoteMaker",
"ratio": "instagramStory",
"bgMode": "video"
},
"videoUrl": "https://cdn.example.com/background.mp4",
"durationSeconds": 8,
"record": true
}- Source video: 50 MB maximum.
- Duration: 2–15 seconds, default 6 seconds.
- videoUrl overrides every other background.
- The output contains no audio track.
Collections
/api/collectionsLists collection metadata.
/api/collectionsCreates a collection and returns its ID.
/api/collections/{id}Returns a collection with every slide.
/api/collections/{id}Replaces the title and/or complete slide list.
/api/collections/{id}Permanently deletes a collection.
curl --request POST "https://www.quickquotemaker.com/api/collections" \
--header "Authorization: Bearer qqm_live_REPLACE_WITH_YOUR_KEY" \
--header "Content-Type: application/json" \
--data '{
"title": "Daily inspiration",
"slides": [{
"id": "slide-1",
"durationSeconds": 2.5,
"transition": "slide",
"design": {
"snapshot": {
"quote": "Begin with one clear step.",
"ratio": "tiktok"
},
"videoUrl": "https://cdn.example.com/background.mp4",
"posterUrl": "https://cdn.example.com/poster.jpg",
"startSeconds": 1.5,
"marker": false,
"bgMode": "video"
}
}]
}'- Maximum 60 slides per collection.
durationSeconds: 1–30. Fractional values are accepted, for example 2.5.transition:fade,slide,zoom,cut.design.bgMode:gradient,solid,image,video.- Video background: set
design.videoUrlanddesign.posterUrl. design.startSeconds: 0–3600. Offsets where the clip starts, to skip a weak opening. Ignored unless the background is a video.design.marker: boolean. Flags a pattern-interrupt card (TOP 10, TOP 5): its title punches in harder than a normal slide.- Titles are unique per user, ignoring case and redundant whitespace.
- A duplicate title returns HTTP 409 with collection_title_duplicate.
Reference
Available formats
square 1080×1080portrait 1080×1350landscape 1200×675instagramPost 1080×1080instagramPortrait 1080×1440instagramStory 1440×2560instagramLandscape 1080×566tiktok 1080×1920tiktokSquare 1080×1080facebook 1440×1800facebookSquare 1440×1440facebookStory 1440×2560x 1920×1080xSquare 1080×1080pinterest 1000×1500pinterestSquare 1000×1000linkedinPost 1200×675linkedinSquare 1200×1200linkedinPortrait 720×900linkedinBanner 1584×396youtube 1080×1080youtubeBanner 2560×1440customGeneration response
{
"id": "f3f0ea51-086d-4bc2-8f63-5c63e73db902",
"url": "https://PROJECT.supabase.co/storage/v1/object/public/downloaded-images/ID.png",
"width": 1080,
"height": 1080,
"format": "PNG"
}Global rate limiting
Limited responses use HTTP 429 and include Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.
| Endpoint | Limit |
|---|---|
| POST /api/studio/generate | 20 / min |
| GET · POST /api/collections | 30 / min |
| GET · PATCH /api/collections/{id} | 60 / min |
| DELETE /api/collections/{id} | 30 / min |
Errors
| HTTP | Error | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed JSON |
| 401 | unauthorized | Missing, invalid, revoked, or regenerated key |
| 404 | not_found | Resource absent or owned by another user |
| 409 | collection_title_duplicate | Collection title already used |
| 422 | invalid_payload | Validation failed |
| 422 | invalid_video | Unavailable, private, invalid, or oversized source |
| 429 | rate_limit_exceeded | Request limit reached |
| 500 | render_failed | Media rendering failed |
| 503 | not_configured | Service configuration unavailable |
In production, error responses only carry the error field. Internal details (database message, code, and hint) are stripped and stay in the server logs.
What’s new
2026-08-26
Security and documented limits
- Error responses no longer leak database details in production.
- Rate limits are now documented endpoint by endpoint.
- Gallery submission now requires a session and is rate limited per user instead of per IP address.
- Authentication endpoints are protected against brute force and sessions expire after 8 hours.
2026-08-25
Safer collections and ZIP export
- The new Emoji menu provides icons, emojis, and shapes that can be added, moved, and customized on the canvas.
- The canvas Position and dimensions inspector now appears only when an object is selected.
- Text and social watermarks can now be edited directly on the canvas by double-clicking or using the pencil button.
- Undo/redo now provides complete, step-by-step session history with background restoration and keyboard shortcuts.
- Quote Studio now includes grids, rulers, alignment guides, snapping, customizable margins and text width, plus a numeric X/Y/W/H inspector.
- The Format menu can preview safe zones and simulated interface controls for each social platform without including them in exports.
- The quote, author, and free text can now be edited directly on the Quote Studio canvas.
- Duplicate collection titles are rejected by both Studio and API.
- The collection_title_duplicate error is now documented.
- Quote Studio can download collection slides as an ordered ZIP of PNG files.
- Collection deletion now requires confirmation in Quote Studio and Profile.
2026-08-24
Video collections
- Fade, slide, zoom, and cut transitions.
- Slide duration from 1 to 30 seconds and up to 60 slides.
- PNG generation and MP4 generation from remote video backgrounds.