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.
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.
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.