{
  "openapi": "3.1.0",
  "info": {
    "title": "MSP-Guiden, öppna data",
    "version": "1",
    "description": "MSP-Guiden jämför svenska IT-partner som sköter drift, support och säkerhet åt företag. Varje uppgift är läst på bolagets egen sajt, med källa och datum, och ingen kan köpa en plats. Varje uppgift har källa och datum. Null betyder att uppgiften inte är belagd, aldrig nej."
  },
  "servers": [
    {
      "url": "https://mspguiden.se/api/v1"
    }
  ],
  "paths": {
    "/kategorier": {
      "get": {
        "summary": "Alla kategorier med antal IT-partner.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/system": {
      "get": {
        "summary": "Alla IT-partner, eller de i en kategori. Vägen heter system av historiska skäl.",
        "parameters": [
          {
            "name": "kategori",
            "in": "query",
            "required": false,
            "description": "Kategorins slug, till exempel it-drift.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/system/{slug}": {
      "get": {
        "summary": "En IT-partner med varje uppgift, datum för kontrollen och adressen till källan.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/jamfor": {
      "get": {
        "summary": "Två eller flera IT-partner mot varandra, kriterium för kriterium. En lucka är null, aldrig ett nej.",
        "parameters": [
          {
            "name": "system",
            "in": "query",
            "required": true,
            "description": "Bolagens slug med komma emellan.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/kriterier": {
      "get": {
        "summary": "Frågorna varje IT-partner prövas mot.",
        "parameters": [
          {
            "name": "kategori",
            "in": "query",
            "required": false,
            "description": "Kategorins slug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/topplistor": {
      "get": {
        "summary": "Topplistorna med kraven de räknas på.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/topplistor/{slug}": {
      "get": {
        "summary": "En topplista med varje bolags plats, vilka krav det uppfyller, hur många uppgifter som har källa och vad som skulle flytta upp det.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/fragor": {
      "get": {
        "summary": "Frågor som köpare ställer, med svar räknade ur uppgifterna. Varje fråga har ett fast id.",
        "parameters": [
          {
            "name": "kategori",
            "in": "query",
            "required": false,
            "description": "Kategorins slug.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "system",
            "in": "query",
            "required": false,
            "description": "Ett bolags slug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/artiklar": {
      "get": {
        "summary": "Notiser och förklaringar med sina källor.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/andringar": {
      "get": {
        "summary": "De senast uppdaterade uppgifterna: vad som står nu och när det skrevs in. Ett byte kan vara vår egen rättning, så det gamla värdet lämnas inte ut.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Finns inte"
          }
        }
      }
    },
    "/komplettering": {
      "post": {
        "summary": "Lämna en rättelse eller komplettering om en IT-partner åt en människa. Den hamnar i redaktionens kö och publiceras aldrig direkt.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "system",
                  "uppgift",
                  "namn",
                  "epost"
                ],
                "properties": {
                  "system": {
                    "type": "string",
                    "description": "Bolagets adressnamn (slug), som i /system."
                  },
                  "uppgift": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 600,
                    "description": "Vad som är fel eller saknas, med rätt uppgift."
                  },
                  "sida": {
                    "type": "string",
                    "description": "Sidan där uppgiften står, helst på bolagets egen sajt."
                  },
                  "kriterium": {
                    "type": "string",
                    "description": "Kriteriets nyckel, från /kriterier."
                  },
                  "typ": {
                    "type": "string",
                    "enum": [
                      "rattelse",
                      "komplettering"
                    ]
                  },
                  "namn": {
                    "type": "string",
                    "description": "Personen agenten skickar för."
                  },
                  "epost": {
                    "type": "string",
                    "description": "Personens e-post."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Mottagen"
          },
          "400": {
            "description": "Fält saknas, med en lista över vilka"
          }
        }
      }
    }
  }
}