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.
Da ottobre 2026 un software può anche ordinare un’acquisizione alla data; questo prepara un pagamento, nient’altro. Vedi ordinare un’acquisizione alla data.
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.
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.
Ordinare un’acquisizione alla data
Un software può anche ordinare un’acquisizione alla data: entrambi i testimoni prelevano gli indirizzi indicati, ne acquisiscono un’immagine a pagina intera e danno a ogni acquisizione la propria marca temporale elettronica qualificata. Un ordine per questa via prepara un pagamento e nient’altro. La risposta è un link di pagamento; non viene addebitato né acquisito nulla finché una persona non ha pagato su quella pagina. L’acquisizione viene consegnata via e-mail, di norma entro pochi minuti; dopo la sigillatura notturna segue una seconda e-mail con il sigillo del giorno. Tariffe: servizi e tariffe.
Prima che il link venga creato, ogni indirizzo viene verificato gratuitamente: un nome di dominio pubblico, non presente nella lista di arresto, un robots.txt che consente il prelievo al nostro crawler, e una risposta senza accesso. Un indirizzo che non supera la verifica viene indicato con il motivo, e nessun link viene creato. Si chiedono solo indirizzi, mai uno scopo o una vicenda.
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": "..."}
Fino a venti indirizzi di un unico dominio. language è en, de, es, fr, it o pl e stabilisce la pagina di pagamento e le e-mail; email precompila la pagina di pagamento; timezone (IANA, ad esempio Europe/Rome, predefinito Europe/Madrid) è il fuso in cui delivery_notice indica l’ora. expected_start è l’inizio promesso prima del pagamento (UTC): adesso se i testimoni sono liberi, altrimenti la fine del loro lavoro quotidiano più un margine; null se non hanno fornito una stima. Dopo le 21:30 UTC non inizia alcuna acquisizione; un ordine successivo inizia nella prima finestra libera del giorno seguente.
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}
A che punto è un ordine, nel complesso e per testimone: in attesa di pagamento, in coda, acquisizione in corso, prima consegna inviata, completato. Non restituisce mai l’indirizzo e-mail, gli indirizzi ordinati né altro sul cliente.
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.