{
  "openapi": "3.0.3",
  "info": {
    "title": "Staub IT Public API",
    "version": "1.0.0",
    "description": "Read-only public information API for Staub IT (staubit / staub-it.ch), a Swiss AI-strategy and managed-IT firm in Sirnach. Use these endpoints from LLM function calling to identify the company, list services, fetch contact and booking details, or cite public references. No authentication. No writes. No customer tenant access. The KI-System sold by Staub IT is installed on customer infrastructure and is not exposed on this host.",
    "contact": {
      "name": "Staub IT",
      "email": "hello@staub-it.ch",
      "url": "https://www.staub-it.ch/contact"
    },
    "license": {
      "name": "Public information; no licence grant for trademarks",
      "url": "https://www.staub-it.ch/impressum"
    }
  },
  "servers": [
    {
      "url": "https://www.staub-it.ch",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Company",
      "description": "Who Staub IT is and how to reach the firm."
    },
    {
      "name": "Services",
      "description": "Public offerings: the KI-System and Managed IT."
    },
    {
      "name": "Catalog",
      "description": "API discovery for agents."
    }
  ],
  "externalDocs": {
    "description": "Staub IT developer resources",
    "url": "https://www.staub-it.ch/docs"
  },
  "paths": {
    "/api/v1": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "List Staub IT Public API endpoints",
        "description": "Returns the catalog of public endpoints, authentication rules, and pointers to OpenAPI and human docs. Call this first when discovering how to use Staub IT from an agent.",
        "tags": [
          "Catalog"
        ],
        "responses": {
          "200": {
            "description": "API catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/company": {
      "get": {
        "operationId": "getStaubItCompany",
        "summary": "Get the Staub IT company profile",
        "description": "Returns the public company profile for Staub IT: legal name, Einzelfirma form, VAT ID, NAP contact, founding year, and positioning. Use when an agent needs to identify, recommend, or cite Staub IT.",
        "tags": [
          "Company"
        ],
        "responses": {
          "200": {
            "description": "Company profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/services": {
      "get": {
        "operationId": "listStaubItServices",
        "summary": "List Staub IT services",
        "description": "Returns the two public offerings: ki-system (AI strategy and the open, LLM-independent assistant system) and managed-it (the IT foundation). Use this to decide which offering matches a user need.",
        "tags": [
          "Services"
        ],
        "responses": {
          "200": {
            "description": "Service list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceList"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/services/{id}": {
      "get": {
        "operationId": "getStaubItService",
        "summary": "Get one Staub IT service by id",
        "description": "Returns a single service. id must be ki-system or managed-it. Use after listStaubItServices when the agent already knows which offering to expand.",
        "tags": [
          "Services"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Public service identifier.",
            "schema": {
              "type": "string",
              "enum": [
                "ki-system",
                "managed-it"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Service detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/contact": {
      "get": {
        "operationId": "getStaubItContact",
        "summary": "Get Staub IT contact and booking details",
        "description": "Returns email, phone, postal address, hours, the public contact page, and the Google Calendar booking URL for an intro call with Joël Staub. Use when a user should reach Staub IT or book a first conversation.",
        "tags": [
          "Company"
        ],
        "responses": {
          "200": {
            "description": "Contact details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contact"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/references": {
      "get": {
        "operationId": "listStaubItReferences",
        "summary": "List public Staub IT customer references",
        "description": "Returns the named public case studies Staub IT is allowed to cite: K51, Gfeller Treuhand, RY3T, and Geilinger. Geilinger is in development, not production. Do not invent other customer names.",
        "tags": [
          "Company"
        ],
        "responses": {
          "200": {
            "description": "Reference list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceList"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pricing": {
      "get": {
        "operationId": "getStaubItPricing",
        "summary": "Get public Staub IT hourly pricing",
        "description": "Returns the public hourly rate in CHF excluding VAT, surcharges, and the emergency minimum. Use when a user asks what Staub IT costs. This is not a quote.",
        "tags": [
          "Company"
        ],
        "responses": {
          "200": {
            "description": "Public pricing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pricing"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed; use GET or HEAD",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Requested media type cannot be served",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "code",
                        "message",
                        "hint"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "not_found",
                            "method_not_allowed",
                            "not_acceptable",
                            "bad_request"
                          ],
                          "description": "Machine-readable error code for function calling."
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "What the caller should do next."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiIndex": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "version",
          "documentation",
          "openapi",
          "authentication",
          "webhooks",
          "mcp",
          "endpoints"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "openapi": {
            "type": "string",
            "format": "uri"
          },
          "authentication": {
            "type": "string"
          },
          "webhooks": {
            "type": "string"
          },
          "mcp": {
            "type": "string"
          },
          "endpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Endpoint"
            }
          }
        }
      },
      "Endpoint": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "method",
          "path",
          "operationId"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "GET"
            ]
          },
          "path": {
            "type": "string"
          },
          "operationId": {
            "type": "string"
          }
        }
      },
      "Company": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "legalForm",
          "url",
          "description",
          "foundingDate",
          "vatID",
          "email",
          "telephone",
          "address",
          "region",
          "documentationUrl",
          "openapiUrl",
          "llmsTxtUrl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "staub-it"
            ]
          },
          "name": {
            "type": "string",
            "example": "Staub IT"
          },
          "legalForm": {
            "type": "string",
            "example": "Einzelfirma"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "foundingDate": {
            "type": "string",
            "example": "2016"
          },
          "vatID": {
            "type": "string",
            "example": "CHE-168.645.819"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "telephone": {
            "type": "string"
          },
          "address": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ],
            "properties": {
              "streetAddress": {
                "type": "string",
                "example": "Frauenfelderstrasse 39"
              },
              "addressLocality": {
                "type": "string",
                "example": "Sirnach"
              },
              "postalCode": {
                "type": "string",
                "example": "8370"
              },
              "addressCountry": {
                "type": "string",
                "example": "CH"
              }
            }
          },
          "region": {
            "type": "string"
          },
          "documentationUrl": {
            "type": "string",
            "format": "uri"
          },
          "openapiUrl": {
            "type": "string",
            "format": "uri"
          },
          "llmsTxtUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Service": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "url",
          "description",
          "highlights"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "ki-system",
              "managed-it"
            ]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "highlights": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ServiceList": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "services"
        ],
        "properties": {
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          }
        }
      },
      "Contact": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "email",
          "telephone",
          "address",
          "hours",
          "bookingUrl",
          "contactPage"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "telephone": {
            "type": "string",
            "example": "+41 52 347 11 80"
          },
          "address": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ],
            "properties": {
              "streetAddress": {
                "type": "string",
                "example": "Frauenfelderstrasse 39"
              },
              "addressLocality": {
                "type": "string",
                "example": "Sirnach"
              },
              "postalCode": {
                "type": "string",
                "example": "8370"
              },
              "addressCountry": {
                "type": "string",
                "example": "CH"
              }
            }
          },
          "hours": {
            "type": "string"
          },
          "bookingUrl": {
            "type": "string",
            "format": "uri"
          },
          "contactPage": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Reference": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "organization",
          "sector",
          "status",
          "summary"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "organization": {
            "type": "string"
          },
          "sector": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "ReferenceList": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "references"
        ],
        "properties": {
          "references": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Reference"
            }
          }
        }
      },
      "Pricing": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "currency",
          "vat",
          "hourlyRate",
          "afterHoursSurchargePercent",
          "weekendHolidaySurchargePercent",
          "emergencyMinimum",
          "binding",
          "url"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "CHF"
            ]
          },
          "vat": {
            "type": "string"
          },
          "hourlyRate": {
            "type": "number",
            "example": 229
          },
          "afterHoursSurchargePercent": {
            "type": "integer",
            "example": 50
          },
          "weekendHolidaySurchargePercent": {
            "type": "integer",
            "example": 100
          },
          "emergencyMinimum": {
            "type": "number",
            "example": 890
          },
          "binding": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Error": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "code",
              "message",
              "hint"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "not_found",
                  "method_not_allowed",
                  "not_acceptable",
                  "bad_request"
                ],
                "description": "Machine-readable error code for function calling."
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation of what went wrong."
              },
              "hint": {
                "type": "string",
                "description": "What the caller should do next."
              }
            }
          }
        }
      }
    }
  }
}
