{
  "openapi": "3.1.0",
  "info": {
    "title": "Utilico API",
    "version": "2.0.0",
    "summary": "Rechnen und umrechnen über HTTP – ohne Schlüssel, ohne Anmeldung.",
    "description": "Öffentliche, schlüssellose JSON-API von utilico.de mit zwei Familien von Endpunkten. „/api/rechner“ führt die Rechner der Website serverseitig aus: 120 der 146 liefern ein Ergebnis, die übrigen antworten mit 422 und einem Grund (Passwörter und Dateien sollen das Gerät nicht verlassen, ein Timer hat nichts zu rechnen). „/api/umrechnen“ rechnet Einheiten um, mit denselben Faktoren wie die Umrechnungsseiten. Alle Endpunkte sind lesend, brauchen keine Authentifizierung und erlauben Cross-Origin-Zugriff.\n\nZahlen: Punkt und Komma gelten beide als Dezimaltrennzeichen. Ein Wert außerhalb von „minimum“ oder „maximum“ wird abgewiesen (400) und die Antwort nennt unter „erlaubt“ die Spanne – genau das tut das Formular im Browser auch, wo ein Zahlenfeld den Wert behält und sich als ungültig meldet. Die eine Ausnahme ist der Schieberegler: Er kann einen Wert außerhalb gar nicht anzeigen, also zieht ihn auch die API auf die Grenze und sagt es unter „hinweise“ (die Feldbeschreibung nennt ihn dann so). Was die API verändert hat, steht in jeder Antwort unter „hinweise“, auch in einer fehlgeschlagenen. Ein unbekannter Parametername wird ebenfalls abgewiesen, damit niemand eine Antwort auf eine andere Frage bekommt als die gestellte.\n\nAntworten sind 24 Stunden cachebar, weil Umrechnungen und Rechner deterministisch sind – ausgenommen die Zufallsrechner (Würfel, Lotto, UUID …), die „Cache-Control: no-store“ tragen. Es gilt kein vertraglich zugesichertes Limit; faire Nutzung wird vorausgesetzt.",
    "termsOfService": "https://utilico.de/impressum",
    "contact": {
      "name": "Utilico",
      "url": "https://utilico.de/api",
      "email": "info@utilico.de"
    },
    "license": {
      "name": "Freie Nutzung, auch kommerziell – ohne Gewähr",
      "url": "https://utilico.de/api"
    }
  },
  "security": [],
  "servers": [
    {
      "url": "https://utilico.de",
      "description": "Produktion"
    }
  ],
  "externalDocs": {
    "description": "Menschenlesbare API-Dokumentation",
    "url": "https://utilico.de/api"
  },
  "tags": [
    {
      "name": "Rechner",
      "description": "Katalog und allgemeiner Zugang zu allen Rechnern."
    },
    {
      "name": "Rechnen",
      "description": "Rechner für Alltag, Geld und Gesundheit."
    },
    {
      "name": "Finanzen",
      "description": "Geld, Kredite, Steuern und Sparen."
    },
    {
      "name": "Umrechnen",
      "description": "Einheiten, Zahlen und Formate umwandeln."
    },
    {
      "name": "Mathe",
      "description": "Zahlen, Geometrie und Statistik."
    },
    {
      "name": "Gesundheit",
      "description": "Körper, Fitness und Ernährung."
    },
    {
      "name": "Datum & Zeit",
      "description": "Mit Daten, Uhrzeiten und Zeitspannen rechnen."
    },
    {
      "name": "Text",
      "description": "Text zählen, umwandeln, prüfen und erzeugen."
    },
    {
      "name": "Entwickler",
      "description": "Code, Daten und Format-Werkzeuge."
    },
    {
      "name": "Sicherheit",
      "description": "Passwörter und Prüfungen – lokal im Browser."
    },
    {
      "name": "Design & Farbe",
      "description": "Farben, Codes und Grafik-Helfer."
    },
    {
      "name": "Bild & PDF",
      "description": "Bilder und PDFs umwandeln, zuschneiden, zusammenfügen – lokal im Browser."
    },
    {
      "name": "Alltag & Spiele",
      "description": "Praktische Helfer, Zufall und kleine Spiele."
    },
    {
      "name": "Einheiten",
      "description": "Einheiten umrechnen und auflisten."
    }
  ],
  "paths": {
    "/api/rechner": {
      "get": {
        "operationId": "rechnerkatalog",
        "tags": [
          "Rechner"
        ],
        "summary": "Alle Rechner auflisten",
        "description": "Verzeichnis aller 146 Rechner mit Kategorie, Adresse und der Angabe, ob sie über HTTP rechnen. Die gesperrten stehen mit Grund dabei, statt zu fehlen. Die Felder eines Rechners stehen nicht hier, sondern in seiner eigenen Antwort unter „parameter“ – oder in diesem Dokument bei seinem Pfad.",
        "parameters": [
          {
            "name": "kategorie",
            "in": "query",
            "required": false,
            "description": "Auf eine Kategorie einschränken. Alias: category.",
            "schema": {
              "type": "string",
              "enum": [
                "rechnen",
                "finanzen",
                "umrechnen",
                "mathe",
                "gesundheit",
                "datum",
                "text",
                "entwickler",
                "sicherheit",
                "design",
                "bild",
                "alltag"
              ]
            },
            "example": "gesundheit"
          }
        ],
        "responses": {
          "200": {
            "description": "Der Katalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rechnerkatalog"
                }
              }
            }
          },
          "400": {
            "description": "Unbekannte Kategorie – die Antwort listet die gültigen",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rechnerfehler"
                }
              }
            }
          }
        }
      }
    },
    "/api/rechner/{slug}": {
      "get": {
        "operationId": "rechner",
        "tags": [
          "Rechner"
        ],
        "summary": "Einen Rechner ausführen",
        "description": "Derselbe Endpunkt wie die einzelnen Rechner weiter unten, hier mit der Slug-Liste an einer Stelle und mit allen Antworten, die vorkommen können. Welche Parameter ein Rechner nimmt, steht bei ihm selbst; ein Aufruf ganz ohne Parameter rechnet mit den Standardwerten des Formulars und liefert die Feldliste gleich mit.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Kurzname des Rechners, zugleich sein URL-Segment unter /tool/.",
            "schema": {
              "type": "string",
              "enum": [
                "alter",
                "arbeitstage",
                "base64",
                "benzinkosten",
                "bild-drehen",
                "bild-format",
                "bild-groesse",
                "bild-komprimieren",
                "bild-pdf",
                "bild-zuschneiden",
                "binaer-text",
                "bmi",
                "bruch-kuerzen",
                "brutto-netto",
                "countdown",
                "cron",
                "css-min",
                "csv-json",
                "datengroesse",
                "diff",
                "dreisatz",
                "druck",
                "duplikate-entfernen",
                "durchschnittsgeschwindigkeit",
                "energie",
                "ersetzen",
                "fahrrad-uebersetzung",
                "fakultaet",
                "farbe",
                "farbpalette",
                "farbverlauf",
                "feiertage",
                "flaeche",
                "geburtstermin",
                "geschwindigkeit",
                "ggt-kgv",
                "gluecksrad",
                "goldener-schnitt",
                "gross-klein",
                "hash",
                "herzfrequenz",
                "html-entfernen",
                "html-escape",
                "html-format",
                "html-markdown",
                "iban",
                "idealgewicht",
                "inflation",
                "ja-nein",
                "json-csv",
                "json-diff",
                "json-format",
                "jwt",
                "kaffee",
                "kalenderwoche",
                "kalorienbedarf",
                "kochen-umrechnen",
                "koerperfett",
                "kontrast",
                "kredit",
                "kreis",
                "laenge",
                "leasing-oder-kauf",
                "leistung",
                "logarithmus",
                "lorem",
                "losentscheid",
                "lotto",
                "markdown-html",
                "masse",
                "md5",
                "meme",
                "metronom",
                "mischen",
                "mittelwert",
                "morse",
                "muenze",
                "mwst",
                "nato-alphabet",
                "notendurchschnitt",
                "og-tags",
                "pace",
                "passphrase",
                "passwort",
                "passwort-staerke",
                "pdf-drehen",
                "pdf-merge",
                "pdf-seitenzahlen",
                "pdf-split",
                "pdf-wasserzeichen",
                "pin",
                "pizza-vergleich",
                "pomodoro",
                "portionen",
                "potenz-wurzel",
                "primzahl",
                "profilbild",
                "promille",
                "prozent",
                "px-rem",
                "pythagoras",
                "qr",
                "quadratische-gleichung",
                "rabatt",
                "rechner",
                "regex",
                "roemische-zahlen",
                "roi",
                "rot13",
                "schatten",
                "schuhgroessen",
                "seitenverhaeltnis",
                "skonto",
                "slugify",
                "sparplan",
                "sql-format",
                "stoppuhr",
                "stunden-rechner",
                "stundenlohn",
                "tage-zwischen",
                "team-generator",
                "teiler",
                "temperatur",
                "text-umkehren",
                "textzaehler",
                "timer",
                "trinkgeld",
                "unixzeit",
                "url-codieren",
                "uuid",
                "verhaeltnis",
                "volumen",
                "wandfarbe",
                "wasserbedarf",
                "wecker",
                "winkel",
                "wlan-qr",
                "wochentag",
                "wuerfel",
                "xml-format",
                "zahlensysteme",
                "zeilen-sortieren",
                "zeit-addieren",
                "zeit-umrechnen",
                "zinseszins",
                "zufallszahl"
              ]
            },
            "example": "bmi"
          },
          {
            "name": "eingaben",
            "in": "query",
            "required": false,
            "description": "Die Felder des jeweiligen Rechners, jedes als eigener Query-Parameter (etwa ?gewicht=82&groesse=178). Welche es gibt, steht bei seinem eigenen Pfad in diesem Dokument und in „parameter“ jeder Antwort.",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "404": {
            "$ref": "#/components/responses/UnbekannterRechner"
          },
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/umrechnen": {
      "get": {
        "operationId": "umrechnen",
        "tags": [
          "Einheiten"
        ],
        "summary": "Einen Wert von einer Einheit in eine andere umrechnen",
        "description": "Beide Einheiten müssen zur selben Familie gehören (Länge, Gewicht, …). Als Einheit werden der Code (z.B. \"meile\") und das Symbol (z.B. \"mi\") akzeptiert, Groß-/Kleinschreibung egal.",
        "parameters": [
          {
            "name": "von",
            "in": "query",
            "required": true,
            "description": "Ausgangseinheit als Code oder Symbol. Alias: from.",
            "schema": {
              "$ref": "#/components/schemas/Einheitencode"
            },
            "example": "km"
          },
          {
            "name": "nach",
            "in": "query",
            "required": true,
            "description": "Zieleinheit als Code oder Symbol. Alias: to.",
            "schema": {
              "$ref": "#/components/schemas/Einheitencode"
            },
            "example": "meile"
          },
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Umzurechnender Wert. Punkt und Komma sind als Dezimaltrenner erlaubt (\"42.5\" oder \"42,5\"). Ohne Angabe wird 1 gerechnet, die Antwort liefert dann direkt den Umrechnungsfaktor. Alias: value.",
            "schema": {
              "type": "string",
              "default": "1"
            },
            "example": "42"
          }
        ],
        "responses": {
          "200": {
            "description": "Umrechnung erfolgreich",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Umrechnung"
                }
              }
            }
          },
          "400": {
            "description": "Parameter fehlt, Einheit unbekannt, Einheiten aus verschiedenen Familien oder Wert keine Zahl",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/api/einheiten": {
      "get": {
        "operationId": "einheiten",
        "tags": [
          "Einheiten"
        ],
        "summary": "Alle Familien und ihre Einheiten auflisten",
        "description": "Liefert die gültigen Werte für die Parameter \"von\" und \"nach\" von /api/umrechnen.",
        "parameters": [
          {
            "name": "familie",
            "in": "query",
            "required": false,
            "description": "Auf eine Familie einschränken.",
            "schema": {
              "type": "string",
              "enum": [
                "laenge",
                "gewicht",
                "volumen",
                "flaeche",
                "geschwindigkeit",
                "daten",
                "leistung",
                "energie",
                "druck",
                "temperatur"
              ]
            },
            "example": "laenge"
          }
        ],
        "responses": {
          "200": {
            "description": "Einheitenkatalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Einheitenkatalog"
                }
              }
            }
          },
          "400": {
            "description": "Unbekannte Familie",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/api/rechner/alter": {
      "get": {
        "operationId": "rechner_alter",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/alter"
        },
        "summary": "Alter berechnen",
        "description": "Dein genaues Alter in Jahren, Monaten und Tagen aus dem Geburtsdatum.",
        "parameters": [
          {
            "name": "geburt",
            "in": "query",
            "required": false,
            "description": "Geburtsdatum.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/arbeitstage": {
      "get": {
        "operationId": "rechner_arbeitstage",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/arbeitstage"
        },
        "summary": "Arbeitstage zählen",
        "description": "Werktage (Mo–Fr) zwischen zwei Daten zählen – ohne Wochenenden und auf Wunsch ohne die gesetzlichen Feiertage deines Bundeslands.",
        "parameters": [
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "Von.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "bis",
            "in": "query",
            "required": false,
            "description": "Bis.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "bundesland",
            "in": "query",
            "required": false,
            "description": "Bundesland. Werte: „“ = Nicht abziehen (nur Wochenenden), alle = Nur bundesweite Feiertage, bw = Baden-Württemberg, by = Bayern, be = Berlin, bb = Brandenburg, hb = Bremen, hh = Hamburg, he = Hessen, mv = Mecklenburg-Vorpommern, ni = Niedersachsen, nw = Nordrhein-Westfalen, rp = Rheinland-Pfalz, sl = Saarland, sn = Sachsen, st = Sachsen-Anhalt, sh = Schleswig-Holstein, th = Thüringen. Welche Feiertage gelten, hängt vom Bundesland ab – Fronleichnam etwa nur in sechs Ländern.",
            "schema": {
              "type": "string",
              "enum": [
                "",
                "alle",
                "bw",
                "by",
                "be",
                "bb",
                "hb",
                "hh",
                "he",
                "mv",
                "ni",
                "nw",
                "rp",
                "sl",
                "sn",
                "st",
                "sh",
                "th"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/base64": {
      "get": {
        "operationId": "rechner_base64",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/base64"
        },
        "summary": "Base64 Encoder / Decoder",
        "description": "Text nach Base64 kodieren oder Base64 zurück in Text dekodieren.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: encode = Text → Base64, decode = Base64 → Text.",
            "schema": {
              "type": "string",
              "enum": [
                "encode",
                "decode"
              ],
              "default": "encode"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/benzinkosten": {
      "get": {
        "operationId": "rechner_benzinkosten",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/benzinkosten"
        },
        "summary": "Spritkosten-Rechner",
        "description": "Was eine Fahrt an Sprit kostet – aus Strecke, Verbrauch und Preis.",
        "parameters": [
          {
            "name": "strecke",
            "in": "query",
            "required": false,
            "description": "Strecke (km).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 100
            }
          },
          {
            "name": "verbrauch",
            "in": "query",
            "required": false,
            "description": "Verbrauch (l/100 km).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 7
            }
          },
          {
            "name": "preis",
            "in": "query",
            "required": false,
            "description": "Spritpreis (€/l).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1.75
            }
          },
          {
            "name": "personen",
            "in": "query",
            "required": false,
            "description": "Personen (Aufteilung).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/bild-drehen": {
      "get": {
        "operationId": "rechner_bild_drehen",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-drehen"
        },
        "summary": "Bild drehen & spiegeln – über HTTP nicht berechenbar",
        "description": "„Bild drehen & spiegeln“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-drehen wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/bild-format": {
      "get": {
        "operationId": "rechner_bild_format",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-format"
        },
        "summary": "Bildformat umwandeln – über HTTP nicht berechenbar",
        "description": "„Bildformat umwandeln“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-format wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/bild-groesse": {
      "get": {
        "operationId": "rechner_bild_groesse",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-groesse"
        },
        "summary": "Bild verkleinern – über HTTP nicht berechenbar",
        "description": "„Bild verkleinern“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-groesse wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/bild-komprimieren": {
      "get": {
        "operationId": "rechner_bild_komprimieren",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-komprimieren"
        },
        "summary": "Bild komprimieren – über HTTP nicht berechenbar",
        "description": "„Bild komprimieren“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-komprimieren wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/bild-pdf": {
      "get": {
        "operationId": "rechner_bild_pdf",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-pdf"
        },
        "summary": "Bilder in PDF – über HTTP nicht berechenbar",
        "description": "„Bilder in PDF“ braucht eine Datei (Bilder (JPG/PNG, mehrere auswählen)), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-pdf wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/bild-zuschneiden": {
      "get": {
        "operationId": "rechner_bild_zuschneiden",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bild-zuschneiden"
        },
        "summary": "Bild zuschneiden – über HTTP nicht berechenbar",
        "description": "„Bild zuschneiden“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/bild-zuschneiden wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/binaer-text": {
      "get": {
        "operationId": "rechner_binaer_text",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/binaer-text"
        },
        "summary": "Text ↔ Binär",
        "description": "Text in Binärcode (0 und 1) umwandeln und wieder zurück.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: encode = Text → Binär, decode = Binär → Text.",
            "schema": {
              "type": "string",
              "enum": [
                "encode",
                "decode"
              ],
              "default": "encode"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/bmi": {
      "get": {
        "operationId": "rechner_bmi",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bmi"
        },
        "summary": "BMI-Rechner",
        "description": "Berechne deinen Body-Mass-Index aus Größe und Gewicht – inklusive Einordnung.",
        "parameters": [
          {
            "name": "gewicht",
            "in": "query",
            "required": false,
            "description": "Gewicht (kg).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "default": 75
            }
          },
          {
            "name": "groesse",
            "in": "query",
            "required": false,
            "description": "Größe (cm).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "default": 178
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/bruch-kuerzen": {
      "get": {
        "operationId": "rechner_bruch_kuerzen",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/bruch-kuerzen"
        },
        "summary": "Bruch kürzen",
        "description": "Einen Bruch vollständig kürzen und als Dezimalzahl anzeigen.",
        "parameters": [
          {
            "name": "z",
            "in": "query",
            "required": false,
            "description": "Zähler.",
            "schema": {
              "type": "number",
              "default": 24
            }
          },
          {
            "name": "n",
            "in": "query",
            "required": false,
            "description": "Nenner.",
            "schema": {
              "type": "number",
              "default": 36
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/brutto-netto": {
      "get": {
        "operationId": "rechner_brutto_netto",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/brutto-netto"
        },
        "summary": "Brutto-Netto-Rechner",
        "description": "Vom Bruttogehalt zum Nettolohn für gesetzlich Krankenversicherte: berechnet Lohnsteuer, Solidaritätszuschlag, Kirchensteuer und die Sozialabgaben nach den Werten für 2026 – nach Steuerklasse, Bundesland, Kindern und Zusatzbeitrag der Krankenkasse. Eine private Krankenversicherung lässt sich nicht abbilden.",
        "parameters": [
          {
            "name": "brutto",
            "in": "query",
            "required": false,
            "description": "Bruttolohn (€).",
            "schema": {
              "type": "number",
              "minimum": 50,
              "default": 4000
            }
          },
          {
            "name": "zeitraum",
            "in": "query",
            "required": false,
            "description": "Zeitraum. Werte: monat = pro Monat, jahr = pro Jahr.",
            "schema": {
              "type": "string",
              "enum": [
                "monat",
                "jahr"
              ],
              "default": "monat"
            }
          },
          {
            "name": "steuerklasse",
            "in": "query",
            "required": false,
            "description": "Steuerklasse. Werte: 1 = I – ledig, verwitwet oder geschieden, 2 = II – alleinerziehend, 3 = III – verheiratet, Partner in Klasse V, 4 = IV – verheiratet, Partner ebenfalls in IV, 5 = V – verheiratet, Partner in Klasse III, 6 = VI – zweites und weiteres Arbeitsverhältnis.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
              ],
              "default": "1"
            }
          },
          {
            "name": "bundesland",
            "in": "query",
            "required": false,
            "description": "Bundesland. Werte: bw = Baden-Württemberg, by = Bayern, be = Berlin, bb = Brandenburg, hb = Bremen, hh = Hamburg, he = Hessen, mv = Mecklenburg-Vorpommern, ni = Niedersachsen, nw = Nordrhein-Westfalen, rp = Rheinland-Pfalz, sl = Saarland, sn = Sachsen, st = Sachsen-Anhalt, sh = Schleswig-Holstein, th = Thüringen. Entscheidet über den Kirchensteuersatz und – in Sachsen – über die Aufteilung der Pflegeversicherung.",
            "schema": {
              "type": "string",
              "enum": [
                "bw",
                "by",
                "be",
                "bb",
                "hb",
                "hh",
                "he",
                "mv",
                "ni",
                "nw",
                "rp",
                "sl",
                "sn",
                "st",
                "sh",
                "th"
              ],
              "default": "nw"
            }
          },
          {
            "name": "kirche",
            "in": "query",
            "required": false,
            "description": "Kirchensteuerpflichtig. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0"
            }
          },
          {
            "name": "kinder",
            "in": "query",
            "required": false,
            "description": "Kinder (für die Pflegeversicherung). Werte: kinderlos = Keine Kinder, 23 Jahre oder älter, jung = Keine Kinder, unter 23 Jahre, 1 = 1 Kind, 2 = 2 Kinder unter 25, 3 = 3 Kinder unter 25, 4 = 4 Kinder unter 25, 5 = 5 Kinder oder mehr unter 25. Ab 23 zahlen Kinderlose einen Zuschlag von 0,6 Punkten. Ab dem zweiten Kind sinkt der Beitrag um je 0,25 Punkte, solange die Kinder unter 25 sind.",
            "schema": {
              "type": "string",
              "enum": [
                "kinderlos",
                "jung",
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "default": "kinderlos"
            }
          },
          {
            "name": "kinderfreibetraege",
            "in": "query",
            "required": false,
            "description": "Kinderfreibeträge. Der Zähler von der Lohnsteuerbescheinigung – meist 0,5 je Kind, bei alleiniger Zuordnung 1,0. Er mindert nur Solidaritätszuschlag und Kirchensteuer, nicht die Lohnsteuer selbst, und bleibt in den Klassen V und VI unberücksichtigt.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 12,
              "default": 0
            }
          },
          {
            "name": "zusatzbeitrag",
            "in": "query",
            "required": false,
            "description": "Zusatzbeitrag der Krankenkasse (%). Steht im Beitragssatz deiner Kasse. 2,9 % ist der durchschnittliche Zusatzbeitrag für 2026; die Spanne reicht von etwa 1,8 bis 4,4 %. Dieses Feld gilt nur für die gesetzliche Krankenversicherung – eine private Krankenversicherung lässt sich hier nicht eintragen.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 6,
              "default": 2.9
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/countdown": {
      "get": {
        "operationId": "rechner_countdown",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/countdown"
        },
        "summary": "Countdown bis Datum",
        "description": "Wie viele Tage es bis zu einem Termin sind – Geburtstag, Urlaub, Vertragsende – oder wie lange er schon her ist.",
        "parameters": [
          {
            "name": "ziel",
            "in": "query",
            "required": false,
            "description": "Zieldatum.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/cron": {
      "get": {
        "operationId": "rechner_cron",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/cron"
        },
        "summary": "Cron-Ausdruck erklären",
        "description": "Übersetzt einen Cron-Ausdruck (5 Felder) in eine verständliche deutsche Beschreibung.",
        "parameters": [
          {
            "name": "expr",
            "in": "query",
            "required": false,
            "description": "Cron-Ausdruck.",
            "schema": {
              "type": "string",
              "default": "0 9 * * 1-5"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/css-min": {
      "get": {
        "operationId": "rechner_css_min",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/css-min"
        },
        "summary": "CSS Minifier",
        "description": "Verkleinert CSS: entfernt Kommentare, Umbrüche und überflüssige Leerzeichen.",
        "parameters": [
          {
            "name": "css",
            "in": "query",
            "required": false,
            "description": "CSS.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/csv-json": {
      "get": {
        "operationId": "rechner_csv_json",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/csv-json"
        },
        "summary": "CSV → JSON",
        "description": "Wandelt eine CSV-Tabelle in ein JSON-Array aus Objekten um (erste Zeile = Spaltennamen).",
        "parameters": [
          {
            "name": "csv",
            "in": "query",
            "required": false,
            "description": "CSV.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sep",
            "in": "query",
            "required": false,
            "description": "Trennzeichen. Werte: , = Komma ,, ; = Semikolon ;, \t = Tab.",
            "schema": {
              "type": "string",
              "enum": [
                ",",
                ";",
                "\t"
              ],
              "default": ","
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/datengroesse": {
      "get": {
        "operationId": "rechner_datengroesse",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/datengroesse"
        },
        "summary": "Datengröße umrechnen",
        "description": "Bytes, Kilobytes, Megabytes, Gigabytes und Terabytes umrechnen (binär, 1024).",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1024
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: bit = Bit, B = Byte, KB = Kilobyte, MB = Megabyte, GB = Gigabyte, TB = Terabyte, PB = Petabyte.",
            "schema": {
              "type": "string",
              "enum": [
                "bit",
                "B",
                "KB",
                "MB",
                "GB",
                "TB",
                "PB"
              ],
              "default": "MB"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: bit = Bit, B = Byte, KB = Kilobyte, MB = Megabyte, GB = Gigabyte, TB = Terabyte, PB = Petabyte.",
            "schema": {
              "type": "string",
              "enum": [
                "bit",
                "B",
                "KB",
                "MB",
                "GB",
                "TB",
                "PB"
              ],
              "default": "GB"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/diff": {
      "get": {
        "operationId": "rechner_diff",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/diff"
        },
        "summary": "Text vergleichen",
        "description": "Zwei Texte zeilenweise vergleichen und Unterschiede (+ hinzugefügt, − entfernt) hervorheben.",
        "parameters": [
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "Text A.",
            "schema": {
              "type": "string",
              "default": "Zeile eins\nZeile zwei\nZeile drei"
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "Text B.",
            "schema": {
              "type": "string",
              "default": "Zeile eins\nZeile 2\nZeile drei\nZeile vier"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/dreisatz": {
      "get": {
        "operationId": "rechner_dreisatz",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/dreisatz"
        },
        "summary": "Dreisatz-Rechner",
        "description": "Proportionalen Dreisatz lösen: aus drei bekannten Werten den vierten berechnen.",
        "parameters": [
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "Wenn. Grundwert A.",
            "schema": {
              "type": "number",
              "default": 3
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "entspricht. Wert B.",
            "schema": {
              "type": "number",
              "default": 12
            }
          },
          {
            "name": "c",
            "in": "query",
            "required": false,
            "description": "dann entspricht. Wert C – gesucht ist der zugehörige Wert.",
            "schema": {
              "type": "number",
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/druck": {
      "get": {
        "operationId": "rechner_druck",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/druck"
        },
        "summary": "Druck umrechnen",
        "description": "Bar, Pascal, hPa, psi, atm und mmHg ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: bar = Bar, mbar = Millibar, Pa = Pascal, hPa = Hektopascal, kPa = Kilopascal, psi, atm = Atmosphäre, mmHg = mmHg / Torr.",
            "schema": {
              "type": "string",
              "enum": [
                "bar",
                "mbar",
                "Pa",
                "hPa",
                "kPa",
                "psi",
                "atm",
                "mmHg"
              ],
              "default": "bar"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: bar = Bar, mbar = Millibar, Pa = Pascal, hPa = Hektopascal, kPa = Kilopascal, psi, atm = Atmosphäre, mmHg = mmHg / Torr.",
            "schema": {
              "type": "string",
              "enum": [
                "bar",
                "mbar",
                "Pa",
                "hPa",
                "kPa",
                "psi",
                "atm",
                "mmHg"
              ],
              "default": "psi"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/duplikate-entfernen": {
      "get": {
        "operationId": "rechner_duplikate_entfernen",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/duplikate-entfernen"
        },
        "summary": "Duplikate entfernen",
        "description": "Doppelte Zeilen aus einer Liste entfernen – Reihenfolge bleibt erhalten.",
        "parameters": [
          {
            "name": "ci",
            "in": "query",
            "required": false,
            "description": "Groß-/Kleinschreibung ignorieren. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Zeilen.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/durchschnittsgeschwindigkeit": {
      "get": {
        "operationId": "rechner_durchschnittsgeschwindigkeit",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/durchschnittsgeschwindigkeit"
        },
        "summary": "Durchschnittsgeschwindigkeit",
        "description": "Aus Strecke und Fahrzeit die Durchschnittsgeschwindigkeit berechnen.",
        "parameters": [
          {
            "name": "strecke",
            "in": "query",
            "required": false,
            "description": "Strecke (km).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 120
            }
          },
          {
            "name": "std",
            "in": "query",
            "required": false,
            "description": "Dauer – Stunden.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1
            }
          },
          {
            "name": "min",
            "in": "query",
            "required": false,
            "description": "Dauer – Minuten.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 59,
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/energie": {
      "get": {
        "operationId": "rechner_energie",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/energie"
        },
        "summary": "Energie umrechnen",
        "description": "Joule, Kilojoule, Kalorien, Kilokalorien, Wattstunden und kWh umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 100
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: J = Joule, kJ = Kilojoule, cal = Kalorie, kcal = Kilokalorie, Wh = Wattstunde, kWh = Kilowattstunde.",
            "schema": {
              "type": "string",
              "enum": [
                "J",
                "kJ",
                "cal",
                "kcal",
                "Wh",
                "kWh"
              ],
              "default": "kcal"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: J = Joule, kJ = Kilojoule, cal = Kalorie, kcal = Kilokalorie, Wh = Wattstunde, kWh = Kilowattstunde.",
            "schema": {
              "type": "string",
              "enum": [
                "J",
                "kJ",
                "cal",
                "kcal",
                "Wh",
                "kWh"
              ],
              "default": "kJ"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/ersetzen": {
      "get": {
        "operationId": "rechner_ersetzen",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/ersetzen"
        },
        "summary": "Suchen & Ersetzen",
        "description": "Alle Vorkommen eines Suchbegriffs im Text ersetzen – wahlweise als regulärer Ausdruck.",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "suchen",
            "in": "query",
            "required": false,
            "description": "Suchen.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ersetzen",
            "in": "query",
            "required": false,
            "description": "Ersetzen durch.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "regex",
            "in": "query",
            "required": false,
            "description": "Regulärer Ausdruck. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0"
            }
          },
          {
            "name": "ci",
            "in": "query",
            "required": false,
            "description": "Groß-/Kleinschreibung ignorieren. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/fahrrad-uebersetzung": {
      "get": {
        "operationId": "rechner_fahrrad_uebersetzung",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/fahrrad-uebersetzung"
        },
        "summary": "Fahrrad-Übersetzung & Entfaltung",
        "description": "Übersetzung, Entfaltung (Ablauflänge) und Geschwindigkeit deiner Fahrrad-Schaltung berechnen – mit Laufradgröße, Reifenbreite und BDR-Ablauflängen-Check für den Jugendradsport.",
        "parameters": [
          {
            "name": "kettenblatt",
            "in": "query",
            "required": false,
            "description": "Kettenblatt (Zähne vorne).",
            "schema": {
              "type": "number",
              "minimum": 10,
              "maximum": 120,
              "default": 44
            }
          },
          {
            "name": "ritzel",
            "in": "query",
            "required": false,
            "description": "Ritzel (Zähne hinten).",
            "schema": {
              "type": "number",
              "minimum": 7,
              "maximum": 60,
              "default": 16
            }
          },
          {
            "name": "laufrad",
            "in": "query",
            "required": false,
            "description": "Laufradgröße (Felge). Werte: 622 = 28″ / 29″ / 700C – Rennrad, Gravel, Trekking, MTB 29er, 584 = 27,5″ / 650B – MTB, Gravel, 559 = 26″ – MTB (klassisch), 630 = 27″ – ältere Rennräder, 571 = 650C – Triathlon, kleine Rennräder, 507 = 24″ – Kinder- und Jugendräder, 406 = 20″ – Klappräder, BMX, 349 = 16″ – Brompton & kleine Falträder.",
            "schema": {
              "type": "string",
              "enum": [
                "622",
                "584",
                "559",
                "630",
                "571",
                "507",
                "406",
                "349"
              ],
              "default": "622"
            }
          },
          {
            "name": "reifen",
            "in": "query",
            "required": false,
            "description": "Reifenbreite (mm).",
            "schema": {
              "type": "number",
              "minimum": 18,
              "maximum": 120,
              "default": 37
            }
          },
          {
            "name": "trittfrequenz",
            "in": "query",
            "required": false,
            "description": "Trittfrequenz (1/min).",
            "schema": {
              "type": "number",
              "minimum": 20,
              "maximum": 220,
              "default": 90
            }
          },
          {
            "name": "klasse",
            "in": "query",
            "required": false,
            "description": "BDR-Ablauflängen-Check (Jugendradsport, Straße). Werte: „“ = — kein Check, u11 = U11 – 10 J. und jünger (max. 5,70 m), u13 = U13 – 11/12 J. (max. 5,70 m), u15 = U15 – 13/14 J. (max. 6,20 m), u17 = U17 / Jugend – 15/16 J. (max. 7,70 m).",
            "schema": {
              "type": "string",
              "enum": [
                "",
                "u11",
                "u13",
                "u15",
                "u17"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/fakultaet": {
      "get": {
        "operationId": "rechner_fakultaet",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/fakultaet"
        },
        "summary": "Fakultät (n!)",
        "description": "Die Fakultät einer ganzen Zahl exakt berechnen (n! = 1·2·…·n).",
        "parameters": [
          {
            "name": "n",
            "in": "query",
            "required": false,
            "description": "n.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 2000,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/farbe": {
      "get": {
        "operationId": "rechner_farbe",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/farbe"
        },
        "summary": "Farb-Konverter",
        "description": "Farbwerte zwischen HEX, RGB und HSL umrechnen – mit Live-Vorschau.",
        "parameters": [
          {
            "name": "farbe",
            "in": "query",
            "required": false,
            "description": "Farbe wählen.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#2f6df6"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/farbpalette": {
      "get": {
        "operationId": "rechner_farbpalette",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/farbpalette"
        },
        "summary": "Farbpaletten-Generator",
        "description": "Aus einer Grundfarbe eine harmonische Palette und die Komplementärfarbe erzeugen.",
        "parameters": [
          {
            "name": "farbe",
            "in": "query",
            "required": false,
            "description": "Grundfarbe.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#2f6df6"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/farbverlauf": {
      "get": {
        "operationId": "rechner_farbverlauf",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/farbverlauf"
        },
        "summary": "CSS-Farbverlauf-Generator",
        "description": "CSS-Gradient aus zwei Farben erzeugen – mit Vorschau und Copy-&-Paste-Code.",
        "parameters": [
          {
            "name": "c1",
            "in": "query",
            "required": false,
            "description": "Farbe 1.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#2f6df6"
            }
          },
          {
            "name": "c2",
            "in": "query",
            "required": false,
            "description": "Farbe 2.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#16b981"
            }
          },
          {
            "name": "typ",
            "in": "query",
            "required": false,
            "description": "Typ.",
            "schema": {
              "type": "string",
              "enum": [
                "linear",
                "radial"
              ],
              "default": "linear"
            }
          },
          {
            "name": "winkel",
            "in": "query",
            "required": false,
            "description": "Winkel (°). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 360,
              "default": 90
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/feiertage": {
      "get": {
        "operationId": "rechner_feiertage",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/feiertage"
        },
        "summary": "Feiertage",
        "description": "Gesetzliche Feiertage in Deutschland nach Bundesland, Jahr und Monat, mit Datum und Wochentag: Karfreitag, Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam, Reformationstag, Allerheiligen, Buß- und Bettag, Weihnachtstage.",
        "parameters": [
          {
            "name": "bundesland",
            "in": "query",
            "required": false,
            "description": "Bundesland. Werte: alle = Bundesweit (alle Länder), bw = Baden-Württemberg, by = Bayern, be = Berlin, bb = Brandenburg, hb = Bremen, hh = Hamburg, he = Hessen, mv = Mecklenburg-Vorpommern, ni = Niedersachsen, nw = Nordrhein-Westfalen, rp = Rheinland-Pfalz, sl = Saarland, sn = Sachsen, st = Sachsen-Anhalt, sh = Schleswig-Holstein, th = Thüringen.",
            "schema": {
              "type": "string",
              "enum": [
                "alle",
                "bw",
                "by",
                "be",
                "bb",
                "hb",
                "hh",
                "he",
                "mv",
                "ni",
                "nw",
                "rp",
                "sl",
                "sn",
                "st",
                "sh",
                "th"
              ],
              "default": "alle"
            }
          },
          {
            "name": "jahr",
            "in": "query",
            "required": false,
            "description": "Jahr. Ab 1583, weil erst mit der gregorianischen Kalenderreform vom Oktober 1582 die Osterformel gilt, aus der sich Karfreitag, Christi Himmelfahrt und die übrigen beweglichen Feiertage ergeben. Die 2200 am oberen Ende ist nur eine gesetzte Grenze.",
            "schema": {
              "type": "number",
              "minimum": 1583,
              "maximum": 2200,
              "default": 2026
            }
          },
          {
            "name": "monat",
            "in": "query",
            "required": false,
            "description": "Monat. Werte: 0 = Ganzes Jahr, 1 = Januar, 2 = Februar, 3 = März, 4 = April, 5 = Mai, 6 = Juni, 7 = Juli, 8 = August, 9 = September, 10 = Oktober, 11 = November, 12 = Dezember. Für die Urlaubsplanung: zeigt nur die Feiertage eines einzelnen Monats.",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12"
              ],
              "default": "0"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/flaeche": {
      "get": {
        "operationId": "rechner_flaeche",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/flaeche"
        },
        "summary": "Fläche umrechnen",
        "description": "Quadratmeter, Hektar, Ar, Quadratkilometer und mehr umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 100
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: km2 = Quadratkilometer, ha = Hektar, a = Ar, m2 = Quadratmeter, dm2 = Quadratdezimeter, cm2 = Quadratzentimeter, ft2 = Quadratfuß, acre = Acre.",
            "schema": {
              "type": "string",
              "enum": [
                "km2",
                "ha",
                "a",
                "m2",
                "dm2",
                "cm2",
                "ft2",
                "acre"
              ],
              "default": "m2"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: km2 = Quadratkilometer, ha = Hektar, a = Ar, m2 = Quadratmeter, dm2 = Quadratdezimeter, cm2 = Quadratzentimeter, ft2 = Quadratfuß, acre = Acre.",
            "schema": {
              "type": "string",
              "enum": [
                "km2",
                "ha",
                "a",
                "m2",
                "dm2",
                "cm2",
                "ft2",
                "acre"
              ],
              "default": "ha"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/geburtstermin": {
      "get": {
        "operationId": "rechner_geburtstermin",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/geburtstermin"
        },
        "summary": "Geburtstermin-Rechner",
        "description": "Voraussichtlichen Entbindungstermin nach der letzten Regel berechnen.",
        "parameters": [
          {
            "name": "regel",
            "in": "query",
            "required": false,
            "description": "Erster Tag der letzten Regel.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "zyklus",
            "in": "query",
            "required": false,
            "description": "Zykluslänge (Tage).",
            "schema": {
              "type": "number",
              "minimum": 20,
              "maximum": 45,
              "default": 28
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/geschwindigkeit": {
      "get": {
        "operationId": "rechner_geschwindigkeit",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/geschwindigkeit"
        },
        "summary": "Geschwindigkeit umrechnen",
        "description": "km/h, m/s, mph und Knoten schnell ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 100
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: kmh = km/h, ms = m/s, mph, kn = Knoten, fts = ft/s.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn",
                "fts"
              ],
              "default": "kmh"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: kmh = km/h, ms = m/s, mph, kn = Knoten, fts = ft/s.",
            "schema": {
              "type": "string",
              "enum": [
                "kmh",
                "ms",
                "mph",
                "kn",
                "fts"
              ],
              "default": "mph"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/ggt-kgv": {
      "get": {
        "operationId": "rechner_ggt_kgv",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/ggt-kgv"
        },
        "summary": "GGT & KGV",
        "description": "Größten gemeinsamen Teiler und kleinstes gemeinsames Vielfaches berechnen.",
        "parameters": [
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "Zahl A.",
            "schema": {
              "type": "number",
              "default": 12
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "Zahl B.",
            "schema": {
              "type": "number",
              "default": 18
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/gluecksrad": {
      "get": {
        "operationId": "rechner_gluecksrad",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/gluecksrad"
        },
        "summary": "Glücksrad – über HTTP nicht berechenbar",
        "description": "„Glücksrad“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/gluecksrad",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/goldener-schnitt": {
      "get": {
        "operationId": "rechner_goldener_schnitt",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/goldener-schnitt"
        },
        "summary": "Goldener Schnitt",
        "description": "Eine Länge im goldenen Schnitt (1:1,618) teilen oder harmonisch erweitern.",
        "parameters": [
          {
            "name": "laenge",
            "in": "query",
            "required": false,
            "description": "Länge.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1000
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/gross-klein": {
      "get": {
        "operationId": "rechner_gross_klein",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/gross-klein"
        },
        "summary": "Groß-/Kleinschreibung",
        "description": "Text in Großbuchstaben (GROSSBUCHSTABEN), Kleinbuchstaben, Titel- oder Satzschreibung umwandeln.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Umwandeln in. Werte: upper = GROSSBUCHSTABEN, lower = kleinbuchstaben, title = Jedes Wort Groß, sentence = Satzanfang groß.",
            "schema": {
              "type": "string",
              "enum": [
                "upper",
                "lower",
                "title",
                "sentence"
              ],
              "default": "upper"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/hash": {
      "get": {
        "operationId": "rechner_hash",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/hash"
        },
        "summary": "Hash-Generator (SHA)",
        "description": "SHA-1, SHA-256 oder SHA-512 Prüfsumme eines Textes berechnen – lokal im Browser.",
        "parameters": [
          {
            "name": "algo",
            "in": "query",
            "required": false,
            "description": "Algorithmus.",
            "schema": {
              "type": "string",
              "enum": [
                "SHA-256",
                "SHA-1",
                "SHA-512"
              ],
              "default": "SHA-256"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/herzfrequenz": {
      "get": {
        "operationId": "rechner_herzfrequenz",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/herzfrequenz"
        },
        "summary": "Trainings-Herzfrequenz",
        "description": "Maximalpuls und die Herzfrequenz-Zonen fürs Training berechnen.",
        "parameters": [
          {
            "name": "alter",
            "in": "query",
            "required": false,
            "description": "Alter (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 120,
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/html-entfernen": {
      "get": {
        "operationId": "rechner_html_entfernen",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/html-entfernen"
        },
        "summary": "HTML-Tags entfernen",
        "description": "Entfernt alle HTML-Tags aus einem Text und gibt den reinen, lesbaren Text zurück.",
        "parameters": [
          {
            "name": "html",
            "in": "query",
            "required": false,
            "description": "HTML.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/html-escape": {
      "get": {
        "operationId": "rechner_html_escape",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/html-escape"
        },
        "summary": "HTML maskieren",
        "description": "Sonderzeichen in HTML-Entities umwandeln – und wieder zurück.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: escape = Text → HTML-Entities, unescape = HTML-Entities → Text.",
            "schema": {
              "type": "string",
              "enum": [
                "escape",
                "unescape"
              ],
              "default": "escape"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/html-format": {
      "get": {
        "operationId": "rechner_html_format",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/html-format"
        },
        "summary": "HTML formatieren",
        "description": "HTML einrücken und lesbar formatieren – erkennt leere Elemente wie <br> und <img>.",
        "parameters": [
          {
            "name": "html",
            "in": "query",
            "required": false,
            "description": "HTML.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/html-markdown": {
      "get": {
        "operationId": "rechner_html_markdown",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/html-markdown"
        },
        "summary": "HTML → Markdown",
        "description": "Wandelt HTML in einfaches Markdown um: Überschriften, Fett, Kursiv, Links, Listen und Code.",
        "parameters": [
          {
            "name": "html",
            "in": "query",
            "required": false,
            "description": "HTML.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/iban": {
      "get": {
        "operationId": "rechner_iban",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/iban"
        },
        "summary": "IBAN prüfen",
        "description": "IBAN auf Gültigkeit prüfen – Prüfsumme nach ISO 7064 und Länge, mit Land; Bankleitzahl und Kontonummer nur bei deutschen IBANs. Lokal im Browser.",
        "parameters": [
          {
            "name": "iban",
            "in": "query",
            "required": false,
            "description": "IBAN.",
            "schema": {
              "type": "string",
              "default": "DE89 3704 0044 0532 0130 00"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/idealgewicht": {
      "get": {
        "operationId": "rechner_idealgewicht",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/idealgewicht"
        },
        "summary": "Idealgewicht-Rechner",
        "description": "Idealgewicht nach Broca und gesunder Gewichtsbereich nach BMI.",
        "parameters": [
          {
            "name": "groesse",
            "in": "query",
            "required": false,
            "description": "Größe (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 178
            }
          },
          {
            "name": "geschlecht",
            "in": "query",
            "required": false,
            "description": "Geschlecht. Werte: m = männlich, w = weiblich.",
            "schema": {
              "type": "string",
              "enum": [
                "m",
                "w"
              ],
              "default": "m"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/inflation": {
      "get": {
        "operationId": "rechner_inflation",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/inflation"
        },
        "summary": "Inflations-Rechner",
        "description": "Wie sich die Kaufkraft eines Betrags über die Jahre entwickelt – bei einer selbst gewählten Inflationsrate, ohne amtliche Preisindizes.",
        "parameters": [
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Betrag heute (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1000
            }
          },
          {
            "name": "rate",
            "in": "query",
            "required": false,
            "description": "Inflation p.a. (%).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 2.5
            }
          },
          {
            "name": "jahre",
            "in": "query",
            "required": false,
            "description": "Zeitraum (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/ja-nein": {
      "get": {
        "operationId": "rechner_ja_nein",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/ja-nein"
        },
        "summary": "Ja-Nein-Orakel",
        "description": "Keine Lust zu entscheiden? Stell eine Frage und lass den Zufall antworten.",
        "parameters": [
          {
            "name": "frage",
            "in": "query",
            "required": false,
            "description": "Deine Frage (optional).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/json-csv": {
      "get": {
        "operationId": "rechner_json_csv",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/json-csv"
        },
        "summary": "JSON → CSV",
        "description": "Wandelt ein JSON-Array aus Objekten in eine CSV-Tabelle um.",
        "parameters": [
          {
            "name": "json",
            "in": "query",
            "required": false,
            "description": "JSON.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sep",
            "in": "query",
            "required": false,
            "description": "Trennzeichen. Werte: , = Komma ,, ; = Semikolon ;, \t = Tab.",
            "schema": {
              "type": "string",
              "enum": [
                ",",
                ";",
                "\t"
              ],
              "default": ","
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/json-diff": {
      "get": {
        "operationId": "rechner_json_diff",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/json-diff"
        },
        "summary": "JSON vergleichen",
        "description": "Zwei JSON tief vergleichen und alle Unterschiede als übersichtliche Pfad-Liste anzeigen.",
        "parameters": [
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "JSON A.",
            "schema": {
              "type": "string",
              "default": "{\"name\":\"Anna\",\"alter\":30,\"stadt\":\"Berlin\"}"
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "JSON B.",
            "schema": {
              "type": "string",
              "default": "{\"name\":\"Anna\",\"alter\":31,\"land\":\"DE\"}"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/json-format": {
      "get": {
        "operationId": "rechner_json_format",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/json-format"
        },
        "summary": "JSON formatieren",
        "description": "JSON einrücken (verschönern) oder minifizieren – mit Validierung.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Aktion. Werte: pretty = Verschönern (einrücken), min = Minifizieren.",
            "schema": {
              "type": "string",
              "enum": [
                "pretty",
                "min"
              ],
              "default": "pretty"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "JSON.",
            "schema": {
              "type": "string",
              "default": "{\"name\":\"Utilico\",\"tools\":68,\"live\":true}"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/jwt": {
      "get": {
        "operationId": "rechner_jwt",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/jwt"
        },
        "summary": "JWT Decoder – über HTTP nicht berechenbar",
        "description": "Alle Eingaben von „JWT Decoder“ sind vertraulich und werden bewusst nicht über die Adresse angenommen. → https://utilico.de/tool/jwt",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/kaffee": {
      "get": {
        "operationId": "rechner_kaffee",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kaffee"
        },
        "summary": "Kaffee-Verhältnis",
        "description": "Wie viel Kaffeepulver du für deine Wassermenge brauchst – vom kräftigen Espresso bis zum milden Filterkaffee, in Gramm.",
        "parameters": [
          {
            "name": "wasser",
            "in": "query",
            "required": false,
            "description": "Wassermenge (ml).",
            "schema": {
              "type": "number",
              "minimum": 10,
              "default": 500
            }
          },
          {
            "name": "ratio",
            "in": "query",
            "required": false,
            "description": "Verhältnis 1 : x. Stärker ≈ 12–14, milder ≈ 17–18. Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 12,
              "maximum": 20,
              "default": 16
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kalenderwoche": {
      "get": {
        "operationId": "rechner_kalenderwoche",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kalenderwoche"
        },
        "summary": "Kalenderwoche (KW)",
        "description": "Die ISO-Kalenderwoche zu einem beliebigen Datum bestimmen.",
        "parameters": [
          {
            "name": "datum",
            "in": "query",
            "required": false,
            "description": "Datum.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kalorienbedarf": {
      "get": {
        "operationId": "rechner_kalorienbedarf",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kalorienbedarf"
        },
        "summary": "Kalorienbedarf-Rechner",
        "description": "Grundumsatz und Tagesbedarf an Kalorien nach der Mifflin-St-Jeor-Formel.",
        "parameters": [
          {
            "name": "geschlecht",
            "in": "query",
            "required": false,
            "description": "Geschlecht. Werte: m = männlich, w = weiblich.",
            "schema": {
              "type": "string",
              "enum": [
                "m",
                "w"
              ],
              "default": "m"
            }
          },
          {
            "name": "alter",
            "in": "query",
            "required": false,
            "description": "Alter (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 30
            }
          },
          {
            "name": "groesse",
            "in": "query",
            "required": false,
            "description": "Größe (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 178
            }
          },
          {
            "name": "gewicht",
            "in": "query",
            "required": false,
            "description": "Gewicht (kg).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 75
            }
          },
          {
            "name": "aktiv",
            "in": "query",
            "required": false,
            "description": "Aktivität. Werte: 1.2 = kaum aktiv (Büro), 1.375 = leicht aktiv (1–3×/Woche), 1.55 = mäßig aktiv (3–5×/Woche), 1.725 = sehr aktiv (6–7×/Woche), 1.9 = extrem aktiv (Sport/Beruf).",
            "schema": {
              "type": "string",
              "enum": [
                "1.2",
                "1.375",
                "1.55",
                "1.725",
                "1.9"
              ],
              "default": "1.55"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kochen-umrechnen": {
      "get": {
        "operationId": "rechner_kochen_umrechnen",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kochen-umrechnen"
        },
        "summary": "Küchenmaße umrechnen",
        "description": "Tassen (US-Cup, 237 ml), Esslöffel, Teelöffel, Milliliter und Liter beim Kochen umrechnen – nur Volumen, keine Gramm.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: l = Liter, ml = Milliliter, cup = Tasse (US, 237 ml), el = Esslöffel (15 ml), tl = Teelöffel (5 ml), prise = Prise (≈0,3 ml).",
            "schema": {
              "type": "string",
              "enum": [
                "l",
                "ml",
                "cup",
                "el",
                "tl",
                "prise"
              ],
              "default": "cup"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: l = Liter, ml = Milliliter, cup = Tasse (US, 237 ml), el = Esslöffel (15 ml), tl = Teelöffel (5 ml), prise = Prise (≈0,3 ml).",
            "schema": {
              "type": "string",
              "enum": [
                "l",
                "ml",
                "cup",
                "el",
                "tl",
                "prise"
              ],
              "default": "ml"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/koerperfett": {
      "get": {
        "operationId": "rechner_koerperfett",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/koerperfett"
        },
        "summary": "Körperfett-Rechner (Navy)",
        "description": "Körperfettanteil nach der U.S.-Navy-Methode aus Umfangsmaßen schätzen.",
        "parameters": [
          {
            "name": "geschlecht",
            "in": "query",
            "required": false,
            "description": "Geschlecht. Werte: m = männlich, w = weiblich.",
            "schema": {
              "type": "string",
              "enum": [
                "m",
                "w"
              ],
              "default": "m"
            }
          },
          {
            "name": "groesse",
            "in": "query",
            "required": false,
            "description": "Größe (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 178
            }
          },
          {
            "name": "hals",
            "in": "query",
            "required": false,
            "description": "Halsumfang (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 38
            }
          },
          {
            "name": "bauch",
            "in": "query",
            "required": false,
            "description": "Bauchumfang (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 90
            }
          },
          {
            "name": "huefte",
            "in": "query",
            "required": false,
            "description": "Hüftumfang (nur weiblich) (cm).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 95
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kontrast": {
      "get": {
        "operationId": "rechner_kontrast",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kontrast"
        },
        "summary": "Farbkontrast-Prüfer (WCAG)",
        "description": "Kontrastverhältnis zweier Farben prüfen und ob es WCAG AA/AAA erfüllt.",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Textfarbe.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#1a2233"
            }
          },
          {
            "name": "bg",
            "in": "query",
            "required": false,
            "description": "Hintergrund.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#ffffff"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kredit": {
      "get": {
        "operationId": "rechner_kredit",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kredit"
        },
        "summary": "Kreditrechner",
        "description": "Monatliche Rate, Gesamtkosten und Zinsen eines Annuitätenkredits berechnen.",
        "parameters": [
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Kreditbetrag (€).",
            "schema": {
              "type": "number",
              "minimum": 100,
              "default": 15000
            }
          },
          {
            "name": "zins",
            "in": "query",
            "required": false,
            "description": "Sollzins p.a. (%).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 4.5
            }
          },
          {
            "name": "jahre",
            "in": "query",
            "required": false,
            "description": "Laufzeit (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/kreis": {
      "get": {
        "operationId": "rechner_kreis",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/kreis"
        },
        "summary": "Kreis-Rechner",
        "description": "Umfang, Fläche und Durchmesser eines Kreises aus dem Radius berechnen.",
        "parameters": [
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Radius (cm).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/laenge": {
      "get": {
        "operationId": "rechner_laenge",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/laenge"
        },
        "summary": "Längen umrechnen",
        "description": "Meter, Kilometer, Meilen, Zoll, Fuß und mehr ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 10
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: km = Kilometer, m = Meter, dm = Dezimeter, cm = Zentimeter, mm = Millimeter, mi = Meile, sm = Seemeile, yd = Yard, ft = Fuß, in = Zoll.",
            "schema": {
              "type": "string",
              "enum": [
                "km",
                "m",
                "dm",
                "cm",
                "mm",
                "mi",
                "sm",
                "yd",
                "ft",
                "in"
              ],
              "default": "km"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: km = Kilometer, m = Meter, dm = Dezimeter, cm = Zentimeter, mm = Millimeter, mi = Meile, sm = Seemeile, yd = Yard, ft = Fuß, in = Zoll.",
            "schema": {
              "type": "string",
              "enum": [
                "km",
                "m",
                "dm",
                "cm",
                "mm",
                "mi",
                "sm",
                "yd",
                "ft",
                "in"
              ],
              "default": "mi"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/leasing-oder-kauf": {
      "get": {
        "operationId": "rechner_leasing_oder_kauf",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/leasing-oder-kauf"
        },
        "summary": "Leasing oder Kauf",
        "description": "Leasing oder kaufen? Stellt die Gesamtkosten beider Wege über den gleichen Zeitraum gegenüber – Leasingraten samt Sonderzahlung gegen Wertverlust und Finanzierungszinsen.",
        "parameters": [
          {
            "name": "laufzeit",
            "in": "query",
            "required": false,
            "description": "Laufzeit (Monate). Gilt für beide Seiten – nur über denselben Zeitraum sind sie vergleichbar.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 120,
              "default": 36
            }
          },
          {
            "name": "sonderzahlung",
            "in": "query",
            "required": false,
            "description": "Leasing-Sonderzahlung (€). Die Anzahlung zu Beginn. 0, wenn keine vereinbart ist.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 200000,
              "default": 3000
            }
          },
          {
            "name": "leasingrate",
            "in": "query",
            "required": false,
            "description": "Leasing-Rate (€/Monat).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 20000,
              "default": 369
            }
          },
          {
            "name": "ueberfuehrung",
            "in": "query",
            "required": false,
            "description": "Überführung & Zulassung (€). Beim Leasing einmalig fällig. Beim Kauf stecken sie meist schon im Kaufpreis.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 50000,
              "default": 1190
            }
          },
          {
            "name": "schlussrate",
            "in": "query",
            "required": false,
            "description": "Schlussrate beim Leasing (€). Nur beim Leasing mit Kaufoption. 0, wenn du den Wagen zurückgibst.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 500000,
              "default": 0
            }
          },
          {
            "name": "kaufpreis",
            "in": "query",
            "required": false,
            "description": "Kaufpreis (€).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 2000000,
              "default": 32000
            }
          },
          {
            "name": "eigenkapital",
            "in": "query",
            "required": false,
            "description": "Eigenkapital (€). Was du beim Kauf sofort bezahlst. Der Rest wird finanziert.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 2000000,
              "default": 3000
            }
          },
          {
            "name": "zins",
            "in": "query",
            "required": false,
            "description": "Sollzins p. a. (%). Für den finanzierten Teil. 0 bei einer Null-Prozent-Finanzierung oder beim Barkauf.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 25,
              "default": 5.9
            }
          },
          {
            "name": "restwert",
            "in": "query",
            "required": false,
            "description": "Restwert nach Laufzeit (€). Was der Wagen am Ende noch wert ist. Bei einem Neuwagen nach drei Jahren grob die Hälfte bis 60 % vom Kaufpreis.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 2000000,
              "default": 18000
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/leistung": {
      "get": {
        "operationId": "rechner_leistung",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/leistung"
        },
        "summary": "Leistung umrechnen",
        "description": "Watt, Kilowatt, PS und Horsepower ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 100
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: W = Watt, kW = Kilowatt, MW = Megawatt, PS = PS (metrisch), hp = Horsepower (mech.).",
            "schema": {
              "type": "string",
              "enum": [
                "W",
                "kW",
                "MW",
                "PS",
                "hp"
              ],
              "default": "PS"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: W = Watt, kW = Kilowatt, MW = Megawatt, PS = PS (metrisch), hp = Horsepower (mech.).",
            "schema": {
              "type": "string",
              "enum": [
                "W",
                "kW",
                "MW",
                "PS",
                "hp"
              ],
              "default": "kW"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/logarithmus": {
      "get": {
        "operationId": "rechner_logarithmus",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/logarithmus"
        },
        "summary": "Logarithmus",
        "description": "Logarithmus zu beliebiger Basis berechnen (log, ln, lg).",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert (x). Muss größer als 0 sein – für 0 und negative Zahlen ist der Logarithmus nicht definiert.",
            "schema": {
              "type": "number",
              "default": 1000
            }
          },
          {
            "name": "basis",
            "in": "query",
            "required": false,
            "description": "Basis. z.B. 10 (lg), 2 (ld) oder e ≈ 2,71828 (ln). Muss größer als 0 und ungleich 1 sein.",
            "schema": {
              "type": "number",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/lorem": {
      "get": {
        "operationId": "rechner_lorem",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/lorem"
        },
        "summary": "Lorem-Ipsum-Generator",
        "description": "Blindtext in beliebiger Menge erzeugen – als Absätze, Sätze oder Wörter.",
        "parameters": [
          {
            "name": "einheit",
            "in": "query",
            "required": false,
            "description": "Einheit. Werte: absaetze = Absätze, saetze = Sätze, woerter = Wörter.",
            "schema": {
              "type": "string",
              "enum": [
                "absaetze",
                "saetze",
                "woerter"
              ],
              "default": "absaetze"
            }
          },
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 100,
              "default": 3
            }
          },
          {
            "name": "klassisch",
            "in": "query",
            "required": false,
            "description": "Mit „Lorem ipsum …“ beginnen. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/losentscheid": {
      "get": {
        "operationId": "rechner_losentscheid",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/losentscheid"
        },
        "summary": "Zufalls-Entscheider",
        "description": "Kannst du dich nicht entscheiden? Trag die Optionen ein und lass losen.",
        "parameters": [
          {
            "name": "optionen",
            "in": "query",
            "required": false,
            "description": "Optionen (eine pro Zeile).",
            "schema": {
              "type": "string",
              "default": "Pizza\nSushi\nBurger\nSalat"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/lotto": {
      "get": {
        "operationId": "rechner_lotto",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/lotto"
        },
        "summary": "Lottozahlen-Generator",
        "description": "Zufällige Tipps für 6 aus 49 inklusive Superzahl erzeugen.",
        "parameters": [
          {
            "name": "reihen",
            "in": "query",
            "required": false,
            "description": "Anzahl Tippreihen. Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 12,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/markdown-html": {
      "get": {
        "operationId": "rechner_markdown_html",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/markdown-html"
        },
        "summary": "Markdown → HTML",
        "description": "Wandelt Markdown in HTML um: Überschriften, Fett, Kursiv, Links, Listen und Code.",
        "parameters": [
          {
            "name": "md",
            "in": "query",
            "required": false,
            "description": "Markdown.",
            "schema": {
              "type": "string",
              "default": "# Titel\n\nEin **Beispiel** mit [Link](https://x.de).\n\n- Punkt eins\n- Punkt zwei"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/masse": {
      "get": {
        "operationId": "rechner_masse",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/masse"
        },
        "summary": "Gewicht umrechnen",
        "description": "Kilogramm, Gramm, Tonnen, Pfund und Unzen ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: t = Tonne, kg = Kilogramm, g = Gramm, mg = Milligramm, lb = Pfund (lb), oz = Unze (oz), ct = Karat.",
            "schema": {
              "type": "string",
              "enum": [
                "t",
                "kg",
                "g",
                "mg",
                "lb",
                "oz",
                "ct"
              ],
              "default": "kg"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: t = Tonne, kg = Kilogramm, g = Gramm, mg = Milligramm, lb = Pfund (lb), oz = Unze (oz), ct = Karat.",
            "schema": {
              "type": "string",
              "enum": [
                "t",
                "kg",
                "g",
                "mg",
                "lb",
                "oz",
                "ct"
              ],
              "default": "lb"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/md5": {
      "get": {
        "operationId": "rechner_md5",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/md5"
        },
        "summary": "MD5-Hash",
        "description": "MD5-Prüfsumme eines Textes berechnen – lokal im Browser (nicht für Passwörter/Sicherheit geeignet).",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/meme": {
      "get": {
        "operationId": "rechner_meme",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/meme"
        },
        "summary": "Meme-Generator – über HTTP nicht berechenbar",
        "description": "„Meme-Generator“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/meme wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/metronom": {
      "get": {
        "operationId": "rechner_metronom",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/metronom"
        },
        "summary": "Metronom – über HTTP nicht berechenbar",
        "description": "„Metronom“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/metronom",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/mischen": {
      "get": {
        "operationId": "rechner_mischen",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/mischen"
        },
        "summary": "Liste mischen",
        "description": "Eine Liste in zufällige Reihenfolge bringen (fair, per Fisher-Yates).",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Einträge (eine Zeile pro Eintrag).",
            "schema": {
              "type": "string",
              "default": "Anna\nBen\nClara\nDavid\nErik"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/mittelwert": {
      "get": {
        "operationId": "rechner_mittelwert",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/mittelwert"
        },
        "summary": "Mittelwert & Median",
        "description": "Durchschnitt, Median, Summe, Minimum und Maximum einer Zahlenreihe.",
        "parameters": [
          {
            "name": "zahlen",
            "in": "query",
            "required": false,
            "description": "Zahlen. Getrennt durch Leerzeichen, Zeilen oder Semikolon. Komma = Dezimaltrennzeichen.",
            "schema": {
              "type": "string",
              "default": "4 8 15 16 23 42"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/morse": {
      "get": {
        "operationId": "rechner_morse",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/morse"
        },
        "summary": "Morsecode-Übersetzer",
        "description": "Text in Morsecode übersetzen und Morsecode zurück in Text.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: encode = Text → Morse, decode = Morse → Text.",
            "schema": {
              "type": "string",
              "enum": [
                "encode",
                "decode"
              ],
              "default": "encode"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/muenze": {
      "get": {
        "operationId": "rechner_muenze",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/muenze"
        },
        "summary": "Münze werfen",
        "description": "Kopf oder Zahl – eine oder mehrere Münzen werfen.",
        "parameters": [
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl Münzen. Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 20,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/mwst": {
      "get": {
        "operationId": "rechner_mwst",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/mwst"
        },
        "summary": "Mehrwertsteuer-Rechner",
        "description": "Umsatzsteuer (MwSt) auf Preise und Rechnungen: Bruttopreis aus Nettopreis berechnen oder umgekehrt – mit 19 % oder 7 %.",
        "parameters": [
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Betrag (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 100
            }
          },
          {
            "name": "satz",
            "in": "query",
            "required": false,
            "description": "Steuersatz. Werte: 19 = 19 %, 7 = 7 %.",
            "schema": {
              "type": "string",
              "enum": [
                "19",
                "7"
              ],
              "default": "19"
            }
          },
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Betrag ist. Werte: netto = Netto (zzgl. MwSt), brutto = Brutto (inkl. MwSt).",
            "schema": {
              "type": "string",
              "enum": [
                "netto",
                "brutto"
              ],
              "default": "netto"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/nato-alphabet": {
      "get": {
        "operationId": "rechner_nato_alphabet",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/nato-alphabet"
        },
        "summary": "NATO-Buchstabiertafel",
        "description": "Wörter mit dem internationalen NATO-Alphabet buchstabieren (Alfa, Bravo, …).",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string",
              "default": "Utilico"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/notendurchschnitt": {
      "get": {
        "operationId": "rechner_notendurchschnitt",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/notendurchschnitt"
        },
        "summary": "Notendurchschnitt",
        "description": "Durchschnittsnote aus mehreren Noten berechnen – beliebig getrennt eingeben, Komma als Dezimalzeichen, etwa „1,7 2,0 2,3“.",
        "parameters": [
          {
            "name": "noten",
            "in": "query",
            "required": false,
            "description": "Noten. Leerzeichen, Komma, Semikolon oder Zeilen – Komma zählt dabei als Dezimaltrennzeichen, z. B. 1,7.",
            "schema": {
              "type": "string",
              "default": "1,7 2,0 2,3 1,0"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/og-tags": {
      "get": {
        "operationId": "rechner_og_tags",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/og-tags"
        },
        "summary": "Open-Graph-Generator",
        "description": "Erzeugt Open-Graph- und Twitter-Card-Meta-Tags für schöne Vorschauen beim Teilen von Links.",
        "parameters": [
          {
            "name": "title",
            "in": "query",
            "required": false,
            "description": "Titel.",
            "schema": {
              "type": "string",
              "default": "Meine Seite"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "required": false,
            "description": "Beschreibung.",
            "schema": {
              "type": "string",
              "default": "Kurze Beschreibung der Seite."
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "URL.",
            "schema": {
              "type": "string",
              "default": "https://example.com"
            }
          },
          {
            "name": "image",
            "in": "query",
            "required": false,
            "description": "Bild-URL.",
            "schema": {
              "type": "string",
              "default": "https://example.com/vorschau.png"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Typ.",
            "schema": {
              "type": "string",
              "enum": [
                "website",
                "article",
                "product"
              ],
              "default": "website"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/pace": {
      "get": {
        "operationId": "rechner_pace",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pace"
        },
        "summary": "Lauf-Pace-Rechner",
        "description": "Pace (Minuten pro Kilometer) und Geschwindigkeit aus Strecke und Zeit berechnen.",
        "parameters": [
          {
            "name": "distanz",
            "in": "query",
            "required": false,
            "description": "Strecke (km).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "default": 10
            }
          },
          {
            "name": "std",
            "in": "query",
            "required": false,
            "description": "Zeit – Stunden.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "min",
            "in": "query",
            "required": false,
            "description": "Zeit – Minuten.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 55
            }
          },
          {
            "name": "sek",
            "in": "query",
            "required": false,
            "description": "Zeit – Sekunden.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 59,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/passphrase": {
      "get": {
        "operationId": "rechner_passphrase",
        "tags": [
          "Sicherheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/passphrase"
        },
        "summary": "Passphrase-Generator – über HTTP nicht berechenbar",
        "description": "„Passphrase-Generator“ gehört zur Kategorie Sicherheit: Diese Rechner arbeiten ausschließlich im Browser, damit Passwörter das Gerät nicht verlassen. Ein Server, der hier antwortete, müsste sie erst entgegennehmen – deshalb tut er es nicht. Auf https://utilico.de/tool/passphrase rechnet das Gerät selbst.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/passwort": {
      "get": {
        "operationId": "rechner_passwort",
        "tags": [
          "Sicherheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/passwort"
        },
        "summary": "Passwort-Generator – über HTTP nicht berechenbar",
        "description": "„Passwort-Generator“ gehört zur Kategorie Sicherheit: Diese Rechner arbeiten ausschließlich im Browser, damit Passwörter das Gerät nicht verlassen. Ein Server, der hier antwortete, müsste sie erst entgegennehmen – deshalb tut er es nicht. Auf https://utilico.de/tool/passwort rechnet das Gerät selbst.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/passwort-staerke": {
      "get": {
        "operationId": "rechner_passwort_staerke",
        "tags": [
          "Sicherheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/passwort-staerke"
        },
        "summary": "Passwort-Stärke prüfen – über HTTP nicht berechenbar",
        "description": "„Passwort-Stärke prüfen“ gehört zur Kategorie Sicherheit: Diese Rechner arbeiten ausschließlich im Browser, damit Passwörter das Gerät nicht verlassen. Ein Server, der hier antwortete, müsste sie erst entgegennehmen – deshalb tut er es nicht. Auf https://utilico.de/tool/passwort-staerke rechnet das Gerät selbst.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pdf-drehen": {
      "get": {
        "operationId": "rechner_pdf_drehen",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pdf-drehen"
        },
        "summary": "PDF drehen – über HTTP nicht berechenbar",
        "description": "„PDF drehen“ braucht eine Datei (PDF), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/pdf-drehen wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pdf-merge": {
      "get": {
        "operationId": "rechner_pdf_merge",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pdf-merge"
        },
        "summary": "PDF zusammenfügen – über HTTP nicht berechenbar",
        "description": "„PDF zusammenfügen“ braucht eine Datei (PDF-Dateien (mehrere auswählen)), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/pdf-merge wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pdf-seitenzahlen": {
      "get": {
        "operationId": "rechner_pdf_seitenzahlen",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pdf-seitenzahlen"
        },
        "summary": "PDF-Seitenzahlen – über HTTP nicht berechenbar",
        "description": "„PDF-Seitenzahlen“ braucht eine Datei (PDF), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/pdf-seitenzahlen wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pdf-split": {
      "get": {
        "operationId": "rechner_pdf_split",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pdf-split"
        },
        "summary": "PDF aufteilen – über HTTP nicht berechenbar",
        "description": "„PDF aufteilen“ braucht eine Datei (PDF), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/pdf-split wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pdf-wasserzeichen": {
      "get": {
        "operationId": "rechner_pdf_wasserzeichen",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pdf-wasserzeichen"
        },
        "summary": "PDF-Wasserzeichen – über HTTP nicht berechenbar",
        "description": "„PDF-Wasserzeichen“ braucht eine Datei (PDF), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/pdf-wasserzeichen wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pin": {
      "get": {
        "operationId": "rechner_pin",
        "tags": [
          "Sicherheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pin"
        },
        "summary": "PIN-Generator – über HTTP nicht berechenbar",
        "description": "„PIN-Generator“ gehört zur Kategorie Sicherheit: Diese Rechner arbeiten ausschließlich im Browser, damit Passwörter das Gerät nicht verlassen. Ein Server, der hier antwortete, müsste sie erst entgegennehmen – deshalb tut er es nicht. Auf https://utilico.de/tool/pin rechnet das Gerät selbst.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/pizza-vergleich": {
      "get": {
        "operationId": "rechner_pizza_vergleich",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pizza-vergleich"
        },
        "summary": "Pizza-Preisvergleich",
        "description": "Welche Pizza ist günstiger pro Fläche? Zwei Größen und Preise vergleichen.",
        "parameters": [
          {
            "name": "d1",
            "in": "query",
            "required": false,
            "description": "Pizza 1 – Durchmesser (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 30
            }
          },
          {
            "name": "p1",
            "in": "query",
            "required": false,
            "description": "Pizza 1 – Preis (€).",
            "schema": {
              "type": "number",
              "minimum": 0.5,
              "default": 9
            }
          },
          {
            "name": "d2",
            "in": "query",
            "required": false,
            "description": "Pizza 2 – Durchmesser (cm).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 40
            }
          },
          {
            "name": "p2",
            "in": "query",
            "required": false,
            "description": "Pizza 2 – Preis (€).",
            "schema": {
              "type": "number",
              "minimum": 0.5,
              "default": 14
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/pomodoro": {
      "get": {
        "operationId": "rechner_pomodoro",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pomodoro"
        },
        "summary": "Pomodoro-Timer – über HTTP nicht berechenbar",
        "description": "„Pomodoro-Timer“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/pomodoro",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/portionen": {
      "get": {
        "operationId": "rechner_portionen",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/portionen"
        },
        "summary": "Rezept-Portionen umrechnen",
        "description": "Zutatenmengen eines Rezepts auf eine andere Portionszahl skalieren.",
        "parameters": [
          {
            "name": "orig",
            "in": "query",
            "required": false,
            "description": "Rezept für … Portionen.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 4
            }
          },
          {
            "name": "neu",
            "in": "query",
            "required": false,
            "description": "Gewünschte Portionen.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 6
            }
          },
          {
            "name": "menge",
            "in": "query",
            "required": false,
            "description": "Zutatenmenge (optional). Eine Menge eingeben, um sie direkt umzurechnen.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/potenz-wurzel": {
      "get": {
        "operationId": "rechner_potenz_wurzel",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/potenz-wurzel"
        },
        "summary": "Potenz & Wurzel",
        "description": "Potenzen berechnen (xⁿ) und Wurzeln beliebigen Grades ziehen.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Berechnung. Werte: potenz = Potenz: Basis ^ Exponent, wurzel = Wurzel: n-te Wurzel aus Basis.",
            "schema": {
              "type": "string",
              "enum": [
                "potenz",
                "wurzel"
              ],
              "default": "potenz"
            }
          },
          {
            "name": "basis",
            "in": "query",
            "required": false,
            "description": "Basis / Radikand.",
            "schema": {
              "type": "number",
              "default": 2
            }
          },
          {
            "name": "exp",
            "in": "query",
            "required": false,
            "description": "Exponent / Wurzelgrad.",
            "schema": {
              "type": "number",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/primzahl": {
      "get": {
        "operationId": "rechner_primzahl",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/primzahl"
        },
        "summary": "Primzahl-Check",
        "description": "Prüfen, ob eine Zahl eine Primzahl ist – inklusive Primfaktorzerlegung.",
        "parameters": [
          {
            "name": "n",
            "in": "query",
            "required": false,
            "description": "Zahl.",
            "schema": {
              "type": "number",
              "minimum": 2,
              "default": 84
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/profilbild": {
      "get": {
        "operationId": "rechner_profilbild",
        "tags": [
          "Bild & PDF"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/profilbild"
        },
        "summary": "Profilbild zuschneiden – über HTTP nicht berechenbar",
        "description": "„Profilbild zuschneiden“ braucht eine Datei (Bild), und eine Datei steht in keiner Adresse. Auf https://utilico.de/tool/profilbild wird sie im Browser verarbeitet und verlässt das Gerät nicht.",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/promille": {
      "get": {
        "operationId": "rechner_promille",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/promille"
        },
        "summary": "Promille-Rechner",
        "description": "Blutalkohol grob nach der Widmark-Formel abschätzen.",
        "parameters": [
          {
            "name": "geschlecht",
            "in": "query",
            "required": false,
            "description": "Geschlecht. Werte: m = männlich, w = weiblich.",
            "schema": {
              "type": "string",
              "enum": [
                "m",
                "w"
              ],
              "default": "m"
            }
          },
          {
            "name": "gewicht",
            "in": "query",
            "required": false,
            "description": "Körpergewicht (kg).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 75
            }
          },
          {
            "name": "menge",
            "in": "query",
            "required": false,
            "description": "Getränkemenge (ml).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 500
            }
          },
          {
            "name": "vol",
            "in": "query",
            "required": false,
            "description": "Alkoholgehalt (vol %).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/prozent": {
      "get": {
        "operationId": "rechner_prozent",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/prozent"
        },
        "summary": "Prozentrechner",
        "description": "Prozente schnell berechnen: Anteil, Prozentsatz oder prozentuale Änderung.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Berechnung. Werte: von = P % von G, anteil = T von G in %, change = Änderung von A auf B.",
            "schema": {
              "type": "string",
              "enum": [
                "von",
                "anteil",
                "change"
              ],
              "default": "von"
            }
          },
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "Wert 1. P (bei „P % von G“), T (bei „T von G“), A (bei „Änderung von A auf B“).",
            "schema": {
              "type": "number",
              "default": 19
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "Wert 2. G (Grundwert) bzw. B (neuer Wert).",
            "schema": {
              "type": "number",
              "default": 250
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/px-rem": {
      "get": {
        "operationId": "rechner_px_rem",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/px-rem"
        },
        "summary": "px ↔ rem Umrechner",
        "description": "CSS-Größen zwischen Pixel, rem/em und Punkt umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 24
            }
          },
          {
            "name": "einheit",
            "in": "query",
            "required": false,
            "description": "Einheit. Werte: px = Pixel (px), rem = rem / em.",
            "schema": {
              "type": "string",
              "enum": [
                "px",
                "rem"
              ],
              "default": "px"
            }
          },
          {
            "name": "basis",
            "in": "query",
            "required": false,
            "description": "Basis-Schriftgröße (px).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 16
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/pythagoras": {
      "get": {
        "operationId": "rechner_pythagoras",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/pythagoras"
        },
        "summary": "Satz des Pythagoras",
        "description": "Fehlende Seite im rechtwinkligen Dreieck berechnen (a² + b² = c²).",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Gesucht. Werte: c = Hypotenuse c (aus a und b), b = Kathete (aus c und a).",
            "schema": {
              "type": "string",
              "enum": [
                "c",
                "b"
              ],
              "default": "c"
            }
          },
          {
            "name": "w1",
            "in": "query",
            "required": false,
            "description": "Wert 1. a (bei c) bzw. Hypotenuse c (bei Kathete).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 3
            }
          },
          {
            "name": "w2",
            "in": "query",
            "required": false,
            "description": "Wert 2. b (bei c) bzw. Kathete a (bei Kathete).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 4
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/qr": {
      "get": {
        "operationId": "rechner_qr",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/qr"
        },
        "summary": "QR-Code-Generator – über HTTP nicht berechenbar",
        "description": "Der QR-Code wird aus einem <canvas> erzeugt, das es nur im Browser gibt. Öffne die Seite, dort entsteht er sofort. → https://utilico.de/tool/qr",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/quadratische-gleichung": {
      "get": {
        "operationId": "rechner_quadratische_gleichung",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/quadratische-gleichung"
        },
        "summary": "Quadratische Gleichung",
        "description": "Nullstellen von ax² + bx + c = 0 mit der Mitternachtsformel bestimmen.",
        "parameters": [
          {
            "name": "a",
            "in": "query",
            "required": false,
            "description": "a.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "description": "b.",
            "schema": {
              "type": "number",
              "default": -3
            }
          },
          {
            "name": "c",
            "in": "query",
            "required": false,
            "description": "c.",
            "schema": {
              "type": "number",
              "default": 2
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/rabatt": {
      "get": {
        "operationId": "rechner_rabatt",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/rabatt"
        },
        "summary": "Rabatt-Rechner",
        "description": "Reduzierten Preis und Ersparnis bei einem Rabatt berechnen.",
        "parameters": [
          {
            "name": "preis",
            "in": "query",
            "required": false,
            "description": "Originalpreis (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 79.99
            }
          },
          {
            "name": "rabatt",
            "in": "query",
            "required": false,
            "description": "Rabatt (%). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/rechner": {
      "get": {
        "operationId": "rechner_rechner",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/rechner"
        },
        "summary": "Taschenrechner",
        "description": "Rechenausdrücke mit + − × ÷, Klammern, Potenzen und Funktionen wie sqrt, sin oder log auswerten.",
        "parameters": [
          {
            "name": "ausdruck",
            "in": "query",
            "required": false,
            "description": "Ausdruck.",
            "schema": {
              "type": "string",
              "default": "(12 + 8) * 3 / 4"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/regex": {
      "get": {
        "operationId": "rechner_regex",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/regex"
        },
        "summary": "Regex-Tester",
        "description": "Regulären Ausdruck gegen einen Text testen und alle Treffer samt Gruppen anzeigen.",
        "parameters": [
          {
            "name": "pattern",
            "in": "query",
            "required": false,
            "description": "Muster (ohne /…/).",
            "schema": {
              "type": "string",
              "default": "\\b\\w+@\\w+\\.\\w+\\b"
            }
          },
          {
            "name": "flags",
            "in": "query",
            "required": false,
            "description": "Flags.",
            "schema": {
              "type": "string",
              "default": "gi"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Testtext.",
            "schema": {
              "type": "string",
              "default": "Schreib an anna@example.com oder ben@test.de."
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/roemische-zahlen": {
      "get": {
        "operationId": "rechner_roemische_zahlen",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/roemische-zahlen"
        },
        "summary": "Römische Zahlen",
        "description": "Zahlen in römische Ziffern umwandeln und wieder zurück (1–3999).",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: toRoman = Zahl → Römisch, toArab = Römisch → Zahl.",
            "schema": {
              "type": "string",
              "enum": [
                "toRoman",
                "toArab"
              ],
              "default": "toRoman"
            }
          },
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string",
              "default": "2026"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/roi": {
      "get": {
        "operationId": "rechner_roi",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/roi"
        },
        "summary": "ROI / Rendite-Rechner",
        "description": "Gewinn und Rendite (Return on Investment) aus Einsatz und Rückfluss berechnen.",
        "parameters": [
          {
            "name": "einsatz",
            "in": "query",
            "required": false,
            "description": "Einsatz / Investition (€).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1000
            }
          },
          {
            "name": "rueck",
            "in": "query",
            "required": false,
            "description": "Rückfluss (Endwert) (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1250
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/rot13": {
      "get": {
        "operationId": "rechner_rot13",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/rot13"
        },
        "summary": "ROT13-Verschlüsselung",
        "description": "Text mit ROT13 verschlüsseln oder entschlüsseln (Buchstaben um 13 verschoben).",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/schatten": {
      "get": {
        "operationId": "rechner_schatten",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/schatten"
        },
        "summary": "CSS box-shadow-Generator",
        "description": "Schlagschatten für Elemente per CSS erzeugen – mit Live-Vorschau.",
        "parameters": [
          {
            "name": "x",
            "in": "query",
            "required": false,
            "description": "Horizontal (px). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": -50,
              "maximum": 50,
              "default": 0
            }
          },
          {
            "name": "y",
            "in": "query",
            "required": false,
            "description": "Vertikal (px). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": -50,
              "maximum": 50,
              "default": 10
            }
          },
          {
            "name": "blur",
            "in": "query",
            "required": false,
            "description": "Weichzeichnen (px). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 20
            }
          },
          {
            "name": "spread",
            "in": "query",
            "required": false,
            "description": "Ausbreitung (px). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": -50,
              "maximum": 50,
              "default": 0
            }
          },
          {
            "name": "farbe",
            "in": "query",
            "required": false,
            "description": "Farbe.",
            "schema": {
              "type": "string",
              "pattern": "^#[0-9a-fA-F]{6}$",
              "default": "#1a2233"
            }
          },
          {
            "name": "alpha",
            "in": "query",
            "required": false,
            "description": "Deckkraft (%). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/schuhgroessen": {
      "get": {
        "operationId": "rechner_schuhgroessen",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/schuhgroessen"
        },
        "summary": "Schuhgrößen umrechnen",
        "description": "Schuhgrößen zwischen EU, UK, US (Herren/Damen) und Fußlänge in cm umrechnen – als Richtwert, im Browser.",
        "parameters": [
          {
            "name": "system",
            "in": "query",
            "required": false,
            "description": "Bekannte Größe. Werte: eu = EU, uk = UK, ush = US Herren, usd = US Damen, cm = Fußlänge (cm).",
            "schema": {
              "type": "string",
              "enum": [
                "eu",
                "uk",
                "ush",
                "usd",
                "cm"
              ],
              "default": "eu"
            }
          },
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 42
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/seitenverhaeltnis": {
      "get": {
        "operationId": "rechner_seitenverhaeltnis",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/seitenverhaeltnis"
        },
        "summary": "Seitenverhältnis-Rechner",
        "description": "Bild proportional skalieren und das Seitenverhältnis (z.B. 16:9) bestimmen.",
        "parameters": [
          {
            "name": "breite",
            "in": "query",
            "required": false,
            "description": "Original-Breite (px).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1920
            }
          },
          {
            "name": "hoehe",
            "in": "query",
            "required": false,
            "description": "Original-Höhe (px).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1080
            }
          },
          {
            "name": "neu",
            "in": "query",
            "required": false,
            "description": "Neue Breite (px).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 1280
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/skonto": {
      "get": {
        "operationId": "rechner_skonto",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/skonto"
        },
        "summary": "Skonto-Rechner",
        "description": "Skontobetrag und Zahlbetrag bei Skontoabzug berechnen.",
        "parameters": [
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Rechnungsbetrag (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1000
            }
          },
          {
            "name": "skonto",
            "in": "query",
            "required": false,
            "description": "Skonto (%).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 2
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/slugify": {
      "get": {
        "operationId": "rechner_slugify",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/slugify"
        },
        "summary": "Slug-Generator",
        "description": "Aus einem Titel einen sauberen URL-Slug erzeugen (mit Umlaut-Umwandlung).",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string",
              "default": "Schöne Grüße aus München!"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/sparplan": {
      "get": {
        "operationId": "rechner_sparplan",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/sparplan"
        },
        "summary": "Sparplan-Rechner",
        "description": "Endkapital eines Sparplans mit monatlicher Rate und Zinseszins berechnen.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Startkapital (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 1000
            }
          },
          {
            "name": "monat",
            "in": "query",
            "required": false,
            "description": "Monatliche Sparrate (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 200
            }
          },
          {
            "name": "zins",
            "in": "query",
            "required": false,
            "description": "Rendite p.a. (%).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 5
            }
          },
          {
            "name": "jahre",
            "in": "query",
            "required": false,
            "description": "Laufzeit (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 15
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/sql-format": {
      "get": {
        "operationId": "rechner_sql_format",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/sql-format"
        },
        "summary": "SQL formatieren",
        "description": "SQL-Abfragen übersichtlich formatieren: Schlüsselwörter groß, Klauseln in eigene Zeilen.",
        "parameters": [
          {
            "name": "sql",
            "in": "query",
            "required": false,
            "description": "SQL.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/stoppuhr": {
      "get": {
        "operationId": "rechner_stoppuhr",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/stoppuhr"
        },
        "summary": "Stoppuhr – über HTTP nicht berechenbar",
        "description": "„Stoppuhr“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/stoppuhr",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/stunden-rechner": {
      "get": {
        "operationId": "rechner_stunden_rechner",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/stunden-rechner"
        },
        "summary": "Arbeitszeit-Rechner",
        "description": "Arbeitsstunden aus Start, Ende und Pause berechnen.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Beginn.",
            "schema": {
              "type": "string",
              "default": "08:00"
            }
          },
          {
            "name": "ende",
            "in": "query",
            "required": false,
            "description": "Ende.",
            "schema": {
              "type": "string",
              "default": "17:00"
            }
          },
          {
            "name": "pause",
            "in": "query",
            "required": false,
            "description": "Pause (min).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/stundenlohn": {
      "get": {
        "operationId": "rechner_stundenlohn",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/stundenlohn"
        },
        "summary": "Stundenlohn ↔ Gehalt",
        "description": "Stundenlohn in Brutto-Monatsgehalt und Brutto-Jahresgehalt umrechnen – und zurück, aus den Wochenstunden, ohne Steuern und Abgaben.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Umrechnung. Werte: h2m = Stundenlohn → Gehalt, m2h = Monatsgehalt → Stundenlohn.",
            "schema": {
              "type": "string",
              "enum": [
                "h2m",
                "m2h"
              ],
              "default": "h2m"
            }
          },
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Betrag (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 15
            }
          },
          {
            "name": "stunden",
            "in": "query",
            "required": false,
            "description": "Wochenstunden (h).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 40
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/tage-zwischen": {
      "get": {
        "operationId": "rechner_tage_zwischen",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/tage-zwischen"
        },
        "summary": "Tage zwischen zwei Daten",
        "description": "Berechne, wie viele Tage, Wochen und Monate zwischen zwei Daten liegen.",
        "parameters": [
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "Von.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "bis",
            "in": "query",
            "required": false,
            "description": "Bis.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/team-generator": {
      "get": {
        "operationId": "rechner_team_generator",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/team-generator"
        },
        "summary": "Team-Generator",
        "description": "Namen zufällig und gleichmäßig in mehrere Teams oder Gruppen einteilen.",
        "parameters": [
          {
            "name": "namen",
            "in": "query",
            "required": false,
            "description": "Namen (eine Zeile pro Person).",
            "schema": {
              "type": "string",
              "default": "Anna\nBen\nClara\nDavid\nErik\nFiona"
            }
          },
          {
            "name": "teams",
            "in": "query",
            "required": false,
            "description": "Anzahl Teams.",
            "schema": {
              "type": "number",
              "minimum": 2,
              "maximum": 20,
              "default": 2
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/teiler": {
      "get": {
        "operationId": "rechner_teiler",
        "tags": [
          "Mathe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/teiler"
        },
        "summary": "Teiler einer Zahl",
        "description": "Alle Teiler einer ganzen Zahl auflisten.",
        "parameters": [
          {
            "name": "n",
            "in": "query",
            "required": false,
            "description": "Zahl.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 60
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/temperatur": {
      "get": {
        "operationId": "rechner_temperatur",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/temperatur"
        },
        "summary": "Temperatur-Umrechner",
        "description": "Temperaturen zwischen Celsius, Fahrenheit und Kelvin umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 20
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: C = Celsius (°C), F = Fahrenheit (°F), K = Kelvin (K).",
            "schema": {
              "type": "string",
              "enum": [
                "C",
                "F",
                "K"
              ],
              "default": "C"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: C = Celsius (°C), F = Fahrenheit (°F), K = Kelvin (K).",
            "schema": {
              "type": "string",
              "enum": [
                "C",
                "F",
                "K"
              ],
              "default": "F"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/text-umkehren": {
      "get": {
        "operationId": "rechner_text_umkehren",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/text-umkehren"
        },
        "summary": "Text umkehren",
        "description": "Zeichen, Wörter oder Zeilen eines Textes umgekehrt anordnen.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Umkehren. Werte: zeichen = Zeichen, woerter = Wörter, zeilen = Zeilen.",
            "schema": {
              "type": "string",
              "enum": [
                "zeichen",
                "woerter",
                "zeilen"
              ],
              "default": "zeichen"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/textzaehler": {
      "get": {
        "operationId": "rechner_textzaehler",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/textzaehler"
        },
        "summary": "Zeichen- & Wortzähler",
        "description": "Zähle Zeichen, Wörter, Sätze und Zeilen – mit geschätzter Lesezeit.",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Dein Text.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/timer": {
      "get": {
        "operationId": "rechner_timer",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/timer"
        },
        "summary": "Timer – über HTTP nicht berechenbar",
        "description": "„Timer“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/timer",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/trinkgeld": {
      "get": {
        "operationId": "rechner_trinkgeld",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/trinkgeld"
        },
        "summary": "Trinkgeld-Rechner",
        "description": "Trinkgeld berechnen und den Betrag fair auf mehrere Personen aufteilen.",
        "parameters": [
          {
            "name": "betrag",
            "in": "query",
            "required": false,
            "description": "Rechnungsbetrag (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 42.5
            }
          },
          {
            "name": "prozent",
            "in": "query",
            "required": false,
            "description": "Trinkgeld (%). Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 30,
              "default": 10
            }
          },
          {
            "name": "personen",
            "in": "query",
            "required": false,
            "description": "Personen.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 2
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/unixzeit": {
      "get": {
        "operationId": "rechner_unixzeit",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/unixzeit"
        },
        "summary": "Unix-Timestamp umrechnen",
        "description": "Unix-Zeitstempel in ein lesbares Datum umwandeln – und umgekehrt.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: ts2date = Timestamp → Datum, date2ts = Datum → Timestamp.",
            "schema": {
              "type": "string",
              "enum": [
                "ts2date",
                "date2ts"
              ],
              "default": "ts2date"
            }
          },
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/url-codieren": {
      "get": {
        "operationId": "rechner_url_codieren",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/url-codieren"
        },
        "summary": "URL codieren / decodieren",
        "description": "Text für URLs kodieren (Prozent-Encoding) oder wieder dekodieren.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Richtung. Werte: encode = Codieren, decode = Decodieren.",
            "schema": {
              "type": "string",
              "enum": [
                "encode",
                "decode"
              ],
              "default": "encode"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Eingabe.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/uuid": {
      "get": {
        "operationId": "rechner_uuid",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/uuid"
        },
        "summary": "UUID-Generator",
        "description": "Zufällige UUIDs (Version 4) erzeugen – so viele wie du brauchst.",
        "parameters": [
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl. Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 20,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/verhaeltnis": {
      "get": {
        "operationId": "rechner_verhaeltnis",
        "tags": [
          "Rechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/verhaeltnis"
        },
        "summary": "Verhältnis-Rechner",
        "description": "Proportionen und Skalierungen lösen: aus A₁ : B₁ und einem neuen A₂ das passende B₂ berechnen.",
        "parameters": [
          {
            "name": "a1",
            "in": "query",
            "required": false,
            "description": "A₁.",
            "schema": {
              "type": "number",
              "default": 16
            }
          },
          {
            "name": "b1",
            "in": "query",
            "required": false,
            "description": "B₁.",
            "schema": {
              "type": "number",
              "default": 9
            }
          },
          {
            "name": "a2",
            "in": "query",
            "required": false,
            "description": "Neuer Wert A₂.",
            "schema": {
              "type": "number",
              "default": 1920
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/volumen": {
      "get": {
        "operationId": "rechner_volumen",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/volumen"
        },
        "summary": "Volumen umrechnen",
        "description": "Liter, Milliliter, Kubikmeter, Gallonen und Tassen umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: m3 = Kubikmeter, hl = Hektoliter, l = Liter, ml = Milliliter, cm3 = Kubikzentimeter, gal = Gallone (US), pt = Pint (US), cup = Cup (US), floz = Flüssigunze (US).",
            "schema": {
              "type": "string",
              "enum": [
                "m3",
                "hl",
                "l",
                "ml",
                "cm3",
                "gal",
                "pt",
                "cup",
                "floz"
              ],
              "default": "l"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: m3 = Kubikmeter, hl = Hektoliter, l = Liter, ml = Milliliter, cm3 = Kubikzentimeter, gal = Gallone (US), pt = Pint (US), cup = Cup (US), floz = Flüssigunze (US).",
            "schema": {
              "type": "string",
              "enum": [
                "m3",
                "hl",
                "l",
                "ml",
                "cm3",
                "gal",
                "pt",
                "cup",
                "floz"
              ],
              "default": "gal"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/wandfarbe": {
      "get": {
        "operationId": "rechner_wandfarbe",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wandfarbe"
        },
        "summary": "Wandfarbe-Rechner",
        "description": "Wie viel Wandfarbe brauche ich? Aus Raummaßen, Türen, Fenstern, Ergiebigkeit und Anzahl der Anstriche – Ergebnis in Litern und Eimern.",
        "parameters": [
          {
            "name": "laenge",
            "in": "query",
            "required": false,
            "description": "Raumlänge (m).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 100,
              "default": 4
            }
          },
          {
            "name": "breite",
            "in": "query",
            "required": false,
            "description": "Raumbreite (m).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 100,
              "default": 5
            }
          },
          {
            "name": "hoehe",
            "in": "query",
            "required": false,
            "description": "Raumhöhe (m).",
            "schema": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 20,
              "default": 2.5
            }
          },
          {
            "name": "tueren",
            "in": "query",
            "required": false,
            "description": "Türen. Je 1,8 m² Abzug (2,00 × 0,90 m).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 20,
              "default": 1
            }
          },
          {
            "name": "fenster",
            "in": "query",
            "required": false,
            "description": "Fenster. Je 1,7 m² Abzug (1,30 × 1,30 m).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 20,
              "default": 2
            }
          },
          {
            "name": "decke",
            "in": "query",
            "required": false,
            "description": "Decke mitstreichen. Werte: 1 = ja, 0 = nein.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0"
            }
          },
          {
            "name": "ergiebigkeit",
            "in": "query",
            "required": false,
            "description": "Ergiebigkeit (m²/l). Steht auf dem Eimer. Übliche Wandfarben decken 6 bis 10 m² je Liter.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 30,
              "default": 8
            }
          },
          {
            "name": "anstriche",
            "in": "query",
            "required": false,
            "description": "Anstriche. Auf altem oder dunklem Untergrund sind zwei nötig.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 5,
              "default": 2
            }
          },
          {
            "name": "gebinde",
            "in": "query",
            "required": false,
            "description": "Eimergröße. Werte: 2.5 = 2,5 l, 5 = 5 l, 10 = 10 l, 12.5 = 12,5 l.",
            "schema": {
              "type": "string",
              "enum": [
                "2.5",
                "5",
                "10",
                "12.5"
              ],
              "default": "10"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/wasserbedarf": {
      "get": {
        "operationId": "rechner_wasserbedarf",
        "tags": [
          "Gesundheit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wasserbedarf"
        },
        "summary": "Wasserbedarf-Rechner",
        "description": "Wie viel du am Tag ungefähr trinken solltest – nach Körpergewicht.",
        "parameters": [
          {
            "name": "gewicht",
            "in": "query",
            "required": false,
            "description": "Körpergewicht (kg).",
            "schema": {
              "type": "number",
              "minimum": 1,
              "default": 75
            }
          },
          {
            "name": "sport",
            "in": "query",
            "required": false,
            "description": "Sport heute (min). Pro 30 Min. Sport ca. 0,3 l zusätzlich.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/wecker": {
      "get": {
        "operationId": "rechner_wecker",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wecker"
        },
        "summary": "Wecker – über HTTP nicht berechenbar",
        "description": "„Wecker“ ist kein Rechner mit Eingabefeldern, sondern eine Anwendung, die im Browser läuft. Es gibt kein Ergebnis, das sich einmalig berechnen ließe. → https://utilico.de/tool/wecker",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/winkel": {
      "get": {
        "operationId": "rechner_winkel",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/winkel"
        },
        "summary": "Winkel umrechnen",
        "description": "Grad, Radiant, Gon und Umdrehungen ineinander umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 90
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: deg = Grad (°), rad = Radiant, gon = Gon, turn = Umdrehung, arcmin = Bogenminute (′), arcsec = Bogensekunde (″).",
            "schema": {
              "type": "string",
              "enum": [
                "deg",
                "rad",
                "gon",
                "turn",
                "arcmin",
                "arcsec"
              ],
              "default": "deg"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: deg = Grad (°), rad = Radiant, gon = Gon, turn = Umdrehung, arcmin = Bogenminute (′), arcsec = Bogensekunde (″).",
            "schema": {
              "type": "string",
              "enum": [
                "deg",
                "rad",
                "gon",
                "turn",
                "arcmin",
                "arcsec"
              ],
              "default": "rad"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/wlan-qr": {
      "get": {
        "operationId": "rechner_wlan_qr",
        "tags": [
          "Design & Farbe"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wlan-qr"
        },
        "summary": "WLAN-QR-Code – über HTTP nicht berechenbar",
        "description": "Der QR-Code wird aus einem <canvas> erzeugt, das es nur im Browser gibt. Öffne die Seite, dort entsteht er sofort. Das WLAN-Passwort bleibt dabei ohnehin im Browser und geht durch keine Leitung. → https://utilico.de/tool/wlan-qr",
        "responses": {
          "422": {
            "$ref": "#/components/responses/Gesperrt"
          }
        }
      }
    },
    "/api/rechner/wochentag": {
      "get": {
        "operationId": "rechner_wochentag",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wochentag"
        },
        "summary": "Wochentag berechnen",
        "description": "An welchem Wochentag ein bestimmtes Datum liegt (oder lag).",
        "parameters": [
          {
            "name": "datum",
            "in": "query",
            "required": false,
            "description": "Datum.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/wuerfel": {
      "get": {
        "operationId": "rechner_wuerfel",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/wuerfel"
        },
        "summary": "Würfel werfen",
        "description": "Einen oder mehrere Würfel mit beliebiger Seitenzahl werfen.",
        "parameters": [
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl Würfel. Schieberegler: ein Wert außerhalb wird auf die Grenze gezogen und in „hinweise“ gemeldet.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 10,
              "default": 2
            }
          },
          {
            "name": "seiten",
            "in": "query",
            "required": false,
            "description": "Seiten pro Würfel. Werte: 4 = W4, 6 = W6, 8 = W8, 10 = W10, 12 = W12, 20 = W20.",
            "schema": {
              "type": "string",
              "enum": [
                "4",
                "6",
                "8",
                "10",
                "12",
                "20"
              ],
              "default": "6"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/xml-format": {
      "get": {
        "operationId": "rechner_xml_format",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/xml-format"
        },
        "summary": "XML formatieren",
        "description": "XML einrücken und lesbar formatieren (Pretty-Print).",
        "parameters": [
          {
            "name": "xml",
            "in": "query",
            "required": false,
            "description": "XML.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zahlensysteme": {
      "get": {
        "operationId": "rechner_zahlensysteme",
        "tags": [
          "Entwickler"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zahlensysteme"
        },
        "summary": "Zahlensysteme umrechnen",
        "description": "Zahlen zwischen Dezimal, Binär, Oktal und Hexadezimal umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "string",
              "default": "255"
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "Ausgangssystem. Werte: 2 = Binär (2), 8 = Oktal (8), 10 = Dezimal (10), 16 = Hexadezimal (16).",
            "schema": {
              "type": "string",
              "enum": [
                "2",
                "8",
                "10",
                "16"
              ],
              "default": "10"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zeilen-sortieren": {
      "get": {
        "operationId": "rechner_zeilen_sortieren",
        "tags": [
          "Text"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zeilen-sortieren"
        },
        "summary": "Zeilen sortieren",
        "description": "Textzeilen alphabetisch, nach Länge oder numerisch sortieren.",
        "parameters": [
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Sortierung. Werte: az = A → Z, za = Z → A, len = nach Länge (kurz → lang), num = numerisch (klein → groß).",
            "schema": {
              "type": "string",
              "enum": [
                "az",
                "za",
                "len",
                "num"
              ],
              "default": "az"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "description": "Zeilen.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zeit-addieren": {
      "get": {
        "operationId": "rechner_zeit_addieren",
        "tags": [
          "Datum & Zeit"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zeit-addieren"
        },
        "summary": "Uhrzeit ± Dauer",
        "description": "Eine Dauer zu einer Uhrzeit addieren oder davon abziehen.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Uhrzeit.",
            "schema": {
              "type": "string",
              "default": "10:00"
            }
          },
          {
            "name": "modus",
            "in": "query",
            "required": false,
            "description": "Rechnung. Werte: add = addieren (+), sub = abziehen (−).",
            "schema": {
              "type": "string",
              "enum": [
                "add",
                "sub"
              ],
              "default": "add"
            }
          },
          {
            "name": "std",
            "in": "query",
            "required": false,
            "description": "Stunden.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 2
            }
          },
          {
            "name": "min",
            "in": "query",
            "required": false,
            "description": "Minuten.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zeit-umrechnen": {
      "get": {
        "operationId": "rechner_zeit_umrechnen",
        "tags": [
          "Umrechnen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zeit-umrechnen"
        },
        "summary": "Zeiteinheiten umrechnen",
        "description": "Sekunden, Minuten, Stunden, Tage, Wochen, Monate und Jahre umrechnen.",
        "parameters": [
          {
            "name": "wert",
            "in": "query",
            "required": false,
            "description": "Wert.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "von. Werte: ms = Millisekunden, s = Sekunden, min = Minuten, h = Stunden, d = Tage, w = Wochen, mon = Monate (Ø), a = Jahre (Ø).",
            "schema": {
              "type": "string",
              "enum": [
                "ms",
                "s",
                "min",
                "h",
                "d",
                "w",
                "mon",
                "a"
              ],
              "default": "h"
            }
          },
          {
            "name": "nach",
            "in": "query",
            "required": false,
            "description": "nach. Werte: ms = Millisekunden, s = Sekunden, min = Minuten, h = Stunden, d = Tage, w = Wochen, mon = Monate (Ø), a = Jahre (Ø).",
            "schema": {
              "type": "string",
              "enum": [
                "ms",
                "s",
                "min",
                "h",
                "d",
                "w",
                "mon",
                "a"
              ],
              "default": "min"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zinseszins": {
      "get": {
        "operationId": "rechner_zinseszins",
        "tags": [
          "Finanzen"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zinseszins"
        },
        "summary": "Zinseszins-Rechner",
        "description": "Wie ein einmalig angelegter Betrag mit Zinseszins wächst.",
        "parameters": [
          {
            "name": "kapital",
            "in": "query",
            "required": false,
            "description": "Startkapital (€).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 10000
            }
          },
          {
            "name": "zins",
            "in": "query",
            "required": false,
            "description": "Zinssatz p.a. (%).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 5
            }
          },
          {
            "name": "jahre",
            "in": "query",
            "required": false,
            "description": "Laufzeit (Jahre).",
            "schema": {
              "type": "number",
              "minimum": 0,
              "default": 10
            }
          },
          {
            "name": "periode",
            "in": "query",
            "required": false,
            "description": "Verzinsung. Werte: 1 = jährlich, 12 = monatlich, 365 = täglich.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "12",
                "365"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    },
    "/api/rechner/zufallszahl": {
      "get": {
        "operationId": "rechner_zufallszahl",
        "tags": [
          "Alltag & Spiele"
        ],
        "externalDocs": {
          "description": "Derselbe Rechner im Browser – dort verlassen die Eingaben das Gerät nicht",
          "url": "https://utilico.de/tool/zufallszahl"
        },
        "summary": "Zufallszahl-Generator",
        "description": "Eine oder mehrere Zufallszahlen in einem selbst gewählten Bereich.",
        "parameters": [
          {
            "name": "min",
            "in": "query",
            "required": false,
            "description": "Von.",
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "Bis.",
            "schema": {
              "type": "number",
              "default": 100
            }
          },
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 100,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Ergebnis"
          },
          "400": {
            "$ref": "#/components/responses/Eingabefehler"
          },
          "500": {
            "$ref": "#/components/responses/Rechenfehler"
          }
        }
      }
    }
  },
  "components": {
    "responses": {
      "Ergebnis": {
        "description": "Der Rechner hat gerechnet",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Rechnerergebnis"
            }
          }
        }
      },
      "Eingabefehler": {
        "description": "Unbekannter Parametername oder unlesbarer Wert (unbekannter_parameter, ungueltiger_wert) – oder der Rechner selbst sagt, dass diese Eingaben nichts ergeben (eingabe_ungueltig, kein_ergebnis)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Rechnerfehler"
            }
          }
        }
      },
      "UnbekannterRechner": {
        "description": "Diesen Slug gibt es nicht; die Antwort schlägt ähnliche vor",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Rechnerfehler"
            }
          }
        }
      },
      "Gesperrt": {
        "description": "Der Rechner ist verstanden, liefert über HTTP aber kein Ergebnis. Die Antwort nennt den Grund und die Seite, auf der es doch geht",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Rechnerfehler"
            }
          }
        }
      },
      "Rechenfehler": {
        "description": "Der Rechner ist bei der Berechnung abgebrochen",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Rechnerfehler"
            }
          }
        }
      }
    },
    "schemas": {
      "Einheitencode": {
        "type": "string",
        "description": "Einheiten-Code, so wie er unter /api/einheiten steht – dort auch mit Namen und Familie. Zusätzlich wird das jeweilige Symbol akzeptiert (z. B. „lb“ statt „pfund“).",
        "enum": [
          "acre",
          "ar",
          "atm",
          "bar",
          "byte",
          "celsius",
          "cm",
          "cm2",
          "cup",
          "fahrenheit",
          "floz",
          "fuss",
          "fuss2",
          "g",
          "gallone",
          "gb",
          "hektar",
          "hp",
          "hpa",
          "joule",
          "kalorie",
          "kb",
          "kcal",
          "kelvin",
          "kg",
          "kj",
          "km",
          "km2",
          "kmh",
          "knoten",
          "kpa",
          "kw",
          "kwh",
          "l",
          "m",
          "m2",
          "m3",
          "mb",
          "mbar",
          "meile",
          "mg",
          "ml",
          "mm",
          "mmhg",
          "mph",
          "ms",
          "mw",
          "pascal",
          "pfund",
          "pint",
          "ps",
          "psi",
          "stone",
          "t",
          "tb",
          "unze",
          "watt",
          "wh",
          "yard",
          "zoll"
        ]
      },
      "Einheit": {
        "type": "object",
        "required": [
          "code",
          "name",
          "symbol"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Stabiler Code, zugleich URL-Segment auf der Website."
          },
          "name": {
            "type": "string",
            "description": "Deutscher Name der Einheit."
          },
          "symbol": {
            "type": "string",
            "description": "Einheitenzeichen."
          }
        }
      },
      "Umrechnung": {
        "type": "object",
        "required": [
          "familie",
          "von",
          "nach",
          "wert",
          "ergebnis",
          "formatiert",
          "formel",
          "seite"
        ],
        "properties": {
          "familie": {
            "type": "object",
            "required": [
              "id",
              "name",
              "art"
            ],
            "properties": {
              "id": {
                "type": "string",
                "enum": [
                  "laenge",
                  "gewicht",
                  "volumen",
                  "flaeche",
                  "geschwindigkeit",
                  "daten",
                  "leistung",
                  "energie",
                  "druck",
                  "temperatur"
                ],
                "description": "Die Kennung der Einheitenfamilie, dieselbe wie im Pfad /api/einheiten?familie=<id>. Alle Familien stehen unter /api/einheiten."
              },
              "name": {
                "type": "string"
              },
              "art": {
                "type": "string",
                "enum": [
                  "linear",
                  "temp"
                ],
                "description": "Wie in dieser Familie gerechnet wird: „linear“ mit einem festen Faktor, „temp“ mit Faktor und Offset (nur Temperatur). Bei „temp“ ist „faktor“ deshalb null."
              }
            }
          },
          "von": {
            "$ref": "#/components/schemas/Einheit"
          },
          "nach": {
            "$ref": "#/components/schemas/Einheit"
          },
          "wert": {
            "type": "number",
            "description": "Der geparste Eingabewert."
          },
          "ergebnis": {
            "type": "number",
            "description": "Ergebnis als Zahl, auf 12 signifikante Stellen gerundet."
          },
          "formatiert": {
            "type": "string",
            "description": "Ergebnis mit Symbol, deutsch formatiert und sinnvoll gerundet."
          },
          "faktor": {
            "type": [
              "number",
              "null"
            ],
            "description": "Umrechnungsfaktor von → nach. null bei Temperatur, weil dort ein Offset dazukommt."
          },
          "formel": {
            "type": "string",
            "description": "Die verwendete Rechenvorschrift in lesbarer Form."
          },
          "seite": {
            "type": "string",
            "format": "uri",
            "description": "Die passende Umrechnungsseite auf utilico.de."
          },
          "rechner": {
            "type": "string",
            "format": "uri",
            "description": "Das interaktive Tool für diese Familie."
          },
          "konvention": {
            "type": "object",
            "required": [
              "art",
              "regel",
              "text",
              "anders"
            ],
            "description": "Steht nur da, wo dieselbe Einheit mehr als einen gebräuchlichen Faktor hat – bei den Datengrößen, wo „Gigabyte“ dezimal 1000 Megabyte meint und binär 1024. Dieser Endpunkt rechnet dezimal nach SI-Norm; unter „anders“ steht, was dieselbe Rechnung binär ergibt, damit die zweite Zahl nicht anderswo gesucht werden muss. Ein Kilogramm hat nur eine Zählweise, deshalb fehlt das Feld bei allen anderen Familien – ein Hinweis, der überall steht, wird überall überlesen.",
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "dezimal"
                ],
                "description": "Die hier verwendete Zählweise."
              },
              "regel": {
                "type": "string",
                "description": "Die Regel dahinter, z. B. „1 kB = 1000 Byte (SI/IEC)“."
              },
              "text": {
                "type": "string",
                "description": "Beide Zählweisen in einem Satz, so wie er auch auf der Seite steht."
              },
              "anders": {
                "type": "object",
                "required": [
                  "art",
                  "regel",
                  "ergebnis",
                  "formatiert",
                  "rechner"
                ],
                "description": "Dieselbe Rechnung in der anderen Zählweise.",
                "properties": {
                  "art": {
                    "type": "string",
                    "enum": [
                      "binär"
                    ],
                    "description": "Die andere Zählweise, immer „binär“ – gezählt in Zweierpotenzen (1024 statt 1000). Der Wert daneben unter „art“ eine Ebene höher ist „dezimal“; beide zusammen sagen, welche zwei Zahlen hier nebeneinanderstehen."
                  },
                  "regel": {
                    "type": "string",
                    "description": "Die Regel dahinter, z. B. „1 KiB = 1024 Byte“."
                  },
                  "ergebnis": {
                    "type": "number",
                    "description": "Das Ergebnis der anderen Zählweise als Zahl."
                  },
                  "formatiert": {
                    "type": "string",
                    "description": "Dasselbe deutsch formatiert, mit dem normgerechten Symbol (KiB, MiB …)."
                  },
                  "rechner": {
                    "type": "string",
                    "format": "uri",
                    "description": "Der Rechner, der so rechnet."
                  }
                }
              }
            }
          }
        }
      },
      "Einheitenkatalog": {
        "type": "object",
        "required": [
          "familien"
        ],
        "properties": {
          "familien": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "art",
                "einheiten"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "art": {
                  "type": "string",
                  "enum": [
                    "linear",
                    "temp"
                  ],
                  "description": "Wie in dieser Familie gerechnet wird: „linear“ mit einem festen Faktor, „temp“ mit Faktor und Offset (nur Temperatur). Bei „temp“ ist „faktor“ deshalb null."
                },
                "rechner": {
                  "type": "string",
                  "format": "uri"
                },
                "einheiten": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Einheit"
                  }
                }
              }
            }
          },
          "hinweis": {
            "type": "string"
          }
        }
      },
      "Fehler": {
        "type": "object",
        "description": "Fehlerantwort der Einheiten-Endpunkte.",
        "required": [
          "fehler",
          "meldung"
        ],
        "properties": {
          "fehler": {
            "type": "string",
            "description": "Maschinenlesbarer Fehlercode.",
            "enum": [
              "parameter_fehlt",
              "unbekannte_einheit",
              "unpassende_einheiten",
              "ungueltiger_wert",
              "unbekannte_familie",
              "methode_nicht_erlaubt"
            ]
          },
          "meldung": {
            "type": "string",
            "description": "Erklärung im Klartext."
          },
          "einheiten": {
            "type": "string",
            "format": "uri",
            "description": "Wo die gültigen Codes stehen."
          },
          "dokumentation": {
            "type": "string",
            "format": "uri"
          },
          "beispiel": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Wegweiser": {
        "type": "object",
        "description": "Vier Adressen, die in jeder Antwort der Rechner-Endpunkte stehen, auch in jeder fehlgeschlagenen. Sie ersparen es, von einer Fehlermeldung aus wieder bei der Startseite anzufangen.",
        "required": [
          "dokumentation",
          "beschreibung",
          "katalog",
          "beispiel"
        ],
        "properties": {
          "dokumentation": {
            "type": "string",
            "format": "uri",
            "description": "Die Dokumentation für Menschen."
          },
          "beschreibung": {
            "type": "string",
            "format": "uri",
            "description": "Die OpenAPI-Beschreibung dieser Antworten."
          },
          "katalog": {
            "type": "string",
            "format": "uri",
            "description": "Alle Rechner."
          },
          "beispiel": {
            "type": "string",
            "format": "uri",
            "description": "Ein vollständiger Aufruf, der etwas liefert."
          }
        }
      },
      "Rechnerkopf": {
        "type": "object",
        "description": "Wer geantwortet hat.",
        "required": [
          "slug",
          "name",
          "beschreibung",
          "kategorie",
          "kategorieName",
          "seite",
          "markdown"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "beschreibung": {
            "type": "string"
          },
          "kategorie": {
            "type": "string",
            "enum": [
              "rechnen",
              "finanzen",
              "umrechnen",
              "mathe",
              "gesundheit",
              "datum",
              "text",
              "entwickler",
              "sicherheit",
              "design",
              "bild",
              "alltag"
            ],
            "description": "Die Kennung der Kategorie, dieselbe wie im Pfad /kategorie/<id> und im Katalog. Zum Anzeigen ist „kategorieName“ daneben gedacht, zum Filtern diese hier."
          },
          "kategorieName": {
            "type": "string"
          },
          "seite": {
            "type": "string",
            "format": "uri",
            "description": "Der Rechner im Browser."
          },
          "markdown": {
            "type": "string",
            "format": "uri",
            "description": "Dieselbe Seite als Text."
          }
        }
      },
      "Parameterfeld": {
        "type": "object",
        "description": "Ein Eingabefeld, so wie es im Formular steht – die Feldliste ist in jeder Antwort dabei und beschreibt denselben Rechner, den sie beantwortet hat.",
        "required": [
          "name",
          "label",
          "typ"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Der Query-Parameter."
          },
          "label": {
            "type": "string",
            "description": "Die Beschriftung auf der Seite."
          },
          "typ": {
            "type": "string",
            "enum": [
              "checkbox",
              "color",
              "date",
              "number",
              "range",
              "select",
              "text",
              "textarea"
            ],
            "description": "Die Art des Feldes im Formular – und damit, was als Wert hineingehört. „number“ und „range“ nehmen eine Zahl (bei „range“ innerhalb von „min“ und „max“, sonst wird sie gestutzt und das steht danach in „hinweise“), „checkbox“ ein Ja oder Nein, „date“ ein Datum als JJJJ-MM-TT, „color“ eine Farbe als #rrggbb, „select“ einen der Werte aus „werte“, „text“ und „textarea“ freien Text – der Unterschied zwischen den beiden ist nur die Größe des Feldes auf der Seite."
          },
          "werte": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Erlaubte Werte bei einer Auswahl."
          },
          "werteNamen": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Deren Beschriftungen, in derselben Reihenfolge – nur wo sie mehr sagen als der Wert."
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "step": {
            "type": "number",
            "description": "Schrittweite des Formulars. Wird nicht erzwungen."
          },
          "standard": {
            "type": [
              "string",
              "number",
              "boolean"
            ],
            "description": "Womit gerechnet wird, wenn der Parameter fehlt."
          },
          "hinweis": {
            "type": "string",
            "description": "Der Hilfetext unter DIESEM FELD – er erklärt, was Name, Typ und Grenzen nicht hergeben. Er gehört zur Eingabe und sagt nichts über ein Ergebnis; das tun „hinweise“ (was die Schnittstelle an den Eingaben geändert hat) und die Blöcke mit art „note“ oder „warnung“ (was der Rechner zu seinem Ergebnis anmerkt)."
          }
        }
      },
      "Katalogeintrag": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "beschreibung",
          "kategorie",
          "seite",
          "markdown",
          "berechenbar"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "beschreibung": {
            "type": "string"
          },
          "kategorie": {
            "type": "string",
            "enum": [
              "rechnen",
              "finanzen",
              "umrechnen",
              "mathe",
              "gesundheit",
              "datum",
              "text",
              "entwickler",
              "sicherheit",
              "design",
              "bild",
              "alltag"
            ],
            "description": "Die Kennung der Kategorie, dieselbe wie im Pfad /kategorie/<id>. Zum Filtern gedacht, „name“ daneben zum Anzeigen."
          },
          "seite": {
            "type": "string",
            "format": "uri"
          },
          "markdown": {
            "type": "string",
            "format": "uri"
          },
          "berechenbar": {
            "type": "boolean",
            "description": "Ob dieser Rechner über HTTP ein Ergebnis liefert."
          },
          "api": {
            "type": "string",
            "format": "uri",
            "description": "Sein Endpunkt. Steht nur bei „berechenbar“: true."
          },
          "grund": {
            "type": "string",
            "enum": [
              "nur_im_browser",
              "nur_auf_dem_geraet",
              "kein_formular",
              "datei_noetig",
              "geheimes_feld"
            ],
            "description": "Warum nicht. Steht nur bei „berechenbar“: false."
          },
          "hinweis": {
            "type": "string",
            "description": "Derselbe Grund im Klartext, mit der Seite, auf der es geht."
          }
        }
      },
      "Rechnerkatalog": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Wegweiser"
          },
          {
            "type": "object",
            "required": [
              "anzahl",
              "berechenbar",
              "kategorien",
              "rechner"
            ],
            "properties": {
              "anzahl": {
                "type": "integer",
                "description": "Wie viele Rechner in dieser Liste stehen."
              },
              "berechenbar": {
                "type": "integer",
                "description": "Wie viele davon über HTTP rechnen."
              },
              "kategorien": {
                "type": "array",
                "description": "Immer alle Kategorien, auch bei gefilterter Liste – sonst wäre der Filter nicht zu finden.",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "beschreibung",
                    "anzahl"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "enum": [
                        "rechnen",
                        "finanzen",
                        "umrechnen",
                        "mathe",
                        "gesundheit",
                        "datum",
                        "text",
                        "entwickler",
                        "sicherheit",
                        "design",
                        "bild",
                        "alltag"
                      ],
                      "description": "Die Kennung der Kategorie, dieselbe wie im Pfad /kategorie/<id>. Zum Filtern gedacht, „name“ daneben zum Anzeigen."
                    },
                    "name": {
                      "type": "string"
                    },
                    "beschreibung": {
                      "type": "string"
                    },
                    "anzahl": {
                      "type": "integer"
                    }
                  }
                }
              },
              "rechner": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Katalogeintrag"
                }
              },
              "hinweis": {
                "type": "string"
              }
            }
          }
        ]
      },
      "Rechnerergebnis": {
        "type": "object",
        "required": [
          "rechner",
          "eingaben",
          "standardwerte",
          "parameter",
          "hinweise",
          "ergebnisse",
          "text",
          "berechnung",
          "dokumentation",
          "beschreibung",
          "katalog",
          "beispiel"
        ],
        "properties": {
          "rechner": {
            "type": "object",
            "description": "Wer geantwortet hat.",
            "required": [
              "slug",
              "name",
              "beschreibung",
              "kategorie",
              "kategorieName",
              "seite",
              "markdown"
            ],
            "properties": {
              "slug": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "beschreibung": {
                "type": "string"
              },
              "kategorie": {
                "type": "string",
                "enum": [
                  "rechnen",
                  "finanzen",
                  "umrechnen",
                  "mathe",
                  "gesundheit",
                  "datum",
                  "text",
                  "entwickler",
                  "sicherheit",
                  "design",
                  "bild",
                  "alltag"
                ],
                "description": "Die Kennung der Kategorie, dieselbe wie im Pfad /kategorie/<id> und im Katalog. Zum Anzeigen ist „kategorieName“ daneben gedacht, zum Filtern diese hier."
              },
              "kategorieName": {
                "type": "string"
              },
              "seite": {
                "type": "string",
                "format": "uri",
                "description": "Der Rechner im Browser."
              },
              "markdown": {
                "type": "string",
                "format": "uri",
                "description": "Dieselbe Seite als Text."
              }
            }
          },
          "eingaben": {
            "type": "object",
            "description": "Womit wirklich gerechnet wurde – nach Standardwerten und nach Korrekturen.",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            }
          },
          "standardwerte": {
            "type": "object",
            "description": "Die Teilmenge davon, die nicht in der Anfrage stand, sondern aus dem Formular kam.",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            }
          },
          "parameter": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Ein Eingabefeld, so wie es im Formular steht – die Feldliste ist in jeder Antwort dabei und beschreibt denselben Rechner, den sie beantwortet hat.",
              "required": [
                "name",
                "label",
                "typ"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Der Query-Parameter."
                },
                "label": {
                  "type": "string",
                  "description": "Die Beschriftung auf der Seite."
                },
                "typ": {
                  "type": "string",
                  "enum": [
                    "checkbox",
                    "color",
                    "date",
                    "number",
                    "range",
                    "select",
                    "text",
                    "textarea"
                  ],
                  "description": "Die Art des Feldes im Formular – und damit, was als Wert hineingehört. „number“ und „range“ nehmen eine Zahl (bei „range“ innerhalb von „min“ und „max“, sonst wird sie gestutzt und das steht danach in „hinweise“), „checkbox“ ein Ja oder Nein, „date“ ein Datum als JJJJ-MM-TT, „color“ eine Farbe als #rrggbb, „select“ einen der Werte aus „werte“, „text“ und „textarea“ freien Text – der Unterschied zwischen den beiden ist nur die Größe des Feldes auf der Seite."
                },
                "werte": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Erlaubte Werte bei einer Auswahl."
                },
                "werteNamen": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Deren Beschriftungen, in derselben Reihenfolge – nur wo sie mehr sagen als der Wert."
                },
                "min": {
                  "type": "number"
                },
                "max": {
                  "type": "number"
                },
                "step": {
                  "type": "number",
                  "description": "Schrittweite des Formulars. Wird nicht erzwungen."
                },
                "standard": {
                  "type": [
                    "string",
                    "number",
                    "boolean"
                  ],
                  "description": "Womit gerechnet wird, wenn der Parameter fehlt."
                },
                "hinweis": {
                  "type": "string",
                  "description": "Der Hilfetext unter DIESEM FELD – er erklärt, was Name, Typ und Grenzen nicht hergeben. Er gehört zur Eingabe und sagt nichts über ein Ergebnis; das tun „hinweise“ (was die Schnittstelle an den Eingaben geändert hat) und die Blöcke mit art „note“ oder „warnung“ (was der Rechner zu seinem Ergebnis anmerkt)."
                }
              }
            },
            "description": "Alle Felder dieses Rechners mit erlaubten Werten und Grenzen. Damit lässt sich der nächste Aufruf bauen, ohne noch einmal nachzufragen."
          },
          "hinweise": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Was an den EINGABEN verändert wurde, etwa ein Schieberegler außerhalb seiner Grenzen. Leer heißt: nichts. Nicht zu verwechseln mit den Hinweisen des Rechners – die stehen als eigene Blöcke in „ergebnisse“ und tragen dort art „note“ oder „warnung“."
          },
          "ergebnis": {
            "type": "object",
            "description": "Der eine Block, der die Antwort trägt – die Zahl, die auf der Seite groß steht. Fehlt, wenn sich das Ergebnis nicht auf eine Zeile bringen lässt (eine Tabelle etwa).",
            "required": [
              "art",
              "wert"
            ],
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "text",
                  "code",
                  "html",
                  "color",
                  "image",
                  "file",
                  "note",
                  "warnung"
                ],
                "description": "Dieselben Arten wie in „ergebnisse“ – dort stehen sie erklärt."
              },
              "bezeichnung": {
                "type": "string",
                "description": "Die Beschriftung, falls der Block eine hat."
              },
              "wert": {
                "type": "string"
              }
            }
          },
          "ergebnisse": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Ein Stück des Ergebnisses, so wie es auf der Seite in einer eigenen Zeile stünde. „image“ und „file“ heißen: Das Eigentliche liegt zum Herunterladen auf der Seite, in der Antwort steht der Hinweis darauf.",
              "required": [
                "art",
                "wert"
              ],
              "properties": {
                "art": {
                  "type": "string",
                  "enum": [
                    "text",
                    "code",
                    "html",
                    "color",
                    "image",
                    "file",
                    "note",
                    "warnung"
                  ],
                  "description": "Was für ein Stück das ist: „text“ ein Wert, „code“ eine Zeichenkette zum Kopieren, „html“ eine Tabelle oder Liste, hier schon in Text aufgelöst, „color“ eine Farbe, „image“ und „file“ die Verweise auf das, was zum Herunterladen bereitliegt. „note“ und „warnung“ sind das, was der Rechner selbst dazu sagt – eine Einordnung des Ergebnisses, eine Warnung daneben. Sie sind nicht dasselbe wie „hinweise“ ganz oben: Dort steht, was die Schnittstelle an den EINGABEN geändert hat, hier, was der Rechner über sein ERGEBNIS anmerkt. (Und beides ist wieder etwas anderes als „hinweis“ an einem Feld in „parameter“ – das ist der Hilfetext des Formulars.) Wer die Blöcke zu einem Satz zusammenzieht, sollte „note“ und „warnung“ kenntlich machen; unter „text“ steht die Fassung, die das schon tut."
                },
                "bezeichnung": {
                  "type": "string",
                  "description": "Die Beschriftung, falls der Block eine hat."
                },
                "wert": {
                  "type": "string"
                }
              }
            }
          },
          "text": {
            "type": "string",
            "description": "Das ganze Ergebnis als Fließtext, zum Vorlesen oder Weiterreichen."
          },
          "berechnung": {
            "type": "object",
            "required": [
              "ort",
              "hinweis"
            ],
            "properties": {
              "ort": {
                "type": "string",
                "enum": [
                  "server"
                ],
                "description": "Wo gerechnet wurde. Auf diesem Weg immer „server“ – die Eingaben haben also das Gerät verlassen. Ein einziger erlaubter Wert, und trotzdem ein Feld: Derselbe Rechner läuft auf seiner Seite im Browser, und wer beide Wege benutzt, soll den Unterschied auslesen können und nicht aus einem Satz herauslesen müssen."
              },
              "hinweis": {
                "type": "string",
                "description": "Dass ein Server gerechnet hat und wo dieselbe Rechnung auf dem Gerät bleibt."
              }
            }
          },
          "dokumentation": {
            "type": "string",
            "format": "uri",
            "description": "Die Dokumentation für Menschen."
          },
          "beschreibung": {
            "type": "string",
            "format": "uri",
            "description": "Die OpenAPI-Beschreibung dieser Antworten."
          },
          "katalog": {
            "type": "string",
            "format": "uri",
            "description": "Alle Rechner."
          },
          "beispiel": {
            "type": "string",
            "format": "uri",
            "description": "Ein vollständiger Aufruf, der etwas liefert."
          }
        }
      },
      "Rechnerfehler": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Wegweiser"
          },
          {
            "type": "object",
            "description": "Fehlerantwort der Rechner-Endpunkte. Welche Felder dazukommen, hängt vom Code ab.",
            "required": [
              "fehler",
              "meldung"
            ],
            "properties": {
              "fehler": {
                "type": "string",
                "description": "Maschinenlesbarer Fehlercode.",
                "enum": [
                  "unbekannter_rechner",
                  "unbekannte_kategorie",
                  "unbekannter_parameter",
                  "ungueltiger_wert",
                  "eingabe_ungueltig",
                  "kein_ergebnis",
                  "rechenfehler",
                  "nur_im_browser",
                  "nur_auf_dem_geraet",
                  "kein_formular",
                  "datei_noetig",
                  "geheimes_feld",
                  "methode_nicht_erlaubt"
                ]
              },
              "meldung": {
                "type": "string",
                "description": "Erklärung im Klartext, oft mit der Seite, auf der es doch geht."
              },
              "rechner": {
                "$ref": "#/components/schemas/Rechnerkopf"
              },
              "parameter": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Parameterfeld"
                },
                "description": "Bei einem Eingabefehler: was der Rechner stattdessen erwartet."
              },
              "erlaubt": {
                "type": "array",
                "description": "Bei einem ungültigen Auswahlwert: die gültigen, mit ihren Namen.",
                "items": {
                  "type": "object",
                  "required": [
                    "wert",
                    "name"
                  ],
                  "properties": {
                    "wert": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                }
              },
              "aehnlich": {
                "type": "array",
                "description": "Bei einem unbekannten Slug: Rechner, die gemeint sein könnten.",
                "items": {
                  "type": "object",
                  "required": [
                    "slug",
                    "api"
                  ],
                  "properties": {
                    "slug": {
                      "type": "string"
                    },
                    "api": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              },
              "kategorien": {
                "type": "array",
                "description": "Bei einer unbekannten Kategorie: die gültigen.",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "name"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                }
              },
              "eingaben": {
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean"
                  ]
                },
                "description": "Womit gerechnet wurde, soweit es dazu kam."
              },
              "standardwerte": {
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean"
                  ]
                }
              },
              "hinweise": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      }
    }
  }
}