machinewitness

Accesso macchina

Interrogare l'archivio da software

Questo archivio registra ciò che il web dichiara alle macchine. Sarebbe un archivio singolare se soltanto un essere umano che compila un modulo potesse interrogarlo. Due operazioni sono aperte al software: chiedere se un dominio è osservato e proporne uno all'osservazione. Senza chiave, senza registrazione, senza account.

Entrambe le operazioni restituiscono soltanto metadati. Nessuna delle due restituisce il contenuto di un file osservato, e non esiste alcun endpoint che elenchi o permetta di cercare nell'insieme osservato. Ciò che un file diceva in un dato giorno fa parte di un estratto probatorio, rilasciato su richiesta; si veda estratto probatorio.

Per un assistente: il server MCP

Se usa Claude, ChatGPT o qualunque altro strumento che parli il Model Context Protocol, aggiunga questo endpoint e i due strumenti compariranno nella Sua conversazione.

https://machinewitness.eu/mcp

Usa il trasporto Streamable HTTP ed è privo di stato: nessuna sessione da stabilire, nessun flusso tenuto aperto, nessuna credenziale. Lo aggiunga come server MCP remoto nelle impostazioni del Suo client, oppure da riga di comando:

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

check_coverage

check_coverage(domain)

Se questo archivio osservi un dominio, da quale giornata sigillata, quali file leggibili dalle macchine richieda e con quale frequenza. Un URL incollato viene accettato e ridotto al nome di dominio.

Una risposta negativa è un'affermazione su questo archivio, non sul dominio: la maggior parte del web non è osservata. Una risposta positiva non dice nulla di ciò che i file osservati contengono.

suggest_domain

suggest_domain(domain, email, reason)

Proporre che un dominio venga osservato. La risposta è sempre received con guarantee: none. È una richiesta, non un'istruzione. Si veda più sotto che cosa fa e che cosa non fa una proposta.

Per tutto il resto: semplice HTTP

Le stesse due operazioni senza MCP, e il registro delle radici come unico documento. Nulla di ciò richiede una libreria.

L'intero registro delle radici

GET /log.json

Ogni giornata sigillata, entrambi i testimoni, in un solo documento: il numero di osservazioni, la radice di Merkle, l'ora esatta della sigillatura e quali ancoraggi esterni quella giornata porti. È la forma leggibile dalle macchine del registro pubblico: senza chiave, senza paginazione, senza limite di frequenza.

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

I due testimoni sigillano in modo indipendente, quindi le loro radici differiscono per costruzione e non sono mai presentate come coincidenti. Un testimone privo di sigillo per una giornata lo dichiara esplicitamente ("sealed": false con una motivazione) anziché essere omesso. Una riga assente non deve mai leggersi come «non applicabile». Questo documento enuncia ciò che è stato sigillato, mai ciò che un dominio ha servito.

Un dominio è osservato?

GET /coverage/{sha256(domain)}

La chiave è l'impronta SHA-256 del nome di dominio nudo, in esadecimale minuscolo: senza schema, senza www., senza punto finale. L'impronta la calcola Lei, cosicché il nome non venga mai trasmesso e non compaia in alcun log. È deliberato: un testimone neutrale non deve accumulare la traccia di chi abbia chiesto di chi.

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

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

Un dominio osservato risponde con le date sigillate, le risorse richieste e l'anello che determina la cadenza:

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

Un dominio che non è più osservato risponde "active": false. I suoi record sigillati del periodo indicato restano. Un archivio non dis-osserva il passato.

Proporre un dominio

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

Tutti e tre i campi sono obbligatori. Una proposta respinta risponde "status": "rejected" con una motivazione: un nome di dominio inutilizzabile, un indirizzo di risposta mancante, o una motivazione troppo breve per essere tale.

Che cosa fa una proposta, e che cosa non fa

Una proposta viene registrata ed esaminata da una persona secondo criteri documentati: un collegamento con l'Unione europea e file leggibili dalle macchine serviti pubblicamente. La decisione resta al gestore di questo archivio.

Non crea alcun obbligo di osservare il dominio, alcun termine e alcuna assicurazione che verrà aggiunto. Non è un ornamento giuridico, è la posizione onesta. Un archivio che promettesse di osservare su richiesta dovrebbe una disponibilità che non può garantire, e chi avesse contato su quella promessa troverebbe la prova mancante il giorno in cui una scansione fallisse. Ciò che qui si promette è più modesto e può essere mantenuto: la proposta viene registrata, viene esaminata e riceve risposta all'indirizzo indicato.

L'estensione del dominio è un indizio fra gli altri, non un verdetto. Un dominio fuori dalle 28 estensioni europee non viene respinto automaticamente. Viene sottoposto a una persona, perché un'estensione è solo un'approssimazione grossolana del luogo in cui un gestore si trovi realmente. Questo limite è descritto in come funziona.

Limiti e buon uso

Limiti di frequenza
Le proposte sono limitate per indirizzo e complessivamente al giorno. Superare un limite restituisce 429. La consultazione di copertura è memorizzata in cache ai margini della rete e non è soggetta a limiti di frequenza per un uso ordinario.
Enumerazione
Nessun endpoint elenca i domini osservati, e la chiave in forma di impronta fa sì che la consultazione non possa essere percorsa. Ogni consultazione risponde per un dominio che il chiamante già conosce.
Dati personali
La consultazione di copertura non trasmette né nome di dominio né dati personali. Una proposta trasmette il dominio e il Suo indirizzo in chiaro. Deve farlo, perché una persona la legge. Si veda l'informativa sulla privacy.
Stabilità
Queste sono le operazioni pubbliche di un archivio in esercizio, non l'API versionata di un prodotto. Potranno essere aggiunti campi; il significato dei campi esistenti non sarà modificato in silenzio. Un'API di dati più ampia è una questione successiva e distinta.

Descrizioni leggibili dalle macchine

Questo sito pubblica ciò che chiede agli altri. llms.txt descrive entrambe le vie d'accesso in una forma che un modello linguistico può leggere direttamente; ai.txt e tdmrep.json dichiarano che non è formulata alcuna riserva contro l'estrazione di testo e di dati dei contenuti propri di questo sito.

Qualcosa non funziona, o una risposta Le sembra errata? Scriva a contact@machinewitness.eu. Un accesso automatizzato che crei problemi verrà limitato anziché bloccato in silenzio, e Lei ne sarà informato.