{
    "openapi": "3.0.3",
    "info": {
        "title": "SlimHuys Public API",
        "description": "Read-only endpoints voor EPEX-tarieven en NL-leveranciers. Vrij te gebruiken voor HACS-integraties, dashboards en third-party tools \u2014 geen auth nodig. Productie: https://slimhuys.nl/v1\n\nRate-limit: ~120 req/min/IP via Caddy. Cache responses minimaal 5 min \u2014 tarieven vernieuwen elke 15 min via ENTSO-E.",
        "version": "1.0.0",
        "contact": {
            "url": "https://slimhuys.nl/contact"
        },
        "license": {
            "name": "Tariff-data CC-BY-NC-SA",
            "url": "https://github.com/SlimHuys/dynamic-tariffs-nl"
        }
    },
    "servers": [
        {
            "url": "https://slimhuys.nl/v1",
            "description": "Productie"
        }
    ],
    "paths": {
        "/admin/blog": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "indexBlogAdmin",
                "summary": "Get /admin/blog",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "storeBlogAdmin",
                "summary": "Create or invoke /admin/blog",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/blog/{id}": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "showBlogAdmin",
                "summary": "Get /admin/blog/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "admin"
                ],
                "operationId": "updateBlogAdmin",
                "summary": "Update /admin/blog/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "admin"
                ],
                "operationId": "destroyBlogAdmin",
                "summary": "Delete /admin/blog/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/bridges": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "bridgesAdmin",
                "summary": "Lijst van P1-bridges met de meest recente diagnostic-rij per bridge.",
                "security": [
                    {
                        "apiKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/admin/crons": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "cronsAdmin",
                "summary": "Heartbeat-status van scheduled commands.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/end-impersonation": {
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "endImpersonationAdmin",
                "summary": "Stap terug naar de oorspronkelijke admin-session.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/errors": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "errorsAdmin",
                "summary": "Lijst van errors gegroepeerd op fingerprint.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/errors/{id}/resolve": {
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "resolveErrorAdmin",
                "summary": "Create or invoke /admin/errors/{id}/resolve",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/faq": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "indexFaqAdmin",
                "summary": "Get /admin/faq",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "storeFaqAdmin",
                "summary": "Create or invoke /admin/faq",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/faq/{id}": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "showFaqAdmin",
                "summary": "Get /admin/faq/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "admin"
                ],
                "operationId": "updateFaqAdmin",
                "summary": "Update /admin/faq/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "admin"
                ],
                "operationId": "destroyFaqAdmin",
                "summary": "Delete /admin/faq/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/glossary": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "indexGlossaryAdmin",
                "summary": "Get /admin/glossary",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "storeGlossaryAdmin",
                "summary": "Create or invoke /admin/glossary",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/glossary/{id}": {
            "patch": {
                "tags": [
                    "admin"
                ],
                "operationId": "updateGlossaryAdmin",
                "summary": "Update /admin/glossary/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "admin"
                ],
                "operationId": "destroyGlossaryAdmin",
                "summary": "Delete /admin/glossary/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/impersonate/{userId}": {
            "post": {
                "tags": [
                    "admin"
                ],
                "operationId": "impersonateAdmin",
                "summary": "Login als een andere user \u2014 bewaart admin-id in session zodat we terug kunnen.",
                "parameters": [
                    {
                        "name": "userId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/integrations": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "integrationsAdmin",
                "summary": "Per-provider overzicht: count, gefaald, laatste sync, last_error.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/stats": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "statsAdmin",
                "summary": "Hoofdcijfers voor het admin-overzicht.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/users": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "usersAdmin",
                "summary": "Lijst van gebruikers met basisinfo + koppeling-tellers.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/admin/users/{userId}/data-flow": {
            "get": {
                "tags": [
                    "admin"
                ],
                "operationId": "userDataFlowAdmin",
                "summary": "Per-user data-flow: hoeveel P1- en PV-kwartieren per dag",
                "parameters": [
                    {
                        "name": "userId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/auth/forgot-password": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "forgotPasswordReset",
                "summary": "Create or invoke /auth/forgot-password",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/login": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "loginAuth",
                "summary": "Create or invoke /auth/login",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/login/mfa": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "verifyMfaLoginAuth",
                "summary": "Create or invoke /auth/login/mfa",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/logout": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "logoutAuth",
                "summary": "Create or invoke /auth/logout",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/magic-link/request": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "requestMagicLink",
                "summary": "Create or invoke /auth/magic-link/request",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/resend-verification": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "resendVerificationAuth",
                "summary": "Stuur opnieuw een verificatie-link naar het opgegeven email-adres.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/reset-password": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "resetPasswordReset",
                "summary": "Create or invoke /auth/reset-password",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/auth/signup": {
            "post": {
                "tags": [
                    "auth"
                ],
                "operationId": "signupAuth",
                "summary": "Create or invoke /auth/signup",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/bridges/claim": {
            "post": {
                "tags": [
                    "bridges"
                ],
                "operationId": "claimBridgePairing",
                "summary": "Wissel een pairing-code in voor de bijbehorende api-key.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/config/realtime": {
            "get": {
                "tags": [
                    "misc"
                ],
                "operationId": "get_closure",
                "summary": "Get /config/realtime",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/firmware/manifest": {
            "get": {
                "tags": [
                    "firmware"
                ],
                "operationId": "manifestFirmware",
                "summary": "Get /firmware/manifest",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/glossary": {
            "get": {
                "summary": "Energie-termen woordenboek",
                "description": "Tooltip-data voor termen die in artikelen voorkomen (EPEX, salderingsregeling, P1-meter, etc.). 5min server-cache.",
                "responses": {
                    "200": {
                        "description": "Glossary-terms (lookup-shape: term \u2192 definitie+aliases)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "terms": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/invites/{token}": {
            "get": {
                "tags": [
                    "invites"
                ],
                "operationId": "showHouseholdInvites",
                "summary": "Preview-info voor een invite-token (geen auth nodig).",
                "parameters": [
                    {
                        "name": "token",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/invites/{token}/accept": {
            "post": {
                "tags": [
                    "invites"
                ],
                "operationId": "acceptHouseholdInvites",
                "summary": "Accept-flow vanaf de mail-link: token-hash-match + e-mail-match.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "showMe",
                "summary": "Get /me",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateMe",
                "summary": "Update /me",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/account": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyDataPrivacy",
                "summary": "Delete /me/account",
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/auto-fill": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "autoFillMe",
                "summary": "Detecteer woning- en meter-velden uit gekoppelde diensten en vul lege",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexBridgePairing",
                "summary": "Lijst van gekoppelde SlimHuys-P1-bridges.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/diagnostics": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "pushDiagnosticsBridgePairing",
                "summary": "Bridge-side: push diagnostic-snapshot (~1\u00d7/u).",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/leak": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "pushLeakBridgePairing",
                "summary": "Bridge-side: push hardware-leak-sensor-event.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/management": {
            "put": {
                "tags": [
                    "me"
                ],
                "operationId": "putManagementBridgePairing",
                "summary": "Bridge-side: upload host + management-creds onder de Bearer-key.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/pair-codes": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "createBridgePairing",
                "summary": "Maak een nieuwe pairing-code aan voor de huidige user.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/pair-codes/{code}": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "statusBridgePairing",
                "summary": "Pollt of een specifieke code al geclaimd is.",
                "parameters": [
                    {
                        "name": "code",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/{apiKeyId}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyBridgePairing",
                "summary": "Loskoppel \u2014 soft-delete (revoke) van de api_key.",
                "parameters": [
                    {
                        "name": "apiKeyId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/bridges/{apiKeyId}/management": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "showManagementBridgePairing",
                "summary": "SPA-side: reveal management-creds voor een specifieke bridge.",
                "parameters": [
                    {
                        "name": "apiKeyId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/change-email": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "changeEmailMe",
                "summary": "Create or invoke /me/change-email",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/change-password": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "changePasswordMe",
                "summary": "Create or invoke /me/change-password",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/client-error": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "clientErrorMe",
                "summary": "Frontend stuurt JS-errors naar dit endpoint zodat ze in de centrale",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/data-export": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "exportDataPrivacy",
                "summary": "Get /me/data-export",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/data-summary": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "summaryDataPrivacy",
                "summary": "Get /me/data-summary",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/device-tokens": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexDeviceTokens",
                "summary": "Get /me/device-tokens",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeDeviceTokens",
                "summary": "Create or invoke /me/device-tokens",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/device-tokens/{id}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyDeviceTokens",
                "summary": "Delete /me/device-tokens/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/device-tokens/{id}/test": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "testDeviceTokens",
                "summary": "Stuur een test-push naar 1 specifiek device.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/devices": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexDevices",
                "summary": "Geeft alle apparaten van de huidige user met latest-known state +",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/devices/{provider}/{deviceId}/actions/{actionId}": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "executeActionDevices",
                "summary": "Voert een actie uit op een gekoppeld apparaat.",
                "parameters": [
                    {
                        "name": "provider",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deviceId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "actionId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexHouseholds",
                "summary": "Lijst alle huizen waar de huidige user lid van is, met rol per huis.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeHouseholds",
                "summary": "Maak een nieuw huis aan; aanmaker wordt automatisch owner.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateHouseholds",
                "summary": "Update huis-velden (naam, adres, woning-info, contract, gas).",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyHouseholds",
                "summary": "Verwijder een huis (cascadeert naar alle huis-data: meters, readings,",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}/invites": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexHouseholdInvites",
                "summary": "Lijst pending invites voor een huis.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeHouseholdInvites",
                "summary": "Verstuur een invite.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}/invites/{inviteId}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyHouseholdInvites",
                "summary": "Trek een pending invite in.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "inviteId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}/members": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "membersHouseholds",
                "summary": "Lijst leden van een huis.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}/members/{userId}": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateMemberRoleHouseholds",
                "summary": "Wijzig de rol van een lid (owner \u2194 member \u2194 viewer).",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "userId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "removeMemberHouseholds",
                "summary": "Verwijder een lid uit een huis.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "userId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/households/{id}/switch": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "switchHouseholds",
                "summary": "Wissel het actieve huis.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexIntegrations",
                "summary": "Get /me/integrations",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations/manifests": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "manifestsIntegrations",
                "summary": "Publiceert manifests zodat de SPA per provider weet welke velden +",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations/zonneplan/finalize": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "zonneplanFinalizeIntegrations",
                "summary": "Stap 2: nadat de user op de magic-link in z'n mail klikte, vraagt",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations/zonneplan/request": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "zonneplanRequestIntegrations",
                "summary": "Stap 1 van Zonneplan-koppeling: user voert e-mail in, wij vragen",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations/{provider}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "disconnectIntegrations",
                "summary": "Delete /me/integrations/{provider}",
                "parameters": [
                    {
                        "name": "provider",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/integrations/{provider}/connect": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "connectIntegrations",
                "summary": "Generieke connect-endpoint voor alle simple-flow-providers (token,",
                "parameters": [
                    {
                        "name": "provider",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/invites": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "mineHouseholdInvites",
                "summary": "Lijst pending invites voor de huidige user (op basis van email).",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/invites/{id}/accept": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "acceptMineHouseholdInvites",
                "summary": "In-app accept: ingelogde user accepteert via invite-id (uit /me/invites).",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/keys": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexApiKeys",
                "summary": "Get /me/keys",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "createApiKeys",
                "summary": "Create or invoke /me/keys",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/keys/{id}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "revokeApiKeys",
                "summary": "Delete /me/keys/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/keys/{id}/permanent": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyApiKeys",
                "summary": "Hard-delete van een al-ingetrokken key.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/login-history": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "loginHistoryMe",
                "summary": "Inlog-historie \u2014 laatste login-attempts (succes + faal + magic-link)",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/meter": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateMeterMe",
                "summary": "Update meter-details (merk, netbeheerder, P1-module, EAN's, aansluiting).",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/mfa/disable": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "disableMfa",
                "summary": "Create or invoke /me/mfa/disable",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/mfa/enable": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "enableMfa",
                "summary": "Create or invoke /me/mfa/enable",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/mfa/setup": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "setupMfa",
                "summary": "Create or invoke /me/mfa/setup",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/notification-tasks": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "indexNotificationTasks",
                "summary": "Get /me/notification-tasks",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeNotificationTasks",
                "summary": "Create or invoke /me/notification-tasks",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/notification-tasks/{id}": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateNotificationTasks",
                "summary": "Update /me/notification-tasks/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "destroyNotificationTasks",
                "summary": "Delete /me/notification-tasks/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/onboarding": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "saveOnboarding",
                "summary": "Slaat \u00e9\u00e9n of meerdere velden op uit de huidige stap.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/onboarding/complete": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "completeOnboarding",
                "summary": "Markeer onboarding als voltooid \u2014 gate die bepaalt of de wizard nog",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/onboarding/skip": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "skipOnboarding",
                "summary": "Skip \u2014 onboarding wegklikken zonder te voltooien.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/readings": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeReadings",
                "summary": "Create or invoke /me/readings",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/sessions": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "sessionsMe",
                "summary": "Get /me/sessions",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/sessions/{id}": {
            "delete": {
                "tags": [
                    "me"
                ],
                "operationId": "revokeSessionMe",
                "summary": "Delete /me/sessions/{id}",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/solar-stations": {
            "patch": {
                "tags": [
                    "me"
                ],
                "operationId": "updateSolarStationMe",
                "summary": "Upsert per-station extras (panelen, ori\u00ebntatie, hellingshoek, inverter,",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/compare": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "compareUsage",
                "summary": "Vergelijk wat dezelfde gebruiker-data in een periode zou kosten bij",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/current": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "currentUsage",
                "summary": "Live snapshot: laatste raw-reading + delta sinds vorige + vandaag-totaal.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/forecast": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "forecastUsage",
                "summary": "Solar-forecast \u2014 verwachte PV-productie per uur voor de komende",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/live-events": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "liveEventsUsage",
                "summary": "Server-Sent Events stream \u2014 voor HA pull-mode + (toekomstige) SPA",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/live-stream": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "liveStreamUsage",
                "summary": "Live power-stroom \u2014 laatste N minuten raw P1-readings als sparkline-data.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/range": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "rangeUsage",
                "summary": "Historische kwartier-aggregaten met optionele uur/dag/maand-rollup.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/solar-yearly": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "solarYearlyUsage",
                "summary": "12-maanden zonnepanelen-productie totaal voor de huidige user, in",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/water/current": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "currentWaterUsage",
                "summary": "Get /me/usage/water/current",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/usage/water/range": {
            "get": {
                "tags": [
                    "me"
                ],
                "operationId": "rangeWaterUsage",
                "summary": "Get /me/usage/water/range",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/me/water-readings": {
            "post": {
                "tags": [
                    "me"
                ],
                "operationId": "storeWaterReadings",
                "summary": "Create or invoke /me/water-readings",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                },
                "security": [
                    {
                        "apiKey": []
                    }
                ]
            }
        },
        "/prices/current": {
            "get": {
                "summary": "Huidige all-in stroomprijs voor een leverancier",
                "description": "Returnt de actuele all-in prijs (EPEX + opslag + energiebelasting + 21% btw) voor het lopende kwartier of uur (afhankelijk van supplier.billing_resolution_minutes). Plus comparison met dag-gemiddelde voor 'level'-tag (very_low/low/medium/high/peak).",
                "parameters": [
                    {
                        "name": "supplier",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": "frank-energie"
                        },
                        "description": "Slug uit /v1/suppliers."
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Huidige prijs gevonden",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CurrentPrice"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "503": {
                        "description": "ENTSO-E heeft nog geen data voor het opgevraagde moment (typisch voor morgen v\u00f3\u00f3r 14:00 NL).",
                        "content": {
                            "application/problem+json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Problem"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/prices/heatmap": {
            "get": {
                "tags": [
                    "prices"
                ],
                "operationId": "heatmapPrices",
                "summary": "Heatmap-data voor de homepage.",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/prices/range": {
            "get": {
                "summary": "Tarieven over een tijdsvenster",
                "description": "Aggregeert kwartier-EPEX-data tot leverancier-resolutie (15 of 60 min). Returnt 1 punt per resolutie-bucket met breakdown (epex/opslag/belasting/btw) en relative level.",
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "ISO-8601 begin (NL-tijd of UTC-suffix)."
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "ISO-8601 einde (exclusief)."
                    },
                    {
                        "name": "supplier",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": "frank-energie"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tarieven over het venster",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PriceRange"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        },
        "/suppliers": {
            "get": {
                "summary": "Lijst van actieve dynamische leveranciers",
                "description": "13+ NL-leveranciers met hun opslag, maandfee, billing-resolutie en feedin-tarieven. Elke 1 uur server-side gecached; client-side mag je 1 dag cachen.",
                "responses": {
                    "200": {
                        "description": "Suppliers-lijst",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SupplierList"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/water-companies": {
            "get": {
                "tags": [
                    "public"
                ],
                "operationId": "indexWaterCompanies",
                "summary": "Get /water-companies",
                "responses": {
                    "200": {
                        "description": "Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Validation"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "CurrentPrice": {
                "type": "object",
                "required": [
                    "now",
                    "comparison"
                ],
                "properties": {
                    "now": {
                        "type": "object",
                        "properties": {
                            "timestamp": {
                                "type": "string",
                                "format": "date-time"
                            },
                            "valid_until": {
                                "type": "string",
                                "format": "date-time"
                            },
                            "resolution_minutes": {
                                "type": "integer",
                                "enum": [
                                    15,
                                    60
                                ]
                            },
                            "level": {
                                "type": "string",
                                "enum": [
                                    "very_low",
                                    "low",
                                    "medium",
                                    "high",
                                    "peak"
                                ]
                            },
                            "breakdown": {
                                "$ref": "#/components/schemas/PriceBreakdown"
                            }
                        }
                    },
                    "comparison": {
                        "type": "object",
                        "properties": {
                            "day_avg_eur": {
                                "type": "number"
                            },
                            "vs_day_avg_pct": {
                                "type": "number"
                            }
                        }
                    }
                }
            },
            "PriceRange": {
                "type": "object",
                "properties": {
                    "from": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "to": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "supplier": {
                        "type": "string"
                    },
                    "resolution_minutes": {
                        "type": "integer",
                        "enum": [
                            15,
                            60
                        ]
                    },
                    "points": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "timestamp": {
                                    "type": "string",
                                    "format": "date-time"
                                },
                                "valid_until": {
                                    "type": "string",
                                    "format": "date-time"
                                },
                                "resolution_minutes": {
                                    "type": "integer"
                                },
                                "level": {
                                    "type": "string",
                                    "nullable": true
                                },
                                "breakdown": {
                                    "$ref": "#/components/schemas/PriceBreakdown"
                                }
                            }
                        }
                    }
                }
            },
            "PriceBreakdown": {
                "type": "object",
                "properties": {
                    "epex_eur_per_kwh": {
                        "type": "number",
                        "description": "Wholesale EPEX-prijs (kan negatief)."
                    },
                    "supplier_markup_eur": {
                        "type": "number",
                        "description": "Inkoopvergoeding leverancier."
                    },
                    "energy_tax_eur": {
                        "type": "number",
                        "description": "NL-energiebelasting."
                    },
                    "vat_eur": {
                        "type": "number",
                        "description": "21% btw over (epex + markup + belasting)."
                    },
                    "total_eur_per_kwh": {
                        "type": "number",
                        "description": "All-in prijs voor de eindgebruiker."
                    }
                }
            },
            "SupplierList": {
                "type": "object",
                "properties": {
                    "suppliers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Supplier"
                        }
                    }
                }
            },
            "Supplier": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "Slug (kleine letters + dashes)."
                    },
                    "name": {
                        "type": "string"
                    },
                    "logo_text": {
                        "type": "string",
                        "nullable": true
                    },
                    "logo_color": {
                        "type": "string",
                        "nullable": true
                    },
                    "markup_eur_per_kwh": {
                        "type": "number"
                    },
                    "monthly_fee_eur": {
                        "type": "number",
                        "nullable": true
                    },
                    "billing_resolution_minutes": {
                        "type": "integer",
                        "enum": [
                            15,
                            60
                        ]
                    },
                    "official_api": {
                        "type": "boolean",
                        "description": "true als leverancier een offici\u00eble klant-API heeft (Tibber, Frank). false = community-reverse-engineered."
                    },
                    "feedin_markup_eur_per_kwh": {
                        "type": "number"
                    },
                    "feedin_bonus_pct": {
                        "type": "number"
                    },
                    "feedin_bonus_daytime_only": {
                        "type": "boolean"
                    },
                    "feedin_bonus_annual_cap_kwh": {
                        "type": "integer",
                        "nullable": true
                    }
                }
            },
            "Problem": {
                "description": "RFC 7807 problem+json shape.",
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string",
                        "format": "uri"
                    },
                    "title": {
                        "type": "string"
                    },
                    "status": {
                        "type": "integer"
                    },
                    "detail": {
                        "type": "string"
                    },
                    "instance": {
                        "type": "string",
                        "format": "uri"
                    }
                }
            }
        },
        "responses": {
            "NotFound": {
                "description": "Resource niet gevonden (bv. onbekende supplier-slug).",
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            },
            "Validation": {
                "description": "Request-validatie faalde (Laravel-default 422-shape).",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string"
                                },
                                "errors": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "Unauthorized": {
                "description": "Niet ingelogd of sessie verlopen.",
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            },
            "Forbidden": {
                "description": "Onvoldoende rechten voor deze actie.",
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            }
        },
        "securitySchemes": {
            "sessionAuth": {
                "type": "apiKey",
                "in": "cookie",
                "name": "slimhuys_session"
            },
            "apiKey": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "slh_<hex>"
            }
        }
    }
}
