machinewitness

Maschinenzugang

Das Archiv aus Software heraus fragen

Dieses Archiv zeichnet auf, was das Web Maschinen mitteilt. Es wäre ein sonderbares Archiv, wenn es nur ein Mensch über ein Formular befragen könnte. Zwei Vorgänge stehen Software offen: fragen, ob eine Domain beobachtet wird, und eine Domain zur Beobachtung vorschlagen. Kein Schlüssel, keine Registrierung, kein Konto.

Beide Vorgänge geben ausschließlich Metadaten zurück. Keiner von beiden liefert den Inhalt einer beobachteten Datei, und es gibt keinen Endpunkt, der den beobachteten Bestand auflistet oder durchsucht. Was eine Datei an einem bestimmten Tag sagte, ist Teil eines Beweisauszugs, der auf Anfrage erteilt wird; siehe Beweisauszug.

Seit Oktober 2026 kann Software außerdem einen Stichtagsnachweis bestellen; das bereitet eine Zahlung vor, mehr nicht. Siehe Stichtagsnachweis bestellen.

Für einen Assistenten: der MCP-Server

Wenn Sie Claude, ChatGPT oder etwas anderes nutzen, das das Model Context Protocol spricht, fügen Sie diesen Endpunkt hinzu, und die beiden Werkzeuge erscheinen in Ihrem Gespräch.

https://machinewitness.eu/mcp

Er nutzt den Streamable-HTTP-Transport und ist zustandslos: keine Sitzung, kein offen gehaltener Datenstrom, keine Zugangsdaten. Tragen Sie ihn in den Einstellungen Ihres Clients als entfernten MCP-Server ein, oder über die Kommandozeile:

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

check_coverage

check_coverage(domain)

Ob dieses Archiv eine Domain beobachtet, ab welchem versiegelten Tag, welche maschinenlesbaren Dateien es anfragt und wie oft. Eine eingefügte URL wird angenommen und auf den Domainnamen zurückgeführt.

Eine verneinende Antwort ist eine Aussage über dieses Archiv, nicht über die Domain: der größte Teil des Webs wird nicht beobachtet. Eine bejahende Antwort sagt nichts darüber, was die beobachteten Dateien enthalten.

suggest_domain

suggest_domain(domain, email, reason)

Schlägt vor, eine Domain zu beobachten. Die Antwort lautet immer received mit guarantee: none. Es ist eine Anregung, keine Anweisung. Siehe unten was ein Vorschlag bewirkt und was nicht.

Für alles andere: einfaches HTTP

Dieselben zwei Vorgänge ohne MCP, dazu das Wurzelprotokoll als ein Dokument. Nichts davon braucht eine Bibliothek.

Das gesamte Wurzelprotokoll

GET /log.json

Jeder versiegelte Tag, beide Zeugen, in einem Dokument: die Zahl der Beobachtungen, die Merkle-Wurzel, der genaue Siegelzeitpunkt und die externen Anker, die dieser Tag trägt. Es ist die maschinenlesbare Form des öffentlichen Protokolls: ohne Schlüssel, ohne Seitenaufteilung, ohne Mengenbegrenzung.

$ 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..." }
  }
}

Die beiden Zeugen versiegeln unabhängig voneinander, ihre Wurzeln unterscheiden sich also bauartbedingt und werden nie als übereinstimmend dargestellt. Ein Zeuge ohne Siegel für einen Tag sagt das ausdrücklich ("sealed": false mit Grund), statt weggelassen zu werden. Eine fehlende Zeile darf nie als „trifft nicht zu" gelesen werden. Dieses Dokument sagt, was versiegelt wurde, nie, was eine Domain ausgeliefert hat.

Wird eine Domain beobachtet?

GET /coverage/{sha256(domain)}

Der Schlüssel ist der kleingeschriebene hexadezimale SHA-256 des reinen Domainnamens: ohne Schema, ohne www., ohne abschließenden Punkt. Sie hashen den Namen selbst, er wird also nie übertragen und erscheint in keinem Protokoll. Das ist Absicht: ein neutraler Zeuge sollte keine Aufzeichnung darüber ansammeln, wer sich nach wem erkundigt hat.

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

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

Eine beobachtete Domain antwortet mit den versiegelten Daten, den angefragten Artefakten und dem Ring, der die Kadenz bestimmt:

{
  "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
}

Eine Domain, die nicht mehr beobachtet wird, antwortet mit "active": false. Ihre versiegelten Datensätze aus dem angezeigten Zeitraum bleiben bestehen. Ein Archiv macht das Beobachten der Vergangenheit nicht rückgängig.

Eine Domain vorschlagen

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

Alle drei Felder sind erforderlich. Ein abgelehnter Vorschlag antwortet mit "status": "rejected" und einem Grund: ein unbrauchbarer Domainname, eine fehlende Rückadresse oder eine Begründung, die zu kurz ist, um als solche gelesen zu werden.

Stichtagsnachweis bestellen

