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.
/v1/canary- Accesso
- Pubblico; chiave API facoltativa
- Client
- Fetch dal browser supportato
Esempi di richiesta#
curl -fsS 'https://veil.rip/v1/canary'const response = await fetch("https://veil.rip/v1/canary");
const { status, current } = await response.json();Prova la richiesta#
Risposta#
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.
| Campo | Tipo | Significato |
|---|---|---|
status | string | current, stale (l’ultima ha più di maxAgeDays giorni) oppure none (mai firmata). |
current | Canary | null | L’ultima dichiarazione, o null se non ne è mai stata firmata una. |
maxAgeDays | integer | Giorni dopo la sua data in cui una dichiarazione diventa vecchia: 35. |
statement | object | La dichiarazione in en e it, con {date} al posto della data ISO. |
history | array<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
| Campo | Tipo | Significato |
|---|---|---|
id | integer | Numero della dichiarazione su questo server. |
date | string | La data che il testo firmato nomina, AAAA-MM-GG in UTC. |
lang | string | en oppure it: la lingua del testo firmato. |
text | string | Il testo firmato, esatto: statement.en o statement.it con la data. |
signer | CanarySigner | La scheda del proprietario che ha firmato. |
key | string | La chiave della scheda che ha fatto la firma: hex per Ed25519, base64 per una chiave composita. |
alg | string | ed25519 oppure mldsa65-ed25519. |
device | string | null | Il nome del dispositivo della chiave, come lo tiene il server. |
signature | string | La firma, scritta come la vuole POST /v1/verify. |
block | string | Il blocco firma come l’ha mandato il proprietario. Si controlla come ogni blocco. |
signedAt | string | Quando questo server l’ha ricevuta, ISO 8601 UTC. |
staleAfter | string, optional | Solo in current: l’ultima data prima che diventi vecchia, AAAA-MM-GG. |
stale | boolean, optional | Solo in current: dalla sua data sono passati più di maxAgeDays giorni. |
Chi firma CanarySigner
| Campo | Tipo | Significato |
|---|---|---|
n | integer | Numero permanente della scheda. |
url | string | URL permanente della scheda. |
name | string | Nome visualizzato corrente; un nome nascosto diventa Card seguito dal numero, una scheda chiusa una stringa vuota. |
nameHidden | boolean | Indica se lo staff nasconde il nome. |
Intestazioni della risposta#
| Intestazione | Valore | Significato |
|---|---|---|
Content-Type | application/json | Usa il tipo dichiarato per scegliere come leggere il corpo. |
Date | HTTP date | Ora del server. Confrontala con il tuo orologio per firmare le richieste. |
Cache-Control | public, max-age=300 | La risposta può restare in cache per cinque minuti, perché la legge il piede di ogni pagina. |
Retry-After | integer seconds, on rate_limited or busy | Attendi 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
| HTTP | Codice | Significato e cosa fare |
|---|---|---|
| 401 | invalid_api_key | La credenziale Bearer è malformata, sconosciuta, scaduta o revocata. Usa una chiave attiva. Per l’accesso pubblico anonimo, rimuovi del tutto |
| 403 | api_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. |
| 403 | api_key_suspended | Questa chiave API è sospesa. Chiedi allo staff di ripristinarla; un’altra chiave non rimuove la sospensione dell’account. |
| 403 | developer_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
| HTTP | Codice | Significato e cosa fare |
|---|---|---|
| 429 | rate_limited | È stato superato un limite anonimo, delle richieste firmate o della chiave API. Attendi almeno i secondi indicati da |
| 500 | internal_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. |
| 503 | busy | L’applicazione ha raggiunto un limite temporaneo di concorrenza o del database. Attendi i secondi indicati da |