{
    "openapi": "3.0.3",
    "info": {
        "title": "Seitenreport API",
        "version": "1.0.0",
        "description": "Prepaid-API für öffentliche HTML-Seiten und eigene Suite-Projekte. x-credits gibt die Kosten in Credits pro erfolgreicher Operation an. Fachanalysen prüfen jeweils eine URL. Suite-Crawls nutzen das Kontingent des verknüpften Tarifs."
    },
    "servers": [
        {
            "url": "https://seitenreport.de/api/v1"
        }
    ],
    "security": [
        {
            "BearerAuth": []
        }
    ],
    "paths": {
        "/credits": {
            "get": {
                "operationId": "credits",
                "tags": [
                    "Guthaben"
                ],
                "summary": "Verfügbares Guthaben abrufen.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CreditsResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/credits/checkout": {
            "post": {
                "operationId": "topup",
                "tags": [
                    "Guthaben"
                ],
                "summary": "Stripe-Zahlungslink für das gewählte Nachladepaket erstellen. Ohne Paketauswahl werden 1.000 Credits gebucht.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TopupResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TopupInput"
                            }
                        }
                    }
                }
            }
        },
        "/audits": {
            "post": {
                "operationId": "analyze",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Bis zu 30 Dokument-Checks für eine öffentliche HTML-URL ausführen. Liefert Prüf-ID, Seitenmerkmale und Anzahl der Befunde.",
                "x-credits": 20,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AnalyzeResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            },
            "get": {
                "operationId": "audit_list",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Eigene URL-Audits und Einzelprüfungen mit ID und Prüfdatum auflisten.",
                "x-credits": 1,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuditListResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/audits/{id}": {
            "get": {
                "operationId": "audit",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Gespeichertes URL-Ergebnis mit HTTP-Status, Title, Canonical, Robots-Angaben, Überschriften und Linkzahlen abrufen.",
                "x-credits": 1,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuditResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    }
                ]
            }
        },
        "/audits/{id}/findings": {
            "get": {
                "operationId": "findings",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Fehler und Warnungen des URL-Audits mit Check-ID und Empfehlung abrufen.",
                "x-credits": 2,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FindingsResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    }
                ]
            }
        },
        "/checks": {
            "get": {
                "operationId": "check_catalog",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Prüfkatalog mit IDs, Kategorie und Kennzeichen für live ausführbare Einzelchecks durchblättern.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CheckCatalogResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    },
                    {
                        "name": "live",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ]
                        },
                        "description": "1 für direkt ausführbare Dokument-Checks, 0 für den gesamten Katalog."
                    }
                ]
            }
        },
        "/checks/{check}": {
            "get": {
                "operationId": "check_definition",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Bedeutung, Prüfumfang und Empfehlung einer Check-ID nachschlagen.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CheckDefinitionResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "check",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    }
                ]
            }
        },
        "/checks/{check}/execute": {
            "post": {
                "operationId": "execute_check",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Einen unterstützten Einzelcheck für eine öffentliche URL ausführen, z. B. M21 für den Title.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "check",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/audits/{id}/checks/{check}": {
            "get": {
                "operationId": "audit_check",
                "tags": [
                    "URL-Audits und Prüfkatalog"
                ],
                "summary": "Gespeichertes Einzelergebnis mit Status und Befund abrufen.",
                "x-credits": 1,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuditCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "check",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    }
                ]
            }
        },
        "/projects": {
            "get": {
                "operationId": "projects",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Eigene Projekte des verknüpften SEO-Suite-Kontos auflisten.",
                "x-credits": 1,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectsResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/projects/{id}/history": {
            "get": {
                "operationId": "history",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Lauf-ID, Prüfdatum, Website-Score und URL-Anzahl abgeschlossener Suite-Audits abrufen.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/HistoryResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/projects/{id}/audits": {
            "post": {
                "operationId": "project_crawl",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Website-Audit für ein bestätigtes eigenes Suite-Projekt anstoßen. Es gelten die Crawl-Kontingente des Suite-Tarifs.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectCrawlResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "example": {}
                            }
                        }
                    }
                }
            }
        },
        "/projects/{id}/jobs/{job}": {
            "get": {
                "operationId": "project_job",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Status des Crawl-Auftrags und die zugehörige Lauf-ID abrufen.",
                "x-credits": 0,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectJobResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "job",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    }
                ]
            }
        },
        "/projects/{id}/audits/{run}": {
            "get": {
                "operationId": "project_audit",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Website-Score, Kategorie-Bewertungen und Prüfumfang eines bestimmten abgeschlossenen Laufs lesen.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectAuditResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    }
                ]
            }
        },
        "/projects/{id}/audits/{run}/pages": {
            "get": {
                "operationId": "project_pages",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Untersuchte URLs mit finaler URL, HTTP-Status und Prüfzeit aus diesem Lauf abrufen.",
                "x-credits": 2,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectPagesResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/projects/{id}/audits/{run}/checks/{check}": {
            "get": {
                "operationId": "project_check",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Ergebnis eines bestimmten Checks im Website-Audit mit Statusverteilung und gespeicherten URL-Ergebnissen abrufen.",
                "x-credits": 2,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    },
                    {
                        "name": "check",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{1,128}$"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/projects/{id}/findings": {
            "get": {
                "operationId": "project_findings",
                "tags": [
                    "Suite-Projekte"
                ],
                "summary": "Gespeicherte Befunde mit betroffener URL aus dem jüngsten Projekt-Audit abrufen.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectFindingsResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{32}$"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 1000000,
                            "default": 0
                        },
                        "description": "Listen enthalten bis zu 50 Einträge."
                    }
                ]
            }
        },
        "/accessibility": {
            "post": {
                "operationId": "accessibility",
                "tags": [
                    "Fachanalysen"
                ],
                "summary": "Automatisch erkennbare Barrieren in HTML, Formularen und ARIA-Auszeichnungen prüfen.",
                "x-credits": 10,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ModuleResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/privacy": {
            "post": {
                "operationId": "dsgvo",
                "tags": [
                    "Fachanalysen"
                ],
                "summary": "Im HTML erkennbare Tracker, externe Einbindungen und Datenschutzhinweise prüfen.",
                "x-credits": 10,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ModuleResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/core-web-vitals": {
            "post": {
                "operationId": "core_web_vitals",
                "tags": [
                    "Fachanalysen"
                ],
                "summary": "Serverantwort und technische Risiken für LCP, INP und CLS anhand der HTML-Antwort prüfen.",
                "x-credits": 10,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ModuleResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/tools/http-status": {
            "post": {
                "operationId": "http_status",
                "tags": [
                    "Daten aus den SEO-Tools"
                ],
                "summary": "HTTP-Status, finale URL und Anzahl der Weiterleitungen für eine URL. Auch 404 und 500 sind gültige Messergebnisse.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/HttpStatusResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ToolUrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/tools/redirect-chain": {
            "post": {
                "operationId": "redirect_chain",
                "tags": [
                    "Daten aus den SEO-Tools"
                ],
                "summary": "Jeden Schritt mit HTTP-Status und Ziel abrufen. Schleifen und das Erreichen des Weiterleitungslimits werden ausgewiesen.",
                "x-credits": 5,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RedirectChainResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ToolUrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/tools/robots-txt": {
            "post": {
                "operationId": "robots_txt",
                "tags": [
                    "Daten aus den SEO-Tools"
                ],
                "summary": "Die robots.txt einer Website abrufen und HTTP-Status, Regeln je User-Agent, Sitemap-Verweise und Hinweise auslesen.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RobotsTxtResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ToolUrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/tools/ssl-certificate": {
            "post": {
                "operationId": "ssl_certificate",
                "tags": [
                    "Daten aus den SEO-Tools"
                ],
                "summary": "TLS-Zertifikat eines Hosts auf Port 443 prüfen. Liefert Gültigkeitsstatus, Aussteller, Ablaufdatum und Restlaufzeit in Tagen.",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SslCertificateResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ToolHostInput"
                            }
                        }
                    }
                }
            }
        },
        "/rankings/check": {
            "post": {
                "operationId": "ranking_check",
                "tags": [
                    "Rankings und Keywords"
                ],
                "summary": "Beste organische Position und Ziel-URL einer Domain für ein Keyword in den ersten 30 Ergebnissen von Google Deutschland (Desktop).",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RankingCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Tageslimit erreicht oder dieselbe Abfrage läuft.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "502": {
                        "description": "Anbieterabfrage ohne verwertbares Ergebnis. Keine Abbuchung. Für einen neuen Versuch einen neuen Schlüssel verwenden.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "Datenzugang nicht aktiviert oder nicht verfügbar.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "description": "Separat aktivierter Datenzugang. Eine erfolgreiche Prüfung ohne Treffer ist kostenpflichtig. Derselbe Idempotency-Key liefert für dieselbe Anfrage den gespeicherten Stand ohne weitere Credits. Tageslimits gelten für neue Abfragen.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RankingCheckInput"
                            }
                        }
                    }
                }
            }
        },
        "/domains/ranked-keywords": {
            "post": {
                "operationId": "ranked_keywords",
                "tags": [
                    "Rankings und Keywords"
                ],
                "summary": "Bis zu 100 organische Keywords einer Domain im deutschen Suchindex mit Position, Ziel-URL, Suchvolumen und Chancen auf den Positionen 11 bis 20.",
                "x-credits": 8,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RankedKeywordsResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Tageslimit erreicht oder dieselbe Abfrage läuft.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "502": {
                        "description": "Anbieterabfrage ohne verwertbares Ergebnis. Keine Abbuchung. Für einen neuen Versuch einen neuen Schlüssel verwenden.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "Datenzugang nicht aktiviert oder nicht verfügbar.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "description": "Separat aktivierter Datenzugang. Eine erfolgreiche Prüfung ohne Treffer ist kostenpflichtig. Derselbe Idempotency-Key liefert für dieselbe Anfrage den gespeicherten Stand ohne weitere Credits. Tageslimits gelten für neue Abfragen.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RankedKeywordsInput"
                            }
                        }
                    }
                }
            }
        },
        "/noindex": {
            "post": {
                "operationId": "C03",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Kein noindex gesetzt (C03)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/x-robots-noindex": {
            "post": {
                "operationId": "C26",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "X-Robots-Tag: kein noindex (C26)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/robots-index-conflict": {
            "post": {
                "operationId": "X102b",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Kein Robots-Konflikt (Meta vs Header) (X102b)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/canonical": {
            "post": {
                "operationId": "C05",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Canonical vorhanden (C05)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/canonical-count": {
            "post": {
                "operationId": "C25",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Genau ein Canonical Tag (C25)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/canonical-absolute": {
            "post": {
                "operationId": "M35",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Canonical ist absolut (M35)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/title": {
            "post": {
                "operationId": "M21",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Title Tag vorhanden (M21)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/title-length": {
            "post": {
                "operationId": "M22",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Title Länge (30–60) (M22)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/title-count": {
            "post": {
                "operationId": "M43",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Genau ein Title-Tag vorhanden (M43)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/meta-description": {
            "post": {
                "operationId": "M23",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Meta Description vorhanden (M23)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/meta-description-length": {
            "post": {
                "operationId": "M24",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Meta Description Länge (120–160) (M24)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/meta-description-count": {
            "post": {
                "operationId": "M44",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Maximal eine Meta Description (M44)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/h1": {
            "post": {
                "operationId": "H42",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Mindestens ein H1 (H42)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/h1-duplicates": {
            "post": {
                "operationId": "H41",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Maximal ein H1 (H41)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/heading-order": {
            "post": {
                "operationId": "H43",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "H2/H3 Struktur logisch (Outline) (H43)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/json-ld": {
            "post": {
                "operationId": "T92",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Structured Data (JSON-LD) vorhanden (T92)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/json-ld-syntax": {
            "post": {
                "operationId": "X114b",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "JSON-LD ist parsebar (X114b)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/json-ld-type": {
            "post": {
                "operationId": "X114c",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "JSON-LD enthält @type (X114c)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/html-lang": {
            "post": {
                "operationId": "M25",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "HTML lang gesetzt (M25)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/language-tag": {
            "post": {
                "operationId": "M41",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "HTML lang hat plausibles BCP-47-Format (M41)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/hreflang-duplicates": {
            "post": {
                "operationId": "T101",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "hreflang: keine doppelten Sprachcodes (T101)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/hreflang-absolute": {
            "post": {
                "operationId": "T102",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "hreflang: hrefs sind absolut (T102)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/open-graph": {
            "post": {
                "operationId": "M31",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Open Graph Basis-Tags vorhanden (M31)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/og-image-https": {
            "post": {
                "operationId": "M48",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "OG Image nutzt HTTPS (M48)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/image-alt": {
            "post": {
                "operationId": "L61",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Informative Bilder besitzen ein alt-Attribut (L61)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/charset": {
            "post": {
                "operationId": "M29",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Charset ist UTF-8 (M29)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/viewport": {
            "post": {
                "operationId": "T88",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Viewport Meta vorhanden (Mobile) (T88)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/viewport-width": {
            "post": {
                "operationId": "M45",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "Viewport nutzt width=device-width (M45)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/hsts": {
            "post": {
                "operationId": "T82",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "HSTS Header vorhanden (T82)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        },
        "/nosniff": {
            "post": {
                "operationId": "T114",
                "tags": [
                    "Einzelchecks"
                ],
                "summary": "X-Content-Type-Options ist nosniff (T114)",
                "x-credits": 3,
                "responses": {
                    "200": {
                        "description": "Erfolgreich",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ExecuteCheckResponse"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Fehler. 400 ungültige Anfrage, 401 API-Schlüssel, 402 Guthaben, 403 Berechtigung, 404 unbekannte Ressource, 409 Konflikt, 410 abgelaufene Details, 413 Anfrage zu groß, 415 Medientyp, 422 nicht prüfbar, 429 Abruflimit, 5xx Serverfehler.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_.:-]{8,100}$"
                        },
                        "description": "Pro neuer Anfrage eindeutig. Bei Wiederholung mit identischen Daten denselben Schlüssel verwenden."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UrlInput"
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer"
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "properties": {
                    "error": {
                        "type": "string"
                    }
                },
                "required": [
                    "error"
                ]
            },
            "TopupInput": {
                "type": "object",
                "properties": {
                    "credits": {
                        "type": "integer",
                        "enum": [
                            1000,
                            7500,
                            15000
                        ],
                        "default": 1000,
                        "description": "Gewünschtes Einmalpaket. Ohne Angabe gilt das kleinste Paket."
                    }
                }
            },
            "UrlInput": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 2048,
                        "example": "https://example.org/"
                    }
                },
                "required": [
                    "url"
                ]
            },
            "ToolUrlInput": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 2048,
                        "example": "https://example.org/produkt"
                    }
                },
                "required": [
                    "url"
                ],
                "additionalProperties": false
            },
            "ToolHostInput": {
                "type": "object",
                "properties": {
                    "host": {
                        "type": "string",
                        "example": "example.org",
                        "description": "Ein öffentlicher Host ohne Protokoll, Port oder Pfad."
                    }
                },
                "required": [
                    "host"
                ],
                "additionalProperties": false
            },
            "CheckResult": {
                "type": "object",
                "properties": {
                    "check_id": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    },
                    "title": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    },
                    "recommendation": {
                        "type": "string"
                    }
                },
                "required": [
                    "check_id",
                    "status",
                    "title",
                    "recommendation"
                ]
            },
            "AuditSummary": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "finding_count": {
                        "type": "integer"
                    },
                    "http_code": {
                        "type": "integer"
                    },
                    "content_type": {
                        "type": "string"
                    },
                    "module": {
                        "type": "string"
                    },
                    "score": {
                        "type": "integer"
                    },
                    "check_count": {
                        "type": "integer"
                    },
                    "ttfb_ms": {
                        "type": "integer"
                    },
                    "total_ms": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string",
                        "nullable": true
                    },
                    "meta_description": {
                        "type": "string",
                        "nullable": true
                    },
                    "meta_robots": {
                        "type": "string",
                        "nullable": true
                    },
                    "canonical": {
                        "type": "string",
                        "nullable": true
                    },
                    "lang": {
                        "type": "string",
                        "nullable": true
                    },
                    "h1_count": {
                        "type": "integer"
                    },
                    "img_count": {
                        "type": "integer"
                    },
                    "img_missing_alt": {
                        "type": "integer"
                    },
                    "a_internal": {
                        "type": "integer"
                    },
                    "a_external": {
                        "type": "integer"
                    }
                },
                "required": [
                    "url",
                    "finding_count"
                ]
            },
            "CheckDefinition": {
                "type": "object",
                "properties": {
                    "check_id": {
                        "type": "string"
                    },
                    "title": {
                        "type": "string"
                    },
                    "category": {
                        "type": "string"
                    },
                    "scope": {
                        "type": "string"
                    },
                    "mode": {
                        "type": "string"
                    },
                    "severity": {
                        "type": "string"
                    },
                    "recommendation": {
                        "type": "string"
                    },
                    "live": {
                        "type": "boolean"
                    },
                    "live_path": {
                        "type": "string",
                        "nullable": true
                    }
                },
                "required": [
                    "check_id",
                    "live"
                ]
            },
            "RankedKeywordsInput": {
                "type": "object",
                "properties": {
                    "domain": {
                        "type": "string",
                        "example": "example.org",
                        "description": "Domain oder Subdomain ohne Protokoll, Port oder Pfad."
                    }
                },
                "required": [
                    "domain"
                ],
                "additionalProperties": false
            },
            "RankingCheckInput": {
                "type": "object",
                "properties": {
                    "domain": {
                        "type": "string",
                        "example": "example.org",
                        "description": "Domain oder Subdomain ohne Protokoll, Port oder Pfad."
                    },
                    "keyword": {
                        "type": "string",
                        "maxLength": 150,
                        "example": "seo check",
                        "description": "Ein einfacher Suchbegriff ohne Suchoperatoren."
                    }
                },
                "required": [
                    "domain",
                    "keyword"
                ],
                "additionalProperties": false
            },
            "RankingCheckSummary": {
                "type": "object",
                "properties": {
                    "domain": {
                        "type": "string",
                        "example": "example.org",
                        "description": "Domain oder Subdomain ohne Protokoll, Port oder Pfad."
                    },
                    "market": {
                        "type": "string",
                        "enum": [
                            "DE"
                        ]
                    },
                    "language": {
                        "type": "string",
                        "enum": [
                            "de"
                        ]
                    },
                    "retrieved_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "keyword": {
                        "type": "string"
                    },
                    "device": {
                        "type": "string",
                        "enum": [
                            "desktop"
                        ]
                    },
                    "depth": {
                        "type": "integer",
                        "enum": [
                            30
                        ]
                    },
                    "source": {
                        "type": "string",
                        "enum": [
                            "live_serp"
                        ]
                    },
                    "found": {
                        "type": "boolean"
                    },
                    "position": {
                        "type": "integer",
                        "nullable": true,
                        "minimum": 1,
                        "maximum": 30
                    },
                    "ranking_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "measured_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    }
                },
                "required": [
                    "domain",
                    "market",
                    "language",
                    "retrieved_at",
                    "keyword",
                    "device",
                    "depth",
                    "source",
                    "found",
                    "position",
                    "ranking_url",
                    "measured_at"
                ]
            },
            "RankedKeywordsSummary": {
                "type": "object",
                "properties": {
                    "domain": {
                        "type": "string",
                        "example": "example.org",
                        "description": "Domain oder Subdomain ohne Protokoll, Port oder Pfad."
                    },
                    "market": {
                        "type": "string",
                        "enum": [
                            "DE"
                        ]
                    },
                    "language": {
                        "type": "string",
                        "enum": [
                            "de"
                        ]
                    },
                    "retrieved_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "source": {
                        "type": "string",
                        "enum": [
                            "keyword_database"
                        ]
                    },
                    "count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100
                    },
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "keyword": {
                                    "type": "string"
                                },
                                "position": {
                                    "type": "integer",
                                    "minimum": 1
                                },
                                "ranking_url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "search_volume": {
                                    "type": "integer",
                                    "nullable": true
                                },
                                "page_two_opportunity": {
                                    "type": "boolean"
                                },
                                "updated_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "nullable": true
                                }
                            },
                            "required": [
                                "keyword",
                                "position",
                                "ranking_url",
                                "search_volume",
                                "page_two_opportunity",
                                "updated_at"
                            ]
                        },
                        "maxItems": 100
                    }
                },
                "required": [
                    "domain",
                    "market",
                    "language",
                    "retrieved_at",
                    "source",
                    "count",
                    "items"
                ]
            },
            "HttpStatusSummary": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "tool": {
                        "type": "string",
                        "enum": [
                            "http-status"
                        ]
                    },
                    "http_status": {
                        "type": "integer",
                        "description": "Zuletzt gemessener HTTP-Status, auch 4xx und 5xx."
                    },
                    "final_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "redirect_count": {
                        "type": "integer",
                        "description": "Anzahl beobachteter Weiterleitungen einschließlich des Schrittes, der eine Schleife oder ein Limit erreicht."
                    },
                    "state": {
                        "type": "string",
                        "enum": [
                            "complete",
                            "missing_location",
                            "loop",
                            "limit"
                        ],
                        "description": "Bis zu acht Weiterleitungen werden verfolgt. Bei Schleife oder Limit ist final_url null."
                    }
                },
                "required": [
                    "url",
                    "tool",
                    "http_status",
                    "final_url",
                    "redirect_count",
                    "state"
                ]
            },
            "RedirectChainSummary": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "tool": {
                        "type": "string",
                        "enum": [
                            "redirect-chain"
                        ]
                    },
                    "http_status": {
                        "type": "integer",
                        "description": "Zuletzt gemessener HTTP-Status, auch 4xx und 5xx."
                    },
                    "final_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "redirect_count": {
                        "type": "integer",
                        "description": "Anzahl beobachteter Weiterleitungen einschließlich des Schrittes, der eine Schleife oder ein Limit erreicht."
                    },
                    "state": {
                        "type": "string",
                        "enum": [
                            "complete",
                            "missing_location",
                            "loop",
                            "limit"
                        ],
                        "description": "Bis zu acht Weiterleitungen werden verfolgt. Bei Schleife oder Limit ist final_url null."
                    },
                    "chain": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "http_status": {
                                    "type": "integer"
                                },
                                "target_url": {
                                    "type": "string",
                                    "format": "uri"
                                }
                            },
                            "required": [
                                "url",
                                "http_status",
                                "target_url"
                            ]
                        }
                    }
                },
                "required": [
                    "url",
                    "tool",
                    "http_status",
                    "final_url",
                    "redirect_count",
                    "state",
                    "chain"
                ]
            },
            "RobotsTxtSummary": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "tool": {
                        "type": "string",
                        "enum": [
                            "robots-txt"
                        ]
                    },
                    "http_status": {
                        "type": "integer",
                        "description": "Zuletzt gemessener HTTP-Status, auch 4xx und 5xx."
                    },
                    "final_url": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "groups": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "user_agents": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "allow": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "disallow": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "crawl_delay": {
                                    "type": "number",
                                    "nullable": true
                                },
                                "host": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "other": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "k": {
                                                "type": "string"
                                            },
                                            "v": {
                                                "type": "string"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "sitemaps": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "truncated": {
                        "type": "boolean"
                    },
                    "issues": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "kind": {
                                    "type": "string",
                                    "enum": [
                                        "info",
                                        "warn",
                                        "err"
                                    ]
                                },
                                "title": {
                                    "type": "string"
                                },
                                "text": {
                                    "type": "string"
                                }
                            },
                            "required": [
                                "kind",
                                "title",
                                "text"
                            ]
                        }
                    }
                },
                "required": [
                    "url",
                    "tool",
                    "http_status",
                    "final_url",
                    "groups",
                    "sitemaps",
                    "truncated",
                    "issues"
                ]
            },
            "SslCertificateSummary": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "tool": {
                        "type": "string",
                        "enum": [
                            "ssl-certificate"
                        ]
                    },
                    "host": {
                        "type": "string"
                    },
                    "tls_state": {
                        "type": "string",
                        "enum": [
                            "valid",
                            "invalid"
                        ]
                    },
                    "issuer": {
                        "type": "string",
                        "nullable": true
                    },
                    "valid_to": {
                        "type": "string",
                        "nullable": true,
                        "format": "date-time"
                    },
                    "days_remaining": {
                        "type": "integer",
                        "nullable": true
                    }
                },
                "required": [
                    "url",
                    "tool",
                    "host",
                    "tls_state",
                    "issuer",
                    "valid_to",
                    "days_remaining"
                ]
            },
            "CreditsResponse": {
                "type": "object",
                "properties": {
                    "balance": {
                        "type": "integer"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "balance",
                    "credits_charged"
                ]
            },
            "TopupResponse": {
                "type": "object",
                "properties": {
                    "checkout_url": {
                        "type": "string",
                        "format": "uri"
                    }
                },
                "required": [
                    "checkout_url"
                ]
            },
            "AnalyzeResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/AuditSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "AuditResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/AuditSummary"
                            },
                            {
                                "$ref": "#/components/schemas/HttpStatusSummary"
                            },
                            {
                                "$ref": "#/components/schemas/RedirectChainSummary"
                            },
                            {
                                "$ref": "#/components/schemas/RobotsTxtSummary"
                            },
                            {
                                "$ref": "#/components/schemas/SslCertificateSummary"
                            }
                        ]
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "FindingsResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "findings": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CheckResult"
                        }
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "findings",
                    "credits_charged"
                ]
            },
            "CheckCatalogResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CheckDefinition"
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "CheckDefinitionResponse": {
                "type": "object",
                "properties": {
                    "check": {
                        "$ref": "#/components/schemas/CheckDefinition"
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "check",
                    "credits_charged"
                ]
            },
            "ExecuteCheckResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/AuditSummary"
                    },
                    "check": {
                        "$ref": "#/components/schemas/CheckResult"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "check",
                    "credits_charged"
                ]
            },
            "AuditListResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string"
                                },
                                "input_url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "created_at": {
                                    "type": "string"
                                },
                                "check_id": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "module": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "tool": {
                                    "type": "string",
                                    "nullable": true
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "AuditCheckResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "check": {
                        "$ref": "#/components/schemas/CheckResult"
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "check",
                    "credits_charged"
                ]
            },
            "ProjectsResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string"
                                },
                                "name": {
                                    "type": "string"
                                },
                                "host": {
                                    "type": "string"
                                },
                                "verified_at": {
                                    "type": "string",
                                    "nullable": true
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "HistoryResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "run_id": {
                                    "type": "string"
                                },
                                "measured_at": {
                                    "type": "string"
                                },
                                "score": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "Dezimale Punktzahl als Datenbankwert."
                                },
                                "url_count": {
                                    "type": "integer"
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "ProjectCrawlResponse": {
                "type": "object",
                "properties": {
                    "job_id": {
                        "type": "string"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "job_id",
                    "credits_charged"
                ]
            },
            "ProjectJobResponse": {
                "type": "object",
                "properties": {
                    "job_id": {
                        "type": "string"
                    },
                    "state": {
                        "type": "string"
                    },
                    "run_id": {
                        "type": "string",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "job_id",
                    "state",
                    "run_id",
                    "credits_charged"
                ]
            },
            "ProjectAuditResponse": {
                "type": "object",
                "properties": {
                    "run_id": {
                        "type": "string"
                    },
                    "measured_at": {
                        "type": "string"
                    },
                    "score": {
                        "type": "string",
                        "nullable": true,
                        "description": "Dezimale Punktzahl als Datenbankwert."
                    },
                    "url_count": {
                        "type": "integer"
                    },
                    "details_available": {
                        "type": "boolean"
                    },
                    "categories": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "label": {
                                    "type": "string"
                                },
                                "score": {
                                    "type": "number",
                                    "nullable": true
                                },
                                "pass": {
                                    "type": "integer"
                                },
                                "warn": {
                                    "type": "integer"
                                },
                                "fail": {
                                    "type": "integer"
                                }
                            }
                        }
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "run_id",
                    "measured_at",
                    "score",
                    "url_count",
                    "details_available",
                    "categories",
                    "credits_charged"
                ]
            },
            "ProjectPagesResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "final_url": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "http_code": {
                                    "type": "integer",
                                    "nullable": true
                                },
                                "content_type": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "fetched_at": {
                                    "type": "string",
                                    "nullable": true
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "ProjectCheckResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "status": {
                                    "type": "string"
                                },
                                "message": {
                                    "type": "string",
                                    "nullable": true
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "check": {
                        "$ref": "#/components/schemas/CheckDefinition"
                    },
                    "counts": {
                        "type": "object",
                        "properties": {
                            "pass": {
                                "type": "integer"
                            },
                            "warn": {
                                "type": "integer"
                            },
                            "fail": {
                                "type": "integer"
                            },
                            "na": {
                                "type": "integer"
                            }
                        }
                    },
                    "example_urls": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "format": "uri"
                        }
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "check",
                    "counts",
                    "credits_charged"
                ]
            },
            "ProjectFindingsResponse": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "check_id": {
                                    "type": "string"
                                },
                                "url": {
                                    "type": "string",
                                    "format": "uri"
                                },
                                "status": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "next_offset": {
                        "type": "integer",
                        "nullable": true
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "balance": {
                        "type": "integer"
                    }
                },
                "required": [
                    "items",
                    "next_offset",
                    "credits_charged"
                ]
            },
            "ModuleResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/AuditSummary"
                    },
                    "checks": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CheckResult"
                        }
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "checks",
                    "credits_charged"
                ]
            },
            "HttpStatusResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/HttpStatusSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "RedirectChainResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/RedirectChainSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "RobotsTxtResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/RobotsTxtSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "SslCertificateResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/SslCertificateSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "RankingCheckResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/RankingCheckSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            },
            "RankedKeywordsResponse": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "summary": {
                        "$ref": "#/components/schemas/RankedKeywordsSummary"
                    },
                    "credits_charged": {
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "summary",
                    "credits_charged"
                ]
            }
        }
    }
}
