{"openapi":"3.1.0","info":{"title":"SayDiagram Public API","version":"1.0.0","description":"Create saved Mermaid diagrams from a text idea or an image. Requires a Pro or Team API key (Profile → API keys). Human docs: https://saydiagram.com/doc/public-api Agent playbook: https://saydiagram.com/doc/agents llms.txt: https://saydiagram.com/llms.txt","contact":{"url":"https://saydiagram.com"}},"servers":[{"url":"https://saydiagram.com/api/v1","description":"Production v1"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"sd_live_","description":"API key from Profile → API keys. Format: sd_live_… Shown once at create."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Same secret as Bearer (sd_live_…)"}},"schemas":{"Diagram":{"type":"object","required":["id","title","slug","content","layoutJson","visibility","folderId","createdAt","updatedAt","editorUrl"],"properties":{"id":{"type":"string","description":"Diagram id"},"title":{"type":"string"},"slug":{"type":"string"},"content":{"type":"string","description":"Mermaid source"},"layoutJson":{"type":["string","null"]},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC","UNLISTED"]},"folderId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"editorUrl":{"type":"string","format":"uri","description":"Open this diagram in the SayDiagram editor"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string","description":"Machine code when present (API_KEY_INVALID, API_KEY_PLAN_REQUIRED, IDEA_GENERATE_DAILY_LIMIT, IMAGE_SCAN_DAILY_LIMIT, AI_RATE_LIMIT, …)"},"limit":{"type":"number","description":"Quota limit when a daily cap applies"}}},"UsageLimit":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":["number","null"]},"remaining":{"type":["number","null"]}}},"MeResponse":{"type":"object","properties":{"plan":{"type":"string","enum":["FREE","PRO","TEAM"]},"effectivePlan":{"type":"string","enum":["FREE","PRO","TEAM"]},"viaTeamMembership":{"type":"boolean"},"entitlements":{"type":"object","properties":{"ideaGenerations":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":["number","null"]},"remaining":{"type":["number","null"]}}},"imageScans":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":["number","null"]},"remaining":{"type":["number","null"]}}},"aiLayouts":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":["number","null"]},"remaining":{"type":["number","null"]}}}}}}},"FromIdeaRequest":{"type":"object","required":["idea"],"properties":{"idea":{"type":"string","maxLength":2000,"description":"Plain-language description of the diagram"},"diagramType":{"type":"string","enum":["flowchart","sequence","er","state","class","mindmap","timeline","requirement","pie","gantt","gitgraph","c4","sankey"],"description":"Optional preferred Mermaid diagram type"},"folderId":{"type":"string","description":"Optional folder owned by the key user"}}},"FromImageJsonRequest":{"type":"object","required":["imageBase64"],"properties":{"imageBase64":{"type":"string","description":"Raw base64 or data URL (data:image/png|jpeg|webp;base64,…)"},"mimeType":{"type":"string","enum":["image/png","image/jpeg","image/webp"]},"filename":{"type":"string"},"folderId":{"type":"string"}}}}},"paths":{"/me":{"get":{"operationId":"getMe","summary":"Current plan and daily AI quotas","responses":{"200":{"description":"Entitlement snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Plan required or other forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/diagrams/from-idea":{"post":{"operationId":"createDiagramFromIdea","summary":"Create a diagram from a text idea","description":"Counts against daily idea quota (Pro/Team: 100/day UTC).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FromIdeaRequest"}}}},"responses":{"201":{"description":"Diagram created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Diagram"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Quota or plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"AI rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/diagrams/from-image":{"post":{"operationId":"createDiagramFromImage","summary":"Create a diagram from an image","description":"PNG, JPEG, or WebP up to 4MB. Counts against daily scan quota (Pro/Team: 20/day UTC). Multipart field name: file. Or JSON body with imageBase64.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"folderId":{"type":"string"}}}},"application/json":{"schema":{"$ref":"#/components/schemas/FromImageJsonRequest"}}}},"responses":{"201":{"description":"Diagram created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Diagram"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Quota or plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"AI rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}