machinewitness

Dostęp maszynowy

Odpytywanie archiwum z poziomu oprogramowania

To archiwum zapisuje, co sieć przekazuje maszynom. Byłoby dziwnym archiwum, gdyby odpytać je mógł wyłącznie człowiek wypełniający formularz. Dla oprogramowania otwarte są dwie operacje: zapytać, czy domena jest obserwowana, i zaproponować domenę do obserwacji. Bez klucza, bez rejestracji, bez konta.

Obie operacje zwracają wyłącznie metadane. Żadna nie zwraca treści obserwowanego pliku i nie istnieje punkt dostępu, który wymieniałby obserwowany zbiór lub pozwalał go przeszukiwać. To, co plik zawierał określonego dnia, stanowi część wyciągu dowodowego wydawanego na wniosek; zob. wyciąg dowodowy.

Od października 2026 oprogramowanie może też zamówić zapis stanu na dzień; przygotowuje to płatność i nic więcej. Zob. zamawianie zapisu stanu na dzień.

Dla asystenta: serwer MCP

Jeżeli korzystają Państwo z Claude, ChatGPT albo czegokolwiek innego, co posługuje się Model Context Protocol, wystarczy dodać ten punkt dostępu, a oba narzędzia pojawią się w rozmowie.

https://machinewitness.eu/mcp

Używa transportu Streamable HTTP i jest bezstanowy: żadnej sesji do nawiązania, żadnego otwartego strumienia, żadnych danych uwierzytelniających. Proszę dodać go jako zdalny serwer MCP w ustawieniach klienta albo z wiersza poleceń:

claude mcp add --transport http machinewitness https://machinewitness.eu/mcp

check_coverage

check_coverage(domain)

Czy to archiwum obserwuje domenę, od którego opieczętowanego dnia, o które czytelne dla maszyn pliki pyta i jak często. Wklejony adres URL jest przyjmowany i sprowadzany do nazwy domeny.

Odpowiedź przecząca jest stwierdzeniem o tym archiwum, a nie o domenie: większość sieci nie jest obserwowana. Odpowiedź twierdząca nie mówi nic o tym, co obserwowane pliki zawierają.

suggest_domain

suggest_domain(domain, email, reason)

Zaproponowanie, aby domena była obserwowana. Odpowiedź brzmi zawsze received z guarantee: none. To wniosek, nie polecenie. Zob. niżej, co propozycja daje, a czego nie.

Dla wszystkiego innego: zwykły HTTP

Te same dwie operacje bez MCP oraz rejestr korzeni jako jeden dokument. Nic z tego nie wymaga biblioteki.

Cały rejestr korzeni

GET /log.json

Każdy opieczętowany dzień, obaj świadkowie, w jednym dokumencie: liczba obserwacji, korzeń Merkle, dokładna godzina opieczętowania oraz to, które zakotwiczenia zewnętrzne dany dzień nosi. To czytelna dla maszyn postać rejestru publicznego: bez klucza, bez stronicowania, bez limitu częstotliwości.

$ curl -s https://machinewitness.eu/log.json | jq '.days[0]'
{
  "day": "2026-08-23",
  "url": "https://machinewitness.eu/log/2026-08-23",
  "witnesses": {
    "witness-1": {
      "sealed": true,
      "observations": 645785,
      "merkle_root": "a86d011c...",
      "anchors": {"opentimestamps": true, "rfc3161": true, "qualified_eidas": true}
    },
    "witness-2": { "sealed": true, "observations": 608542, "merkle_root": "eb3e7e97..." }
  }
}

Obaj świadkowie pieczętują niezależnie, ich korzenie różnią się więc z samej konstrukcji i nigdy nie są przedstawiane jako zgodne. Świadek, który nie ma pieczęci dla danego dnia, mówi to wprost ("sealed": false z uzasadnieniem), zamiast zostać pominięty. Brakujący wiersz nigdy nie może być czytany jako „nie dotyczy". Ten dokument stwierdza, co zostało opieczętowane, nigdy zaś, co domena wysłała.

Czy domena jest obserwowana?

GET /coverage/{sha256(domain)}

