{"openapi":"3.1.0","info":{"title":"SOP Studio","description":"Diagram and document toolkit for SOP writing: themed flowcharts with swimlanes and typed steps, org / escalation hierarchies, timelines, RACI matrices, raw Graphviz, and a Word (.docx) SOP builder that embeds the diagrams. Diagram responses attach the PNG as a zip (openaiFileResponse) so ChatGPT can display it with Code Interpreter.","version":"2.0.0"},"servers":[{"url":"https://cybrix.ai/workflow_diagrams","description":"SOP Studio API"}],"paths":{"/health":{"get":{"tags":["meta"],"summary":"Service health check","operationId":"health","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/diagrams/flowchart":{"post":{"tags":["diagrams"],"summary":"Draw a process flowchart (optionally with swimlanes)","description":"Typed nodes, labelled edges, swimlanes by lane, optional numbering, four themes. Returns the PNG, its URL and the DOT source.","operationId":"draw_flowchart","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowchartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/diagrams/hierarchy":{"post":{"tags":["diagrams"],"summary":"Draw an org chart, escalation tree, WBS or decision tree","operationId":"draw_hierarchy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/diagrams/timeline":{"post":{"tags":["diagrams"],"summary":"Draw a timeline / simple Gantt of phases and milestones","operationId":"draw_timeline","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/diagrams/raci":{"post":{"tags":["diagrams"],"summary":"Draw a RACI responsibility matrix","operationId":"draw_raci","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaciRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/diagrams/dot":{"post":{"tags":["diagrams"],"summary":"Render raw Graphviz DOT (advanced)","description":"For graphs the structured endpoints cannot express (state machines, topologies, dependency graphs).","operationId":"render_dot","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DotRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/documents/sop":{"post":{"tags":["documents"],"summary":"Build a formatted SOP as a Word (.docx) file","description":"Builds the SOP: title block, numbered Markdown sections, embedded diagrams, revision and approval tables. Returns the .docx as a file and a download link.","operationId":"create_sop_document","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SopDocumentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}}},"components":{"schemas":{"DotRequest":{"properties":{"dot":{"type":"string","title":"Dot","description":"Raw Graphviz DOT source."},"apply_theme":{"type":"boolean","title":"Apply Theme","description":"Apply the house style as defaults; explicit attributes still win.","default":true},"theme":{"type":"string","enum":["modern","dark","mono","blueprint"],"title":"Theme","default":"modern"},"output":{"type":"string","enum":["png","svg"],"title":"Output","default":"png"}},"type":"object","required":["dot"],"title":"DotRequest"},"Edge":{"properties":{"from":{"type":"string","title":"From","description":"Source node id."},"to":{"type":"string","title":"To","description":"Target node id."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Edge text, e.g. 'Yes' / 'No'."},"style":{"type":"string","enum":["solid","dashed","dotted"],"title":"Style","default":"solid"},"color":{"type":"string","enum":["default","success","danger","warning","muted","info"],"title":"Color","description":"success = green, danger = red, warning = amber, muted = grey, info = blue.","default":"default"},"bold":{"type":"boolean","title":"Bold","description":"Thicker line for the main path.","default":false}},"type":"object","required":["from","to"],"title":"Edge"},"FlowchartRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Title printed above the diagram."},"nodes":{"items":{"$ref":"#/components/schemas/Node"},"type":"array","maxItems":80,"minItems":1,"title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/Edge"},"type":"array","maxItems":160,"title":"Edges"},"direction":{"type":"string","enum":["TB","LR"],"title":"Direction","description":"TB (top-down) or LR (left-right).","default":"TB"},"theme":{"type":"string","enum":["modern","dark","mono","blueprint"],"title":"Theme","description":"modern, dark, mono (print) or blueprint.","default":"modern"},"numbering":{"type":"boolean","title":"Numbering","description":"Number the process steps in node order.","default":false},"output":{"type":"string","enum":["png","svg"],"title":"Output","description":"png (default) or svg.","default":"png"},"engine":{"type":"string","enum":["swimlane","graphviz"],"title":"Engine","description":"swimlane (default: tidy lanes, orthogonal arrows) or graphviz (organic layout).","default":"swimlane"}},"type":"object","required":["nodes"],"title":"FlowchartRequest"},"HierarchyNode":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent","description":"Parent node id; omit for the root."},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle","description":"Secondary text."},"kind":{"anyOf":[{"type":"string","enum":["start","end","process","decision","subprocess","document","data","input","delay","database","note","connector"]},{"type":"null"}],"title":"Kind","description":"Optional colour by kind."}},"type":"object","required":["id","label"],"title":"HierarchyNode"},"HierarchyRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"nodes":{"items":{"$ref":"#/components/schemas/HierarchyNode"},"type":"array","maxItems":120,"minItems":1,"title":"Nodes","description":"Tree nodes linked by parent."},"direction":{"type":"string","enum":["TB","LR"],"title":"Direction","default":"TB"},"theme":{"type":"string","enum":["modern","dark","mono","blueprint"],"title":"Theme","default":"modern"},"output":{"type":"string","enum":["png","svg"],"title":"Output","default":"png"}},"type":"object","required":["nodes"],"title":"HierarchyRequest"},"Node":{"properties":{"id":{"type":"string","title":"Id","description":"Short unique id."},"label":{"type":"string","title":"Label","description":"Short imperative phrase shown in the shape."},"kind":{"type":"string","enum":["start","end","process","decision","subprocess","document","data","input","delay","database","note","connector"],"title":"Kind","description":"Shape of the step (decision = yes/no diamond, subprocess = another SOP, note = annotation).","default":"process"},"lane":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lane","description":"Swimlane (role or department performing the step)."},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle","description":"Secondary text under the label."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Side note attached with a dashed line."}},"type":"object","required":["id","label"],"title":"Node"},"RaciRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"roles":{"items":{"type":"string"},"type":"array","maxItems":12,"minItems":1,"title":"Roles","description":"Column labels (roles)."},"rows":{"items":{"$ref":"#/components/schemas/RaciRow"},"type":"array","maxItems":40,"minItems":1,"title":"Rows","description":"One row per task."},"theme":{"type":"string","enum":["modern","dark","mono","blueprint"],"title":"Theme","default":"modern"}},"type":"object","required":["roles","rows"],"title":"RaciRequest"},"RaciRow":{"properties":{"task":{"type":"string","title":"Task","description":"Row label."},"cells":{"items":{"type":"string"},"type":"array","title":"Cells","description":"One entry per role, same order as roles: '', 'R', 'A', 'C', 'I' or 'A/R'."}},"type":"object","required":["task","cells"],"title":"RaciRow"},"SopApproval":{"properties":{"role":{"type":"string","title":"Role"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","required":["role"],"title":"SopApproval"},"SopDiagram":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"image_url returned earlier by a draw action."},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"}},"type":"object","required":["image_url"],"title":"SopDiagram"},"SopDocumentRequest":{"properties":{"title":{"type":"string","title":"Title"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Id","description":"e.g. SOP-IT-014"},"version":{"type":"string","title":"Version","default":"1.0"},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"classification":{"type":"string","title":"Classification","description":"Label printed in the header.","default":"Internal"},"review_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Cycle"},"overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overview","description":"One-sentence purpose under the title."},"sections":{"items":{"$ref":"#/components/schemas/SopSection"},"type":"array","maxItems":30,"minItems":1,"title":"Sections"},"diagrams":{"items":{"$ref":"#/components/schemas/SopDiagram"},"type":"array","maxItems":12,"title":"Diagrams"},"revisions":{"items":{"$ref":"#/components/schemas/SopRevision"},"type":"array","title":"Revisions"},"approvals":{"items":{"$ref":"#/components/schemas/SopApproval"},"type":"array","title":"Approvals"},"also_markdown":{"type":"boolean","title":"Also Markdown","description":"Also return a Markdown copy.","default":false}},"type":"object","required":["title","sections"],"title":"SopDocumentRequest"},"SopRevision":{"properties":{"version":{"type":"string","title":"Version"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"},"change":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change"}},"type":"object","required":["version"],"title":"SopRevision"},"SopSection":{"properties":{"heading":{"type":"string","title":"Heading","description":"e.g. Purpose, Scope, Procedure, Verification, References."},"body":{"type":"string","title":"Body","description":"Section text in Markdown (bullets, numbered steps, ### sub-headings, pipe tables, code fences, > callouts)."},"diagrams":{"items":{"type":"integer"},"type":"array","title":"Diagrams","description":"Indices into diagrams to embed after this section."}},"type":"object","required":["heading","body"],"title":"SopSection"},"TimelineItem":{"properties":{"label":{"type":"string","title":"Label"},"start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start","description":"Start; omit to follow the previous item."},"end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End","description":"End; or give duration instead."},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration","description":"Length when end is omitted."},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group","description":"Group used for colour and legend."},"milestone":{"type":"boolean","title":"Milestone","description":"Draw as a milestone diamond.","default":false}},"type":"object","required":["label"],"title":"TimelineItem"},"TimelineRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"unit":{"type":"string","title":"Unit","description":"Unit label: minutes, hours, days, weeks.","default":"days"},"entries":{"items":{"$ref":"#/components/schemas/TimelineItem"},"type":"array","maxItems":40,"minItems":1,"title":"Entries","description":"Items in order."},"theme":{"type":"string","enum":["modern","dark","mono","blueprint"],"title":"Theme","default":"modern"},"show_values":{"type":"boolean","title":"Show Values","default":true}},"type":"object","required":["entries"],"title":"TimelineRequest"}}}}