{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"card-statements","kind":"endpoint","group":"cards","title":"Leggi le dichiarazioni di una scheda","method":"GET","path":"/{kind}/{card}/statements.json","paths":["/{kind}/{card}/statements"],"summary":"Le dichiarazioni firmate di una scheda, dalla più recente, ognuna con quello che serve per controllarla. Lo stesso indirizzo senza .json è la pagina che le controlla.","response":"card, total, statements, next (il before della pagina dopo, o null) e feed.","parameters":[{"name":"kind","description":"u per una persona, o per un’organizzazione.","in":"path","required":true},{"name":"card","description":"Il numero permanente della scheda o il suo alias corrente.","in":"path","required":true},{"name":"before","description":"Solo le dichiarazioni prima di questa posizione nel registro: next della pagina prima.","in":"query","required":false},{"name":"limit","description":"Da 1 a 100, 20 se manca.","in":"query","required":false}],"sample":"/u/1/statements.json","access":"public","base":"directory","notes":[],"errors":["400 invalid_parameter","400 wrong_format","401 invalid_api_key","403 api_key_scope","403 api_key_suspended","403 developer_suspended","404 not_found","410 erased","429 rate_limited","500 internal_error","503 busy"],"related":["statement","statements-feed","publish-statement"],"sections":[{"kind":"code","language":"shell","code":"curl -fsS 'https://veil.rip/u/1/statements.json'"}],"verify":"Controlla ogni elemento prima di mostrarlo come della scheda: dichiarazione canonica, c = SHA-256(salt ‖ statement), la firma della voce su \"veil-rubrica:card-entry:v2\\n\" e la voce senza firma, con una chiave attiva per chi firma alla posizione i (dalle sue versioni di autorità), e l’inclusione in un checkpoint firmato dal registro e controfirmato da un quorum. L’elenco in sé è la parola del server: può tralasciare una voce.","live":false,"responses":[{"status":200,"contentType":"application/json","description":"Le dichiarazioni della scheda.","fields":[{"name":"card","type":"object","description":"n, type, name, token e url della scheda."},{"name":"total","type":"integer","description":"Quante dichiarazioni ha la scheda nel registro, ritiri compresi."},{"name":"statements","type":"array<object>","description":"Questa pagina, dalla più recente."},{"name":"next","type":"integer | null","description":"Il before della pagina dopo, o null."},{"name":"feed","type":"string","description":"Il feed Atom della scheda."}]}],"responseObjects":[{"id":"card-statement","title":"Dichiarazione","fields":[{"name":"id","type":"integer","description":"La posizione della voce nel registro: l’id permanente della dichiarazione."},{"name":"kind","type":"string","description":"statement oppure alert."},{"name":"n","type":"integer","description":"La scheda che fa la dichiarazione."},{"name":"signer","type":"object","description":"n e token della scheda di persona la cui chiave ha firmato: la scheda stessa, o un proprietario o amministratore di un’organizzazione."},{"name":"statement","type":"string","description":"La dichiarazione come è stata firmata, in JSON canonico. I suoi campi sono ripetuti sotto per mostrarli."},{"name":"salt","type":"string","description":"32 byte in hex: c della voce è SHA-256(salt ‖ statement)."},{"name":"entry","type":"string","description":"La voce del registro con la firma, come il registro la tiene."},{"name":"i","type":"integer","description":"La posizione della voce nel registro (la stessa di id)."},{"name":"publishedAt","type":"string | null","description":"La prima controfirma sul primo checkpoint che contiene la voce."},{"name":"checkpoint","type":"object | null","description":"size e note del checkpoint controfirmato che data la voce. Null quando il registro non si legge."},{"name":"inclusion","type":"array<string> | null","description":"La prova di inclusione RFC 6962 della voce in quel checkpoint, in hex, dal più profondo."},{"name":"title","type":"string","description":"Il titolo, da 1 a 200 caratteri."},{"name":"text","type":"string","description":"Il testo, da 1 a 4 000 caratteri, con gli a capo."},{"name":"link","type":"string | null","description":"Un link https facoltativo."},{"name":"retracts","type":"integer | null","description":"L’id della dichiarazione che questa ritira."},{"name":"retractedBy","type":"object | null","description":"id, publishedAt e title della dichiarazione che ritira questa."},{"name":"url","type":"string","description":"La pagina della dichiarazione."}]}],"errorFormat":"json","responseHeaders":[{"name":"Content-Type","value":"application/json","description":"Usa il tipo dichiarato per scegliere come leggere il corpo."},{"name":"Date","value":"HTTP date","description":"Ora del server. Confrontala con il tuo orologio per firmare le richieste."},{"name":"Cache-Control","value":"no-cache","description":"Richiedila ogni volta: una dichiarazione o un avviso nuovi si vedono subito."}],"errorDetails":[{"status":400,"code":"invalid_parameter","description":"Un campo del percorso, della query o del corpo manca, è malformato o fuori intervallo.","action":"Correggi il campo indicato in `error.message` prima di inviare di nuovo.","scope":"endpoint"},{"status":400,"code":"wrong_format","description":"La richiesta o la lettura appartiene all’altro formato del registro di questo server: un record v1 su un registro in formato 2, o una lettura del formato 2 su un registro in formato 1.","action":"Leggi `format` in GET /v1/log (assente vuol dire 1) e manda la forma di quel formato.","scope":"endpoint"},{"status":401,"code":"invalid_api_key","description":"La credenziale Bearer è malformata, sconosciuta, scaduta o revocata.","action":"Usa una chiave attiva. Per l’accesso pubblico anonimo, rimuovi del tutto `Authorization`. Credenziali non valide non attivano automaticamente l’accesso anonimo.","scope":"apiKey"},{"status":403,"code":"api_key_scope","description":"La chiave API non ha il permesso read o verify, oppure l’endpoint non accetta chiavi Bearer.","action":"Usa il permesso corretto. Le modifiche alle schede e la gestione delle chiavi richiedono una firma del dispositivo.","scope":"apiKey"},{"status":403,"code":"api_key_suspended","description":"Questa chiave API è sospesa.","action":"Chiedi allo staff di ripristinarla; un’altra chiave non rimuove la sospensione dell’account.","scope":"apiKey"},{"status":403,"code":"developer_suspended","description":"L’account API del titolare è sospeso oppure la scheda titolare non è disponibile.","action":"Controlla l’account titolare e le restrizioni dello staff. Creare un’altra chiave non aggira la sospensione.","scope":"apiKey"},{"status":404,"code":"not_found","description":"La scheda, la chiave, l’alias, il codice o la risorsa richiesti non sono stati trovati.","action":"Controlla l’identificatore. Codici e anteprime temporanei potrebbero essere scaduti o già usati.","scope":"endpoint"},{"status":410,"code":"erased","description":"La scheda esisteva ed è stata cancellata o rimossa. La risposta contiene anche la ricevuta pubblica di cancellazione.","action":"Smetti di usare questa scheda come autorità corrente. Conserva soltanto la ricevuta pubblica se serve.","scope":"endpoint"},{"status":429,"code":"rate_limited","description":"È stato superato un limite anonimo, delle richieste firmate o della chiave API.","action":"Attendi almeno i secondi indicati da `Retry-After`. Condividi coda e budget dei tentativi tra i tuoi processi.","scope":"common"},{"status":500,"code":"internal_error","description":"Si è verificato un errore imprevisto del server. I dettagli interni non vengono restituiti.","action":"Riprova le letture con attese crescenti e un limite. Controlla l’esito delle scritture prima di inviare una nuova operazione firmata.","scope":"common"},{"status":503,"code":"busy","description":"L’applicazione ha raggiunto un limite temporaneo di concorrenza o del database.","action":"Attendi i secondi indicati da `Retry-After` e riprova con attese crescenti e un limite.","scope":"common"}],"documentationUrl":"https://veil.rip/docs/card-statements?lang=it","supportsBrowserFetch":true,"browserMode":"fetch"}}