Software kann auch einen Stichtagsnachweis bestellen: beide Zeugen rufen die genannten Adressen ab, halten jede ganzseitig im Bild fest und versehen jede Aufnahme mit einem eigenen qualifizierten elektronischen Zeitstempel. Eine Bestellung auf diesem Weg bereitet eine Zahlung vor und sonst nichts. Die Antwort ist ein Zahlungslink; berechnet und aufgenommen wird erst, wenn ein Mensch auf dieser Seite bezahlt hat. Geliefert wird per E-Mail, in der Regel binnen Minuten; nach der nächtlichen Siegelung folgt eine zweite E-Mail mit dem Tagessiegel. Entgelte: Leistungen und Entgelte.

Bevor der Link entsteht, wird jede Adresse kostenlos geprüft: ein öffentlicher Domainname, nicht auf der Stopp-Liste, die robots.txt erlaubt unserem Crawler den Abruf, und sie antwortet ohne Anmeldung. Eine Adresse, die durchfällt, wird mit dem Grund genannt, und es entsteht kein Link. Gefragt wird nur nach Adressen, nie nach einem Zweck oder einer Sache.

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": "..."}

Bis zu zwanzig Adressen einer Domain. language ist en, de, es, fr, it oder pl und bestimmt Zahlungsseite und E-Mails; email füllt die Zahlungsseite vor; timezone (IANA, etwa Europe/Berlin, Vorgabe Europe/Madrid) ist die Zone, in der delivery_notice die Uhrzeit nennt. expected_start ist der vor der Zahlung zugesagte Beginn (UTC): jetzt, wenn die Zeugen frei sind, sonst das Ende ihrer täglichen Arbeit plus Puffer; null, wenn sie keine Schätzung gemeldet haben. Nach 21:30 UTC beginnt keine Aufnahme mehr; ein späterer Auftrag beginnt im ersten freien Fenster des nächsten Tages.

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}

Wo ein Auftrag steht, insgesamt und je Zeuge: wartet auf Zahlung, eingereiht, Aufnahme läuft, erste Lieferung verschickt, abgeschlossen. Nie die E-Mail-Adresse, die bestellten Adressen oder sonst etwas über den Kunden.

Was ein Vorschlag bewirkt und was nicht

Ein Vorschlag wird festgehalten und von einem Menschen anhand dokumentierter Kriterien geprüft: ein Bezug zur Europäischen Union und öffentlich ausgelieferte maschinenlesbare Dateien. Die Entscheidung bleibt beim Betreiber dieses Archivs.

Er begründet keine Pflicht, die Domain zu beobachten, keinen Zeitplan und keine Zusicherung, dass sie aufgenommen wird. Das ist keine juristische Verzierung, sondern die redliche Haltung. Ein Archiv, das versprechen würde, auf Zuruf zu beobachten, schuldete eine Verfügbarkeit, die es nicht zusichern kann, und wer sich auf dieses Versprechen verlassen hat, fände den Beweis an dem Tag nicht vor, an dem ein Crawl scheiterte. Was hier versprochen wird, ist kleiner und einhaltbar: der Vorschlag wird festgehalten, geprüft und an die angegebene Adresse beantwortet.

Die Endung einer Domain ist ein Signal unter mehreren, kein Urteil. Eine Domain außerhalb der 28 europäischen Endungen wird nicht selbsttätig abgelehnt. Sie wird einem Menschen vorgelegt, denn eine Endung ist nur ein grober Anhaltspunkt dafür, wo ein Betreiber tatsächlich sitzt. Diese Einschränkung ist unter wie es funktioniert beschrieben.

Grenzen und Umgangsformen

Mengenbegrenzung
Vorschläge sind je Adresse und insgesamt je Tag begrenzt. Wird eine Grenze überschritten, antwortet der Endpunkt mit 429. Die Abdeckungsabfrage wird am Rand zwischengespeichert und ist für gewöhnliche Nutzung nicht mengenbegrenzt.
Aufzählen
Es gibt keinen Endpunkt, der beobachtete Domains auflistet, und der gehashte Schlüssel sorgt dafür, dass sich die Abfrage nicht durchgehen lässt. Jede Abfrage antwortet für genau eine Domain, die der Aufrufer bereits kennt.
Personenbezogene Daten
Die Abdeckungsabfrage überträgt keinen Domainnamen und keine personenbezogenen Daten. Ein Vorschlag sendet Domain und Adresse im Klartext. Er muss es, weil ein Mensch ihn liest. Siehe Datenschutzerklärung.
Beständigkeit
Dies sind die öffentlichen Vorgänge eines laufenden Archivs, keine versionierte Produkt-API. Felder können hinzukommen; die Bedeutung bestehender Felder wird nicht stillschweigend geändert. Eine umfassendere Daten-API ist eine spätere, gesonderte Frage.

Maschinenlesbare Beschreibungen

Diese Seite veröffentlicht, was sie von anderen verlangt. llms.txt beschreibt beide Zugangswege in einer Form, die ein Sprachmodell unmittelbar lesen kann; ai.txt und tdmrep.json erklären, dass für die eigenen Inhalte dieser Seite kein Vorbehalt gegen Text- und Data-Mining erhoben wird.

Etwas funktioniert nicht, oder eine Antwort sieht falsch aus? Schreiben Sie an contact@machinewitness.eu. Automatisierter Zugriff, der Schwierigkeiten macht, wird begrenzt statt stillschweigend gesperrt, und Sie erfahren davon.