{
  "openapi": "3.1.0",
  "info": {
    "title": "Uwierz Bogu — publiczne API",
    "version": "1.0.0",
    "description": "Webinary biblijne, artykuły i odpowiedzi na pytania z uwierzbogu.pl. Tylko odczyt, bez logowania, limit 60 zapytań na minutę z jednego adresu. Cytuj pole url.",
    "contact": {
      "name": "Uwierz Bogu",
      "url": "https://uwierzbogu.pl/kontakt"
    }
  },
  "servers": [
    {
      "url": "https://uwierzbogu.pl/api/v1"
    }
  ],
  "externalDocs": {
    "url": "https://uwierzbogu.pl/dla-agentow"
  },
  "paths": {
    "/status": {
      "get": {
        "operationId": "status",
        "summary": "Stan API i lista endpointów",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "search_content",
        "summary": "Wyszukiwanie webinarów, artykułów i pytań",
        "description": "Wyszukuje webinary biblijne, artykuły z Czytelni i odpowiedzi z działu Pytania i Odpowiedzi na uwierzbogu.pl. Zwraca tytuł, krótkie streszczenie, kategorię, datę i adres url do zacytowania. Zapytanie po polsku, np. „zmartwychwstanie”, „Trójca”, „modlitwa”.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Zapytanie (po polsku).",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 100
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Rodzaj treści.",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "webinar",
                "article",
                "faq"
              ],
              "default": "all"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Liczba wyników (domyślnie 10, maks. 50).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    },
    "/webinars": {
      "get": {
        "operationId": "list_webinars",
        "summary": "Lista webinarów",
        "description": "Najnowsze nagrane webinary albo (upcoming=true) najbliższe zaplanowane webinary z datą i godziną (UTC) oraz stroną zapisu. Opcjonalnie filtr po temacie (slug z list_topics).",
        "parameters": [
          {
            "name": "upcoming",
            "in": "query",
            "required": false,
            "description": "true = tylko zaplanowane.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Slug tematu, np. „bog”, „biblia”.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Liczba wyników (domyślnie 10, maks. 50).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    },
    "/webinars/{slug}": {
      "get": {
        "operationId": "get_webinar",
        "summary": "Webinar po slugu",
        "description": "Pełny opis webinaru po slugu (z adresu /webinary/<slug>): temat, prowadzący, data, link do nagrania na YouTube i wersji audio. include_transcript=true dodaje pełną transkrypcję wykładu (długi tekst). Slug znajdziesz przez search_content albo list_webinars.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Slug webinaru.",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "include_transcript",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    },
    "/articles/{slug}": {
      "get": {
        "operationId": "get_article",
        "summary": "Artykuł po slugu",
        "description": "Pełna treść artykułu po slugu (z adresu /czytelnia/<slug>) w Markdown, z kategorią i datą publikacji. Slug znajdziesz przez search_content.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Slug artykułu.",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    },
    "/faq": {
      "get": {
        "operationId": "search_faq",
        "summary": "Pytania i odpowiedzi",
        "description": "Krótkie odpowiedzi na pytania biblijne (dział Pytania i Odpowiedzi) z wersetami źródłowymi i adresem url każdej odpowiedzi. Bez zapytania zwraca pierwsze pytania w kolejności z serwisu.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Zapytanie (po polsku), opcjonalne.",
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Liczba wyników (domyślnie 10, maks. 50).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    },
    "/topics": {
      "get": {
        "operationId": "list_topics",
        "summary": "Lista tematów",
        "description": "Tematy (kategorie) serwisu ze slugami do filtrowania webinarów i adresami stron tematów.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Nie znaleziono"
          },
          "429": {
            "description": "Przekroczony limit zapytań"
          }
        }
      }
    }
  }
}