{
    "openapi": "3.1.0",
    "info": {
        "title": "Brandhub REST-API",
        "version": "1.0.0",
        "description": "Die REST-API liest und \u00e4ndert die Inhalte einer Marke als JSON. Brandhub bestimmt die Marke aus dem API-Key, einen Marken-Parameter gibt es nicht. Lesende Endpunkte brauchen das Recht `read`, schreibende `write`. Listen kommen als JSON-Array auf oberster Ebene, ohne `data`-H\u00fclle. Schreibende Aufrufe \u00e4ndern das Portal sofort, Brandhub versioniert jede \u00c4nderung."
    },
    "servers": [
        {
            "url": "https://{marke}.brandhub.31m.de/api/v1",
            "description": "Brandhub",
            "variables": {
                "marke": {
                    "default": "ihre-marke",
                    "description": "Subdomain Ihres Portals"
                }
            }
        }
    ],
    "tags": [
        {
            "name": "Marke"
        },
        {
            "name": "Corporate Language"
        },
        {
            "name": "Markenkontext"
        },
        {
            "name": "Seiten"
        },
        {
            "name": "Bl\u00f6cke"
        },
        {
            "name": "Medien"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "paths": {
        "/brand": {
            "get": {
                "operationId": "get-brand",
                "description": "Liefert Name, Slug und Theme der Marke mit Farben je Rolle, Palette und Schriften je Rolle. Farben und Schriften pflegen Sie im Backend, \u00fcber die API sind sie nur lesbar.",
                "summary": "Marke abrufen",
                "tags": [
                    "Marke"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "slug": {
                                            "type": "string"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "theme": {
                                            "type": "object",
                                            "properties": {
                                                "colors": {
                                                    "type": "object",
                                                    "properties": {
                                                        "primary": {
                                                            "type": "string"
                                                        },
                                                        "accent": {
                                                            "type": "string"
                                                        },
                                                        "background": {
                                                            "type": "string"
                                                        },
                                                        "text": {
                                                            "type": "string"
                                                        },
                                                        "link": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "primary",
                                                        "accent",
                                                        "background",
                                                        "text",
                                                        "link"
                                                    ]
                                                },
                                                "palette": {
                                                    "type": "array",
                                                    "items": {
                                                        "$ref": "#/components/schemas/BrandColor"
                                                    }
                                                },
                                                "font": {
                                                    "type": "string"
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "role": {
                                                                "type": "string"
                                                            },
                                                            "family": {
                                                                "type": "string"
                                                            },
                                                            "base_weight": {
                                                                "type": [
                                                                    "integer",
                                                                    "null"
                                                                ]
                                                            },
                                                            "faces": {
                                                                "type": "array",
                                                                "items": {
                                                                    "type": "object",
                                                                    "properties": {
                                                                        "weight": {
                                                                            "type": "integer"
                                                                        },
                                                                        "style": {
                                                                            "type": "string"
                                                                        }
                                                                    },
                                                                    "required": [
                                                                        "weight",
                                                                        "style"
                                                                    ]
                                                                }
                                                            }
                                                        },
                                                        "required": [
                                                            "role",
                                                            "family",
                                                            "base_weight",
                                                            "faces"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "colors",
                                                "palette",
                                                "font",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "slug",
                                        "name",
                                        "theme"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/brand/colors": {
            "get": {
                "operationId": "list-brand-colors",
                "description": "Liefert je Farbe ID, Name, Rolle und Beschreibung. Mit `?expand=full` kommen alle Werte wie bei der Einzelabfrage.",
                "summary": "Markenfarben auflisten",
                "tags": [
                    "Marke"
                ],
                "parameters": [
                    {
                        "name": "expand",
                        "in": "query",
                        "description": "Mit `full` liefert die Liste alle Farbwerte samt Abstufungen.",
                        "schema": {
                            "type": "string",
                            "const": "full"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `BrandColor`\n\nArray of `BrandColorSummary`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/BrandColor"
                                            }
                                        },
                                        {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/BrandColorSummary"
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/brand/colors/{id}": {
            "get": {
                "operationId": "get-brand-color",
                "description": "Liefert eine Farbe mit HEX, RGB, CMYK, Pantone, RAL und Abstufungen.",
                "summary": "Markenfarbe abrufen",
                "tags": [
                    "Marke"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`BrandColor`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BrandColor"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/brand/cl": {
            "get": {
                "operationId": "get-corporate-language",
                "description": "Liefert die gesamte Corporate Language als strukturiertes Dokument. Hat die Marke noch keinen Stand, sind die Sektionen leer. Setzt das Modul \u201eCorporate Language\u201c voraus, sonst `404`.",
                "summary": "Corporate Language abrufen",
                "tags": [
                    "Corporate Language"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "brand": {
                                            "anyOf": [
                                                {
                                                    "type": "string"
                                                },
                                                {}
                                            ]
                                        },
                                        "schema_version": {
                                            "anyOf": [
                                                {
                                                    "type": "string"
                                                },
                                                {}
                                            ]
                                        },
                                        "version": {
                                            "anyOf": [
                                                {
                                                    "type": "integer"
                                                },
                                                {}
                                            ]
                                        },
                                        "status": {
                                            "anyOf": [
                                                {
                                                    "type": "string"
                                                },
                                                {}
                                            ]
                                        }
                                    },
                                    "required": [
                                        "brand",
                                        "schema_version",
                                        "version",
                                        "status"
                                    ],
                                    "additionalProperties": {}
                                }
                            }
                        }
                    }
                }
            }
        },
        "/brand/cl/{section}": {
            "get": {
                "operationId": "get-corporate-language-section",
                "description": "Liefert eine Sektion unter ihrem Namen als Schl\u00fcssel, zum Beispiel `{ \"voice\": { \u2026 } }`. Eine unbekannte Sektion endet mit `404`.",
                "summary": "Sektion abrufen",
                "tags": [
                    "Corporate Language"
                ],
                "parameters": [
                    {
                        "name": "section",
                        "in": "path",
                        "required": true,
                        "description": "Name der Sektion.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "meta",
                                "voice",
                                "terminology",
                                "company_name",
                                "notation"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Die Sektion unter ihrem Namen als Schl\u00fcssel.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "object",
                                        "additionalProperties": {}
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/ModelNotFoundException"
                    }
                }
            },
            "patch": {
                "operationId": "update-corporate-language-section",
                "description": "Ersetzt eine Sektion vollst\u00e4ndig, die anderen Sektionen bleiben unver\u00e4ndert. Senden Sie die Sektion als Objekt, direkt oder unter ihrem Namen wie in der Antwort von `GET`. `meta` ist nicht schreibbar und endet mit `422`, ebenso ein Body, der kein Objekt ist, oder Felder mit falschem Typ.",
                "summary": "Sektion ersetzen",
                "tags": [
                    "Corporate Language"
                ],
                "parameters": [
                    {
                        "name": "section",
                        "in": "path",
                        "required": true,
                        "description": "Name der Sektion.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "voice",
                                "terminology",
                                "company_name",
                                "notation"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Die gespeicherte Sektion unter ihrem Namen als Schl\u00fcssel.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "object",
                                        "additionalProperties": {}
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "An error\n\nAn error\n\nAn error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "message": {
                                                    "type": "string",
                                                    "description": "Error overview.",
                                                    "examples": [
                                                        "Diese Sektion ist nicht \u00fcber die API schreibbar."
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "message"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "message": {
                                                    "type": "string",
                                                    "description": "Error overview.",
                                                    "examples": [
                                                        "Payload muss ein Objekt der Sektion sein."
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "message"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "message": {
                                                    "type": "string",
                                                    "description": "Error overview.",
                                                    "examples": [
                                                        "Ung\u00fcltige Feldstruktur in der Sektion."
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "message"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/ModelNotFoundException"
                    }
                }
            }
        },
        "/brand/context": {
            "get": {
                "operationId": "list-brand-context",
                "description": "Liefert den gepr\u00fcften Markenkontext, je Eintrag mit Kategorie, Titel, Text und Belegen. Setzt das Modul \u201eMarkenagent (KI)\u201c voraus, sonst `404`. Auf eine unbekannte Kategorie antwortet die API mit `422` und listet die g\u00fcltigen.",
                "summary": "Markenkontext abrufen",
                "tags": [
                    "Markenkontext"
                ],
                "parameters": [
                    {
                        "name": "category",
                        "in": "query",
                        "description": "Filtert auf eine Kategorie.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "positioning",
                                "audiences",
                                "offering",
                                "competition",
                                "messages",
                                "history",
                                "faq",
                                "other"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "id": {
                                                "type": "string"
                                            },
                                            "category": {
                                                "type": "string"
                                            },
                                            "category_label": {
                                                "type": "string"
                                            },
                                            "title": {
                                                "type": "string"
                                            },
                                            "body": {
                                                "type": "string"
                                            },
                                            "sources": {
                                                "type": "array",
                                                "items": {}
                                            }
                                        },
                                        "required": [
                                            "id",
                                            "category",
                                            "category_label",
                                            "title",
                                            "body",
                                            "sources"
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "const": "Unbekannte Kategorie."
                                        },
                                        "categories": {
                                            "type": "array",
                                            "items": {}
                                        }
                                    },
                                    "required": [
                                        "message",
                                        "categories"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/ModelNotFoundException"
                    }
                }
            }
        },
        "/pages": {
            "get": {
                "operationId": "list-pages",
                "description": "Liefert alle Seiten in Navigations-Reihenfolge, ohne Inhalt.",
                "summary": "Seiten auflisten",
                "tags": [
                    "Seiten"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `PageSummary`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/PageSummary"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "create-page",
                "description": "Legt eine Seite an, optional mit bis zu 200 Start-Bl\u00f6cken. Ohne `slug` bildet Brandhub ihn aus dem Titel. Ein Kapitel (`type: container`) gruppiert nur und tr\u00e4gt keine Bl\u00f6cke.",
                "summary": "Seite anlegen",
                "tags": [
                    "Seiten"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "slug": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "parent_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "nav_expansion": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "collapsible",
                                            "pinned_open",
                                            null
                                        ]
                                    },
                                    "type": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "Inhaltsseite (`guideline`, Standard) oder Navigationskapitel (`container`).",
                                        "enum": [
                                            "guideline",
                                            "container",
                                            null
                                        ]
                                    },
                                    "blocks": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "description": "Start-Bl\u00f6cke, je ein Objekt mit `type` und `data`.",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "type": {
                                                    "type": "string"
                                                },
                                                "data": {
                                                    "type": "object",
                                                    "additionalProperties": {}
                                                }
                                            },
                                            "required": [
                                                "type"
                                            ]
                                        }
                                    }
                                },
                                "required": [
                                    "title"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationException"
                    }
                }
            }
        },
        "/pages/{page}": {
            "get": {
                "operationId": "get-page",
                "description": "Liefert eine Seite mit allen Bl\u00f6cken und deren stabilen IDs.",
                "summary": "Seite abrufen",
                "tags": [
                    "Seiten"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    }
                }
            },
            "patch": {
                "operationId": "update-page",
                "description": "\u00c4ndert Titel, \u00fcbergeordnetes Kapitel oder Aufklapp-Verhalten einer Seite. Die Bl\u00f6cke bleiben unver\u00e4ndert. `title` ist Pflicht, `parent_id` und `nav_expansion` sind optional.",
                "summary": "Seite \u00e4ndern",
                "tags": [
                    "Seiten"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "parent_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "nav_expansion": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "collapsible",
                                            "pinned_open",
                                            null
                                        ]
                                    }
                                },
                                "required": [
                                    "title"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "delete-page",
                "description": "Legt die Seite in den Papierkorb. Dort bleibt sie 30 Tage wiederherstellbar, ihr Slug bleibt so lange belegt. Hat die Seite aktive Unterseiten, antwortet die API mit `422`.",
                "summary": "Seite l\u00f6schen",
                "tags": [
                    "Seiten"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    }
                }
            }
        },
        "/pages/{page}/blocks": {
            "post": {
                "operationId": "append-block",
                "description": "H\u00e4ngt einen Block ans Seitenende und liefert die vollst\u00e4ndige Seite mit der neuen Block-ID. Brandhub pr\u00fcft den Block wie der Editor im Backend. Unbekannte Typen enden mit `422`, unbekannte Felder verwirft die API, HTML bereinigt sie.",
                "summary": "Block anh\u00e4ngen",
                "tags": [
                    "Bl\u00f6cke"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "type": {
                                        "type": "string",
                                        "description": "Block-Typ, zum Beispiel `heading`, `rich_text` oder `alert`."
                                    },
                                    "data": {
                                        "type": "object",
                                        "description": "Felder des Blocks, je nach Typ.",
                                        "additionalProperties": {}
                                    }
                                },
                                "required": [
                                    "type"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/pages/{page}/blocks/{block}": {
            "patch": {
                "operationId": "update-block",
                "description": "\u00c4ndert einen Block. Gesendete Felder in `data` \u00fcberschreiben, nicht gesendete bleiben erhalten. Den Typ eines Blocks \u00e4ndert dieser Aufruf nicht.",
                "summary": "Block \u00e4ndern",
                "tags": [
                    "Bl\u00f6cke"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "block",
                        "in": "path",
                        "required": true,
                        "description": "ID des Blocks, aus `blocks[].id` der Seite.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "data": {
                                        "type": "object",
                                        "description": "Zu \u00e4ndernde Felder des Blocks.",
                                        "additionalProperties": {}
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "An error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "description": "Error overview.",
                                            "examples": [
                                                "Dieser Block-Typ ist in v1 nicht \u00fcber die API \u00e4nderbar."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "message"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/ModelNotFoundException"
                    }
                }
            },
            "delete": {
                "operationId": "delete-block",
                "description": "Entfernt einen Block und liefert die vollst\u00e4ndige Seite.",
                "summary": "Block entfernen",
                "tags": [
                    "Bl\u00f6cke"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "block",
                        "in": "path",
                        "required": true,
                        "description": "ID des Blocks, aus `blocks[].id` der Seite.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/ModelNotFoundException"
                    }
                }
            }
        },
        "/pages/{page}/content": {
            "put": {
                "operationId": "replace-page-content",
                "description": "Ersetzt den gesamten Inhalt einer Seite durch bis zu 200 Bl\u00f6cke. \u00c4ndern Sie einzelne Bl\u00f6cke lieber \u00fcber ihre ID, dieser Aufruf ist f\u00fcr F\u00e4lle gedacht, in denen das nicht reicht.",
                "summary": "Inhalt ersetzen",
                "tags": [
                    "Bl\u00f6cke"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "path",
                        "required": true,
                        "description": "ID der Seite.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "blocks": {
                                        "type": "array",
                                        "description": "Die neuen Bl\u00f6cke, je ein Objekt mit `type` und `data`.",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "type": {
                                                    "type": "string"
                                                },
                                                "data": {
                                                    "type": "object",
                                                    "additionalProperties": {}
                                                }
                                            },
                                            "required": [
                                                "type"
                                            ]
                                        }
                                    }
                                },
                                "required": [
                                    "blocks"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`Page`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Page"
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationException"
                    }
                }
            }
        },
        "/media": {
            "get": {
                "operationId": "list-media",
                "description": "Liefert freigegebene, fertig verarbeitete Medien. Bild- und Asset-Bl\u00f6cke verweisen auf IDs aus dieser Liste, fremde oder erfundene IDs lehnt die API mit `422` ab.",
                "summary": "Medien auflisten",
                "tags": [
                    "Medien"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `MediaItem`",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/MediaItem"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "description": "API-Key der Marke als Bearer-Token.",
                "scheme": "bearer"
            }
        },
        "schemas": {
            "BrandColor": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "role": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "hex": {
                        "type": "string"
                    },
                    "rgb": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "cmyk": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "pantone": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ral": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "shades": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "opacity": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "hex": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            },
                            "required": [
                                "opacity",
                                "hex"
                            ]
                        }
                    }
                },
                "required": [
                    "id",
                    "name",
                    "description",
                    "role",
                    "hex",
                    "rgb",
                    "cmyk",
                    "pantone",
                    "ral",
                    "shades"
                ],
                "title": "BrandColor"
            },
            "BrandColorSummary": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "role": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "name",
                    "role",
                    "description"
                ],
                "title": "BrandColorSummary"
            },
            "MediaItem": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "type": {
                        "type": "string"
                    },
                    "caption": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "width": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "height": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "media_category_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "title",
                    "type",
                    "caption",
                    "width",
                    "height",
                    "media_category_id"
                ],
                "title": "MediaItem"
            },
            "Page": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "parent_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "nav_expansion": {
                        "type": "string"
                    },
                    "visibility": {
                        "type": "string"
                    },
                    "blocks": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "type": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "data": {
                                    "type": "object",
                                    "additionalProperties": {}
                                }
                            },
                            "required": [
                                "id",
                                "type",
                                "data"
                            ]
                        }
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "title",
                    "slug",
                    "type",
                    "parent_id",
                    "nav_expansion",
                    "visibility",
                    "blocks",
                    "updated_at"
                ],
                "title": "Page"
            },
            "PageSummary": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "parent_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "nav_expansion": {
                        "type": "string"
                    },
                    "visibility": {
                        "type": "string"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "title",
                    "slug",
                    "type",
                    "parent_id",
                    "nav_expansion",
                    "visibility",
                    "updated_at"
                ],
                "title": "PageSummary"
            }
        },
        "responses": {
            "ModelNotFoundException": {
                "description": "Not found",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "ValidationException": {
                "description": "Validation error",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Errors overview."
                                },
                                "errors": {
                                    "type": "object",
                                    "description": "A detailed description of each field that failed validation.",
                                    "additionalProperties": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                }
                            },
                            "required": [
                                "message",
                                "errors"
                            ]
                        }
                    }
                }
            }
        }
    }
}