{"openapi":"3.1.0","info":{"title":"MagicSlides API","version":"2.0.0","summary":"Generate PowerPoint presentations from text, topics, URLs, YouTube videos, PDFs and DOCX files.","description":"MagicSlides turns a topic, summary, URL, YouTube video, PDF or DOCX into a finished, downloadable PPTX (plus PDF and editable JSON) in one call.\n\nAuthentication differs per server. Public API (api.magicslides.app): pass `apiKey` (format `ms-api-...`, created at /dashboard/settings) as a field in the JSON body — there is no header form; legacy `email` + `accessId` pairs are still accepted. Studio endpoints (www.magicslides.app/api/gpt/*): send the same key as an `x-api-key` header or `Authorization: Bearer <key>`.\n\nRate limits are per plan (see https://www.magicslides.app/docs-api/rate-limits). Exceeding them returns HTTP 429.\n\nAgents that prefer MCP over REST can connect to the MagicSlides MCP server at https://www.magicslides.app/api/mcp/mcp (Streamable HTTP, OAuth 2.1 — metadata at /.well-known/oauth-protected-resource). Tools: list_templates, create_presentation, get_template_schema, create_presentation_from_slots, get_presentation, update_presentation, create_doc, get_doc, update_doc, create_sheet, get_sheet, update_sheet, create_meeting_notes, list_frame_templates, create_frames, create_custom_frame, whoami.\n\nHuman-readable docs: https://www.magicslides.app/docs-api — site overview for LLMs: https://www.magicslides.app/llms.txt","termsOfService":"https://www.magicslides.app/terms-of-use","contact":{"name":"MagicSlides Support","email":"support@magicslides.app","url":"https://www.magicslides.app/docs-api"},"license":{"name":"Proprietary","url":"https://www.magicslides.app/terms-of-use"}},"externalDocs":{"description":"MagicSlides API documentation","url":"https://www.magicslides.app/docs-api"},"servers":[{"url":"https://api.magicslides.app/public/api","description":"Public presentation-generation API"},{"url":"https://www.magicslides.app/api","description":"MagicSlides web app (Studio / GPT endpoints)"}],"tags":[{"name":"Presentations","description":"Generate PPTX decks from any input."},{"name":"Studio","description":"Designed decks built from Studio templates (used by the MagicSlides GPT)."}],"paths":{"/ppt-from-text":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromText","security":[],"tags":["Presentations"],"summary":"Create a presentation from text, topic, URL, YouTube, PDF or DOCX (unified endpoint)","description":"Recommended for all new integrations. Detects the input type automatically: a plain topic, a summary, a website URL, a YouTube URL, a PDF URL or a DOCX URL. Returns download URLs for the generated PPTX and PDF plus the slide JSON. Generation typically takes 20–60 seconds; the call blocks until the deck is ready.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["apiKey"],"properties":{"apiKey":{"type":"string","description":"API key from /dashboard/settings. Format: ms-api-…"},"topic":{"type":"string","description":"Topic, summary or URL. URLs are auto-detected."},"summary":{"type":"string","description":"Plain-text summary to turn into slides."},"youtubeURL":{"type":"string","format":"uri","description":"YouTube video URL."},"websiteURL":{"type":"string","format":"uri","description":"Web page to extract content from."},"pdfURL":{"type":"string","format":"uri","description":"Public PDF URL."},"docxURL":{"type":"string","format":"uri","description":"Public DOCX URL."},"model":{"type":"string","enum":["gemini","gpt-4"],"default":"gemini","description":"LLM used for content."},"presentationCategory":{"type":"object","description":"Optional tone/category hints.","properties":{"category":{"type":"string"},"subCategory":{"type":"string"},"tone":{"type":"string"}}},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}},"anyOf":[{"required":["topic"]},{"required":["summary"]},{"required":["youtubeURL"]},{"required":["websiteURL"]},{"required":["pdfURL"]},{"required":["docxURL"]}]},"examples":{"topic":{"summary":"Topic → 10-slide deck","value":{"apiKey":"ms-api-xxxx","topic":"Introduction to Quantum Computing","slideCount":10,"language":"en","template":"bullet-point1"}},"youtube":{"summary":"YouTube video → deck","value":{"apiKey":"ms-api-xxxx","youtubeURL":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","slideCount":8}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/ppt_from_topic":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromTopic","security":[],"deprecated":true,"tags":["Presentations"],"summary":"Create a presentation from a topic (legacy — use /ppt-from-text)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["topic"],"properties":{"topic":{"type":"string","description":"Main topic."},"extraInfoSource":{"type":"string","description":"Extra guidance for the generator."},"apiKey":{"type":"string"},"model":{"type":"string","enum":["gpt-4","gpt-3.5"],"default":"gpt-4"},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Missing required parameters (legacy behaviour) — body `{ status: \"failed\", message: \"Something is missing...\" }`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/ppt_from_summary":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromSummary","security":[],"deprecated":true,"tags":["Presentations"],"summary":"Create a presentation from a text summary (legacy — use /ppt-from-text)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["msSummaryText"],"properties":{"msSummaryText":{"type":"string","description":"Summary text to convert."},"apiKey":{"type":"string"},"model":{"type":"string","enum":["gpt-4","gpt-3.5"],"default":"gpt-4"},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Missing required parameters (legacy behaviour) — body `{ status: \"failed\", message: \"Something is missing...\" }`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/ppt_from_youtube":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromYouTube","security":[],"deprecated":true,"tags":["Presentations"],"summary":"Create a presentation from a YouTube video (legacy — use /ppt-from-text)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["youtubeURL"],"properties":{"youtubeURL":{"type":"string","format":"uri"},"apiKey":{"type":"string"},"model":{"type":"string","enum":["gpt-4","gpt-3.5"],"default":"gpt-4"},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Missing required parameters (legacy behaviour) — body `{ status: \"failed\", message: \"Something is missing...\" }`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/ppt_from_url":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromUrl","security":[],"deprecated":true,"tags":["Presentations"],"summary":"Create a presentation from a web page (legacy — use /ppt-from-text)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["websiteURL"],"properties":{"websiteURL":{"type":"string","format":"uri","description":"Public web page to extract content from."},"apiKey":{"type":"string"},"model":{"type":"string","enum":["gpt-4","gpt-3.5"],"default":"gpt-4"},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Missing required parameters (legacy behaviour) — body `{ status: \"failed\", message: \"Something is missing...\" }`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/ppt_from_pdf":{"servers":[{"url":"https://api.magicslides.app/public/api"}],"post":{"operationId":"createPresentationFromPdf","security":[],"deprecated":true,"tags":["Presentations"],"summary":"Create a presentation from a PDF (legacy — use /ppt-from-text)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pdfURL"],"properties":{"pdfURL":{"type":"string","format":"uri","description":"Public PDF URL."},"apiKey":{"type":"string"},"model":{"type":"string","enum":["gpt-4","gpt-3.5"],"default":"gpt-4"},"email":{"type":"string","format":"email","description":"Account email (legacy auth, use apiKey instead)."},"accessId":{"type":"string","description":"Account access ID from /dashboard/settings (legacy auth, use apiKey instead)."},"template":{"type":"string","default":"bullet-point1","description":"Presentation template style."},"language":{"type":"string","default":"en","description":"Target language (ISO code)."},"slideCount":{"type":"integer","default":10,"minimum":1,"maximum":50,"description":"Number of slides to generate."},"aiImages":{"type":"boolean","default":false,"description":"Generate AI images."},"imageForEachSlide":{"type":"boolean","default":true,"description":"Place an image on every slide."},"googleImage":{"type":"boolean","default":false,"description":"Use Google Images instead of AI images."},"googleText":{"type":"boolean","default":false,"description":"Enrich content with Google search."},"presentationFor":{"type":"string","description":"Target audience, e.g. \"investors\"."},"watermark":{"$ref":"#/components/schemas/Watermark"}}}}}},"responses":{"200":{"description":"Presentation generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresentationResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Missing required parameters (legacy behaviour) — body `{ status: \"failed\", message: \"Something is missing...\" }`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/gpt/list-templates":{"servers":[{"url":"https://www.magicslides.app/api"}],"get":{"operationId":"listStudioTemplates","security":[{"StudioApiKey":[]}],"tags":["Studio"],"summary":"List the pre-designed Studio templates a deck can be built from","description":"Returns designed templates. Templates with `slotsReady: true` can be filled with YOUR OWN content via getStudioTemplateSchema + createStudioPresentationFromSlots (preferred, free). Others go through createStudioPresentation.","responses":{"200":{"description":"Template list.","content":{"application/json":{"schema":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"object","properties":{"templateKey":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"slotsReady":{"type":"boolean","description":"True → fill it yourself with getStudioTemplateSchema + createStudioPresentationFromSlots (preferred, free)."},"previewUrl":{"type":"string","format":"uri"}}}}}}}}}}}},"/gpt/create-presentation":{"servers":[{"url":"https://www.magicslides.app/api"}],"post":{"operationId":"createStudioPresentation","security":[{"StudioApiKey":[]}],"tags":["Studio"],"summary":"LEGACY: MagicSlides writes the deck copy from a topic (uses MagicSlides AI credits)","description":"Use ONLY if the user explicitly asks MagicSlides to write the content. PREFERRED path: call getStudioTemplateSchema, write every slot yourself, then createStudioPresentationFromSlots — that uses your own model and is free. Builds a designed deck from a topic and returns preview image, live slideshow URL, edit URL and PDF. Takes up to ~40s. On `status: out_of_credits`, give the user `createUrl`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["topic"],"properties":{"topic":{"type":"string","description":"What the presentation is about. Be specific."},"templateKey":{"type":"string","description":"A templateKey from listStudioTemplates."},"slides":{"type":"integer","minimum":3,"maximum":20,"default":7},"language":{"type":"string","default":"en"},"audience":{"type":"string","description":"Optional target audience."}}}}}},"responses":{"200":{"description":"The finished deck.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"previewImageUrl":{"type":"string","format":"uri","description":"PNG of the first slide."},"previewUrl":{"type":"string","format":"uri","description":"Live slideshow."},"shareUrl":{"type":"string","format":"uri"},"editUrl":{"type":"string","format":"uri","description":"Open in MagicSlides Studio."},"pdfUrl":{"type":"string","format":"uri"},"slideCount":{"type":"integer"},"templateKey":{"type":"string"},"conversationId":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/gpt/template-schema":{"servers":[{"url":"https://www.magicslides.app/api"}],"get":{"operationId":"getStudioTemplateSchema","security":[{"StudioApiKey":[]}],"tags":["Studio"],"summary":"PREFERRED step 1: get the slots to fill for a template (free, your own content)","description":"PREFERRED path for every deck: call this, write every slot yourself with your own model, then call createStudioPresentationFromSlots — it uses your own model and is free. Returns per-slide layoutKey + slot keys with one-line guidance and a cloneable example. Only templates with slotsReady=true work (default: creative-design).","parameters":[{"name":"templateKey","in":"query","required":false,"schema":{"type":"string"},"description":"A slotsReady templateKey from listStudioTemplates. Omit for the default."},{"name":"slides","in":"query","required":false,"schema":{"type":"integer","minimum":3,"maximum":20,"default":7},"description":"Number of slides to plan."}],"responses":{"200":{"description":"Slot schema to fill.","content":{"application/json":{"schema":{"type":"object","properties":{"templateKey":{"type":"string"},"slideCount":{"type":"integer"},"plan":{"type":"array","items":{"type":"string"}},"slides":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"layoutKey":{"type":"string"},"imageMode":{"type":"string"},"slots":{"type":"object","additionalProperties":{"type":"string"},"description":"slotKey → guidance for what to write."}}}},"example":{"type":"object","description":"Ready-to-clone createStudioPresentationFromSlots body with placeholders."},"byoReadyTemplates":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/gpt/create-presentation-from-slots":{"servers":[{"url":"https://www.magicslides.app/api"}],"post":{"operationId":"createStudioPresentationFromSlots","security":[{"StudioApiKey":[]}],"tags":["Studio"],"summary":"PREFERRED step 2: render a deck from slots you wrote (free, zero MagicSlides AI)","description":"Render a finished deck from slot content YOU wrote (from getStudioTemplateSchema). MagicSlides writes none of the copy, so this is free. Returns preview image, live slideshow URL, edit URL and PDF.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["templateKey","slides"],"properties":{"templateKey":{"type":"string","description":"The same slotsReady templateKey you got the schema for."},"title":{"type":"string","description":"Deck title."},"language":{"type":"string","default":"en"},"includeImages":{"type":"string","enum":["stock","none","ai"],"default":"stock","description":"How to fill *_QUERY image slots you did not give a *_URL for."},"slides":{"type":"array","minItems":3,"maxItems":20,"items":{"type":"object","required":["slots"],"properties":{"layoutKey":{"type":"string","description":"layoutKey from the schema."},"slots":{"type":"object","additionalProperties":{"type":"string"},"description":"Every slot key from the schema → your copy."}}}}}}}}},"responses":{"200":{"description":"The finished deck.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"previewImageUrl":{"type":"string","format":"uri","description":"PNG of the first slide."},"previewUrl":{"type":"string","format":"uri","description":"Live slideshow."},"shareUrl":{"type":"string","format":"uri"},"editUrl":{"type":"string","format":"uri","description":"Open in MagicSlides Studio."},"pdfUrl":{"type":"string","format":"uri"},"slideCount":{"type":"integer"},"templateKey":{"type":"string"},"conversationId":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/ServerError"}}}}},"components":{"securitySchemes":{"StudioApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Studio (/api/gpt/*) endpoints only. `Authorization: Bearer <key>` is accepted as an alternative. Keys are created at https://www.magicslides.app/dashboard/settings."}},"schemas":{"Watermark":{"type":"object","description":"Optional image watermark placed on every slide.","properties":{"width":{"type":"string","example":"48"},"height":{"type":"string","example":"48"},"brandURL":{"type":"string","format":"uri"},"position":{"type":"string","enum":["TopLeft","TopRight","BottomLeft","BottomRight"]}}},"PresentationResult":{"type":"object","required":["status","url"],"properties":{"status":{"type":"string","enum":["success","failed"]},"success":{"type":"boolean"},"message":{"type":"string"},"inputType":{"type":"string","enum":["topic","summary","youtube","website","pdf","docx"]},"url":{"type":"string","format":"uri","description":"Download URL of the generated PPTX."},"pdfUrl":{"type":"string","format":"uri","description":"Download URL of the PDF export."},"pptId":{"type":"string","description":"Presentation ID — open at https://www.magicslides.app/ppt/{pptId}."},"json":{"type":"object","description":"Slide-by-slide content as JSON."},"metadata":{"type":"object","properties":{"slideCount":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time"},"fileSize":{"type":"integer","description":"Bytes."}}}}},"Error":{"type":"object","description":"Error bodies are not uniform across endpoints. Public API: `{ status: \"failed\", message, error?: { field, message } }`; legacy endpoints answer missing parameters with HTTP 404 `{ status: \"failed\", message: \"Something is missing...\" }`; Studio endpoints return `{ error }`. Treat any non-2xx as failure and read `message` or `error` for the reason.","properties":{"status":{"type":"string","enum":["failed"]},"success":{"type":"boolean"},"message":{"type":"string","description":"Human-readable reason."},"error":{"description":"Either a message string (Studio) or `{ field, message }` naming the offending field (public API).","oneOf":[{"type":"string"},{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}]},"code":{"type":"string","description":"Machine-readable code when present, e.g. NOT_FOUND, METHOD_NOT_ALLOWED, INVALID_JSON."}}}},"responses":{"BadRequest":{"description":"Invalid or missing parameters. Note: legacy endpoints answer missing parameters with 404, not 400.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"Missing or invalid apiKey / accessId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"Plan does not allow this operation or credits exhausted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Plan rate limit exceeded. Back off and retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServerError":{"description":"Generation failed. Safe to retry once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}