{
    "openapi": "3.1.0",
    "info": {
        "title": "MiniPol math server",
        "version": "1.0.0",
        "description": "Rekent de groepsanalyse (PCA + K-means) van een gesprek uit de standaardexport van een MiniPol API (`GET /export` daar). De math server heeft zelf geen data; hij haalt alleen exports op bij de API's in zijn config.\n\nFouten komen terug als `{ \"error\": \"...\" }` met een passende statuscode. Zie docs/analyse.md voor hoe de analyse werkt."
    },
    "servers": [
        {
            "url": "https://math.minipol.nl"
        }
    ],
    "security": [
        []
    ],
    "paths": {
        "/analyse": {
            "get": {
                "summary": "De groepsanalyse van een gesprek",
                "description": "Het model is hooguit 6 uur oud; de deelnemers worden er bij elk verzoek live mee geplaatst. Het model zit in het antwoord, zodat een browser ook de eigen gebruiker kan plaatsen.",
                "operationId": "getAnalyse",
                "parameters": [
                    {
                        "name": "api",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uri"
                        },
                        "description": "De url van de API waar het gesprek staat, bijvoorbeeld `http://localhost:8001`; moet in de config van de math server staan"
                    },
                    {
                        "name": "gesprek_id",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "herbereken",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "1"
                            ]
                        },
                        "description": "Het model nu opnieuw berekenen, als het minstens 5 minuten oud is"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "De analyse",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Analyse"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/Fout"
                    },
                    "403": {
                        "description": "Deze API staat niet in de config",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Fout"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Gesprek niet gevonden",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Fout"
                                }
                            }
                        }
                    },
                    "502": {
                        "description": "De export kon niet worden opgehaald of is niet in het standaardformaat",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Fout"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/docs": {
            "get": {
                "summary": "Deze documentatie, in Swagger UI",
                "operationId": "getDocs",
                "responses": {
                    "302": {
                        "description": "Naar de viewer",
                        "headers": {
                            "Location": {
                                "schema": {
                                    "type": "string",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                },
                "description": "Stuurt door naar Swagger UI op petstore.swagger.io, met de url van `/docs/openapi.json` als `?url=`. Deze server heeft zelf geen viewer."
            }
        },
        "/docs/openapi.json": {
            "get": {
                "summary": "De OpenAPI-spec van de math server",
                "operationId": "getOpenapi",
                "responses": {
                    "200": {
                        "description": "OpenAPI 3.1",
                        "content": {
                            "application/json": []
                        }
                    }
                },
                "description": "Iedereen mag hem lezen, ook vanaf andere sites (CORS `*`)."
            }
        },
        "/docs/schema.json": {
            "get": {
                "summary": "De typen van de math server als JSON Schema",
                "operationId": "getSchema",
                "description": "Dezelfde typen als in deze spec, in een los JSON Schema-bestand (2020-12), om zelf te gebruiken. `$id` is de url van het bestand. Iedereen mag hem lezen, ook vanaf andere sites (CORS `*`).",
                "responses": {
                    "200": {
                        "description": "JSON Schema",
                        "content": {
                            "application/json": []
                        }
                    }
                }
            }
        }
    },
    "components": {
        "responses": {
            "Fout": {
                "description": "Ongeldig verzoek",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Fout"
                        }
                    }
                }
            }
        },
        "schemas": {
            "Fout": {
                "$ref": "schema.json#/$defs/Fout"
            },
            "Analyse": {
                "$ref": "schema.json#/$defs/Analyse"
            },
            "Model": {
                "$ref": "schema.json#/$defs/Model"
            },
            "Telling": {
                "$ref": "schema.json#/$defs/Telling"
            }
        }
    }
}