Kluczem jest skrót SHA-256 samej nazwy domeny, zapisany małymi literami szesnastkowo: bez schematu, bez www., bez kropki na końcu. Skrót obliczają Państwo sami, nazwa nie jest więc nigdy przesyłana i nie pojawia się w żadnym dzienniku. To celowe: neutralny świadek nie powinien gromadzić zapisu tego, kto o kogo pytał.

$ printf 'example.eu' | shasum -a 256
5a9f...  -

$ curl https://machinewitness.eu/coverage/5a9f...
{"observed": false}

Obserwowana domena odpowiada opieczętowanymi datami, żądanymi zasobami oraz pierścieniem wyznaczającym częstotliwość:

{
  "observed": true,
  "first_sealed_observation": "2026-07-29",
  "last_sealed_observation": "2026-08-02",
  "artefacts": ["robots.txt", "ai.txt", "tdmrep.json", "llms.txt", "homepage"],
  "ring": "core",
  "active": true
}

Domena, która nie jest już obserwowana, odpowiada "active": false. Jej opieczętowane zapisy ze wskazanego okresu pozostają. Archiwum nie odobserwowuje przeszłości.

Zaproponuj domenę

POST /request

$ curl -X POST https://machinewitness.eu/request \
    -H 'content-type: application/json' \
    -d '{"domain": "example.eu",
         "email": "you@example.eu",
         "reason": "Why this domain should be observed."}'

{"status": "received",
 "guarantee": "none",
 "domain": "example.eu",
 "detail": "Recorded for review against documented criteria. ..."}

Wszystkie trzy pola są obowiązkowe. Odrzucona propozycja odpowiada "status": "rejected" z uzasadnieniem: nienadająca się do użycia nazwa domeny, brak adresu zwrotnego albo uzasadnienie zbyt krótkie, by za takie uchodzić.

Zamawianie zapisu stanu na dzień

Oprogramowanie może też zamówić zapis stanu na dzień: obaj świadkowie pobierają wskazane adresy, wykonują obraz każdej strony w całości i nadają każdemu zapisowi własny kwalifikowany elektroniczny znacznik czasu. Zamówienie tą drogą przygotowuje płatność i nic więcej. Odpowiedzią jest link do płatności; nic nie zostaje naliczone ani zapisane, dopóki człowiek nie zapłaci na tej stronie. Zapis dostarczamy e-mailem, zwykle w ciągu kilku minut; po nocnym zapieczętowaniu następuje druga wiadomość z pieczęcią dnia. Opłaty: usługi i opłaty.

Zanim powstanie link, każdy adres jest bezpłatnie sprawdzany: publiczna nazwa domeny, brak na liście wstrzymań, robots.txt zezwala naszemu robotowi na pobranie, a strona odpowiada bez logowania. Adres, który nie przejdzie, jest wskazany wraz z powodem i link nie powstaje. Pytamy wyłącznie o adresy, nigdy o cel ani o sprawę.

order_capture · POST /order/capture

order_capture(addresses, language, email, timezone)

$ curl -X POST https://machinewitness.eu/order/capture \
    -H 'content-type: application/json' \
    -d '{"addresses": ["https://example.eu/terms"],
         "language": "en",
         "email": "you@example.eu",
         "timezone": "Europe/Berlin"}'

{"status": "ok",
 "reference": "MW-K-3F9A2C1D",
 "checkout_url": "https://checkout.stripe.com/...",
 "expected_start": "2026-10-02T09:02:00.000Z",
 "delivery_notice": "...",
 "status_url": "https://machinewitness.eu/order/capture/MW-K-3F9A2C1D"}

{"status": "precheck_failed",
 "refused": [{"address": "https://example.eu/account",
              "reason": "login", "detail": "This address asks for a login."}],
 "detail": "..."}

Do dwudziestu adresów jednej domeny. language to en, de, es, fr, it lub pl i ustala stronę płatności oraz wiadomości; email wypełnia wstępnie stronę płatności; timezone (IANA, np. Europe/Warsaw, domyślnie Europe/Madrid) to strefa, w której delivery_notice podaje godzinę. expected_start to początek obiecany przed płatnością (UTC): teraz, jeśli świadkowie są wolni, w przeciwnym razie koniec ich codziennej pracy plus margines; null, jeśli nie podali szacunku. Po 21:30 UTC nie rozpoczyna się żaden zapis; późniejsze zamówienie rozpoczyna się w pierwszym wolnym oknie następnego dnia.

