{
  "openapi": "3.1.0",
  "info": {
    "title": "LabCoda — publiczne API danych laboratoryjnych",
    "version": "1.1.0",
    "summary": "Zakresy akredytacji laboratoriów badawczych, opisy metod badawczych, sprzęt, odczynniki i wiadomości branżowe, Lab-AI i mapa wymagań normy 17025.",
    "description": "Bezpłatne API do odczytu, bez uwierzytelniania i bez rejestracji.\n\nCo tu jest:\n- **zakresy akredytacji** — karty 7 253 laboratoriów z siedmiu krajów Europy (Polska, Niemcy, Francja, Włochy, Czechy, Słowacja, Litwa); dla 2 064 z nich (Polska: 1 375 z 1 375, Czechy: 689 z 693) wykaz 96 997 badań przepisanych z oficjalnych dokumentów jednostek akredytujących: przedmiot badania, metodyka, mierzone parametry z zakresami pomiarowymi, technika analityczna i dokument odniesienia;\n- **opisy 1 104 metod badawczych** — zasada pomiaru, procedura krok po kroku, potrzebny sprzęt, odczynniki z numerami CAS, zasady bezpieczeństwa;\n- **przekrojowe zestawienia sprzętu i odczynników** — do jakich badań służy dany aparat, w jakich metodach stosuje się dany odczynnik;\n- **Lab-News** — zmiany przepisów, nowe i wycofane normy, komunikaty jednostek akredytujących, każdy wpis ze wskazanym źródłem.\n\nTypowe pytania, na które to API odpowiada:\n- „Które laboratoria mają w akredytacji oznaczanie PFAS w wodzie?\" → GET /api/accreditation-scopes/search?q=PFAS\n- „Kto bada według normy PN-EN ISO 17294-2?\" → GET /api/accreditation-scopes/norms/{norma}/labs\n- „Jak wykonuje się oznaczenie ChZT i czego do tego potrzeba?\" → GET /api/methods/{slug}\n- „Do jakich badań potrzebny jest termoreaktor?\" → GET /api/equipment?q=termoreaktor\n\nDokładność: zakresy akredytacji są przepisywane z dokumentów PDF ręcznie, metoda po metodzie — bez automatycznego przetwarzania plików, ponieważ układ każdego dokumentu jest inny. Dokumentem rozstrzygającym pozostaje zakres wydany przez jednostkę akredytującą; przy każdym laboratorium jest odnośnik do oryginału.\n\nCytowanie: podaj nazwę LabCoda i odnośnik do wykorzystanej strony.",
    "contact": {
      "name": "LabCoda",
      "url": "https://labcoda.pl/api",
      "email": "kontakt@labcoda.pl"
    },
    "license": {
      "name": "Odczyt bezpłatny, z podaniem źródła",
      "url": "https://labcoda.pl/regulamin"
    }
  },
  "servers": [
    {
      "url": "https://labcoda.pl",
      "description": "Produkcja"
    }
  ],
  "tags": [
    {
      "name": "Zakresy akredytacji",
      "description": "Laboratoria i ich akredytowane badania"
    },
    {
      "name": "Metody badawcze",
      "description": "Opisy metod: zasada, procedura, sprzęt, odczynniki, bezpieczeństwo"
    },
    {
      "name": "Sprzęt i odczynniki",
      "description": "Zestawienia przekrojowe"
    },
    {
      "name": "Lab-News",
      "description": "Wiadomości ze świata laboratoriów"
    },
    {
      "name": "Lab-AI",
      "description": "Co sztuczna inteligencja robi w laboratorium badawczym: etapy pracy, asystenci, polecenia, czerwone linie"
    },
    {
      "name": "Norma 17025",
      "description": "Mapa wymagań ISO/IEC 17025: grupy, dwadzieścia obszarów, czego oczekuje oceniający, najczęstsze niezgodności"
    }
  ],
  "paths": {
    "/api/accreditation-scopes/search": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Szukaj badań w zakresach akredytacji",
        "description": "Przeszukuje zbiór 96 997 akredytowanych badań. Wpisz nazwę parametru (ChZT, PFAS, WWA), numer normy albo technikę (ICP-OES, GC-MS). Zwraca badania wraz z laboratorium, które je wykonuje.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Szukana fraza: parametr, norma, technika albo przedmiot badania.",
            "example": "PFAS"
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "PL",
                "DE",
                "FR",
                "IT",
                "CZ",
                "SK",
                "LT"
              ]
            },
            "description": "Ograniczenie do kraju."
          },
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20,
              "maximum": 100
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Znalezione badania wraz z laboratoriami."
          }
        }
      }
    },
    "/api/accreditation-scopes/labs": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Spis laboratoriów",
        "description": "Lista akredytowanych laboratoriów z możliwością filtrowania po kraju, mieście i kategorii badań.",
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "city",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "np. water, food, environment, materials, microbiology"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista laboratoriów."
          }
        }
      }
    },
    "/api/accreditation-scopes/labs/{country}/{accrNumber}": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Pełny zakres akredytacji jednego laboratorium",
        "description": "Wszystkie akredytowane badania danego laboratorium: przedmiot badania, metodyka, parametry z zakresami pomiarowymi, technika i dokument odniesienia. Numer akredytacji zapisuj tak jak w rejestrze, ze spacją lub myślnikiem (AB 1719 albo AB-1719).",
        "parameters": [
          {
            "name": "country",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pl"
          },
          {
            "name": "accrNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AB 1719"
          },
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Laboratorium z pełnym zakresem badań."
          },
          "404": {
            "description": "Nie ma takiego numeru akredytacji."
          }
        }
      }
    },
    "/api/accreditation-scopes/norms": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Spis norm występujących w zakresach",
        "description": "Normy i dokumenty odniesienia wraz z liczbą laboratoriów oraz badań, które się na nie powołują.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista norm."
          }
        }
      }
    },
    "/api/accreditation-scopes/norms/{normBase}/labs": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Kto bada według tej normy",
        "description": "Laboratoria, które mają daną normę w zakresie akredytacji. Odpowiada wprost na pytanie „gdzie wykonam badanie wg tej normy\".",
        "parameters": [
          {
            "name": "normBase",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "ISO 5815"
          }
        ],
        "responses": {
          "200": {
            "description": "Laboratoria z tą normą w zakresie."
          }
        }
      }
    },
    "/api/accreditation-scopes/stats": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Liczby zbiorcze",
        "description": "Liczba laboratoriów, badań i norm w bazie, w podziale na kraje.",
        "responses": {
          "200": {
            "description": "Statystyki zbioru."
          }
        }
      }
    },
    "/api/methods": {
      "get": {
        "tags": [
          "Metody badawcze"
        ],
        "summary": "Spis opisanych metod badawczych",
        "description": "Zbiór 1 104 metod stosowanych w akredytowanych laboratoriach, opisanych od strony wykonawczej.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "example": "ChZT"
          },
          {
            "name": "standard",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Numer normy.",
            "example": "ISO 15705"
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "physicochemical albo microbiological"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista metod."
          }
        }
      }
    },
    "/api/methods/{slug}": {
      "get": {
        "tags": [
          "Metody badawcze"
        ],
        "summary": "Pełny opis metody badawczej",
        "description": "Zasada pomiaru, procedura krok po kroku, sprzęt, odczynniki z numerami CAS, zasady bezpieczeństwa, kluczowe parametry (zakres pomiarowy, granica wykrywania, precyzja) i norma odniesienia. W odpowiedzi jest też gotowy odnośnik do laboratoriów, które mają tę normę w zakresie akredytacji.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "chzt-iso-15705"
          }
        ],
        "responses": {
          "200": {
            "description": "Pełny opis metody."
          },
          "404": {
            "description": "Nie ma takiej metody."
          }
        }
      }
    },
    "/api/equipment": {
      "get": {
        "tags": [
          "Sprzęt i odczynniki"
        ],
        "summary": "Sprzęt laboratoryjny i metody, w których jest potrzebny",
        "description": "Zestawienie przekrojowe: przy każdej pozycji metody, w których sprzęt jest używany, przykładowe modele spotykane w laboratoriach oraz orientacyjny przedział cenowy. Przykłady mają charakter poglądowy — nie są rekomendacją zakupową ani treścią opłaconą.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "example": "spektrofotometr"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sprzęt wraz z metodami."
          }
        }
      }
    },
    "/api/reagents": {
      "get": {
        "tags": [
          "Sprzęt i odczynniki"
        ],
        "summary": "Odczynniki i metody, w których się je stosuje",
        "description": "Zestawienie odczynników z numerami CAS oraz wskazaniem metod, w których występują. Można szukać po nazwie albo po numerze CAS.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "example": "7664-93-9"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Odczynniki wraz z metodami."
          }
        }
      }
    },
    "/api/news": {
      "get": {
        "tags": [
          "Lab-News"
        ],
        "summary": "Wiadomości ze świata laboratoriów",
        "description": "Zmiany przepisów, nowe i wycofane normy, komunikaty jednostek akredytujących. Każdy wpis ma wskazane źródło; treści dostępne po polsku, angielsku, niemiecku i chińsku.",
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ],
              "default": "pl"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "example": "woda"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Wpisy Lab-News."
          }
        }
      }
    },
    "/api/categories": {
      "get": {
        "tags": [
          "Zakresy akredytacji"
        ],
        "summary": "Kategorie badań",
        "description": "Dwanaście kategorii, po których można filtrować laboratoria i badania.",
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista kategorii."
          }
        }
      }
    },
    "/api/lab-ai": {
      "get": {
        "tags": [
          "Lab-AI"
        ],
        "summary": "Lab-AI — co AI może zrobić w laboratorium",
        "description": "Opracowanie redakcyjne LabCoda w czterech językach: sześć etapów drogi próbki (co robi asystent AI, ile czasu oszczędza, co zostaje przy człowieku), zestawienie sześciu asystentów z cechami (yes/partly/no), samouczek w pięciu krokach z gotowymi tekstami, osiem gotowych poleceń, pięć czerwonych linii w laboratorium akredytowanym oraz test gotowości (osiem pytań i progi wyników).",
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ],
              "default": "pl"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pełna treść Lab-AI w wybranym języku: stages, assistants, tutorial, prompts, red_lines, readiness_test."
          }
        }
      }
    },
    "/api/norma-17025": {
      "get": {
        "tags": [
          "Norma 17025"
        ],
        "summary": "Mapa wymagań ISO/IEC 17025",
        "description": "Struktura normy dla laboratorium badawczego: rozdziały wprowadzające 1–3 (bez wymagań), grupy wymagań 4–8, dwadzieścia obszarów — każdy z sednem, trzema rzeczami, których oczekuje oceniający, i najczęstszą niezgodnością — oraz aspekty normy (opcja A/B, niepewność typu A i B, reguły decyzyjne, cyfryzacja i AI). Opracowanie własne, bez cytowania tekstu normy. Obowiązuje wydanie 2017 (PN-EN ISO/IEC 17025:2018-02).",
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ],
              "default": "pl"
            }
          },
          {
            "name": "group",
            "in": "query",
            "description": "Tylko obszary jednej grupy wymagań",
            "schema": {
              "type": "string",
              "enum": [
                "ogolne",
                "strukturalne",
                "zasoby",
                "procesy",
                "system"
              ]
            },
            "example": "procesy"
          }
        ],
        "responses": {
          "200": {
            "description": "introductory_clauses, groups, areas, topics, key_facts w wybranym języku."
          }
        }
      }
    },
    "/api/norma-17025/{id}": {
      "get": {
        "tags": [
          "Norma 17025"
        ],
        "summary": "Jeden obszar wymagań normy",
        "description": "Pojedynczy obszar, np. `niepewnosc` (7.6), `metody` (7.2), `personel` (6.2), `spojnosc-pomiarowa` (6.5). Identyfikatory wszystkich obszarów zwraca /api/norma-17025 w polu areas[].id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "niepewnosc"
          },
          {
            "name": "lang",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "pl",
                "en",
                "de",
                "zh"
              ],
              "default": "pl"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "clause, name, essence, assessor_expects[], most_common_nonconformity, group_name."
          },
          "404": {
            "description": "Nie ma takiego obszaru — odpowiedź wymienia dostępne identyfikatory."
          }
        }
      }
    }
  }
}
