{
  "openapi": "3.1.0",
  "info": {
    "title": "vorausgedacht.at – öffentliche Schnittstellen",
    "version": "1.0.0",
    "summary": "Edelmetallkurse, Kursreihen, Datenpakete der Website und der MCP-Server.",
    "description": "Alles hier ist ohne Anmeldung und ohne Schlüssel lesbar. Die Kurse sind Großhandelsnotierungen (Spot) für Feinmetall – kein Kaufpreis und kein Angebot; beim Kauf kommen Aufgeld und Nebenkosten dazu. Vergangene Entwicklungen sind kein Indikator für künftige. Kursdaten ohne Gewähr. Notierungen können sich jederzeit ändern; maßgeblich ist immer der Preis, den der Anbieter zum Zeitpunkt des Geschäfts stellt.\n\nNicht dokumentiert und nicht für Agenten gedacht sind die Endpunkte unter `/lead/`: Eine Rückruf-Anfrage bestätigt immer die Person selbst, per Einwilligung und SMS-Code – vorbereiten lässt sie sich über den MCP-Server (`rueckruf_vorbereiten`) oder einen vorbefüllten Link auf das Formular (siehe /ki/).",
    "contact": {
      "name": "vorausgedacht.at",
      "email": "info@vorausgedacht.at",
      "url": "https://vorausgedacht.at/ki/"
    },
    "termsOfService": "https://vorausgedacht.at/agb/"
  },
  "servers": [
    {
      "url": "https://vorausgedacht.at"
    }
  ],
  "externalDocs": {
    "description": "Dokumentation für KI-Assistenten",
    "url": "https://vorausgedacht.at/ki/"
  },
  "paths": {
    "/metallpreise/aktuell": {
      "get": {
        "operationId": "kurseAktuell",
        "summary": "Aktuelle Großhandelsnotierungen der vier Edelmetalle",
        "description": "USD je Feinunze und der Wechselkurs (USD je Euro); Euro je Gramm = usd / fx / 31,1034768. Zwischengespeichert, höchstens alle 30 Minuten neu abgerufen. Großhandelsnotierung für Feinmetall – kein Kaufpreis und kein Angebot.",
        "responses": {
          "200": {
            "description": "Kursstand. `cache` sagt, ob die Antwort aus dem Zwischenspeicher kam; `stale` heißt: der letzte bekannte Stand.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "usd",
                    "fx",
                    "ts"
                  ],
                  "properties": {
                    "usd": {
                      "type": "object",
                      "properties": {
                        "gold": {
                          "type": "number"
                        },
                        "silber": {
                          "type": "number"
                        },
                        "platin": {
                          "type": "number"
                        },
                        "palladium": {
                          "type": "number"
                        }
                      },
                      "description": "USD je Feinunze"
                    },
                    "fx": {
                      "type": "number",
                      "description": "US-Dollar je Euro"
                    },
                    "ts": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Zeitpunkt des Kursstands"
                    },
                    "fixings": {
                      "type": "object",
                      "description": "Londoner Referenzpreise (LBMA) in USD je Feinunze; Silber hat einen je Tag",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "am": {
                            "type": "number"
                          },
                          "pm": {
                            "type": "number"
                          },
                          "einzel": {
                            "type": "number"
                          }
                        }
                      }
                    },
                    "verlauf": {
                      "type": "array",
                      "description": "Tagesschlusskurse der letzten Wochen, aufsteigend",
                      "items": {
                        "type": "object",
                        "properties": {
                          "d": {
                            "type": "string",
                            "format": "date"
                          },
                          "fx": {
                            "type": "number"
                          },
                          "p": {
                            "type": "object",
                            "properties": {
                              "gold": {
                                "type": "number"
                              },
                              "silber": {
                                "type": "number"
                              },
                              "platin": {
                                "type": "number"
                              },
                              "palladium": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    },
                    "intraday": {
                      "type": "array",
                      "description": "Die letzten 24 Stunden im Halbstundenraster",
                      "items": {
                        "type": "object",
                        "properties": {
                          "t": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "fx": {
                            "type": "number"
                          },
                          "p": {
                            "type": "object",
                            "properties": {
                              "gold": {
                                "type": "number"
                              },
                              "silber": {
                                "type": "number"
                              },
                              "platin": {
                                "type": "number"
                              },
                              "palladium": {
                                "type": "number"
                              }
                            }
                          }
                        }
                      }
                    },
                    "cache": {
                      "type": "string",
                      "enum": [
                        "hit",
                        "miss",
                        "stale"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/daten/metallpreise/{metall}.json": {
      "get": {
        "operationId": "kursreihe",
        "summary": "Tagesschlusskurse seit 02.01.2017",
        "description": "Die letzten 400 Handelstage taggenau, davor jeder siebte. Jeder Punkt: `[datum, usdJeFeinunze, usdJeEuro]`. Wochenenden und handelsfreie Tage sind entfernt. Aktualisiert mit jedem Bau der Website.",
        "parameters": [
          {
            "name": "metall",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "gold",
                "silber",
                "platin",
                "palladium"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Kursreihe",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "metall": {
                      "type": "string"
                    },
                    "start": {
                      "type": "string",
                      "format": "date"
                    },
                    "stand": {
                      "type": "string",
                      "format": "date"
                    },
                    "punkte": {
                      "type": "array",
                      "items": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "minItems": 3,
                        "maxItems": 3
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/daten/ki/plattform.json": {
      "get": {
        "operationId": "plattform",
        "summary": "Stammdaten der Plattform",
        "description": "Die drei Dienste mit Ablauf, Zuständigkeit, Vergütungshinweis und häufigen Fragen, die frei zugänglichen Bereiche, beide Lexika, die Stationen der Edelmetall-Werkstatt und die Eckdaten der Bibliothek – aus denselben Texten wie die Website.",
        "responses": {
          "200": {
            "description": "Datenpaket, Version 1",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/daten/ki/marktwache.json": {
      "get": {
        "operationId": "marktwache",
        "summary": "Die Wochen der MarktWache",
        "description": "Wochenveränderung der vier Edelmetalle und zweier Aktienkörbe (Freitag zu Freitag, EUR-Basis), Euro/Dollar, die Abschnitte der Wochenseite und ihre Quellen. Information, keine Anlageempfehlung.",
        "responses": {
          "200": {
            "description": "Datenpaket, Version 1",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/daten/ki/bibliothek.tsv": {
      "get": {
        "operationId": "bibliothekIndex",
        "summary": "Suchindex der Bibliothek",
        "description": "Eine Zeile je Buch, Spalten durch Tabulatoren getrennt: id, titel, autoren, jahr, genres, meta, text, such. Die Buchseite ist `/bildung/bibliothek/buch/{id}/`, der Lesemodus `/bildung/bibliothek/lesen/{id}/`.",
        "responses": {
          "200": {
            "description": "Tabulatorgetrennter Text",
            "content": {
              "text/tab-separated-values": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "mcp",
        "summary": "MCP-Server (Streamable HTTP, JSON-RPC 2.0)",
        "description": "Model Context Protocol, Protokollversionen 2025-11-25, 2025-06-18, 2025-03-26. Ohne Anmeldung; der Server gibt beim `initialize` eine `Mcp-Session-Id` aus, die bei weiteren Anfragen mitgeschickt wird. Beschreibung der Werkzeuge: /.well-known/mcp.json.",
        "externalDocs": {
          "url": "https://modelcontextprotocol.io/specification"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jsonrpc",
                  "method"
                ],
                "properties": {
                  "jsonrpc": {
                    "const": "2.0"
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer"
                    ]
                  },
                  "method": {
                    "type": "string"
                  },
                  "params": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC-Antwort",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Benachrichtigung angenommen"
          }
        }
      }
    }
  }
}