capture_status · GET /order/capture/{reference}

capture_status(reference)

$ curl https://machinewitness.eu/order/capture/MW-K-3F9A2C1D

{"reference": "MW-K-3F9A2C1D",
 "status": "first_delivery_sent",
 "addresses": 1,
 "capture_day": "2026-10-02",
 "witnesses": {"witness-1": "captured", "witness-2": "captured"},
 "first_delivery_at": "2026-10-02T09:14:03Z",
 "complete_delivery_at": null}

Na jakim etapie jest zamówienie, łącznie i dla każdego świadka: oczekuje na płatność, w kolejce, zapis trwa, pierwsza dostawa wysłana, zakończone. Nigdy nie zwraca adresu e-mail, zamówionych adresów ani niczego innego o kliencie.

Co propozycja daje, a czego nie

Propozycja zostaje zapisana i rozpatrzona przez człowieka według udokumentowanych kryteriów: związek z Unią Europejską oraz publicznie udostępniane pliki czytelne dla maszyn. Decyzja należy do prowadzącego to archiwum.

Nie rodzi obowiązku obserwowania domeny, nie wyznacza terminu i nie stanowi zapewnienia, że domena zostanie dodana. To nie ozdobnik prawny, lecz uczciwe stanowisko. Archiwum, które obiecywałoby obserwację na żądanie, byłoby winne dostępność, której nie może zagwarantować, a kto na tej obietnicy by polegał, znalazłby brak dowodu w dniu nieudanego skanowania. To, co obiecujemy tutaj, jest skromniejsze i możliwe do dotrzymania: propozycja zostaje zapisana, rozpatrzona i otrzymuje odpowiedź na podany adres.

Rozszerzenie domeny jest jedną z przesłanek, a nie werdyktem. Domena spoza 28 rozszerzeń europejskich nie jest odrzucana automatycznie. Trafia przed człowieka, ponieważ rozszerzenie jest tylko zgrubnym przybliżeniem tego, gdzie operator rzeczywiście się znajduje. Ograniczenie to opisano w jak to działa.

Ograniczenia i zasady korzystania

Limity częstotliwości
Propozycje są ograniczone na adres oraz łącznie na dobę. Przekroczenie limitu daje odpowiedź 429. Sprawdzenie zasięgu jest buforowane na brzegu sieci i przy zwykłym użyciu nie podlega ograniczeniu częstotliwości.
Wyliczanie zbioru
Żaden punkt dostępu nie wymienia obserwowanych domen, a klucz w postaci skrótu sprawia, że zapytań nie da się przejść po kolei. Każde zapytanie odpowiada dla jednej domeny, którą pytający już zna.
Dane osobowe
Sprawdzenie zasięgu nie przesyła ani nazwy domeny, ani danych osobowych. Propozycja przesyła domenę i Państwa adres jawnym tekstem. Musi to robić, bo czyta ją człowiek. Zob. informację o prywatności.
Stabilność
To są publiczne operacje działającego archiwum, a nie wersjonowane API produktu. Pola mogą zostać dodane; znaczenie pól istniejących nie zostanie zmienione po cichu. Szersze API danych to sprawa późniejsza i odrębna.

Opisy czytelne dla maszyn

Ten serwis publikuje to, czego wymaga od innych. llms.txt opisuje obie drogi dostępu w postaci, którą model językowy może odczytać wprost; ai.txt oraz tdmrep.json stwierdzają, że wobec eksploracji tekstów i danych własnych treści tego serwisu nie zgłoszono żadnego zastrzeżenia.

Coś nie działa albo odpowiedź wygląda na błędną? Proszę napisać na contact@machinewitness.eu. Dostęp automatyczny, który sprawia kłopoty, zostanie ograniczony, a nie zablokowany po cichu, i zostaną Państwo o tym poinformowani.