veil

Leggi il warrant canary

Ottieni l’ultima dichiarazione firmata che nessuna autorità ha chiesto in segreto a Veil i dati degli utenti, con tutte quelle precedenti.

GET/v1/canary
Accesso
Pubblico; chiave API facoltativa
Client
Fetch dal browser supportato

Esempi di richiesta#

cURL
curl -fsS 'https://veil.rip/v1/canary'
javascript
const response = await fetch("https://veil.rip/v1/canary");
const { status, current } = await response.json();

Prova la richiesta#

Risposta#

HTTP 200application/json

status vale current, stale o none. current è l’ultima dichiarazione: il testo firmato e la data, la scheda e la chiave di chi firma, la firma e il blocco. history elenca tutte le dichiarazioni, dalla più recente.

CampoTipoSignificato
statusstringcurrent, stale (l’ultima ha più di maxAgeDays giorni) oppure none (mai firmata).
currentCanary | nullL’ultima dichiarazione, o null se non ne è mai stata firmata una.
maxAgeDaysintegerGiorni dopo la sua data in cui una dichiarazione diventa vecchia: 35.
statementobjectLa dichiarazione in en e it, con {date} al posto della data ISO.
historyarray<Canary>Tutte le dichiarazioni, dalla data più recente, compresa quella corrente.

Apri un oggetto annidato per leggerne i campi. I tipi con null ammettono un valore null; i campi optional possono essere assenti. Gli altri campi sono presenti nell’oggetto.

Dichiarazione firmata Canary
CampoTipoSignificato
idintegerNumero della dichiarazione su questo server.
datestringLa data che il testo firmato nomina, AAAA-MM-GG in UTC.
langstringen oppure it: la lingua del testo firmato.
textstringIl testo firmato, esatto: statement.en o statement.it con la data.
signerCanarySignerLa scheda del proprietario che ha firmato.
keystringLa chiave della scheda che ha fatto la firma: hex per Ed25519, base64 per una chiave composita.
algstringed25519 oppure mldsa65-ed25519.
devicestring | nullIl nome del dispositivo della chiave, come lo tiene il server.
signaturestringLa firma, scritta come la vuole POST /v1/verify.
blockstringIl blocco firma come l’ha mandato il proprietario. Si controlla come ogni blocco.
signedAtstringQuando questo server l’ha ricevuta, ISO 8601 UTC.
staleAfterstring, optionalSolo in current: l’ultima data prima che diventi vecchia, AAAA-MM-GG.
staleboolean, optionalSolo in current: dalla sua data sono passati più di maxAgeDays giorni.
Chi firma CanarySigner
CampoTipoSignificato
nintegerNumero permanente della scheda.
urlstringURL permanente della scheda.
namestringNome visualizzato corrente; un nome nascosto diventa Card seguito dal numero, una scheda chiusa una stringa vuota.
nameHiddenbooleanIndica se lo staff nasconde il nome.

Intestazioni della risposta#

IntestazioneValoreSignificato
Content-Typeapplication/jsonUsa il tipo dichiarato per scegliere come leggere il corpo.
DateHTTP dateOra del server. Confrontala con il tuo orologio per firmare le richieste.
Cache-Controlpublic, max-age=300La risposta può restare in cache per cinque minuti, perché la legge il piede di ogni pagina.
Retry-Afterinteger seconds, on rate_limited or busyAttendi almeno questo intervallo prima di riprovare. Altri codici 429/503 non lo includono necessariamente.

Note d’uso#

  • Questa è la copia del server. Per controllarla leggi current.block come un blocco firma: il testo deve essere statement.en o statement.it con la data, parola per parola, e la firma deve venire da una chiave della scheda di chi firma. La pagina /canary lo fa nel browser, e POST /v1/verify dà la risposta del server.
  • Una dichiarazione è vecchia quando dalla sua data sono passati più di maxAgeDays (35) giorni. Contali dalla data firmata: stale è la parola del server.
  • Un proprietario dell’organizzazione Veil pubblica la dichiarazione ogni mese con una richiesta firmata da una chiave della sua scheda. Quella chiamata è dello staff e non fa parte di questo riferimento.

Errori#

Gli errori API restituiscono un oggetto error. Usa error.code nella logica del programma; error.message è un testo inglese per le persone e può cambiare. Guida a risposte ed errori

Quando usi una chiave API facoltativa
HTTPCodiceSignificato e cosa fare
401invalid_api_key

La credenziale Bearer è malformata, sconosciuta, scaduta o revocata.

Usa una chiave attiva. Per l’accesso pubblico anonimo, rimuovi del tutto Authorization. Credenziali non valide non attivano automaticamente l’accesso anonimo.

403api_key_scope

La chiave API non ha il permesso read o verify, oppure l’endpoint non accetta chiavi Bearer.

Usa il permesso corretto. Le modifiche alle schede e la gestione delle chiavi richiedono una firma del dispositivo.

403api_key_suspended

Questa chiave API è sospesa.

Chiedi allo staff di ripristinarla; un’altra chiave non rimuove la sospensione dell’account.

403developer_suspended

L’account API del titolare è sospeso oppure la scheda titolare non è disponibile.

Controlla l’account titolare e le restrizioni dello staff. Creare un’altra chiave non aggira la sospensione.

Errori comuni delle richieste
HTTPCodiceSignificato e cosa fare
429rate_limited

È stato superato un limite anonimo, delle richieste firmate o della chiave API.

Attendi almeno i secondi indicati da Retry-After. Condividi coda e budget dei tentativi tra i tuoi processi.

500internal_error

Si è verificato un errore imprevisto del server. I dettagli interni non vengono restituiti.

Riprova le letture con attese crescenti e un limite. Controlla l’esito delle scritture prima di inviare una nuova operazione firmata.

503busy

L’applicazione ha raggiunto un limite temporaneo di concorrenza o del database.

Attendi i secondi indicati da Retry-After e riprova con attese crescenti e un limite.