{
  "openapi": "3.1.0",
  "info": {
    "title": "Geht besser.: Offene Daten",
    "version": "1.0.0",
    "summary": "Was auf dem Board sichtbar ist, zum Lesen, Einbetten und Verlinken.",
    "description": "Geht besser. ist ein öffentliches Board: Menschen schreiben auf, was sie Zeit kostet, andere sagen „Kenn ich.“ und zeigen, was besser geht.\n\nDiese Schnittstelle liest, was dort sichtbar ist, für Kommunen, Redaktionen, Forschung und andere Apps. Sie ist nur lesend und braucht keinen Schlüssel.\n\nEs gibt nur sichtbare Beiträge, nie Pseudonyme, Konten, Wartendes, Entferntes oder Daten aus der Prüfung. Kein Angebot einer Behörde.\n\nAlles mit Beispielen und den Einbettungen: https://gehtbesser.org/offene-daten"
  },
  "externalDocs": {
    "description": "Offene Daten: die Dokumentation",
    "url": "https://gehtbesser.org/offene-daten"
  },
  "servers": [
    {
      "url": "https://gehtbesser.org/api/offen/v1",
      "description": "Geht besser."
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Probleme",
      "description": "Sichtbare Probleme und ihre Lösungen."
    },
    {
      "name": "Orte",
      "description": "Gemeinden nach dem Amtlichen Gemeindeschlüssel (AGS)."
    },
    {
      "name": "Themen",
      "description": "Die Listen, nach denen du filtern kannst."
    },
    {
      "name": "Feed",
      "description": "Atom für Feedreader."
    },
    {
      "name": "Einbetten",
      "description": "oEmbed für Links auf einen Beitrag."
    }
  ],
  "paths": {
    "/probleme": {
      "get": {
        "tags": [
          "Probleme"
        ],
        "operationId": "listProblems",
        "summary": "Sichtbare Probleme, neueste zuerst",
        "description": "Seitenweise, höchstens 100 je Seite. Die nächste Seite holst du mit `cursor` aus `nextCursor` oder direkt über `next` (auch im Link-Header).",
        "parameters": [
          {
            "$ref": "#/components/parameters/ort"
          },
          {
            "$ref": "#/components/parameters/land"
          },
          {
            "$ref": "#/components/parameters/thema"
          },
          {
            "$ref": "#/components/parameters/art"
          },
          {
            "$ref": "#/components/parameters/status"
          },
          {
            "$ref": "#/components/parameters/seit"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/cursor"
          }
        ],
        "responses": {
          "200": {
            "description": "Eine Seite Probleme.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemPage"
                },
                "example": {
                  "items": [
                    {
                      "id": "5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41",
                      "url": "https://gehtbesser.org/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41",
                      "title": "Der nächste freie Termin für den Ausweis ist in sieben Wochen",
                      "body": "Ich brauche einen neuen Personalausweis. Online ist der nächste freie Termin erst Mitte Dezember, am Telefon kommt nur eine Ansage. Kommt man morgens ohne Termin noch dran?",
                      "place": {
                        "ags": "09761000",
                        "name": "Augsburg",
                        "land": "09",
                        "landName": "Bayern"
                      },
                      "topic": {
                        "key": "buergeramt",
                        "label": "Bürgeramt"
                      },
                      "kind": {
                        "key": "warten",
                        "label": "Warten und Termine"
                      },
                      "reach": {
                        "key": "hier",
                        "label": "Nur an diesem Ort"
                      },
                      "counts": {
                        "kenn": 14,
                        "kenn7Days": 9,
                        "fixes": 2,
                        "fixChecks": 7,
                        "fixWorked": 5,
                        "timePeople": 0,
                        "hours": null
                      },
                      "solved": true,
                      "media": [
                        {
                          "url": "https://gehtbesser.org/m/0f6c2d9a-41b7-4e58-9c3a-7d2e8b5f1a60/w1080.webp",
                          "width": 1080,
                          "height": 1440,
                          "alt": "Ein Aushang an einer Amtstür: Termine nur nach Vereinbarung.",
                          "kind": "photo",
                          "poster": null
                        }
                      ],
                      "createdAt": "2026-10-20T07:42:10.123Z",
                      "visibleAt": "2026-10-20T09:05:31.000Z"
                    },
                    {
                      "id": "9d3f6a1c-2b8e-4f7a-8c5d-1e0b4a6c3f92",
                      "url": "https://gehtbesser.org/p/9d3f6a1c-2b8e-4f7a-8c5d-1e0b4a6c3f92",
                      "title": "Am Wochenende fährt der Bus nur einmal in der Stunde",
                      "body": "Samstags und sonntags fährt die Linie in unser Viertel nur stündlich, und der letzte Bus fährt vor 22 Uhr. Wer abends arbeitet, kommt nicht mehr nach Hause.",
                      "place": {
                        "ags": "09761000",
                        "name": "Augsburg",
                        "land": "09",
                        "landName": "Bayern"
                      },
                      "topic": {
                        "key": "bahn",
                        "label": "Bahn und Nahverkehr"
                      },
                      "kind": {
                        "key": "warten",
                        "label": "Warten und Termine"
                      },
                      "reach": {
                        "key": "hier",
                        "label": "Nur an diesem Ort"
                      },
                      "counts": {
                        "kenn": 4,
                        "kenn7Days": 4,
                        "fixes": 0,
                        "fixChecks": 0,
                        "fixWorked": 0,
                        "timePeople": 0,
                        "hours": null
                      },
                      "solved": false,
                      "media": [],
                      "createdAt": "2026-10-18T16:20:44.502Z",
                      "visibleAt": "2026-10-18T18:02:10.000Z"
                    }
                  ],
                  "nextCursor": "MXwyMDI2LTEwLTE4VDE2OjIwOjQ0LjUwMjkxOHw5ZDNmNmExYy0yYjhlLTRmN2EtOGM1ZC0xZTBiNGE2YzNmOTI",
                  "next": "https://gehtbesser.org/api/offen/v1/probleme?ort=09761000&limit=2&cursor=MXwyMDI2LTEwLTE4VDE2OjIwOjQ0LjUwMjkxOHw5ZDNmNmExYy0yYjhlLTRmN2EtOGM1ZC0xZTBiNGE2YzNmOTI"
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/probleme/{id}": {
      "get": {
        "tags": [
          "Probleme"
        ],
        "operationId": "getProblem",
        "summary": "Ein sichtbares Problem mit seinen Lösungen",
        "description": "Die Lösungen stehen so, wie das Board sie zeigt: die mit den meisten „hat geholfen“ zuerst.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Die id des Problems.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41"
          }
        ],
        "responses": {
          "200": {
            "description": "Das Problem.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "id": "5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41",
                  "url": "https://gehtbesser.org/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41",
                  "title": "Der nächste freie Termin für den Ausweis ist in sieben Wochen",
                  "body": "Ich brauche einen neuen Personalausweis. Online ist der nächste freie Termin erst Mitte Dezember, am Telefon kommt nur eine Ansage. Kommt man morgens ohne Termin noch dran?",
                  "place": {
                    "ags": "09761000",
                    "name": "Augsburg",
                    "land": "09",
                    "landName": "Bayern"
                  },
                  "topic": {
                    "key": "buergeramt",
                    "label": "Bürgeramt"
                  },
                  "kind": {
                    "key": "warten",
                    "label": "Warten und Termine"
                  },
                  "reach": {
                    "key": "hier",
                    "label": "Nur an diesem Ort"
                  },
                  "counts": {
                    "kenn": 14,
                    "kenn7Days": 9,
                    "fixes": 2,
                    "fixChecks": 7,
                    "fixWorked": 5,
                    "timePeople": 0,
                    "hours": null
                  },
                  "solved": true,
                  "media": [
                    {
                      "url": "https://gehtbesser.org/m/0f6c2d9a-41b7-4e58-9c3a-7d2e8b5f1a60/w1080.webp",
                      "width": 1080,
                      "height": 1440,
                      "alt": "Ein Aushang an einer Amtstür: Termine nur nach Vereinbarung.",
                      "kind": "photo",
                      "poster": null
                    }
                  ],
                  "createdAt": "2026-10-20T07:42:10.123Z",
                  "visibleAt": "2026-10-20T09:05:31.000Z",
                  "fixes": [
                    {
                      "id": "e8a4b2c6-7d1f-4a3e-b9c5-6f2d8e0a1b37",
                      "title": "Früh hingehen, ohne Termin",
                      "body": "Dienstags und donnerstags gibt es ab 7:30 Uhr ein paar Wartenummern für Leute ohne Termin. Ich war um 7:15 Uhr da und um halb neun fertig.",
                      "link": null,
                      "ownProduct": false,
                      "kind": {
                        "key": "weg",
                        "label": "Weg"
                      },
                      "counts": {
                        "checks": 7,
                        "worked": 5
                      },
                      "media": [],
                      "createdAt": "2026-10-21T06:58:02.000Z",
                      "visibleAt": "2026-10-21T08:11:40.000Z"
                    },
                    {
                      "id": "3c7e9b2a-5f4d-4e1b-a8c6-0d9f2e7b4a15",
                      "title": "Abends im Portal nach abgesagten Terminen schauen",
                      "body": "Gegen 20 Uhr tauchen im Terminportal oft Termine für die nächsten Tage auf, die jemand abgesagt hat. Einfach am Abend noch einmal nachsehen.",
                      "link": "https://termine.example.org/buergeramt",
                      "ownProduct": false,
                      "kind": {
                        "key": "werkzeug",
                        "label": "Werkzeug"
                      },
                      "counts": {
                        "checks": 3,
                        "worked": 1
                      },
                      "media": [],
                      "createdAt": "2026-10-22T19:30:12.000Z",
                      "visibleAt": "2026-10-22T21:02:55.000Z"
                    }
                  ]
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/orte": {
      "get": {
        "tags": [
          "Orte"
        ],
        "operationId": "searchPlaces",
        "summary": "Gemeinden nach Namen suchen",
        "description": "Wie die Ortswahl auf dem Board: höchstens 12 Treffer, genaue Treffer und große Orte zuerst, mit dem Kreis, damit zwei Orte gleichen Namens auseinanderbleiben.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Mindestens zwei Buchstaben eines Ortsnamens.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 60
            },
            "example": "Augsburg"
          }
        ],
        "responses": {
          "200": {
            "description": "Die Treffer.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "items"
                  ],
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PlaceHit"
                      }
                    }
                  }
                },
                "example": {
                  "items": [
                    {
                      "ags": "09761000",
                      "name": "Augsburg",
                      "land": "09",
                      "landName": "Bayern",
                      "kreis": "Augsburg",
                      "url": "https://gehtbesser.org/api/offen/v1/orte/09761000"
                    }
                  ]
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/orte/{ags}": {
      "get": {
        "tags": [
          "Orte"
        ],
        "operationId": "getPlace",
        "summary": "Eine Gemeinde mit ihren Zahlen",
        "description": "Wie viele sichtbare Probleme dort stehen, wie viele gelöst sind, welche Themen am häufigsten vorkommen, und die Links zur Liste, zum Feed und zum Einbetten.",
        "parameters": [
          {
            "name": "ags",
            "in": "path",
            "required": true,
            "description": "Der Amtliche Gemeindeschlüssel, 8 Ziffern.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{8}$"
            },
            "example": "09761000"
          }
        ],
        "responses": {
          "200": {
            "description": "Die Gemeinde.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaceDetail"
                },
                "example": {
                  "ags": "09761000",
                  "name": "Augsburg",
                  "land": "09",
                  "landName": "Bayern",
                  "kreis": {
                    "ags": "09761",
                    "name": "Augsburg"
                  },
                  "counts": {
                    "problems": 37,
                    "solved": 6
                  },
                  "topTopics": [
                    {
                      "key": "buergeramt",
                      "label": "Bürgeramt",
                      "problems": 11
                    },
                    {
                      "key": "bahn",
                      "label": "Bahn und Nahverkehr",
                      "problems": 8
                    },
                    {
                      "key": "schule_kita",
                      "label": "Schule und Kita",
                      "problems": 5
                    }
                  ],
                  "links": {
                    "problems": "https://gehtbesser.org/api/offen/v1/probleme?ort=09761000",
                    "feed": "https://gehtbesser.org/api/offen/v1/feed.atom?ort=09761000",
                    "embed": "https://gehtbesser.org/einbetten/ort/09761000"
                  }
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/themen": {
      "get": {
        "tags": [
          "Themen"
        ],
        "operationId": "listTopics",
        "summary": "Themen, Arten, Reichweiten und Länder mit Zahlen",
        "description": "Jede Liste vollständig, auch Einträge ohne Beitrag (dann mit 0). Die `key`-Werte sind die Werte für `thema`, `art` und `land`.",
        "responses": {
          "200": {
            "description": "Alle Listen.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Topics"
                },
                "example": {
                  "topics": [
                    {
                      "key": "buergeramt",
                      "label": "Bürgeramt",
                      "problems": 412
                    },
                    {
                      "key": "hochschule",
                      "label": "Hochschule",
                      "problems": 0
                    },
                    {
                      "key": "bahn",
                      "label": "Bahn und Nahverkehr",
                      "problems": 288
                    },
                    {
                      "key": "finanzamt",
                      "label": "Finanzamt",
                      "problems": 0
                    },
                    {
                      "key": "krankenkasse",
                      "label": "Krankenkasse",
                      "problems": 0
                    },
                    {
                      "key": "jobcenter",
                      "label": "Jobcenter und Arbeitsagentur",
                      "problems": 0
                    },
                    {
                      "key": "auslaenderbehoerde",
                      "label": "Ausländerbehörde",
                      "problems": 0
                    },
                    {
                      "key": "zulassung",
                      "label": "Kfz-Zulassung",
                      "problems": 0
                    },
                    {
                      "key": "schule_kita",
                      "label": "Schule und Kita",
                      "problems": 0
                    },
                    {
                      "key": "post",
                      "label": "Post und Pakete",
                      "problems": 0
                    },
                    {
                      "key": "wohnen",
                      "label": "Wohnen",
                      "problems": 0
                    },
                    {
                      "key": "gesundheit",
                      "label": "Arztpraxis und Klinik",
                      "problems": 0
                    },
                    {
                      "key": "telekom",
                      "label": "Internet und Telefon",
                      "problems": 0
                    },
                    {
                      "key": "anderes",
                      "label": "Anderes",
                      "problems": 0
                    }
                  ],
                  "kinds": [
                    {
                      "key": "warten",
                      "label": "Warten und Termine",
                      "problems": 530
                    },
                    {
                      "key": "formular",
                      "label": "Formulare und Nachweise",
                      "problems": 0
                    },
                    {
                      "key": "portal",
                      "label": "Portale und Apps",
                      "problems": 0
                    },
                    {
                      "key": "frist",
                      "label": "Fristen und Bescheide",
                      "problems": 0
                    },
                    {
                      "key": "erreichbar",
                      "label": "Niemand erreichbar",
                      "problems": 0
                    },
                    {
                      "key": "doppelt",
                      "label": "Alles doppelt angeben",
                      "problems": 0
                    },
                    {
                      "key": "ort",
                      "label": "Orte und Öffnungszeiten",
                      "problems": 0
                    },
                    {
                      "key": "anderes",
                      "label": "Anderes",
                      "problems": 0
                    }
                  ],
                  "reach": [
                    {
                      "key": "hier",
                      "label": "Nur an diesem Ort",
                      "problems": 901
                    },
                    {
                      "key": "land",
                      "label": "Im ganzen Bundesland",
                      "problems": 0
                    },
                    {
                      "key": "bund",
                      "label": "Überall in Deutschland",
                      "problems": 0
                    }
                  ],
                  "lands": [
                    {
                      "key": "10",
                      "label": "Saarland",
                      "problems": 0
                    },
                    {
                      "key": "11",
                      "label": "Berlin",
                      "problems": 0
                    },
                    {
                      "key": "12",
                      "label": "Brandenburg",
                      "problems": 0
                    },
                    {
                      "key": "13",
                      "label": "Mecklenburg-Vorpommern",
                      "problems": 0
                    },
                    {
                      "key": "14",
                      "label": "Sachsen",
                      "problems": 0
                    },
                    {
                      "key": "15",
                      "label": "Sachsen-Anhalt",
                      "problems": 0
                    },
                    {
                      "key": "16",
                      "label": "Thüringen",
                      "problems": 0
                    },
                    {
                      "key": "01",
                      "label": "Schleswig-Holstein",
                      "problems": 0
                    },
                    {
                      "key": "02",
                      "label": "Hamburg",
                      "problems": 0
                    },
                    {
                      "key": "03",
                      "label": "Niedersachsen",
                      "problems": 0
                    },
                    {
                      "key": "04",
                      "label": "Bremen",
                      "problems": 0
                    },
                    {
                      "key": "05",
                      "label": "Nordrhein-Westfalen",
                      "problems": 0
                    },
                    {
                      "key": "06",
                      "label": "Hessen",
                      "problems": 0
                    },
                    {
                      "key": "07",
                      "label": "Rheinland-Pfalz",
                      "problems": 0
                    },
                    {
                      "key": "08",
                      "label": "Baden-Württemberg",
                      "problems": 0
                    },
                    {
                      "key": "09",
                      "label": "Bayern",
                      "problems": 214
                    }
                  ]
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/feed.atom": {
      "get": {
        "tags": [
          "Feed"
        ],
        "operationId": "feed",
        "summary": "Die neuesten Probleme als Atom-Feed",
        "description": "Mit denselben Filtern wie `/probleme`, ohne `cursor`. Jeder Eintrag verlinkt auf den Beitrag auf dem Board. Fehler kommen als JSON.",
        "parameters": [
          {
            "$ref": "#/components/parameters/ort"
          },
          {
            "$ref": "#/components/parameters/land"
          },
          {
            "$ref": "#/components/parameters/thema"
          },
          {
            "$ref": "#/components/parameters/art"
          },
          {
            "$ref": "#/components/parameters/status"
          },
          {
            "$ref": "#/components/parameters/seit"
          },
          {
            "$ref": "#/components/parameters/limit"
          }
        ],
        "responses": {
          "200": {
            "description": "Der Feed (RFC 4287).",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/atom+xml": {
                "schema": {
                  "type": "string"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<feed xmlns=\"http://www.w3.org/2005/Atom\" xml:lang=\"de\">\n  <id>https://gehtbesser.org/api/offen/v1/feed.atom?ort=09761000</id>\n  <title type=\"text\">Probleme in Augsburg · Geht besser.</title>\n  <subtitle type=\"text\">Was Menschen Zeit kostet, und was besser geht. Neueste zuerst.</subtitle>\n  <updated>2026-10-20T09:05:31.000Z</updated>\n  <link rel=\"self\" type=\"application/atom+xml\" href=\"https://gehtbesser.org/api/offen/v1/feed.atom?ort=09761000\"/>\n  <link rel=\"alternate\" type=\"text/html\" href=\"https://gehtbesser.org/\"/>\n  <author><name>Geht besser.</name><uri>https://gehtbesser.org/</uri></author>\n  <icon>https://gehtbesser.org/icon.svg</icon>\n  <entry>\n    <id>urn:uuid:5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41</id>\n    <title type=\"text\">Der nächste freie Termin für den Ausweis ist in sieben Wochen</title>\n    <link rel=\"alternate\" type=\"text/html\" href=\"https://gehtbesser.org/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41\"/>\n    <published>2026-10-20T09:05:31.000Z</published>\n    <updated>2026-10-20T09:05:31.000Z</updated>\n    <category scheme=\"https://gehtbesser.org/api/offen/v1/themen#thema\" term=\"buergeramt\" label=\"Bürgeramt\"/>\n    <category scheme=\"https://gehtbesser.org/api/offen/v1/themen#art\" term=\"warten\" label=\"Warten und Termine\"/>\n    <category scheme=\"https://gehtbesser.org/api/offen/v1/orte\" term=\"09761000\" label=\"Augsburg\"/>\n    <summary type=\"text\">In Augsburg · Bürgeramt · 14 kennen es · eine Lösung hat geholfen</summary>\n    <content type=\"html\">&lt;p&gt;Ich brauche einen neuen Personalausweis. Online ist der nächste freie Termin erst Mitte Dezember, am Telefon kommt nur eine Ansage. Kommt man morgens ohne Termin noch dran?&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://gehtbesser.org/m/0f6c2d9a-41b7-4e58-9c3a-7d2e8b5f1a60/w1080.webp&quot; width=&quot;1080&quot; height=&quot;1440&quot; alt=&quot;Ein Aushang an einer Amtstür: Termine nur nach Vereinbarung.&quot;&gt;&lt;/p&gt;&lt;p&gt;In Augsburg · Bürgeramt · 14 kennen es · eine Lösung hat geholfen&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://gehtbesser.org/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41&quot;&gt;Auf Geht besser. ansehen&lt;/a&gt;&lt;/p&gt;</content>\n  </entry>\n</feed>\n"
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/oembed": {
      "get": {
        "tags": [
          "Einbetten"
        ],
        "operationId": "oembed",
        "summary": "oEmbed für einen Link auf einen Beitrag",
        "description": "oEmbed 1.0, Typ rich: `html` ist ein iframe der Einbettung unter /einbetten/p/{id}, 480 mal 280 Pixel, nie größer als maxwidth und maxheight.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "Der Link auf den Beitrag.",
            "schema": {
              "type": "string",
              "format": "uri"
            },
            "example": "https://gehtbesser.org/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41"
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Nur json.",
            "schema": {
              "type": "string",
              "enum": [
                "json"
              ],
              "default": "json"
            }
          },
          {
            "name": "maxwidth",
            "in": "query",
            "required": false,
            "description": "Höchste Breite in Pixeln.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "maxheight",
            "in": "query",
            "required": false,
            "description": "Höchste Höhe in Pixeln.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Die oEmbed-Antwort.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Cache-Control": {
                "$ref": "#/components/headers/Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbed"
                },
                "example": {
                  "version": "1.0",
                  "type": "rich",
                  "provider_name": "Geht besser.",
                  "provider_url": "https://gehtbesser.org/",
                  "title": "Der nächste freie Termin für den Ausweis ist in sieben Wochen",
                  "html": "<iframe src=\"https://gehtbesser.org/einbetten/p/5b0e2c4a-8d1f-4c3b-9a6e-2f7d1c0b9e41\" title=\"Der nächste freie Termin für den Ausweis ist in sieben Wochen · Geht besser.\" width=\"480\" height=\"280\" style=\"border:0;max-width:100%\" loading=\"lazy\"></iframe>",
                  "width": 480,
                  "height": 280,
                  "cache_age": 60,
                  "thumbnail_url": "https://gehtbesser.org/m/0f6c2d9a-41b7-4e58-9c3a-7d2e8b5f1a60/w640.webp",
                  "thumbnail_width": 640,
                  "thumbnail_height": 853
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          },
          "501": {
            "$ref": "#/components/responses/NotImplemented"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "ort": {
        "name": "ort",
        "in": "query",
        "description": "Nur Probleme in dieser Gemeinde, nach AGS.",
        "schema": {
          "type": "string",
          "pattern": "^\\d{8}$"
        },
        "example": "09761000"
      },
      "land": {
        "name": "land",
        "in": "query",
        "description": "Nur Probleme in Orten dieses Bundeslands, 01 bis 16.",
        "schema": {
          "type": "string",
          "enum": [
            "10",
            "11",
            "12",
            "13",
            "14",
            "15",
            "16",
            "01",
            "02",
            "03",
            "04",
            "05",
            "06",
            "07",
            "08",
            "09"
          ]
        },
        "example": "09"
      },
      "thema": {
        "name": "thema",
        "in": "query",
        "description": "Nur dieses Thema (siehe /themen, topics).",
        "schema": {
          "type": "string",
          "enum": [
            "buergeramt",
            "hochschule",
            "bahn",
            "finanzamt",
            "krankenkasse",
            "jobcenter",
            "auslaenderbehoerde",
            "zulassung",
            "schule_kita",
            "post",
            "wohnen",
            "gesundheit",
            "telekom",
            "anderes"
          ]
        },
        "example": "buergeramt"
      },
      "art": {
        "name": "art",
        "in": "query",
        "description": "Nur diese Art (siehe /themen, kinds).",
        "schema": {
          "type": "string",
          "enum": [
            "warten",
            "formular",
            "portal",
            "frist",
            "erreichbar",
            "doppelt",
            "ort",
            "anderes"
          ]
        },
        "example": "warten"
      },
      "status": {
        "name": "status",
        "in": "query",
        "description": "geloest: eine Lösung hat den meisten geholfen, die sie ausprobiert haben. offen: alle anderen.",
        "schema": {
          "type": "string",
          "enum": [
            "offen",
            "geloest"
          ]
        }
      },
      "seit": {
        "name": "seit",
        "in": "query",
        "description": "Nur Probleme, die ab diesem Zeitpunkt geschrieben wurden (createdAt). Ein Datum gilt ab 0 Uhr UTC, ein Zeitpunkt ohne Zone in UTC.",
        "schema": {
          "type": "string"
        },
        "example": "2026-10-01"
      },
      "limit": {
        "name": "limit",
        "in": "query",
        "description": "Wie viele je Seite.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        }
      },
      "cursor": {
        "name": "cursor",
        "in": "query",
        "description": "Der Wert aus nextCursor der letzten Seite, mit denselben Filtern.",
        "schema": {
          "type": "string"
        },
        "example": "MXwyMDI2LTEwLTE4VDE2OjIwOjQ0LjUwMjkxOHw5ZDNmNmExYy0yYjhlLTRmN2EtOGM1ZC0xZTBiNGE2YzNmOTI"
      }
    },
    "headers": {
      "ETag": {
        "description": "Ein schwaches ETag der Antwort. Schick es als If-None-Match mit, dann kommt 304, solange sich nichts geändert hat.",
        "schema": {
          "type": "string"
        }
      },
      "Cache-Control": {
        "description": "public, max-age=60, stale-while-revalidate=300",
        "schema": {
          "type": "string"
        }
      },
      "Link": {
        "description": "Die nächste Seite, rel=\"next\".",
        "schema": {
          "type": "string"
        }
      },
      "Retry-After": {
        "description": "Sekunden bis zum nächsten Versuch.",
        "schema": {
          "type": "integer"
        }
      }
    },
    "responses": {
      "NotModified": {
        "description": "Nichts Neues seit dem ETag in If-None-Match.",
        "headers": {
          "ETag": {
            "$ref": "#/components/headers/ETag"
          },
          "Cache-Control": {
            "$ref": "#/components/headers/Cache-Control"
          }
        }
      },
      "BadRequest": {
        "description": "Ein Parameter fehlt, ist unbekannt oder hat keinen gültigen Wert.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "invalid_parameter",
                "message": "Gib bei „ort“ einen Gemeindeschlüssel (AGS) mit 8 Ziffern an, zum Beispiel 09761000."
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Gibt es nicht, oder nicht mehr sichtbar.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_found",
                "message": "Diesen Beitrag gibt es nicht, oder er ist nicht mehr sichtbar."
              }
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Zu viele Abfragen von dieser Adresse: höchstens 600 in 10 Minuten.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "rate_limited",
                "message": "Von deiner Adresse kamen gerade sehr viele Abfragen. Versuch es in ein paar Minuten noch einmal."
              }
            }
          }
        },
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          }
        }
      },
      "ServerError": {
        "description": "Etwas ist auf unserer Seite schiefgegangen.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "server_error",
                "message": "Das hat gerade nicht geklappt. Versuch es gleich noch einmal."
              }
            }
          }
        }
      },
      "NotImplemented": {
        "description": "Ein anderes Format als json.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_implemented",
                "message": "Es gibt nur format=json."
              }
            }
          }
        }
      }
    },
    "schemas": {
      "Label": {
        "type": "object",
        "required": [
          "key",
          "label"
        ],
        "properties": {
          "key": {
            "type": "string",
            "description": "Der feste Schlüssel, für Filter und Programme."
          },
          "label": {
            "type": "string",
            "description": "Die Bezeichnung, wie das Board sie zeigt."
          }
        }
      },
      "Place": {
        "type": "object",
        "required": [
          "ags",
          "name",
          "land",
          "landName"
        ],
        "properties": {
          "ags": {
            "type": "string",
            "description": "Amtlicher Gemeindeschlüssel, 8 Ziffern.",
            "pattern": "^\\d{8}$"
          },
          "name": {
            "type": "string",
            "description": "Der Name der Gemeinde."
          },
          "land": {
            "type": "string",
            "description": "Das Bundesland, die ersten zwei Ziffern des AGS.",
            "enum": [
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "16",
              "01",
              "02",
              "03",
              "04",
              "05",
              "06",
              "07",
              "08",
              "09"
            ]
          },
          "landName": {
            "type": "string",
            "description": "Der Name des Bundeslands."
          }
        }
      },
      "Media": {
        "type": "object",
        "required": [
          "url",
          "width",
          "height",
          "alt",
          "kind",
          "poster"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Die Datei: ein Foto 1080 Pixel breit als WebP, ein Clip als MP4 ohne Ton.",
            "format": "uri"
          },
          "width": {
            "type": "integer",
            "minimum": 0,
            "description": "Breite der Datei unter url, in Pixeln."
          },
          "height": {
            "type": "integer",
            "minimum": 0,
            "description": "Höhe der Datei unter url, in Pixeln."
          },
          "alt": {
            "oneOf": [
              {
                "type": "string",
                "description": "Die Beschreibung, von der Person geschrieben, die den Beitrag geschrieben hat."
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "type": "string",
            "description": "Foto oder Clip.",
            "enum": [
              "photo",
              "video"
            ]
          },
          "poster": {
            "oneOf": [
              {
                "type": "string",
                "description": "Das Standbild eines Clips; bei einem Foto null.",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "Counts": {
        "type": "object",
        "required": [
          "kenn",
          "kenn7Days",
          "fixes",
          "fixChecks",
          "fixWorked",
          "timePeople",
          "hours"
        ],
        "properties": {
          "kenn": {
            "type": "integer",
            "minimum": 0,
            "description": "Wie oft „Kenn ich.“ gesagt wurde."
          },
          "kenn7Days": {
            "type": "integer",
            "minimum": 0,
            "description": "Davon in den letzten sieben Tagen."
          },
          "fixes": {
            "type": "integer",
            "minimum": 0,
            "description": "Sichtbare Lösungen."
          },
          "fixChecks": {
            "type": "integer",
            "minimum": 0,
            "description": "Die Lösung, die am meisten geholfen hat: wie viele sie ausprobiert haben."
          },
          "fixWorked": {
            "type": "integer",
            "minimum": 0,
            "description": "Dieselbe Lösung: wie viele sagen, sie hat geholfen."
          },
          "timePeople": {
            "type": "integer",
            "minimum": 0,
            "description": "Wie viele gesagt haben, wie viel eigene Zeit sie das ungefähr gekostet hat."
          },
          "hours": {
            "type": [
              "number",
              "null"
            ],
            "description": "Die Stunden, die ihre Angaben zusammen ergeben (unter einer Stunde 0,5, ein paar Stunden 3, ein Tag 8, mehrere Tage 24), auf halbe Stunden gerundet; null unter drei Angaben, damit niemand eine einzelne Angabe ablesen kann."
          }
        }
      },
      "Problem": {
        "type": "object",
        "required": [
          "id",
          "url",
          "title",
          "body",
          "place",
          "topic",
          "kind",
          "reach",
          "counts",
          "solved",
          "media",
          "createdAt",
          "visibleAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Die id des Problems.",
            "format": "uuid"
          },
          "url": {
            "type": "string",
            "description": "Der Beitrag auf dem Board. Verlinke hierhin.",
            "format": "uri"
          },
          "title": {
            "type": "string",
            "description": "Der Titel, wie geschrieben."
          },
          "body": {
            "type": "string",
            "description": "Der Text, wie geschrieben. Geschwärzte Stellen stehen als Platzhalter darin, zum Beispiel [Telefonnummer]."
          },
          "place": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Place"
              },
              {
                "type": "null"
              }
            ]
          },
          "topic": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Label",
                "description": "Das Thema. Schlüssel: buergeramt, hochschule, bahn, finanzamt, krankenkasse, jobcenter, auslaenderbehoerde, zulassung, schule_kita, post, wohnen, gesundheit, telekom, anderes."
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Label",
                "description": "Die Art. Schlüssel: warten, formular, portal, frist, erreichbar, doppelt, ort, anderes."
              },
              {
                "type": "null"
              }
            ]
          },
          "reach": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Label",
                "description": "Wie weit es reicht. Schlüssel: hier, land, bund."
              },
              {
                "type": "null"
              }
            ]
          },
          "counts": {
            "$ref": "#/components/schemas/Counts"
          },
          "solved": {
            "type": "boolean",
            "description": "Eine Lösung hat den meisten geholfen, die sie ausprobiert haben."
          },
          "media": {
            "type": "array",
            "maxItems": 4,
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "createdAt": {
            "type": "string",
            "description": "Wann es geschrieben wurde.",
            "format": "date-time"
          },
          "visibleAt": {
            "oneOf": [
              {
                "type": "string",
                "description": "Wann es nach der Prüfung sichtbar wurde.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "Fix": {
        "type": "object",
        "required": [
          "id",
          "title",
          "body",
          "link",
          "ownProduct",
          "kind",
          "counts",
          "media",
          "createdAt",
          "visibleAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Die id der Lösung.",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "Der Titel, wie geschrieben."
          },
          "body": {
            "type": "string",
            "description": "Der Text, wie geschrieben."
          },
          "link": {
            "oneOf": [
              {
                "type": "string",
                "description": "Der Link, den die Person angegeben hat, immer https.",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "ownProduct": {
            "type": "boolean",
            "description": "Die Person bietet das selbst an."
          },
          "kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Label",
                "description": "Die Art der Lösung. Schlüssel: werkzeug, einstellung, anlaufstelle, weg."
              },
              {
                "type": "null"
              }
            ]
          },
          "counts": {
            "type": "object",
            "required": [
              "checks",
              "worked"
            ],
            "properties": {
              "checks": {
                "type": "integer",
                "minimum": 0,
                "description": "Wie viele sie ausprobiert haben."
              },
              "worked": {
                "type": "integer",
                "minimum": 0,
                "description": "Wie viele sagen, sie hat geholfen."
              }
            }
          },
          "media": {
            "type": "array",
            "maxItems": 4,
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "createdAt": {
            "type": "string",
            "description": "Wann sie geschrieben wurde.",
            "format": "date-time"
          },
          "visibleAt": {
            "oneOf": [
              {
                "type": "string",
                "description": "Wann sie sichtbar wurde.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ProblemDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Problem"
          },
          {
            "type": "object",
            "required": [
              "fixes"
            ],
            "properties": {
              "fixes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Fix"
                }
              }
            }
          }
        ]
      },
      "ProblemPage": {
        "type": "object",
        "required": [
          "items",
          "nextCursor",
          "next"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Problem"
            }
          },
          "nextCursor": {
            "oneOf": [
              {
                "type": "string",
                "description": "Für die nächste Seite; null auf der letzten."
              },
              {
                "type": "null"
              }
            ]
          },
          "next": {
            "oneOf": [
              {
                "type": "string",
                "description": "Die nächste Seite als ganze Adresse; null auf der letzten.",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "PlaceHit": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Place"
          },
          {
            "type": "object",
            "required": [
              "kreis",
              "url"
            ],
            "properties": {
              "kreis": {
                "oneOf": [
                  {
                    "type": "string",
                    "description": "Der Kreis, damit zwei Orte gleichen Namens auseinanderbleiben."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "url": {
                "type": "string",
                "description": "Die Gemeinde in dieser Schnittstelle.",
                "format": "uri"
              }
            }
          }
        ]
      },
      "PlaceDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Place"
          },
          {
            "type": "object",
            "required": [
              "kreis",
              "counts",
              "topTopics",
              "links"
            ],
            "properties": {
              "kreis": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "ags",
                      "name"
                    ],
                    "properties": {
                      "ags": {
                        "type": "string",
                        "description": "Kreisschlüssel, 5 Ziffern."
                      },
                      "name": {
                        "type": "string",
                        "description": "Der Name des Kreises."
                      }
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "counts": {
                "type": "object",
                "required": [
                  "problems",
                  "solved"
                ],
                "properties": {
                  "problems": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Sichtbare Probleme in der Gemeinde."
                  },
                  "solved": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "Davon gelöst."
                  }
                }
              },
              "topTopics": {
                "type": "array",
                "maxItems": 5,
                "description": "Die häufigsten Themen dort.",
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Label"
                    },
                    {
                      "type": "object",
                      "required": [
                        "problems"
                      ],
                      "properties": {
                        "problems": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Sichtbare Probleme mit diesem Eintrag."
                        }
                      }
                    }
                  ]
                }
              },
              "links": {
                "type": "object",
                "required": [
                  "problems",
                  "feed",
                  "embed"
                ],
                "properties": {
                  "problems": {
                    "type": "string",
                    "description": "Die Probleme der Gemeinde.",
                    "format": "uri"
                  },
                  "feed": {
                    "type": "string",
                    "description": "Der Atom-Feed der Gemeinde.",
                    "format": "uri"
                  },
                  "embed": {
                    "type": "string",
                    "description": "Die Einbettung der Gemeinde für ein iframe.",
                    "format": "uri"
                  }
                }
              }
            }
          }
        ]
      },
      "Topics": {
        "type": "object",
        "required": [
          "topics",
          "kinds",
          "reach",
          "lands"
        ],
        "properties": {
          "topics": {
            "type": "array",
            "description": "Themen, Werte für thema.",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Label"
                },
                {
                  "type": "object",
                  "required": [
                    "problems"
                  ],
                  "properties": {
                    "problems": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Sichtbare Probleme mit diesem Eintrag."
                    }
                  }
                }
              ]
            }
          },
          "kinds": {
            "type": "array",
            "description": "Arten, Werte für art.",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Label"
                },
                {
                  "type": "object",
                  "required": [
                    "problems"
                  ],
                  "properties": {
                    "problems": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Sichtbare Probleme mit diesem Eintrag."
                    }
                  }
                }
              ]
            }
          },
          "reach": {
            "type": "array",
            "description": "Wie weit ein Problem reicht.",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Label"
                },
                {
                  "type": "object",
                  "required": [
                    "problems"
                  ],
                  "properties": {
                    "problems": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Sichtbare Probleme mit diesem Eintrag."
                    }
                  }
                }
              ]
            }
          },
          "lands": {
            "type": "array",
            "description": "Bundesländer, Werte für land.",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Label"
                },
                {
                  "type": "object",
                  "required": [
                    "problems"
                  ],
                  "properties": {
                    "problems": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Sichtbare Probleme mit diesem Eintrag."
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "OEmbed": {
        "type": "object",
        "required": [
          "version",
          "type",
          "provider_name",
          "provider_url",
          "title",
          "html",
          "width",
          "height"
        ],
        "properties": {
          "version": {
            "const": "1.0"
          },
          "type": {
            "const": "rich"
          },
          "provider_name": {
            "const": "Geht besser."
          },
          "provider_url": {
            "type": "string",
            "description": "Das Board.",
            "format": "uri"
          },
          "title": {
            "type": "string",
            "description": "Der Titel des Beitrags."
          },
          "html": {
            "type": "string",
            "description": "Das iframe zum Einbetten."
          },
          "width": {
            "type": "integer",
            "minimum": 0,
            "description": "Breite in Pixeln."
          },
          "height": {
            "type": "integer",
            "minimum": 0,
            "description": "Höhe in Pixeln."
          },
          "cache_age": {
            "type": "integer",
            "minimum": 0,
            "description": "Wie viele Sekunden die Antwort frisch bleibt."
          },
          "thumbnail_url": {
            "type": "string",
            "description": "Das erste Foto, 640 Pixel breit, wenn es eins gibt.",
            "format": "uri"
          },
          "thumbnail_width": {
            "type": "integer",
            "minimum": 0,
            "description": "Breite des Vorschaubilds."
          },
          "thumbnail_height": {
            "type": "integer",
            "minimum": 0,
            "description": "Höhe des Vorschaubilds."
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Für Programme.",
                "enum": [
                  "invalid_parameter",
                  "unknown_parameter",
                  "not_found",
                  "rate_limited",
                  "not_implemented",
                  "server_error"
                ]
              },
              "message": {
                "type": "string",
                "description": "Ein Satz auf Deutsch, den du so zeigen kannst."
              }
            }
          }
        }
      }
    }
  }
}
