{
    "openapi": "3.1.0",
    "info": {
        "title": "ReferenzManager API",
        "version": "v1",
        "description": "Die **ReferenzManager API** gibt zwei getrennte Zug\u00e4nge auf die Daten *einer*\nOrganisation. Jeder Aufruf tr\u00e4gt einen **Bearer-Token** und liest\/schreibt\nausschlie\u00dflich die eigene Organisation (Tenant-Aufl\u00f6sung serverseitig aus dem Token).\n\n- **System-API** \u2014 read\/write \u00fcber die eigene App-Fl\u00e4che. Token: ein `app`-PAT\n  (Einstellungen \u2192 API & Embed). Wirkt mit der aktuellen Rolle des Owners; die\n  Kontrollebene (Mitglieder, Token-Pr\u00e4gung, Admin) ist per Token gesperrt und hier\n  **nicht** dokumentiert.\n- **Sammlungen-API** \u2014 read-only \u00fcber **eine** kuratierte Sammlung (Website-Embed),\n  hart maskiert. Token: ein per-Sammlung-Key (je Sammlung im Sammlungs-Editor).\n\nFehler nach **RFC 7807** (`application\/problem+json`). Diese Doku wird aus dem Code\ngeneriert (Laravel Scramble) und ist auf die zwei \u00f6ffentlichen APIs gescoped.\n\n## Basis-URL\n\nAlle Pfade liegen unter **`\/api\/v1`** (siehe den `servers`-Eintrag) \u2014 z. B.\n`PATCH \/api\/v1\/projects\/{id}`. Die in den Endpunkten gezeigten Pfade sind relativ dazu.\n\n## Referenz-Felder schreiben (`custom_data`)\n\nEine Referenz hat zwei typisierte Kernspalten (`projektname`, `client_id`); **alle\nanderen** Werte liegen in **`custom_data`** \u2014 ein Objekt `{ \"<field_key>\": <wert> }`.\nDie aktiven `field_key`s und ihre `data_type`s liefert `GET \/api\/v1\/field-definitions`.\n`PATCH \/api\/v1\/projects\/{id}` **merged** `custom_data`: nur gesendete Keys \u00e4ndern sich,\nein Key mit explizitem `null` wird gel\u00f6scht, weggelassene Keys bleiben.\n\n### Datentypen und ihre JSON-Form\n\n| `data_type` | JSON-Wert | Beispiel |\n|---|---|---|\n| `text`, `phone` | String | `\"Fachverfahren XY\"` |\n| `richtext` | HTML-String (serverseitig bereinigt) | `\"<p>Text mit <strong>Fett<\/strong><\/p>\"` |\n| `url` | String (g\u00fcltige URL) | `\"https:\/\/example.org\"` |\n| `email` | String (g\u00fcltige E-Mail) | `\"info@example.org\"` |\n| `number` | Zahl | `42` |\n| `boolean` | `true` \/ `false` | `true` |\n| `rating` | Ganzzahl 1\u20135 | `4` |\n| `date` | Datums-String | `\"2026-01-31\"` |\n| `daterange` | Objekt `{from,to}` (leeres\/fehlendes `to` = laufend) | `{ \"from\": \"2023-01-01\", \"to\": \"2024-12-31\" }` |\n| `money` | Objekt, **Integer-Minor-Units** (Cent), nie Float | `{ \"amount_minor\": 100000, \"currency\": \"EUR\" }` |\n| `cost_stages` | Objekt fester St\u00e4nde (`schaetzung`\/`berechnung`\/`anschlag`\/`feststellung`), je Integer-Minor-Units oder `null`; angezeigt wird der zuletzt bef\u00fcllte | `{ \"schaetzung\": 100000, \"feststellung\": 150000 }` |\n| `select` (einfach) | String (ein Options-`value`) | `\"laufend\"` |\n| `select` (mehrfach) | Liste von `value`-Strings | `[\"plan\", \"bau\"]` |\n| `tags` | Liste von Strings | `[\"Konzeption\", \"Betrieb\"]` |\n| `address` | Objekt `{street,postal_code,city,country}` | `{ \"city\": \"Stuttgart\", \"country\": \"DE\" }` |\n| `contact` | Objekt `{name,role,email,phone}` | `{ \"name\": \"M. Muster\", \"email\": \"m@x.de\" }` |\n| `media` | Liste `[{ \"id\": N, \u2026 }]` \u2014 `id` = eine an der Referenz h\u00e4ngende Medien-ID | `[{ \"id\": 42, \"title\": \"Lageplan\" }]` |\n| `relation` | Objekt `{client_id, contact_id}` \u2014 verkn\u00fcpfte **Organisation** und optional einer ihrer Ansprechpartner. Beide IDs stammen aus `GET \/clients` bzw. `GET \/clients\/{id}\/contacts` und m\u00fcssen zur eigenen Organisation geh\u00f6ren; der Kontakt muss zur gew\u00e4hlten Organisation geh\u00f6ren. Zielentit\u00e4t steht in `options.entity` der Felddefinition (derzeit immer `client`). | `{ \"client_id\": \"\u2026\", \"contact_id\": \"\u2026\" }` |\n| `computed` | **read-only** \u2014 beim Save berechnet, **nicht senden** (wird abgelehnt) | \u2014 |\n\nZu `relation` gibt es zwei Bequemlichkeiten: `GET \/projects` und `GET \/projects\/{id}`\nliefern zus\u00e4tzlich einen **read-only** Block `relations` mit den aufgel\u00f6sten Namen\n(`client_name`, `contact_name`) \u2014 die gespeicherte Wahrheit bleiben die IDs in\n`custom_data`. Und `GET \/projects?relation[<feld>]=<organisation-uuid>` findet alle\nReferenzen, die eine bestimmte Organisation \u00fcber dieses Feld verkn\u00fcpfen.\n\nBetr\u00e4ge sind **immer** Integer-Minor-Units (Cent) + `currency`, nie Float. Bei\n`select`\/`tags` ist der gespeicherte Wert der Options-**`value`**, nicht das Label.\n\n### Rezept: Medien anh\u00e4ngen (zwei Schritte)\n\n1. `POST \/api\/v1\/projects\/{id}\/media` (multipart: `file`, `field_key`) \u2192 Antwort liefert `data.id`.\n2. `PATCH \/api\/v1\/projects\/{id}` mit `custom_data[<field_key>] = [{ \"id\": <die id>, \"title\": \"\u2026\" }]`.\n\nMetadaten (Titel\/Beschreibung\/\u2026) werden **nur** in Schritt 2 gesetzt, nicht beim Upload."
    },
    "servers": [
        {
            "url": "https:\/\/api.referenzmanager.com\/api"
        }
    ],
    "security": [
        {
            "http": []
        }
    ],
    "paths": {
        "\/v1\/auth\/me": {
            "get": {
                "operationId": "auth.me",
                "summary": "The authenticated user together with their organization",
                "tags": [
                    "Auth"
                ],
                "responses": {
                    "200": {
                        "description": "`AuthUserResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/AuthUserResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/branding": {
            "get": {
                "operationId": "branding.show",
                "tags": [
                    "Branding"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "branding.update",
                "tags": [
                    "Branding"
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateBrandingRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/organization\/branding\/logo": {
            "post": {
                "operationId": "branding.uploadLogo",
                "tags": [
                    "Branding"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "branding.deleteLogo",
                "tags": [
                    "Branding"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/branding\/fonts": {
            "post": {
                "operationId": "branding.uploadFont",
                "tags": [
                    "Branding"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/branding\/fonts\/{font}": {
            "delete": {
                "operationId": "branding.deleteFont",
                "tags": [
                    "Branding"
                ],
                "parameters": [
                    {
                        "name": "font",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "branding": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "logo": {
                                                    "type": [
                                                        "object",
                                                        "null"
                                                    ],
                                                    "properties": {
                                                        "name": {
                                                            "type": "string"
                                                        },
                                                        "data_uri": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ]
                                                        }
                                                    },
                                                    "required": [
                                                        "name",
                                                        "data_uri"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "string"
                                                            },
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "name": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "id",
                                                            "key",
                                                            "name"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "branding",
                                                "logo",
                                                "fonts"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/clients": {
            "get": {
                "operationId": "client.index",
                "tags": [
                    "Client"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ClientResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "client.store",
                "tags": [
                    "Client"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreClientRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/clients\/{client}": {
            "get": {
                "operationId": "client.show",
                "tags": [
                    "Client"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "client.update",
                "tags": [
                    "Client"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateClientRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/clients\/{client}\/archive": {
            "post": {
                "operationId": "client.archive",
                "tags": [
                    "Client"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/clients\/{client}\/logo": {
            "post": {
                "operationId": "client.uploadLogo",
                "summary": "Upload the client's logo (raster-only, singleFile \u2192 replaces the previous)",
                "tags": [
                    "Client"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "client.deleteLogo",
                "tags": [
                    "Client"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ClientResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ClientResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/clients\/{client}\/contacts": {
            "get": {
                "operationId": "contact.index",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ContactResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "contact.store",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "client",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreContactRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/contacts\/{contact}": {
            "patch": {
                "operationId": "contact.update",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateContactRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/contacts\/{contact}\/archive": {
            "post": {
                "operationId": "contact.archive",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/contacts\/{contact}\/photo": {
            "post": {
                "operationId": "contact.uploadPhoto",
                "summary": "Upload the contact's photo (raster-only, singleFile \u2192 replaces the previous)",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "contact.deletePhoto",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ContactResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/eligibility-profile": {
            "get": {
                "operationId": "eligibility.show",
                "tags": [
                    "Eligibility"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "profile": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "certificates": {
                                                    "type": "array",
                                                    "items": {
                                                        "$ref": "#\/components\/schemas\/MediaResource"
                                                    }
                                                }
                                            },
                                            "required": [
                                                "profile",
                                                "certificates"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "eligibility.update",
                "tags": [
                    "Eligibility"
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateEligibilityProfileRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "profile": {
                                                    "type": "array",
                                                    "items": {}
                                                },
                                                "certificates": {
                                                    "type": "array",
                                                    "items": {
                                                        "$ref": "#\/components\/schemas\/MediaResource"
                                                    }
                                                }
                                            },
                                            "required": [
                                                "profile",
                                                "certificates"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/organization\/certificates": {
            "post": {
                "operationId": "eligibility.uploadCertificate",
                "tags": [
                    "Eligibility"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Certificate proofs are PDFs\/scans \u2014 allowlist prevents active content."
                                    },
                                    "name": {
                                        "type": "string",
                                        "maxLength": 255
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`MediaResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/MediaResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/certificates\/{media}": {
            "get": {
                "operationId": "eligibility.showCertificate",
                "summary": "Stream a certificate proof. Org = resolved tenant, forced download",
                "tags": [
                    "Eligibility"
                ],
                "parameters": [
                    {
                        "name": "media",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The one hardened media response (force download + nosniff) \u2014 same choke point\nas project media, so the security posture can't drift per controller.",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "eligibility.deleteCertificate",
                "tags": [
                    "Eligibility"
                ],
                "parameters": [
                    {
                        "name": "media",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/exports": {
            "post": {
                "operationId": "export.store",
                "tags": [
                    "Export"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreExportRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "text\/html": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        },
                        "headers": {
                            "Transfer-Encoding": {
                                "required": true,
                                "schema": {
                                    "type": "string",
                                    "enum": [
                                        "chunked"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions": {
            "get": {
                "operationId": "fieldDefinition.index",
                "summary": "The tenant's own custom fields (never the global templates)",
                "tags": [
                    "FieldDefinition"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `FieldDefinitionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/FieldDefinitionResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "fieldDefinition.store",
                "tags": [
                    "FieldDefinition"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreFieldDefinitionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`FieldDefinitionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/FieldDefinitionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/catalog": {
            "get": {
                "operationId": "fieldDefinition.catalog",
                "summary": "The importable template catalogue: global rows for the tenant's industry\n(or industry-agnostic), each flagged whether it is already imported",
                "tags": [
                    "FieldDefinition"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "": {
                                                        "type": "array",
                                                        "items": {}
                                                    },
                                                    "imported": {
                                                        "type": "boolean"
                                                    }
                                                },
                                                "required": [
                                                    null,
                                                    "imported"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/import": {
            "post": {
                "operationId": "fieldDefinition.import",
                "summary": "Clone the chosen template fields into org-owned fields (skips duplicates)",
                "tags": [
                    "FieldDefinition"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "keys": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "minItems": 1
                                    }
                                },
                                "required": [
                                    "keys"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {}
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/reorder": {
            "post": {
                "operationId": "fieldDefinition.reorder",
                "summary": "Apply a drag-reorder: persist the new (group, sort) of each moved field in\none transaction. Own rows only \u2014 each is re-authorized (globals\/core denied)",
                "tags": [
                    "FieldDefinition"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/ReorderFieldDefinitionsRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/{fieldDefinition}": {
            "patch": {
                "operationId": "fieldDefinition.update",
                "tags": [
                    "FieldDefinition"
                ],
                "parameters": [
                    {
                        "name": "fieldDefinition",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateFieldDefinitionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`FieldDefinitionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/FieldDefinitionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "fieldDefinition.destroy",
                "tags": [
                    "FieldDefinition"
                ],
                "parameters": [
                    {
                        "name": "fieldDefinition",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/{fieldDefinition}\/impact": {
            "post": {
                "operationId": "fieldDefinition.impact",
                "summary": "Preview the data impact of a pending select-option change (\u00a77.4) \u2014 for the editor's\n\"affects N references\" confirmation. Given the INTENDED `options` and the renames the\neditor already covers, report: each rename's affected reference count, and the values\nthat would ORPHAN (stored in data, removed from the options, not remapped). The\norphan check catches a value that was deleted-and-re-added without a rename \u2014 the\nsilent-orphaning footgun. Read-only; nothing is written",
                "tags": [
                    "FieldDefinition"
                ],
                "parameters": [
                    {
                        "name": "fieldDefinition",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "options": {
                                        "type": "object",
                                        "properties": {
                                            "options": {
                                                "type": "array",
                                                "items": {
                                                    "type": "object",
                                                    "properties": {
                                                        "value": {
                                                            "type": "string",
                                                            "maxLength": 128
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "option_value_renames": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "from": {
                                                    "type": "string",
                                                    "maxLength": 128
                                                },
                                                "to": {
                                                    "type": "string",
                                                    "maxLength": 128
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "renames": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "from": {
                                                        "type": "string"
                                                    },
                                                    "to": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    }
                                                },
                                                "required": [
                                                    "from",
                                                    "to",
                                                    "count"
                                                ]
                                            }
                                        },
                                        "orphans": {
                                            "type": "array",
                                            "items": {}
                                        }
                                    },
                                    "required": [
                                        "renames",
                                        "orphans"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/{fieldDefinition}\/values": {
            "get": {
                "operationId": "fieldDefinition.values",
                "summary": "The distinct stored values of a select\/tags field with their reference counts\n(\u00a77.4) \u2014 powers the tags \"replace value\" picker and shows what a change would touch",
                "tags": [
                    "FieldDefinition"
                ],
                "parameters": [
                    {
                        "name": "fieldDefinition",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {}
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-definitions\/{fieldDefinition}\/replace-value": {
            "post": {
                "operationId": "fieldDefinition.replaceValue",
                "summary": "Migrate one stored value across every reference (\u00a77.4): `to` = a new value rewrites\nit, `to` = null removes it. The tenant-wide \"replace value\" for tags (which have no\noption list to rename), and the way a removed select option is mapped onto another",
                "tags": [
                    "FieldDefinition"
                ],
                "parameters": [
                    {
                        "name": "fieldDefinition",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "from": {
                                        "type": "string",
                                        "maxLength": 128
                                    },
                                    "to": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 128
                                    }
                                },
                                "required": [
                                    "from"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "affected": {
                                            "type": "integer"
                                        }
                                    },
                                    "required": [
                                        "affected"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/field-groups": {
            "get": {
                "operationId": "fieldGroup.index",
                "tags": [
                    "FieldGroup"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `FieldGroupResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/FieldGroupResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "fieldGroup.store",
                "summary": "Create a brand-new custom group; its key is derived once from the label",
                "tags": [
                    "FieldGroup"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreFieldGroupRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`FieldGroupResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/FieldGroupResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "put": {
                "operationId": "fieldGroup.upsert",
                "summary": "Rename \/ re-sort a group by key (upsert \u2014 creates the overlay row on first touch)",
                "tags": [
                    "FieldGroup"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpsertFieldGroupRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Idempotent PUT: always 200, whether the overlay row was new or existing.\n\n\n\n`FieldGroupResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/FieldGroupResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/field-groups\/reorder": {
            "post": {
                "operationId": "fieldGroup.reorder",
                "tags": [
                    "FieldGroup"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/ReorderFieldGroupsRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/field-groups\/{key}": {
            "delete": {
                "operationId": "fieldGroup.destroy",
                "summary": "Delete a group: move its own fields to the fallback group `general` and\ndrop the overlay row, atomically. Global vertical-pack rows keep their\ngroup (only the tenant's own fields are reassigned)",
                "tags": [
                    "FieldGroup"
                ],
                "parameters": [
                    {
                        "name": "key",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "An error",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "description": "Error overview.",
                                            "examples": [
                                                "The default group cannot be deleted."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "message"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/notifications": {
            "get": {
                "operationId": "notification.index",
                "summary": "Recent notifications for the current user, newest first, plus the unread count",
                "tags": [
                    "Notification"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `NotificationResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/NotificationResource"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "unread_count": {
                                                    "type": "integer",
                                                    "minimum": 0
                                                }
                                            },
                                            "required": [
                                                "unread_count"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/notifications\/read-all": {
            "post": {
                "operationId": "notification.markAllRead",
                "summary": "Mark every unread notification of the current user as read",
                "tags": [
                    "Notification"
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/notifications\/{notification}\/read": {
            "post": {
                "operationId": "notification.markRead",
                "summary": "Mark a single notification read. Scoped to the user's own \u2014 foreign ids 404",
                "tags": [
                    "Notification"
                ],
                "parameters": [
                    {
                        "name": "notification",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`NotificationResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/NotificationResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/output-templates": {
            "get": {
                "operationId": "outputTemplate.index",
                "summary": "The tenant's own templates plus the global starter templates (active only)",
                "tags": [
                    "OutputTemplate"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `OutputTemplateResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/OutputTemplateResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "outputTemplate.store",
                "tags": [
                    "OutputTemplate"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreOutputTemplateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`OutputTemplateResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/OutputTemplateResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/output-templates\/variables": {
            "get": {
                "operationId": "outputTemplate.variables",
                "summary": "The placeholders an html template may use (FACHLOGIK \u00a711.6, S3) \u2014 exactly what the\nReferenceValueMap produces + branding, so the editor's variable palette matches what\nactually renders. Grouped core \/ custom (from the tenant's field schema) \/ branding",
                "tags": [
                    "OutputTemplate"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "core": {
                                                    "type": "array",
                                                    "prefixItems": [
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "projektname"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Projektname"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "kunde_name"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Auftraggeber"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "kunde_logo"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Auftraggeber \u2014 Logo (Data-URI, nur mit Freigabe)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "segment"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Segment"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "oeffentlicher_auftraggeber"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "\u00d6ffentlicher Auftraggeber (Ja\/Nein)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "ap_name"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Ansprechpartner \u2014 Name"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "ap_rolle"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Ansprechpartner \u2014 Rolle"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "ap_email"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Ansprechpartner \u2014 E-Mail"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "ap_tel"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Ansprechpartner \u2014 Telefon"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "ap_foto"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Ansprechpartner \u2014 Foto (Data-URI, nur mit Foto-Freigabe)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "organization"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Eigenes Unternehmen"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "personen"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Personen \u2014 Rollen-Episoden (Liste: foto, name, funktion, rolle, zeitraum, taetigkeit, personentage, kurzprofil, kurzprofil_html, berufsjahre, skills; `foto` nur mit Foto-Freigabe)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "_variant"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Variante der Ausgabe (z.B. `{% if _variant != 'onepager' %}`)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "_audience"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Publikum der Ausgabe (internal\/vergabe\/public)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "_bezug"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Bezug zur Ausschreibung (nur bei Ausgabe einer Sammlung)"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        }
                                                    ],
                                                    "minItems": 15,
                                                    "maxItems": 15,
                                                    "additionalItems": false
                                                },
                                                "custom": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                },
                                                "branding": {
                                                    "type": "array",
                                                    "prefixItems": [
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string"
                                                                },
                                                                "label": {
                                                                    "type": "string"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "branding.primary_color"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Prim\u00e4rfarbe"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "branding.accent_color"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Akzentfarbe"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "branding.font_family"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Schriftfamilie"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "key": {
                                                                    "type": "string",
                                                                    "const": "branding.footer_text"
                                                                },
                                                                "label": {
                                                                    "type": "string",
                                                                    "const": "Fu\u00dfzeilentext"
                                                                }
                                                            },
                                                            "required": [
                                                                "key",
                                                                "label"
                                                            ]
                                                        }
                                                    ],
                                                    "minItems": 5,
                                                    "maxItems": 5,
                                                    "additionalItems": false
                                                },
                                                "columns": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "key": {
                                                                "type": "string"
                                                            },
                                                            "label": {
                                                                "type": "string"
                                                            }
                                                        },
                                                        "required": [
                                                            "key",
                                                            "label"
                                                        ]
                                                    }
                                                }
                                            },
                                            "required": [
                                                "core",
                                                "custom",
                                                "branding",
                                                "columns"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/output-templates\/preview": {
            "post": {
                "operationId": "outputTemplate.preview",
                "summary": "Live-preview an html template against one reference (FACHLOGIK \u00a711.6, S3): render the\ngiven (unsaved) HTML through the SANDBOXED Twig renderer against the reference's\nMASKED map + branding, and return the resulting HTML for the editor's preview iframe.\nA template\/syntax\/sandbox error comes back as `error` (200) so the editor shows it\ninline instead of breaking the flow. Never returns a PDF \u2014 that's the export path",
                "tags": [
                    "OutputTemplate"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/PreviewOutputTemplateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "A syntax error or sandbox violation \u2014 surface it inline, not as a 500\/422.",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "type": "object",
                                                    "properties": {
                                                        "html": {
                                                            "type": "string"
                                                        },
                                                        "error": {
                                                            "type": "null"
                                                        }
                                                    },
                                                    "required": [
                                                        "html",
                                                        "error"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "type": "object",
                                                    "properties": {
                                                        "html": {
                                                            "type": "null"
                                                        },
                                                        "error": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "html",
                                                        "error"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "type": "object",
                                                    "properties": {
                                                        "html": {
                                                            "type": "null"
                                                        },
                                                        "error": {
                                                            "type": "string",
                                                            "const": "no-reference"
                                                        }
                                                    },
                                                    "required": [
                                                        "html",
                                                        "error"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/output-templates\/{outputTemplate}": {
            "get": {
                "operationId": "outputTemplate.show",
                "tags": [
                    "OutputTemplate"
                ],
                "parameters": [
                    {
                        "name": "outputTemplate",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`OutputTemplateResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/OutputTemplateResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "outputTemplate.update",
                "tags": [
                    "OutputTemplate"
                ],
                "parameters": [
                    {
                        "name": "outputTemplate",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateOutputTemplateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`OutputTemplateResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/OutputTemplateResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/output-templates\/{outputTemplate}\/archive": {
            "post": {
                "operationId": "outputTemplate.archive",
                "tags": [
                    "OutputTemplate"
                ],
                "parameters": [
                    {
                        "name": "outputTemplate",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`OutputTemplateResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/OutputTemplateResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/output-templates\/{outputTemplate}\/word-template": {
            "post": {
                "operationId": "outputTemplate.uploadWordTemplate",
                "summary": "Upload the .docx a `word_upload` template merges (\u00a711.1, S8a). Single file",
                "tags": [
                    "OutputTemplate"
                ],
                "parameters": [
                    {
                        "name": "outputTemplate",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`MediaResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/MediaResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "outputTemplate.deleteWordTemplate",
                "tags": [
                    "OutputTemplate"
                ],
                "parameters": [
                    {
                        "name": "outputTemplate",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/people": {
            "get": {
                "operationId": "person.index",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "min_jahre",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `PersonResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/PersonResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "person.store",
                "tags": [
                    "Person"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StorePersonRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`PersonResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/PersonResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/people\/skills": {
            "get": {
                "operationId": "person.skillVocabulary",
                "summary": "The skill vocabulary already in use in this organisation, most-used first (\u00a728.2).\nFeeds the editor's suggestion list so the tenant's wording converges instead of\nfraying into one unique phrase per person \u2014 the state the data was actually in\nafter the first import. `skill` stays free text; this only makes reuse the easy path",
                "tags": [
                    "Person"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "skill": {
                                                        "type": "string"
                                                    },
                                                    "skill_key": {
                                                        "type": "string"
                                                    },
                                                    "anzahl": {
                                                        "type": "integer"
                                                    }
                                                },
                                                "required": [
                                                    "skill",
                                                    "skill_key",
                                                    "anzahl"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/people\/{person}": {
            "get": {
                "operationId": "person.show",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`PersonResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/PersonResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "person.update",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdatePersonRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`PersonResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/PersonResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/people\/{person}\/archive": {
            "post": {
                "operationId": "person.archive",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/people\/{person}\/photo": {
            "post": {
                "operationId": "person.uploadPhoto",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`PersonResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/PersonResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "person.deletePhoto",
                "tags": [
                    "Person"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects": {
            "get": {
                "operationId": "project.index",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "maxLength": 255
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "maxLength": 64
                        }
                    },
                    {
                        "name": "dir",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        }
                    },
                    {
                        "name": "filter",
                        "in": "query",
                        "schema": {
                            "type": "object"
                        },
                        "x-deepObject-style": "qs"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ProjectResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "post": {
                "operationId": "project.store",
                "description": "Pass `slug` (a lowercase, client-controlled stable key) to set the reference's slug\nyourself instead of an auto-generated one. Add `upsert: true` (which requires `slug`)\nto create-or-update: if an active reference with that slug already exists in the org\nit is updated in place (custom_data is merged, \u00a77.5) and returned with 200; otherwise\na new one is created (201). Re-running an import with stable slugs never duplicates.\nThe response also carries `action: \"created\" | \"updated\"` (next to `data`) so an\nimport log can tell the two apart without reading the HTTP status. `dry_run: true`\nvalidates and reports `{ valid: true }` without writing.",
                "summary": "Create a reference \u2014 or upsert one idempotently (\u00a77.7)",
                "tags": [
                    "Project"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/projects\/bulk": {
            "post": {
                "operationId": "project.bulkStore",
                "description": "Send `{ \"projects\": [ {\u2026}, \u2026 ] }` (max 200). Each item is a normal create payload\nand may carry `slug` + `upsert: true` to update an existing reference in place\n(custom_data merged, \u00a77.5) instead of creating a duplicate \u2014 so re-running an\nimport never duplicates. The batch is all-or-nothing: if any item fails validation\n(reported per index as `projects.<i>.<field>`) or any write throws, NOTHING is\nwritten. `dry_run: true` on the envelope validates the whole batch and reports\n`{ valid: true }` without writing. The response `data` lists each item in request\norder as `{ action: \"created\"|\"updated\", project: {\u2026} }`.",
                "summary": "Bulk create-or-upsert references in one atomic request (\u00a77.7)",
                "tags": [
                    "Project"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/BulkStoreProjectRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "type": "array",
                                                    "items": {}
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "dry_run": {
                                                    "type": "boolean"
                                                },
                                                "valid": {
                                                    "type": "boolean"
                                                },
                                                "count": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "dry_run",
                                                "valid",
                                                "count"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}": {
            "get": {
                "operationId": "project.show",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "project.update",
                "description": "`custom_data` is a FLAT MERGE, not a replace (\u00a77.5): keys present in the payload\noverwrite, a key sent with an explicit `null` is DELETED, and keys the payload\nomits are kept. A partial PATCH therefore can never silently wipe fields the\nclient didn't send, and an integrator can update one field at a time. (`POST`\ncreate still replaces into an empty bag.) Caveat: a required field must be present\nin a partial payload, else validation 422s \u2014 the UI always sends the full field\nset, so this only affects hand-crafted partial requests.\n\nA `media` field's per-item metadata (\u00a717.4) rides on `custom_data[<field_key>]` as\nthe ordered list `[{ \"id\", \"title\", \"description\", \"source\", \"author\",\n\"usage_cleared\", \"usage_note\" }]`, where `id` is a media id already attached via\n`POST \/projects\/{project}\/media`; ids not attached to the project are dropped on save.",
                "summary": "Update a reference record",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "keep media_count on the row after an edit\n\n\n\n`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "$ref": "#\/components\/schemas\/ProjectResource"
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "dry_run": {
                                                    "type": "boolean"
                                                },
                                                "valid": {
                                                    "type": "boolean"
                                                }
                                            },
                                            "required": [
                                                "dry_run",
                                                "valid"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/archive": {
            "post": {
                "operationId": "project.archive",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/review\/submit": {
            "post": {
                "operationId": "project.submitReview",
                "summary": "Submit the reference for internal editorial review (draft \u2192 in_review, \u00a718.2)\nand alert the org's reviewers. The internal review axis is distinct from the\ncustomer-facing referenz_freigabe (\u00a718.4)",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/review\/approve": {
            "post": {
                "operationId": "project.approveReview",
                "summary": "Approve the internal editorial review (in_review \u2192 approved, \u00a718.2). Records\nwho approved and when (\u00a718.3)",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/review\/reopen": {
            "post": {
                "operationId": "project.reopenReview",
                "summary": "Pull the reference back to draft (in_review|approved \u2192 draft, \u00a718.2). Editorial\ncompetence reopens it; the approval audit is cleared (\u00a718.5)",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/media": {
            "post": {
                "operationId": "project.uploadMedia",
                "description": "This endpoint stores ONLY the file plus an optional `field_key` (which binds it\nto a `media` custom field). Sending descriptive metadata here is rejected (422):\nto set a caption and the other per-item fields (`title`, `description`, `source`,\n`author`, `usage_cleared`, `usage_note`, \u00a717.4), send a follow-up\n`PATCH \/projects\/{project}` whose `custom_data[<field_key>]` is the ordered list\n`[{ \"id\": <the media id returned here>, \"title\": \"\u2026\", \u2026 }]`. That project\n`custom_data` is the single write source; the metadata then round-trips back on\nthis resource (read-only) and inside `GET \/projects\/{project}`. Files uploaded\nwithout a `field_key` land in the general media section, which has no metadata.\n\nMedia isolation is inherited from the parent project (org-scoped lookup), so\nforeign projects 404 before any file is ever attached \u2014 the media table itself\nis untagged.",
                "summary": "Attach an uploaded file to the project's media library",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "description": "Maximum file size: 102400 kilobytes."
                                    },
                                    "collection": {
                                        "type": "string",
                                        "enum": [
                                            "images",
                                            "documents"
                                        ]
                                    },
                                    "field_key": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "Set by a `media` custom field so its files stay separable from the\ngeneral media section (\u00a77 media field type).",
                                        "maxLength": 255
                                    }
                                },
                                "required": [
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`MediaResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/MediaResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/media\/{media}": {
            "get": {
                "operationId": "project.showMedia",
                "summary": "Stream a project's file. Org-scoped parent + forced download by default (\u00a7 audit M3).\n`?disposition=inline` serves it inline so the client can VIEW it in a tab \u2014 but only\nfor raster images; MediaStreamer::inline forces a download for anything else, so the\ninline path can't be abused to render active content (nosniff stays on either way)",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "media",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "project.deleteMedia",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "media",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/people\/{person}\/projects": {
            "get": {
                "operationId": "projectPersonRole.forPerson",
                "summary": "What this person worked on \u2014 the same link, read from the other side",
                "tags": [
                    "ProjectPersonRole"
                ],
                "parameters": [
                    {
                        "name": "person",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ProjectPersonRoleResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ProjectPersonRoleResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/people": {
            "get": {
                "operationId": "projectPersonRole.index",
                "summary": "Who worked on this reference",
                "tags": [
                    "ProjectPersonRole"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ProjectPersonRoleResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ProjectPersonRoleResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "projectPersonRole.store",
                "tags": [
                    "ProjectPersonRole"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreProjectPersonRoleRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`ProjectPersonRoleResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectPersonRoleResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/projects\/{project}\/people\/{role}": {
            "patch": {
                "operationId": "projectPersonRole.update",
                "tags": [
                    "ProjectPersonRole"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "role",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateProjectPersonRoleRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ProjectPersonRoleResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectPersonRoleResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "projectPersonRole.destroy",
                "summary": "Remove an episode. A hard delete is right here: the episode is link data, not a\nrecord with its own history \u2014 the person and the reference both survive it",
                "tags": [
                    "ProjectPersonRole"
                ],
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "role",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/collection": {
            "get": {
                "operationId": "publicCollection.show",
                "tags": [
                    "PublicCollection"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "name": {
                                                    "type": "string"
                                                },
                                                "references": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "additionalProperties": {}
                                                    }
                                                }
                                            },
                                            "required": [
                                                "name",
                                                "references"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "\/v1\/reference-collections": {
            "get": {
                "operationId": "referenceCollection.index",
                "tags": [
                    "ReferenceCollection"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ReferenceCollectionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ReferenceCollectionResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "referenceCollection.store",
                "tags": [
                    "ReferenceCollection"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreReferenceCollectionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`ReferenceCollectionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}": {
            "get": {
                "operationId": "referenceCollection.show",
                "tags": [
                    "ReferenceCollection"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ReferenceCollectionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "referenceCollection.update",
                "tags": [
                    "ReferenceCollection"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateReferenceCollectionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ReferenceCollectionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}\/archive": {
            "post": {
                "operationId": "referenceCollection.archive",
                "tags": [
                    "ReferenceCollection"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ReferenceCollectionResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}\/items": {
            "get": {
                "operationId": "referenceCollectionItem.index",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Array of `ReferenceCollectionItemResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ReferenceCollectionItemResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "referenceCollectionItem.store",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreReferenceCollectionItemRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "`ReferenceCollectionItemResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionItemResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}\/items\/bulk": {
            "post": {
                "operationId": "referenceCollectionItem.bulkStore",
                "summary": "Add MANY references at once, from the grid (FACHLOGIK \u00a716.8). Already-present\nprojects are SKIPPED (not a 422) \u2014 a bulk grid selection routinely includes\nreferences that are already curated. New items append after the current last, in\nthe submitted order; writes are serialised (never sync(), \u00a716.4)",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/BulkStoreReferenceCollectionItemRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "added": {
                                                    "type": "integer"
                                                },
                                                "skipped": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "added",
                                                "skipped"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}\/items\/{item}": {
            "patch": {
                "operationId": "referenceCollectionItem.update",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "item",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateReferenceCollectionItemRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ReferenceCollectionItemResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionItemResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "referenceCollectionItem.destroy",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "item",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/reference-collections\/{referenceCollection}\/items\/{item}\/relevance-note\/approve": {
            "post": {
                "operationId": "referenceCollectionItem.approve",
                "summary": "Reviewer step: approve the human-written note (\u00a716.3 \/ \u00a718)",
                "tags": [
                    "ReferenceCollectionItem"
                ],
                "parameters": [
                    {
                        "name": "referenceCollection",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "item",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ReferenceCollectionItemResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ReferenceCollectionItemResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/saved-views": {
            "get": {
                "operationId": "savedView.index",
                "tags": [
                    "SavedView"
                ],
                "responses": {
                    "200": {
                        "description": "Array of `SavedViewResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/SavedViewResource"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "savedView.store",
                "tags": [
                    "SavedView"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreSavedViewRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`SavedViewResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/SavedViewResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/saved-views\/{savedView}": {
            "get": {
                "operationId": "savedView.show",
                "tags": [
                    "SavedView"
                ],
                "parameters": [
                    {
                        "name": "savedView",
                        "in": "path",
                        "required": true,
                        "description": "The saved view ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`SavedViewResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/SavedViewResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "patch": {
                "operationId": "savedView.update",
                "tags": [
                    "SavedView"
                ],
                "parameters": [
                    {
                        "name": "savedView",
                        "in": "path",
                        "required": true,
                        "description": "The saved view ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateSavedViewRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`SavedViewResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/SavedViewResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "savedView.destroy",
                "tags": [
                    "SavedView"
                ],
                "parameters": [
                    {
                        "name": "savedView",
                        "in": "path",
                        "required": true,
                        "description": "The saved view ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {}
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/saved-views\/{savedView}\/clone": {
            "post": {
                "operationId": "savedView.clone",
                "summary": "Clone any visible view into a fresh personal copy owned by the caller",
                "tags": [
                    "SavedView"
                ],
                "parameters": [
                    {
                        "name": "savedView",
                        "in": "path",
                        "required": true,
                        "description": "The saved view ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`SavedViewResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/SavedViewResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/v1\/organization\/segments": {
            "get": {
                "operationId": "segment.show",
                "tags": [
                    "Segment"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "segments": {
                                                    "type": "array",
                                                    "items": {}
                                                }
                                            },
                                            "required": [
                                                "segments"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "segment.update",
                "tags": [
                    "Segment"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateSegmentsRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "segments": {
                                                    "type": [
                                                        "array",
                                                        "null"
                                                    ],
                                                    "items": {}
                                                }
                                            },
                                            "required": [
                                                "segments"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "http": {
                "type": "http",
                "scheme": "bearer"
            }
        },
        "schemas": {
            "Abschlussgrad": {
                "type": "string",
                "description": "A person's highest completed qualification (FACHLOGIK \u00a728.1). NOT limited to academic degrees \u2014 `staatsexamen` never was one, and `berufsausbildung` (the German dual IHK training, e.g. \u201eFachinformatiker f\u00fcr Anwendungsentwicklung\") is just as much an answer  * to \u201ewelchen Abschluss hat die Person?\" as a Bachelor is. A fixed list because tender staff forms ask for exactly these levels; `sonstiges` catches everything else so a missing case never blocks data entry. Whether this counts as a STUDIENABSCHLUSS is derived from the case ({@see self::istStudienabschluss()}), never stored alongside \u2014 two stored fields could contradict each other, and before 2026-08-06 they actually could.\n| |\n|---|\n| `berufsausbildung` <br\/> Abgeschlossene Berufsausbildung (dual\/IHK) \u2014 kein Studienabschluss. |\n| `bachelor` <br\/>  |\n| `master` <br\/>  |\n| `diplom` <br\/>  |\n| `magister` <br\/>  |\n| `staatsexamen` <br\/>  |\n| `promotion` <br\/>  |\n| `sonstiges` <br\/>  |",
                "enum": [
                    "berufsausbildung",
                    "bachelor",
                    "master",
                    "diplom",
                    "magister",
                    "staatsexamen",
                    "promotion",
                    "sonstiges"
                ],
                "title": "Abschlussgrad"
            },
            "AuthUserResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "role": {
                        "type": "string"
                    },
                    "abilities": {
                        "type": "array",
                        "description": "The authoritative ability set for this role \u2014 the client uses this\nfor show\/hide decisions instead of mirroring the role\u2192ability map,\nso the two can never drift (enforcement stays server-side via policies).",
                        "items": {}
                    },
                    "organization": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "name": {
                                "type": "string"
                            },
                            "plan": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "id",
                            "name",
                            "plan"
                        ]
                    },
                    "impersonating": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "email",
                    "role",
                    "abilities",
                    "organization",
                    "impersonating"
                ],
                "title": "AuthUserResource"
            },
            "BulkStoreProjectRequest": {
                "type": "object",
                "description": "Envelope validation for the bulk create-or-upsert endpoint (\u00a77.7): a non-empty,\ncapped list of reference payloads plus an optional batch-level dry_run. Each item's\nfield-level rules are applied per item in the controller (they depend on the item's\nown client scope), so only the envelope shape is checked here.",
                "properties": {
                    "projects": {
                        "type": "array",
                        "description": "Cap the batch so one request can't fan out unbounded work (\u00a77.7).",
                        "items": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            },
                            "minItems": 1
                        },
                        "minItems": 1,
                        "maxItems": 200
                    },
                    "dry_run": {
                        "type": "boolean",
                        "description": "Validate the whole batch and report valid without writing anything."
                    }
                },
                "required": [
                    "projects"
                ],
                "title": "BulkStoreProjectRequest"
            },
            "BulkStoreReferenceCollectionItemRequest": {
                "type": "object",
                "description": "Add MANY references to a collection at once, from the grid (FACHLOGIK \u00a716.8).\nValidates only the shape here (a capped list of uuids); the org-scope + active\nfiltering and the skip-already-present logic run in the controller so it stays a\nsingle query instead of a per-id exists rule. Authorization (manageItems) is a Gate.",
                "properties": {
                    "project_ids": {
                        "type": "array",
                        "description": "Capped at the product's ceiling of ~1000 references (skalierung).",
                        "items": {
                            "type": "string",
                            "format": "uuid"
                        },
                        "minItems": 1,
                        "maxItems": 1000
                    }
                },
                "required": [
                    "project_ids"
                ],
                "title": "BulkStoreReferenceCollectionItemRequest"
            },
            "ClientResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "is_public_sector": {
                        "type": "boolean"
                    },
                    "website": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "nennung": {
                        "description": "Return the enum instance (JSON-serialises to its string value) so Scramble\ndocuments the allowed values in the RESPONSE schema, not just a bare string.",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "logo": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "The logo embedded as a base64 data URI (private media, no separate route).",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "data_uri": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "required": [
                            "name",
                            "data_uri"
                        ]
                    },
                    "segment": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {}
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "name",
                    "is_public_sector",
                    "website",
                    "nennung",
                    "logo",
                    "segment",
                    "address",
                    "notes",
                    "archived_at",
                    "created_at"
                ],
                "title": "ClientResource"
            },
            "ContactResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "client_id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "role": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "nennung": {
                        "type": "string",
                        "description": "Enum instances (JSON-serialise to their string value) so the RESPONSE schema\nin the API docs enumerates the allowed release states, not just `string`."
                    },
                    "foto_freigabe": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "foto": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "The photo embedded as a base64 data URI (private media, no separate route).",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "data_uri": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "required": [
                            "name",
                            "data_uri"
                        ]
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "client_id",
                    "name",
                    "role",
                    "email",
                    "phone",
                    "nennung",
                    "foto_freigabe",
                    "foto",
                    "archived_at",
                    "created_at"
                ],
                "title": "ContactResource"
            },
            "DataType": {
                "type": "string",
                "description": "The field_definitions data-type catalogue (ARCHITECTURE \u00a76). Drives how a custom_data value is validated, stored and rendered.\n",
                "enum": [
                    "text",
                    "richtext",
                    "number",
                    "money",
                    "date",
                    "daterange",
                    "boolean",
                    "select",
                    "tags",
                    "url",
                    "email",
                    "phone",
                    "rating",
                    "relation",
                    "address",
                    "contact",
                    "media",
                    "money_staged",
                    "cost_stages",
                    "computed"
                ],
                "title": "DataType"
            },
            "DocumentType": {
                "type": "string",
                "description": "The kind of output an output_template produces (ARCHITECTURE \u00a76, FACHLOGIK \u00a711). Drives which renderer + data source apply when the template is generated (S5).\n",
                "enum": [
                    "referenzliste",
                    "referenzblatt",
                    "eignungsprofil",
                    "custom"
                ],
                "title": "DocumentType"
            },
            "FieldDefinitionResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "is_core": {
                        "type": "boolean"
                    },
                    "key": {
                        "type": "string"
                    },
                    "label": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Guidance for humans and AI agents (the API surfaces this to agents)."
                    },
                    "recommended_length": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "Recommended length in words for text \/ richtext (advisory)."
                    },
                    "data_type": {
                        "description": "Enum instances (JSON-serialise to their string value) so the RESPONSE schema\nin the API docs enumerates the allowed values, not just a bare `string`.",
                        "$ref": "#\/components\/schemas\/DataType"
                    },
                    "options": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {}
                    },
                    "default_value": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Default applied to this field when a reference is created without it (\u00a77.8).\nSame JSON shape a custom_data value for the field would have."
                    },
                    "group": {
                        "type": "string",
                        "description": "Whether this field's select-option colours show in the grid (\u00a77.4); the grid\nis neutral by default, colour is opt-in per field."
                    },
                    "visibility": {
                        "description": "Field \u201ePublikum\" \u2014 how far the field may reach (intern\/vergabe\/oeffentlich, \u00a77.2).",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "required": {
                        "type": "boolean"
                    },
                    "sort": {
                        "type": "integer"
                    },
                    "filterable": {
                        "type": "boolean"
                    },
                    "searchable": {
                        "type": "boolean"
                    },
                    "sortable": {
                        "type": "boolean"
                    },
                    "index_strategy": {
                        "$ref": "#\/components\/schemas\/IndexStrategy"
                    },
                    "industry": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "is_global": {
                        "type": "boolean",
                        "description": "A shared vertical-pack template the tenant may use but not edit."
                    },
                    "protected": {
                        "type": "boolean",
                        "description": "A core identity field the tenant may edit but not delete (\u00a77.1)."
                    }
                },
                "required": [
                    "id",
                    "is_core",
                    "key",
                    "label",
                    "description",
                    "recommended_length",
                    "data_type",
                    "options",
                    "default_value",
                    "group",
                    "visibility",
                    "required",
                    "sort",
                    "filterable",
                    "searchable",
                    "sortable",
                    "index_strategy",
                    "industry",
                    "is_global",
                    "protected"
                ],
                "title": "FieldDefinitionResource"
            },
            "FieldGroupResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "key": {
                        "type": "string"
                    },
                    "label": {
                        "type": "string"
                    },
                    "sort": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "key",
                    "label",
                    "sort"
                ],
                "title": "FieldGroupResource"
            },
            "IndexStrategy": {
                "type": "string",
                "description": "How the field-driven index generator (M2\u00b7S4) indexes a custom field (ARCHITECTURE \u00a75\/\u00a76). Every generated index leads with organization_id and is partial WHERE archived_at IS NULL.\n",
                "enum": [
                    "none",
                    "gin_path",
                    "btree_expr",
                    "tsvector"
                ],
                "title": "IndexStrategy"
            },
            "MediaResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "uuid": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "name": {
                        "type": "string",
                        "description": "stable ref for eignungsprofil zertifikate.nachweis_media_uuid"
                    },
                    "file_name": {
                        "type": "string"
                    },
                    "collection": {
                        "type": "string"
                    },
                    "size": {
                        "type": "integer"
                    },
                    "mime_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "field_key": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Set when the file belongs to a `media` custom field (not the general\nmedia section); lets the client keep the two pools apart."
                    },
                    "title": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "author": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "usage_cleared": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "usage_note": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "uuid",
                    "name",
                    "file_name",
                    "collection",
                    "size",
                    "mime_type",
                    "field_key",
                    "title",
                    "description",
                    "source",
                    "author",
                    "usage_cleared",
                    "usage_note"
                ],
                "title": "MediaResource"
            },
            "NotificationResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "type": {},
                    "payload": {
                        "type": "array",
                        "items": {}
                    },
                    "read_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "type",
                    "payload",
                    "read_at",
                    "created_at"
                ],
                "title": "NotificationResource"
            },
            "OutputTemplateResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "document_type": {
                        "type": "string"
                    },
                    "source": {
                        "type": "string"
                    },
                    "audience": {
                        "type": "string"
                    },
                    "config": {
                        "type": "array",
                        "items": {}
                    },
                    "branding": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {}
                    },
                    "is_global": {
                        "type": "boolean",
                        "description": "Global vertical-pack templates are visible but not editable (\u00a711.4)."
                    },
                    "has_word_template": {
                        "type": "boolean",
                        "description": "Whether a word_upload template has its .docx yet (S8a)."
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "name",
                    "document_type",
                    "source",
                    "audience",
                    "config",
                    "branding",
                    "is_global",
                    "has_word_template",
                    "archived_at",
                    "created_at",
                    "updated_at"
                ],
                "title": "OutputTemplateResource"
            },
            "PersonResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "foto_freigabe": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "vorname": {
                        "type": "string"
                    },
                    "nachname": {
                        "type": "string"
                    },
                    "titel": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "funktion": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "voller_name": {
                        "type": "string",
                        "description": "Assembled here so every consumer (UI, API, later MCP) shows the same name."
                    },
                    "studienabschluss": {
                        "type": "boolean",
                        "description": "Bleibt in der API-Form erhalten, wird aber aus dem Abschluss ABGELEITET (\u00a728.1)."
                    },
                    "fachrichtung": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "abschlussgrad": {
                        "anyOf": [
                            {
                                "description": "Enum instance (JSON-serialises to its value) so the API docs enumerate the\nallowed degrees in the RESPONSE schema, not just `string`.\n| |\n|---|\n| `berufsausbildung` <br\/> Abgeschlossene Berufsausbildung (dual\/IHK) \u2014 kein Studienabschluss. |\n| `bachelor` <br\/>  |\n| `master` <br\/>  |\n| `diplom` <br\/>  |\n| `magister` <br\/>  |\n| `staatsexamen` <br\/>  |\n| `promotion` <br\/>  |\n| `sonstiges` <br\/>  |",
                                "$ref": "#\/components\/schemas\/Abschlussgrad"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "kurzprofil": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "weitere_kenntnisse": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "berufserfahrung_seit": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "berufsjahre": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "DERIVED, never stored \u2014 a stored year count would rot every January (\u00a728.1)."
                    },
                    "sprachen": {
                        "type": "array",
                        "items": {}
                    },
                    "zertifikate": {
                        "type": "array",
                        "items": {}
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "$ref": "#\/components\/schemas\/PersonSkillResource"
                        }
                    },
                    "foto": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Naming release (\u00a728.3) \u2014 nothing about a person reaches an external output\nbefore this is `freigegeben`.\nThe photo embedded as a base64 data URI (private media, no separate route).",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "data_uri": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "required": [
                            "name",
                            "data_uri"
                        ]
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "foto_freigabe",
                    "vorname",
                    "nachname",
                    "titel",
                    "funktion",
                    "voller_name",
                    "studienabschluss",
                    "fachrichtung",
                    "abschlussgrad",
                    "kurzprofil",
                    "weitere_kenntnisse",
                    "berufserfahrung_seit",
                    "berufsjahre",
                    "sprachen",
                    "zertifikate",
                    "foto",
                    "archived_at",
                    "created_at"
                ],
                "title": "PersonResource"
            },
            "PersonSkillResource": {
                "type": "object",
                "properties": {
                    "skill": {
                        "type": "string"
                    },
                    "skill_key": {
                        "type": "string",
                        "description": "The normalised lookup form \u2014 exposed so an API\/MCP consumer can match on the\nsame key the server does (\"Laravel\" and \"laravel\" are one skill, \u00a728.2)."
                    },
                    "seit": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "The stored start year \u2026"
                    },
                    "jahre": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "\u2026 and the years of experience DERIVED from it (\u00a728.2), so a consumer never\nhas to do the arithmetic \u2014 and never reads a figure that aged in the DB."
                    }
                },
                "required": [
                    "skill",
                    "skill_key",
                    "seit",
                    "jahre"
                ],
                "title": "PersonSkillResource"
            },
            "PreviewOutputTemplateRequest": {
                "type": "object",
                "description": "Live-preview an html reference-sheet template (FACHLOGIK \u00a711.6, S3): render the given\n(unsaved) HTML against one of the org's references and return the masked HTML for the\neditor's preview pane. The reference is optional \u2014 the controller falls back to the\norg's first active reference.",
                "properties": {
                    "html": {
                        "type": "string",
                        "maxLength": 100000
                    },
                    "project_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uuid",
                        "description": "The reference to render against \u2014 org-scoped, active. Optional (fallback below)."
                    },
                    "audience": {
                        "type": "string",
                        "enum": [
                            "internal",
                            "vergabe",
                            "public"
                        ]
                    },
                    "variant": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "The variant to preview (\u00a711.6). NOT checked against a declared list here:\nthe editor previews html that may not be saved yet, so there is no stored\n`config.variants` to check against. The export path does check.",
                        "maxLength": 64
                    }
                },
                "required": [
                    "html"
                ],
                "title": "PreviewOutputTemplateRequest"
            },
            "ProjectPersonRoleResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "project_id": {
                        "type": "string"
                    },
                    "person_id": {
                        "type": "string"
                    },
                    "rolle": {
                        "type": "string"
                    },
                    "von": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "bis": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "laufend": {
                        "type": "boolean",
                        "description": "An open end means the episode is still running (\"bis heute\") \u2014 spelled out\nso a consumer doesn't have to re-derive the meaning of a null date."
                    },
                    "taetigkeit": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "personentage": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "sort": {
                        "type": "integer"
                    },
                    "person": {
                        "type": "object",
                        "description": "Light summaries \u2014 only what the loaded direction needs, never a full record.",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "voller_name": {
                                "type": "string"
                            },
                            "funktion": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "required": [
                            "id",
                            "voller_name",
                            "funktion"
                        ]
                    },
                    "project": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "projektname": {
                                "type": "string"
                            },
                            "kunde_name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "required": [
                            "id",
                            "projektname",
                            "kunde_name"
                        ]
                    }
                },
                "required": [
                    "id",
                    "project_id",
                    "person_id",
                    "rolle",
                    "von",
                    "bis",
                    "laufend",
                    "taetigkeit",
                    "personentage",
                    "sort"
                ],
                "title": "ProjectPersonRoleResource"
            },
            "ProjectResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "projektname": {
                        "type": "string"
                    },
                    "client_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "contact_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "kunde_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "segment": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "oeffentlicher_auftraggeber": {
                        "type": "boolean"
                    },
                    "referenz_freigabe": {
                        "type": "string",
                        "description": "The reference-basics (status, role, timeline, description, services,\nvolume, comparability) live in custom_data now (minimal core, \u00a77.1)."
                    },
                    "referenz_review_status": {
                        "type": "string"
                    },
                    "referenz_review_approved_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "custom_data": {
                        "type": "array",
                        "items": {}
                    },
                    "relations": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "object",
                            "properties": {
                                "client_id": {
                                    "type": "string"
                                },
                                "client_name": {
                                    "type": "string"
                                },
                                "contact_id": {
                                    "type": "string"
                                },
                                "contact_name": {
                                    "type": "string"
                                }
                            },
                            "required": [
                                "client_id",
                                "client_name",
                                "contact_id",
                                "contact_name"
                            ]
                        }
                    },
                    "media_count": {
                        "type": "integer"
                    },
                    "media": {
                        "type": "array",
                        "description": "Each media carries its per-item metadata (\u00a717.4), resolved from this\nproject's already-loaded custom_data (no extra query per media).",
                        "items": {
                            "$ref": "#\/components\/schemas\/MediaResource"
                        }
                    },
                    "contact": {
                        "anyOf": [
                            {
                                "description": "Chosen Ansprechpartner (\u00a720.4), present (possibly null) when eager-loaded.",
                                "$ref": "#\/components\/schemas\/ContactResource"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "The version the client is holding. It sends this back on the next write, and\na mismatch means somebody else saved in between (\u00a77.7)."
                    },
                    "updated_by_name": {
                        "type": "string"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "projektname",
                    "client_id",
                    "contact_id",
                    "kunde_name",
                    "segment",
                    "oeffentlicher_auftraggeber",
                    "referenz_freigabe",
                    "referenz_review_status",
                    "referenz_review_approved_at",
                    "custom_data",
                    "relations",
                    "archived_at",
                    "updated_at",
                    "created_at"
                ],
                "title": "ProjectResource"
            },
            "ReferenceCollectionItemResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "reference_collection_id": {
                        "type": "string"
                    },
                    "project_id": {
                        "type": "string"
                    },
                    "position": {
                        "type": "integer"
                    },
                    "relevance_note": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "relevance_note_status": {
                        "type": "string"
                    },
                    "relevance_note_source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "relevance_note_generated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "approved_by": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "approved_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "project": {
                        "type": "object",
                        "description": "Compact reference summary for the curation list (no heavy custom_data).",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "projektname": {
                                "type": "string"
                            },
                            "kunde_name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "referenz_freigabe": {
                                "$ref": "#\/components\/schemas\/ReferenceRelease"
                            }
                        },
                        "required": [
                            "id",
                            "projektname",
                            "kunde_name",
                            "referenz_freigabe"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "reference_collection_id",
                    "project_id",
                    "position",
                    "relevance_note",
                    "relevance_note_status",
                    "relevance_note_source",
                    "relevance_note_generated_at",
                    "approved_by",
                    "approved_at",
                    "created_at",
                    "updated_at"
                ],
                "title": "ReferenceCollectionItemResource"
            },
            "ReferenceCollectionResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "tender_context": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "items_count": {
                        "type": "integer"
                    },
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#\/components\/schemas\/ReferenceCollectionItemResource"
                        }
                    },
                    "archived_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "name",
                    "tender_context",
                    "archived_at",
                    "created_at",
                    "updated_at"
                ],
                "title": "ReferenceCollectionResource"
            },
            "ReferenceRelease": {
                "type": "string",
                "description": "Customer-side reference confirmation axis (ARCHITECTURE \u00a76). Set by hand in the editor: the confirmation portal that used to feed it was rolled back on 2026-08-10, and the release is now agreed by mail or phone and recorded here.\n",
                "enum": [
                    "nicht_angefragt",
                    "angefragt",
                    "freigegeben"
                ],
                "title": "ReferenceRelease"
            },
            "ReorderFieldDefinitionsRequest": {
                "type": "object",
                "description": "A drag-reorder of the field list: the new (group, sort) of each moved field,\napplied atomically. Only own rows (defense in depth: exists scoped to the org).",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string",
                                    "format": "uuid"
                                },
                                "group": {
                                    "type": "string",
                                    "maxLength": 64
                                },
                                "sort": {
                                    "type": "integer",
                                    "minimum": 0
                                }
                            },
                            "required": [
                                "id",
                                "sort"
                            ]
                        },
                        "minItems": 1
                    }
                },
                "required": [
                    "items"
                ],
                "title": "ReorderFieldDefinitionsRequest"
            },
            "ReorderFieldGroupsRequest": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "pattern": "^[a-z][a-z0-9_]*$",
                                    "maxLength": 64
                                },
                                "sort": {
                                    "type": "integer",
                                    "minimum": 0
                                }
                            },
                            "required": [
                                "key",
                                "sort"
                            ]
                        },
                        "minItems": 1
                    }
                },
                "required": [
                    "items"
                ],
                "title": "ReorderFieldGroupsRequest"
            },
            "SavedViewResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "scope": {
                        "$ref": "#\/components\/schemas\/SavedViewScope"
                    },
                    "is_locked": {
                        "type": "boolean"
                    },
                    "entity_type": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "icon": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "view_type": {
                        "$ref": "#\/components\/schemas\/ViewType"
                    },
                    "config": {
                        "type": "array",
                        "items": {}
                    },
                    "owner_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "is_own": {
                        "type": "string",
                        "description": "UI affordances: whether this view belongs to the caller + whether they may edit it."
                    },
                    "editable": {
                        "type": "boolean"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "scope",
                    "is_locked",
                    "entity_type",
                    "name",
                    "icon",
                    "view_type",
                    "config",
                    "owner_id",
                    "is_own",
                    "editable",
                    "created_at",
                    "updated_at"
                ],
                "title": "SavedViewResource"
            },
            "SavedViewScope": {
                "type": "string",
                "description": "Visibility\/ownership of a saved view (FACHLOGIK \u00a716). `system` = delivered neutral default (read-only), `shared` = org-wide (managers only), `personal` = private to its owner. There is ONE browse axis \u2014 a view never carries an output mode\/channel.\n",
                "enum": [
                    "personal",
                    "shared",
                    "system"
                ],
                "title": "SavedViewScope"
            },
            "StoreClientRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "is_public_sector": {
                        "type": "boolean"
                    },
                    "website": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri",
                        "maxLength": 255
                    },
                    "nennung": {
                        "description": "Release axes (ARCHITECTURE \u00a76): may the logo be shown, and the widest\naudience the client may be named in. The logo file is uploaded separately.",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "segment": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "segment must be one of the org's configured segment keys\n(organizations.segments) \u2014 a per-tenant taxonomy, ARCHITECTURE \u00a76.",
                        "enum": [
                            "",
                            null
                        ]
                    },
                    "address": {
                        "type": "object",
                        "properties": {
                            "street": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "postal_code": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 32
                            },
                            "city": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "country": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            }
                        }
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "name"
                ],
                "title": "StoreClientRequest"
            },
            "StoreContactRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "role": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 64
                    },
                    "nennung": {
                        "description": "Master-data release axes (ARCHITECTURE \u00a76); the photo file is uploaded separately.",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "foto_freigabe": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    }
                },
                "required": [
                    "name"
                ],
                "title": "StoreContactRequest"
            },
            "StoreExportRequest": {
                "type": "object",
                "description": "\"Ausgeben als \u2026\" (FACHLOGIK \u00a711): render a template\/document over a record set.\nS5\/S6 = reference list (xlsx) + reference sheet (pdf); S8a = a `word_upload`\ntemplate \u2192 docx (template-driven document_type). Unsupported pairings are\nrejected here rather than silently ignored.",
                "properties": {
                    "document_type": {
                        "$ref": "#\/components\/schemas\/DocumentType"
                    },
                    "format": {
                        "type": "string",
                        "enum": [
                            "xlsx",
                            "pdf",
                            "docx"
                        ]
                    },
                    "audience": {
                        "type": "string",
                        "enum": [
                            "internal",
                            "vergabe",
                            "public"
                        ]
                    },
                    "variant": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "The output variant (\u00a711.6), checked against the CHOSEN template's declared\n`config.variants`. An undeclared value is a 422, deliberately: the Twig\nsandbox runs with `strict_variables: false`, so an unknown variant would\nsimply render as an empty string and quietly produce the full document \u2014\na typo nobody would notice until it was in a submitted bid.",
                        "enum": [
                            "",
                            null
                        ]
                    },
                    "output_template_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uuid",
                        "description": "Foreign template ids are rejected (org-scoped) \u2014 defense in depth (\u00a75).\nArchived templates\/records aren't exportable (\u00a75, WORKFLOWS \u00a79)."
                    },
                    "ids": {
                        "type": "array",
                        "description": "Optional at the rule level \u2014 the Eigenerkl\u00e4rung (eignungsprofil) is\norg-level and takes no record ids; the record paths require them below.\nCapped like the sibling bulk endpoints (BulkStoreProjectRequest 200,\nBulkStoreReferenceCollectionItemRequest 1000): every id costs its own\n`exists` query, so an uncapped list is one request that issues thousands.",
                        "items": {
                            "type": "string",
                            "format": "uuid"
                        },
                        "maxItems": 1000
                    },
                    "reference_collection_id": {
                        "type": "string",
                        "format": "uuid",
                        "description": "A collection export renders its curated items in `position` order instead\nof an id list (\u00a711.6\/\u00a716.4). Foreign\/archived collections are rejected here."
                    }
                },
                "required": [
                    "document_type",
                    "format"
                ],
                "title": "StoreExportRequest"
            },
            "StoreFieldDefinitionRequest": {
                "type": "object",
                "properties": {
                    "key": {
                        "type": "string",
                        "description": "A snake_case key, unique in the effective namespace (own rows + globals).",
                        "pattern": "^[a-z][a-z0-9_]*$",
                        "maxLength": 64
                    },
                    "label": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Optional guidance (shown under the field, exposed to AI agents).",
                        "maxLength": 1000
                    },
                    "recommended_length": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "Recommended length in words (text \/ richtext) \u2014 advisory, not enforced.",
                        "minimum": 1,
                        "maximum": 100000
                    },
                    "data_type": {
                        "$ref": "#\/components\/schemas\/DataType"
                    },
                    "options": {
                        "type": "object",
                        "description": "options carries the rich select shape (mode\/allow_other\/colored option\nlist) or the computed shape (operation\/operands); validate what is present.",
                        "properties": {
                            "mode": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "enum": [
                                    "single",
                                    "multi",
                                    null
                                ]
                            },
                            "allow_other": {
                                "type": "boolean"
                            },
                            "options": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "value": {
                                            "type": "string",
                                            "maxLength": 128
                                        },
                                        "label": {
                                            "type": "string",
                                            "maxLength": 255
                                        },
                                        "color": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "maxLength": 32
                                        }
                                    }
                                }
                            },
                            "operation": {
                                "type": "string",
                                "maxLength": 32
                            },
                            "operands": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 64
                                }
                            },
                            "entity": {
                                "type": "string",
                                "description": "Target entity of a `relation` field (\u00a720.7). Required when the type is\nrelation, and deliberately a CLOSED list: `clients` is the only entity a\nreference may point at today. A free-text target would advertise a\nconfigurability that no validator, picker or renderer actually supports.",
                                "enum": [
                                    "client"
                                ]
                            },
                            "unit": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "description": "Display unit for number \/ computed fields (e.g. \"m\u00b2\", \"\u20ac\/m\u00b2\").",
                                "maxLength": 32
                            }
                        }
                    },
                    "default_value": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Optional per-field default (\u00a77.8): any JSON value; its shape is checked\nagainst the field's data_type in the controller (media\/computed rejected)."
                    },
                    "group": {
                        "type": "string",
                        "description": "Opt-in per field: show its select-option colours in the grid (\u00a77.4).",
                        "maxLength": 64
                    },
                    "visibility": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "required": {
                        "type": "boolean"
                    },
                    "sort": {
                        "type": "integer"
                    },
                    "filterable": {
                        "type": "boolean"
                    },
                    "searchable": {
                        "type": "boolean"
                    },
                    "sortable": {
                        "type": "boolean"
                    },
                    "index_strategy": {
                        "$ref": "#\/components\/schemas\/IndexStrategy"
                    }
                },
                "required": [
                    "key",
                    "label",
                    "data_type"
                ],
                "title": "StoreFieldDefinitionRequest"
            },
            "StoreFieldGroupRequest": {
                "type": "object",
                "properties": {
                    "label": {
                        "type": "string",
                        "maxLength": 64
                    }
                },
                "required": [
                    "label"
                ],
                "title": "StoreFieldGroupRequest"
            },
            "StoreOutputTemplateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "document_type": {
                        "$ref": "#\/components\/schemas\/DocumentType"
                    },
                    "source": {
                        "$ref": "#\/components\/schemas\/TemplateSource"
                    },
                    "audience": {
                        "type": "string",
                        "description": "Only internal\/vergabe\/public are template audiences; `embed` is the live public\ncollection API (\u00a721), never a rendered template output.",
                        "enum": [
                            "internal",
                            "vergabe",
                            "public"
                        ]
                    },
                    "config": {
                        "type": "object",
                        "properties": {
                            "html": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "description": "The HTML (Twig) source of an `html` reference-sheet template (\u00a711.6). Capped\nto keep a template sane; rendered SANDBOXED so its content can't be dangerous.",
                                "maxLength": 100000
                            },
                            "variants": {
                                "type": "array",
                                "description": "The output VARIANTS this template offers (\u00a711.6): one template, several\ndepths \u2014 \u201enur die erste Seite\" vs. \u201edas ganze Dokument\". Two templates would\nbe the reliable source of drift; a `{% if _variant %}` in ONE template is not.\nThe key is stable (the export action references it) and snake_case like a\nfield key; the label is free text and may be renamed at will.",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "key": {
                                            "type": "string",
                                            "pattern": "^[a-z][a-z0-9_]*$",
                                            "maxLength": 64
                                        },
                                        "label": {
                                            "type": "string",
                                            "maxLength": 120
                                        }
                                    },
                                    "required": [
                                        "key",
                                        "label"
                                    ]
                                },
                                "maxItems": 12
                            },
                            "columns": {
                                "type": "array",
                                "description": "A Referenzliste-Vorlage stores its chosen columns as an ordered list of\ncatalogue keys (\u00a716.4) \u2014 validated against THIS tenant's column vocabulary.",
                                "items": {
                                    "type": "string",
                                    "enum": [
                                        "projektname",
                                        "kunde_name",
                                        "segment"
                                    ]
                                }
                            }
                        }
                    },
                    "branding": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "name",
                    "document_type",
                    "source",
                    "config"
                ],
                "title": "StoreOutputTemplateRequest"
            },
            "StorePersonRequest": {
                "type": "object",
                "description": "Create a person (FACHLOGIK \u00a728). The shapes are FIXED by us \u2014 unlike a reference,\na person is not tenant-configurable \u2014 so plain array rules are enough and every\nconsumer (UI, API, later MCP) gets the same contract.",
                "properties": {
                    "vorname": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "nachname": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "titel": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "funktion": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "studienabschluss": {
                        "type": "string",
                        "description": "Abgeleitet aus `abschlussgrad` (\u00a728.1) \u2014 und wie beim alten `jahre` bei den\nSkills wird der Schl\u00fcssel ABGELEHNT statt ignoriert: Laravel verwirft\nunbekannte Keys still, ein Aufrufer auf der alten Form bek\u00e4me sonst ein 200\nund wunderte sich, warum sein Wert nicht ankommt."
                    },
                    "fachrichtung": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "abschlussgrad": {
                        "anyOf": [
                            {
                                "$ref": "#\/components\/schemas\/Abschlussgrad"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "foto_freigabe": {
                        "description": "The portrait's own reach (\u00a728.3) \u2014 the same scale as every other visibility\nquestion, and it starts closed.",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "kurzprofil": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Richtext \u2014 sanitised on save, same as every richtext field.",
                        "maxLength": 20000
                    },
                    "weitere_kenntnisse": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 20000
                    },
                    "berufserfahrung_seit": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "The START year; the years-of-experience figure is derived from it (\u00a728.1).",
                        "minimum": 1950,
                        "maximum": 2026
                    },
                    "sprachen": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "sprache": {
                                    "type": "string",
                                    "maxLength": 100
                                },
                                "niveau": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 100
                                }
                            }
                        },
                        "maxItems": 50
                    },
                    "zertifikate": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "maxLength": 255
                                },
                                "aussteller": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "jahr": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1950,
                                    "maximum": 2026
                                }
                            }
                        },
                        "maxItems": 100
                    },
                    "skills": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "description": "Skills are written as a WHOLE list (replace semantics) \u2014 the controller\nreconciles them in one transaction, never a sync()-style auto-diff.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "skill": {
                                    "type": "string",
                                    "maxLength": 255
                                },
                                "seit": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "description": "The START year again (\u00a728.2) \u2014 the years of experience are derived from it,\nso a skill can't quietly age the way a stored figure would.",
                                    "minimum": 1950,
                                    "maximum": 2026
                                },
                                "jahre": {
                                    "type": "string",
                                    "description": "The old `jahre` key is REFUSED rather than ignored: Laravel drops unknown keys\nsilently, so a caller still on the old shape would get a 200 and lose the value.\nA 422 that names the replacement is the honest answer to a contract change."
                                }
                            }
                        },
                        "maxItems": 200
                    }
                },
                "required": [
                    "vorname",
                    "nachname"
                ],
                "title": "StorePersonRequest"
            },
            "StoreProjectPersonRoleRequest": {
                "type": "object",
                "description": "Attach a ROLE EPISODE to a reference (FACHLOGIK \u00a728.6). `person_id` is client input,\nso it is checked against THIS org's live people (defense in depth, \u00a75) \u2014 and the\ncontroller re-checks the binding before saving.",
                "properties": {
                    "person_id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "rolle": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "von": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "bis": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "description": "An open end is meaningful (\"bis heute\"), so `bis` stays nullable \u2014 but when\nit IS given it must not precede the start."
                    },
                    "taetigkeit": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 5000
                    },
                    "personentage": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0,
                        "maximum": 100000
                    },
                    "sort": {
                        "type": "integer",
                        "minimum": 0
                    }
                },
                "required": [
                    "person_id",
                    "rolle"
                ],
                "title": "StoreProjectPersonRoleRequest"
            },
            "StoreReferenceCollectionItemRequest": {
                "type": "object",
                "description": "Add a reference to a collection \u2014 the selection is MANUAL (FACHLOGIK \u00a716.1).\nThe project must belong to the tenant and be active; the parent collection is\nresolved (and org-checked) in the controller.",
                "properties": {
                    "project_id": {
                        "type": "string",
                        "format": "uuid",
                        "description": "Foreign \/ archived project ids are rejected (org-scoped) \u2014 defense in depth (\u00a75)."
                    },
                    "position": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 2147483647
                    },
                    "relevance_note": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 10000
                    }
                },
                "required": [
                    "project_id"
                ],
                "title": "StoreReferenceCollectionItemRequest"
            },
            "StoreReferenceCollectionRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "tender_context": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100000
                    }
                },
                "required": [
                    "name"
                ],
                "title": "StoreReferenceCollectionRequest"
            },
            "StoreSavedViewRequest": {
                "type": "object",
                "description": "Create a saved view. `system` is never creatable via the API (delivered only); the\nshared\/locked upgrade is authorised in the controller (manageShared).",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 120
                    },
                    "scope": {
                        "type": "string",
                        "enum": [
                            "personal",
                            "shared"
                        ]
                    },
                    "view_type": {
                        "$ref": "#\/components\/schemas\/ViewType"
                    },
                    "icon": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 64
                    },
                    "is_locked": {
                        "type": "boolean"
                    },
                    "config": {
                        "type": "object",
                        "properties": {
                            "visible_fields": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 120
                                }
                            },
                            "field_order": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 120
                                }
                            },
                            "filters": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "sorts": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "group_by": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 120
                            },
                            "display": {
                                "description": "Display mode (FACHLOGIK \u00a715.4): one preset governing density + field render depth.",
                                "$ref": "#\/components\/schemas\/ViewDisplay"
                            }
                        }
                    }
                },
                "required": [
                    "name"
                ],
                "title": "StoreSavedViewRequest"
            },
            "TemplateSource": {
                "type": "string",
                "description": "How an output_template was built (FACHLOGIK \u00a711.1\/\u00a711.6): an uploaded Word .docx with {{ key }} placeholders, an editable HTML (Twig) reference sheet rendered to PDF, a chosen set of columns rendered as an Excel reference list, the drag-compose template editor, or a hard-coded custom template. The renderer branches on this. In the \"two shapes\" model (\u00a711.6) the user never picks this directly: a Referenzblatt is `html`\/`word_upload`, a Referenzliste is `columns`. `editor`\/`custom` are dormant.\n",
                "enum": [
                    "word_upload",
                    "html",
                    "columns",
                    "editor",
                    "custom"
                ],
                "title": "TemplateSource"
            },
            "UpdateBrandingRequest": {
                "type": "object",
                "description": "Corporate-design settings (organizations.branding, M3\u00b7S4b). Colours are stored\nas #rrggbb hex; the logo is a separate media upload, not part of this payload.",
                "properties": {
                    "primary_color": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "pattern": "^#[0-9a-fA-F]{6}$"
                    },
                    "accent_color": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "pattern": "^#[0-9a-fA-F]{6}$"
                    },
                    "font_family": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Interpolated into a PDF\/HTML <style> sink \u2014 whitelist to letters, digits,\nspaces, commas and hyphens so a crafted value can't break out of the CSS.",
                        "pattern": "^[\\w\\s,\\-]+$",
                        "maxLength": 255
                    },
                    "footer_text": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 2000
                    },
                    "cover_page": {
                        "type": "boolean"
                    }
                },
                "title": "UpdateBrandingRequest"
            },
            "UpdateClientRequest": {
                "type": "object",
                "description": "PATCH counterpart of StoreClientRequest. Reuses the store rules verbatim and\nmakes every field optional so the two can never drift.",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "is_public_sector": {
                        "type": "boolean"
                    },
                    "website": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri",
                        "maxLength": 255
                    },
                    "nennung": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "segment": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "",
                            null
                        ]
                    },
                    "address": {
                        "type": "object",
                        "properties": {
                            "street": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "postal_code": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 32
                            },
                            "city": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "country": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            }
                        }
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "title": "UpdateClientRequest"
            },
            "UpdateContactRequest": {
                "type": "object",
                "description": "PATCH counterpart of StoreContactRequest. Reuses the store rules and makes each\nfield optional so the two can never drift.",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "role": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 64
                    },
                    "nennung": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "foto_freigabe": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    }
                },
                "title": "UpdateContactRequest"
            },
            "UpdateEligibilityProfileRequest": {
                "type": "object",
                "description": "Structured-but-lenient shape for organizations.eignungsprofil (JSONB) \u2014\ncanonical structure per ARCHITECTURE \u00a76 \/ FACHLOGIK \u00a724.1:\n  stammdaten:        { firma, rechtsform, anschrift{strasse,plz,ort}, ust_id, handelsregister, geschaeftsfuehrung[] }\n  umsatz_kennzahlen: [ { jahr, umsatz_vergleichbar, beschaeftigte, fuehrung, gesamt } ]  per year\n  mitarbeiter:       { gesamt, schluesselpersonal }\n  zertifikate:       [ { name, standard, gueltig_bis, nachweis_media_uuid } ]\n\n`umsatz_vergleichbar` is stored as INTEGER minor units (cents), never a float\n(\u00a75). Certificate proof files live in the medialibrary certificates collection;\n`nachweis_media_uuid` links a certificate entry to its uploaded file. A few\noptional contact keys (telefon\/email\/web) extend stammdaten; `kmu_status` is a\nfixed EU SME size class (Recommendation 2003\/361\/EC).",
                "properties": {
                    "stammdaten": {
                        "type": "object",
                        "properties": {
                            "firma": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "rechtsform": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "anschrift": {
                                "type": [
                                    "object",
                                    "null"
                                ],
                                "properties": {
                                    "strasse": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "plz": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 16
                                    },
                                    "ort": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    }
                                }
                            },
                            "ust_id": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 64
                            },
                            "handelsregister": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "geschaeftsfuehrung": {
                                "type": [
                                    "array",
                                    "null"
                                ],
                                "items": {
                                    "type": "string",
                                    "maxLength": 255
                                }
                            },
                            "telefon": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "description": "Optional contact extensions (JSONB-tolerant).",
                                "maxLength": 64
                            },
                            "email": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "email",
                                "maxLength": 255
                            },
                            "web": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 255
                            },
                            "kmu_status": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "enum": [
                                    "kleinst",
                                    "klein",
                                    "mittel",
                                    "gross",
                                    null
                                ]
                            }
                        }
                    },
                    "umsatz_kennzahlen": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "jahr": {
                                    "type": "integer",
                                    "minimum": 1990,
                                    "maximum": 2100
                                },
                                "umsatz_vergleichbar": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 0
                                },
                                "beschaeftigte": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "description": "minor units (\u00a75)",
                                    "minimum": 0
                                },
                                "fuehrung": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 0
                                },
                                "gesamt": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 0
                                }
                            },
                            "required": [
                                "jahr"
                            ]
                        }
                    },
                    "mitarbeiter": {
                        "type": "object",
                        "properties": {
                            "gesamt": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "minimum": 0
                            },
                            "schluesselpersonal": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "minimum": 0
                            }
                        }
                    },
                    "zertifikate": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "maxLength": 255
                                },
                                "standard": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "gueltig_bis": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "format": "date-time"
                                },
                                "nachweis_media_uuid": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "format": "uuid"
                                }
                            },
                            "required": [
                                "name"
                            ]
                        }
                    }
                },
                "title": "UpdateEligibilityProfileRequest"
            },
            "UpdateFieldDefinitionRequest": {
                "type": "object",
                "properties": {
                    "label": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Optional guidance (shown under the field, exposed to AI agents).",
                        "maxLength": 1000
                    },
                    "recommended_length": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "Recommended length in words (text \/ richtext) \u2014 advisory, not enforced.",
                        "minimum": 1,
                        "maximum": 100000
                    },
                    "data_type": {
                        "$ref": "#\/components\/schemas\/DataType"
                    },
                    "options": {
                        "type": "object",
                        "properties": {
                            "mode": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "enum": [
                                    "single",
                                    "multi",
                                    null
                                ]
                            },
                            "allow_other": {
                                "type": "boolean"
                            },
                            "options": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "value": {
                                            "type": "string",
                                            "maxLength": 128
                                        },
                                        "label": {
                                            "type": "string",
                                            "maxLength": 255
                                        },
                                        "color": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "maxLength": 32
                                        }
                                    }
                                }
                            },
                            "operation": {
                                "type": "string",
                                "maxLength": 32
                            },
                            "operands": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 64
                                }
                            },
                            "entity": {
                                "type": "string",
                                "description": "Target entity of a `relation` field (\u00a720.7). Required when the type is\nrelation, and deliberately a CLOSED list: `clients` is the only entity a\nreference may point at today. A free-text target would advertise a\nconfigurability that no validator, picker or renderer actually supports.",
                                "enum": [
                                    "client"
                                ]
                            },
                            "unit": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "description": "Display unit for number \/ computed fields (e.g. \"m\u00b2\", \"\u20ac\/m\u00b2\").",
                                "maxLength": 32
                            }
                        }
                    },
                    "default_value": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Optional per-field default (\u00a77.8): any JSON value; its shape is checked\nagainst the field's data_type in the controller (media\/computed rejected)."
                    },
                    "group": {
                        "type": "string",
                        "description": "Opt-in per field: show its select-option colours in the grid (\u00a77.4).",
                        "maxLength": 64
                    },
                    "visibility": {
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "required": {
                        "type": "boolean"
                    },
                    "sort": {
                        "type": "integer"
                    },
                    "filterable": {
                        "type": "boolean"
                    },
                    "searchable": {
                        "type": "boolean"
                    },
                    "sortable": {
                        "type": "boolean"
                    },
                    "index_strategy": {
                        "$ref": "#\/components\/schemas\/IndexStrategy"
                    },
                    "option_value_renames": {
                        "type": "array",
                        "description": "A select field's option `value` IS its stable identity in custom_data.\nWhen the editor renames a value (e.g. fixing a drifted key), it sends the\nold\u2192new pairs here so the controller can remap every project's stored\nvalue in lockstep \u2014 otherwise the data would silently orphan (\u00a77.4).",
                        "items": {
                            "type": "object",
                            "properties": {
                                "from": {
                                    "type": "string",
                                    "maxLength": 128
                                },
                                "to": {
                                    "type": "string",
                                    "maxLength": 128
                                }
                            }
                        }
                    }
                },
                "title": "UpdateFieldDefinitionRequest"
            },
            "UpdateOutputTemplateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "document_type": {
                        "$ref": "#\/components\/schemas\/DocumentType"
                    },
                    "source": {
                        "$ref": "#\/components\/schemas\/TemplateSource"
                    },
                    "audience": {
                        "type": "string",
                        "description": "Only internal\/vergabe\/public are template audiences; `embed` is the live public\ncollection API (\u00a721), never a rendered template output.",
                        "enum": [
                            "internal",
                            "vergabe",
                            "public"
                        ]
                    },
                    "config": {
                        "type": "object",
                        "properties": {
                            "html": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "description": "The HTML (Twig) source of an `html` reference-sheet template (\u00a711.6). Capped\nto keep a template sane; rendered SANDBOXED so its content can't be dangerous.",
                                "maxLength": 100000
                            },
                            "variants": {
                                "type": "array",
                                "description": "The output VARIANTS this template offers (\u00a711.6): one template, several\ndepths \u2014 \u201enur die erste Seite\" vs. \u201edas ganze Dokument\". Two templates would\nbe the reliable source of drift; a `{% if _variant %}` in ONE template is not.\nThe key is stable (the export action references it) and snake_case like a\nfield key; the label is free text and may be renamed at will.",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "key": {
                                            "type": "string",
                                            "pattern": "^[a-z][a-z0-9_]*$",
                                            "maxLength": 64
                                        },
                                        "label": {
                                            "type": "string",
                                            "maxLength": 120
                                        }
                                    },
                                    "required": [
                                        "key",
                                        "label"
                                    ]
                                },
                                "maxItems": 12
                            },
                            "columns": {
                                "type": "array",
                                "description": "A Referenzliste-Vorlage stores its chosen columns as an ordered list of\ncatalogue keys (\u00a716.4) \u2014 validated against THIS tenant's column vocabulary.",
                                "items": {
                                    "type": "string",
                                    "enum": [
                                        "projektname",
                                        "kunde_name",
                                        "segment"
                                    ]
                                }
                            }
                        }
                    },
                    "branding": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "config"
                ],
                "title": "UpdateOutputTemplateRequest"
            },
            "UpdatePersonRequest": {
                "type": "object",
                "description": "Update a person (FACHLOGIK \u00a728) \u2014 same rule set as create, only the identity fields\nbecome optional so a partial PATCH works.",
                "properties": {
                    "vorname": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "nachname": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "titel": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "funktion": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "studienabschluss": {
                        "type": "string",
                        "description": "Abgeleitet aus `abschlussgrad` (\u00a728.1) \u2014 und wie beim alten `jahre` bei den\nSkills wird der Schl\u00fcssel ABGELEHNT statt ignoriert: Laravel verwirft\nunbekannte Keys still, ein Aufrufer auf der alten Form bek\u00e4me sonst ein 200\nund wunderte sich, warum sein Wert nicht ankommt."
                    },
                    "fachrichtung": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "abschlussgrad": {
                        "anyOf": [
                            {
                                "$ref": "#\/components\/schemas\/Abschlussgrad"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "foto_freigabe": {
                        "description": "The portrait's own reach (\u00a728.3) \u2014 the same scale as every other visibility\nquestion, and it starts closed.",
                        "$ref": "#\/components\/schemas\/Visibility"
                    },
                    "kurzprofil": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Richtext \u2014 sanitised on save, same as every richtext field.",
                        "maxLength": 20000
                    },
                    "weitere_kenntnisse": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 20000
                    },
                    "berufserfahrung_seit": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "The START year; the years-of-experience figure is derived from it (\u00a728.1).",
                        "minimum": 1950,
                        "maximum": 2026
                    },
                    "sprachen": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "sprache": {
                                    "type": "string",
                                    "maxLength": 100
                                },
                                "niveau": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 100
                                }
                            }
                        },
                        "maxItems": 50
                    },
                    "zertifikate": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "maxLength": 255
                                },
                                "aussteller": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "jahr": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1950,
                                    "maximum": 2026
                                }
                            }
                        },
                        "maxItems": 100
                    },
                    "skills": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "description": "Skills are written as a WHOLE list (replace semantics) \u2014 the controller\nreconciles them in one transaction, never a sync()-style auto-diff.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "skill": {
                                    "type": "string",
                                    "maxLength": 255
                                },
                                "seit": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "description": "The START year again (\u00a728.2) \u2014 the years of experience are derived from it,\nso a skill can't quietly age the way a stored figure would.",
                                    "minimum": 1950,
                                    "maximum": 2026
                                },
                                "jahre": {
                                    "type": "string",
                                    "description": "The old `jahre` key is REFUSED rather than ignored: Laravel drops unknown keys\nsilently, so a caller still on the old shape would get a 200 and lose the value.\nA 422 that names the replacement is the honest answer to a contract change."
                                }
                            }
                        },
                        "maxItems": 200
                    }
                },
                "title": "UpdatePersonRequest"
            },
            "UpdateProjectPersonRoleRequest": {
                "type": "object",
                "description": "Edit a role episode (FACHLOGIK \u00a728.6) \u2014 the episode's facts only. `person_id` is\nintentionally absent: re-pointing an episode at a different person would silently\nrewrite who did the work.",
                "properties": {
                    "rolle": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "von": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "bis": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "description": "An open end is meaningful (\"bis heute\"), so `bis` stays nullable \u2014 but when\nit IS given it must not precede the start."
                    },
                    "taetigkeit": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 5000
                    },
                    "personentage": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0,
                        "maximum": 100000
                    },
                    "sort": {
                        "type": "integer",
                        "minimum": 0
                    }
                },
                "title": "UpdateProjectPersonRoleRequest"
            },
            "UpdateReferenceCollectionItemRequest": {
                "type": "object",
                "description": "Update a curated item \u2014 `position` (reorder) and\/or `relevance_note` (write the\n\"Bezug zur Ausschreibung\"). Writes serialise; the controller maps a note change\nonto the HITL state machine (\u00a716.3\/\u00a716.4).",
                "properties": {
                    "position": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 2147483647
                    },
                    "relevance_note": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "`sometimes` + `nullable`: only touched when the key is present, so the\ncontroller can tell \"note omitted\" from \"note cleared\".",
                        "maxLength": 10000
                    }
                },
                "title": "UpdateReferenceCollectionItemRequest"
            },
            "UpdateReferenceCollectionRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "tender_context": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100000
                    }
                },
                "title": "UpdateReferenceCollectionRequest"
            },
            "UpdateSavedViewRequest": {
                "type": "object",
                "description": "Update a saved view. Scope may only move between personal\/shared (never to\/from system);\nthe shared\/locked change is authorised in the controller (manageShared).",
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 120
                    },
                    "scope": {
                        "type": "string",
                        "enum": [
                            "personal",
                            "shared"
                        ]
                    },
                    "view_type": {
                        "$ref": "#\/components\/schemas\/ViewType"
                    },
                    "icon": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 64
                    },
                    "is_locked": {
                        "type": "boolean"
                    },
                    "config": {
                        "type": "object",
                        "properties": {
                            "visible_fields": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 120
                                }
                            },
                            "field_order": {
                                "type": "array",
                                "items": {
                                    "type": "string",
                                    "maxLength": 120
                                }
                            },
                            "filters": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "sorts": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "group_by": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 120
                            },
                            "display": {
                                "description": "Display mode (FACHLOGIK \u00a715.4): one preset governing density + field render depth.",
                                "$ref": "#\/components\/schemas\/ViewDisplay"
                            }
                        }
                    }
                },
                "title": "UpdateSavedViewRequest"
            },
            "UpdateSegmentsRequest": {
                "type": "object",
                "description": "Per-organization client segments (organizations.segments JSONB). A PUT replaces\nthe WHOLE list with `[{key, label}]`. Keys are lowercase slugs and must be\nunique within the list (they are the value stored on clients.segment).",
                "properties": {
                    "segments": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "pattern": "^[a-z0-9_]+$",
                                    "maxLength": 64
                                },
                                "label": {
                                    "type": "string",
                                    "maxLength": 255
                                }
                            },
                            "required": [
                                "key",
                                "label"
                            ]
                        }
                    }
                },
                "required": [
                    "segments"
                ],
                "title": "UpdateSegmentsRequest"
            },
            "UpsertFieldGroupRequest": {
                "type": "object",
                "description": "Rename \/ re-sort a group by its stable key (upsert: default groups have no row\nuntil first touched). `key` is never renamed \u2014 only the display label\/order.",
                "properties": {
                    "key": {
                        "type": "string",
                        "pattern": "^[a-z][a-z0-9_]*$",
                        "maxLength": 64
                    },
                    "label": {
                        "type": "string",
                        "maxLength": 64
                    },
                    "sort": {
                        "type": "integer",
                        "minimum": 0
                    }
                },
                "required": [
                    "key"
                ],
                "title": "UpsertFieldGroupRequest"
            },
            "ViewDisplay": {
                "type": "string",
                "description": "The display mode of a saved view (FACHLOGIK \u00a715.4) \u2014 one whole preset, not a set of independent toggles. It governs row density AND how each field renders (long text depth, media thumbnail size); ~90% of fields look the same across modes, ~10% scale with it. A fixed, named set (not per-org configurable); `standard` is the default when a view carries no `config.display`.\n",
                "enum": [
                    "compact",
                    "standard",
                    "large"
                ],
                "title": "ViewDisplay"
            },
            "ViewType": {
                "type": "string",
                "description": "How a saved view renders the record set on screen (FACHLOGIK \u00a716). Table ships first; kanban is a later screen presentation \u2014 NOT an output channel.\n",
                "enum": [
                    "table",
                    "kanban"
                ],
                "title": "ViewType"
            },
            "Visibility": {
                "type": "string",
                "description": "THE one visibility scale (FACHLOGIK \u00a74.1). Three tiers, fixed for every tenant: \u2022 intern      \u2014 the application itself: the tenant's users and the API.   \u2022 vergabe     \u2014 what the company hands out in a bid. Contact person and order                   volume belong here; internal classifications do not.   \u2022 oeffentlich \u2014 the website \/ embed.  The tiers are the SYSTEM's; the assignment is the TENANT's. A tenant who puts their order volume on `oeffentlich` has it on their homepage \u2014 that is the point.  It hangs on exactly five things (\u00a74.2\/\u00a728.3), and the same enum serves all of them:   \u2022 `field_definitions.visibility` \u2014 how far this VALUE may go   \u2022 `clients.nennung`             \u2014 how far this ORGANISATION's name may go   \u2022 `contacts.nennung`            \u2014 how far this PERSON may be NAMED   \u2022 `contacts.foto_freigabe`      \u2014 how far their PORTRAIT may go   \u2022 `people.foto_freigabe`        \u2014 how far a colleague's PORTRAIT may go  The last two are separate from the naming tier on purpose: being allowed to name someone is not being allowed to publish their face \u2014 two consents, so two gates, and a portrait needs BOTH (you cannot show the face of someone you may not name).  One rule at the renderer: `level() >= OutputAudience::minVisibility()`.  Unified 2026-08-10. There used to be two IDENTICAL enums \u2014 `FieldVisibility` and `Nennung`, same three values, same level() \u2014 plus two unrelated scales (`Freigabe`, four states, for people and contacts; `VolumeRelease` for the amount). Four vocabularies for one question is how a masking rule ends up applied in one place and forgotten in the next; the volume gate was exactly that (\u00a74.6).\n",
                "enum": [
                    "intern",
                    "vergabe",
                    "oeffentlich"
                ],
                "title": "Visibility"
            }
        },
        "responses": {
            "AuthenticationException": {
                "description": "Unauthenticated",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "AuthorizationException": {
                "description": "Authorization error",
                "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"
                            ]
                        }
                    }
                }
            },
            "ModelNotFoundException": {
                "description": "Not found",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            }
        }
    }
}