UML

Kroki Diagram API

Kroki provides a unified HTTP API for generating diagrams from textual descriptions. It supports over 20 diagram types including PlantUML, Mermaid, GraphViz, BlockDiag, BPMN, C4, Structurizr, Excalidraw, Vega, and WaveDrom. Requests can be sent as GET (diagram encoded in URL) or POST (diagram in request body). Output formats include SVG, PNG, PDF, and JPEG. Kroki is open source and can be self-hosted.

OpenAPI Specification

kroki-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Kroki Diagram API
  description: >-
    Kroki provides a unified HTTP API for generating diagrams from textual
    descriptions. It supports over 20 diagram types including PlantUML,
    Mermaid, GraphViz, BlockDiag, BPMN, C4, Structurizr, Excalidraw, Vega,
    WaveDrom, and more. Diagrams can be submitted as GET requests with the
    source encoded in the URL or as POST requests with the source in the
    request body.
  version: 1.0.0
  contact:
    name: Kroki
    url: https://kroki.io/
  license:
    name: MIT
    url: https://github.com/yuzutech/kroki/blob/master/LICENSE
externalDocs:
  description: Kroki Documentation
  url: https://docs.kroki.io/kroki/
servers:
  - url: https://kroki.io
    description: Public Kroki API
tags:
  - name: Diagrams
    description: Generate diagrams from textual descriptions
  - name: Health
    description: Service health check
paths:
  /:
    get:
      operationId: getHealth
      summary: Get Service Health
      description: Returns the health status of the Kroki service.
      tags:
        - Health
      responses:
        '200':
          description: Service is healthy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
  /{diagram_type}/{output_format}/{encoded_diagram}:
    get:
      operationId: getDiagramGet
      summary: Get Diagram via GET
      description: >-
        Generates a diagram from an encoded source using a GET request. The
        diagram source must be compressed with deflate and encoded in base64url
        format. The diagram type and output format are specified in the URL path.
      tags:
        - Diagrams
      parameters:
        - name: diagram_type
          in: path
          required: true
          description: >-
            The type of diagram to generate. Supported types: plantuml, mermaid,
            graphviz, blockdiag, seqdiag, actdiag, nwdiag, packetdiag, rackdiag,
            bpmn, bytefield, c4plantuml, d2, dbml, ditaa, erd, excalidraw,
            nomnoml, pikchr, structurizr, svgbob, symbolator, tikz, umlet,
            vega, vega-lite, wavedrom, wireviz
          schema:
            type: string
            enum:
              - plantuml
              - mermaid
              - graphviz
              - blockdiag
              - seqdiag
              - actdiag
              - nwdiag
              - packetdiag
              - rackdiag
              - bpmn
              - bytefield
              - c4plantuml
              - d2
              - dbml
              - ditaa
              - erd
              - excalidraw
              - nomnoml
              - pikchr
              - structurizr
              - svgbob
              - symbolator
              - tikz
              - umlet
              - vega
              - vega-lite
              - wavedrom
              - wireviz
        - name: output_format
          in: path
          required: true
          description: >-
            Output format for the diagram. Supported formats: svg, png, jpeg,
            pdf (availability depends on diagram type)
          schema:
            type: string
            enum:
              - svg
              - png
              - jpeg
              - pdf
        - name: encoded_diagram
          in: path
          required: true
          description: Deflate + base64url encoded diagram source text
          schema:
            type: string
      responses:
        '200':
          description: Generated diagram in the requested output format
          content:
            image/svg+xml:
              schema:
                type: string
            image/png:
              schema:
                type: string
                format: binary
            image/jpeg:
              schema:
                type: string
                format: binary
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: Bad request — invalid diagram type, format, or source
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /{diagram_type}/{output_format}:
    post:
      operationId: postDiagram
      summary: Post Diagram for Rendering
      description: >-
        Generates a diagram from a plain-text source using a POST request.
        The diagram source is sent in the request body. Supports plain text
        (text/plain) or JSON (application/json) with a "diagram_source" key.
        The output format is specified in the URL path.
      tags:
        - Diagrams
      parameters:
        - name: diagram_type
          in: path
          required: true
          description: >-
            The type of diagram to generate. Supported types: plantuml, mermaid,
            graphviz, blockdiag, seqdiag, actdiag, nwdiag, bpmn, c4plantuml,
            d2, ditaa, erd, excalidraw, nomnoml, structurizr, svgbob, umlet,
            vega, vega-lite, wavedrom, wireviz
          schema:
            type: string
        - name: output_format
          in: path
          required: true
          description: Output format for the diagram (svg, png, jpeg, pdf)
          schema:
            type: string
            enum:
              - svg
              - png
              - jpeg
              - pdf
      requestBody:
        required: true
        content:
          text/plain:
            schema:
              type: string
              description: Plain text diagram source
          application/json:
            schema:
              $ref: '#/components/schemas/DiagramRequest'
      responses:
        '200':
          description: Generated diagram in the requested output format
          content:
            image/svg+xml:
              schema:
                type: string
            image/png:
              schema:
                type: string
                format: binary
            image/jpeg:
              schema:
                type: string
                format: binary
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: Bad request — invalid diagram type, format, or source
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    DiagramRequest:
      type: object
      required:
        - diagram_source
      properties:
        diagram_source:
          type: string
          description: The plain text source of the diagram to render
        diagram_options:
          type: object
          description: Optional rendering options specific to the diagram type
          additionalProperties: true
    HealthResponse:
      type: object
      properties:
        status:
          type: string
          description: Health status of the service
          example: pass
        version:
          type: string
          description: Version of the Kroki service
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message describing what went wrong
        status_code:
          type: integer
          description: HTTP status code