{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"request-erasure","kind":"endpoint","group":"manage","title":"Chiedi la cancellazione della scheda","method":"POST","path":"/v1/identities/{n}/erase","paths":[],"summary":"Una chiave attiva della persona o un proprietario dell’organizzazione firma la richiesta. Ci sono 24 ore per annullarla.","response":"202 con n, requestedAt, executesAt e key. Dopo il periodo di annullamento la cancellazione elimina le aperture dei record e lascia gli impegni nel registro pubblico.","parameters":[{"name":"n","description":"Numero permanente positivo della scheda.","in":"path","required":true}],"sample":"/v1/identities/1/erase","access":"signed","base":"directory","notes":["Su un registro in formato 2 il signer della chiusura è la scheda stessa per una persona, e la scheda del proprietario che la chiede per un’organizzazione. Il server scrive la chiusura nel registro quando la cancellazione si esegue, e la scheda chiusa risponde poi 410 con closed."],"errors":["400 invalid_json","400 invalid_nonce","400 invalid_parameter","400 invalid_signature_alg","400 invalid_timestamp","401 invalid_signature","401 missing_signature","401 stale_timestamp","403 key_banned","403 key_mismatch","404 not_found","409 erase_already_requested","409 replayed_nonce","409 signer_stale","409 version_conflict","410 erased","413 payload_too_large","422 bad_entry","422 closing_required","422 invalid_statement_signature","422 last_owner","422 staff_org_target","429 rate_limited","500 internal_error","503 busy"],"related":["signed-requests"],"sections":[{"kind":"code","language":"shell","code":"curl -fsS -X POST \\\n  -H \"X-Public-Key: $PUBLIC_KEY\" \\\n  -H \"X-Signature: $REQUEST_SIGNATURE\" --json @request.json \\\n  \"https://veil.rip/v1/identities/1/erase\""},{"kind":"code","language":"text","code":"veil-rubrica:erase:v1\n<CARD_TOKEN>\n<TIME_UNIX_SECONDS>"},{"kind":"code","language":"text","code":"veil-rubrica:close-entry:v2\n{\"key\":\"<PUBLIC_KEY>\",\"kind\":\"closed\",\"latest\":\"<CURRENT_LABEL_HASH>\",\"signer\":{\"identity\":\"<SIGNER_TOKEN>\",\"n\":<SIGNER_VERSION>},\"time\":<TIME_UNIX_SECONDS>,\"token\":\"<CARD_TOKEN>\",\"v\":2}"}],"bodyFields":[{"name":"time","description":"Secondi Unix entro cinque minuti dall’orologio del server. Fa parte anche della dichiarazione di cancellazione.","in":"body","required":true},{"name":"signature","description":"La firma della dichiarazione di cancellazione con la stessa chiave di X-Public-Key.","in":"body","required":true},{"name":"closing","description":"Formato 2, e lì obbligatorio: la voce di chiusura {text, signature} firmata con la stessa chiave. text è la voce canonica senza la firma, con key, kind closed, latest (l’hash dell’intestazione corrente della scheda), signer, time, token e v. signature copre veil-rubrica:close-entry:v2 e un a capo seguiti da text.","in":"body","required":false}],"live":false,"responses":[{"status":202,"contentType":"application/json","description":"202 con n, requestedAt, executesAt e key. Dopo il periodo di annullamento la cancellazione elimina le aperture dei record e lascia gli impegni nel registro pubblico.","fields":[{"name":"n","type":"integer","description":"Scheda di cui è prevista la cancellazione."},{"name":"requestedAt","type":"string","description":"Data e ora della richiesta."},{"name":"executesAt","type":"string","description":"Data e ora prevista di esecuzione dopo il periodo di attesa."},{"name":"key","type":"string","description":"Chiave pubblica che ha firmato la richiesta di cancellazione."}]}],"responseObjects":[],"errorFormat":"json","errorDetails":[{"status":400,"code":"invalid_json","description":"Il corpo non è un oggetto JSON, contiene chiavi duplicate o dati finali.","action":"Invia un solo oggetto JSON valido con `Content-Type` application/json.","scope":"endpoint"},{"status":400,"code":"invalid_nonce","description":"Il nonce della richiesta firmata ha un formato errato.","action":"Genera un nuovo nonce da 16 a 128 caratteri usando lettere, cifre, _ o -.","scope":"common"},{"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":"invalid_signature_alg","description":"`X-Signature-Alg` non è supportato.","action":"Usa un algoritmo di firma supportato e la codifica corretta per chiave e firma.","scope":"common"},{"status":400,"code":"invalid_timestamp","description":"Il timestamp della richiesta firmata non è espresso in millisecondi Unix.","action":"Usa un timestamp Unix intero in millisecondi e firma la richiesta corretta.","scope":"common"},{"status":401,"code":"invalid_signature","description":"La firma della richiesta HTTP non è valida.","action":"Firma metodo, percorso e byte del corpo esatti, senza modificarli dopo.","scope":"common"},{"status":401,"code":"missing_signature","description":"La richiesta richiede una firma del dispositivo e le intestazioni mancano o non sono leggibili.","action":"Invia `X-Public-Key`, `X-Signature` e i metadati della richiesta firmata. Una chiave API non sostituisce la firma del dispositivo.","scope":"common"},{"status":401,"code":"stale_timestamp","description":"Il timestamp firmato è fuori dalla finestra temporale ammessa.","action":"Confronta l’intestazione Date del server con il tuo orologio, poi genera nuovi nonce, timestamp e firma.","scope":"common"},{"status":403,"code":"key_banned","description":"La chiave del dispositivo che firma è sospesa dallo staff di Veil.","action":"Usa una chiave attiva autorizzata o chiedi allo staff di riesaminare la restrizione.","scope":"common"},{"status":403,"code":"key_mismatch","description":"La chiave di firma non è autorizzata per questa scheda o operazione.","action":"Usa una chiave di dispositivo attiva con il ruolo di titolare o membro richiesto.","scope":"endpoint"},{"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":409,"code":"erase_already_requested","description":"Una cancellazione è già in attesa.","action":"Leggi sulla scheda la data e ora di esecuzione prevista.","scope":"endpoint"},{"status":409,"code":"replayed_nonce","description":"La chiave di firma ha già usato questo nonce.","action":"Controlla se la richiesta precedente è riuscita prima di crearne una nuova firmata.","scope":"common"},{"status":409,"code":"signer_stale","description":"Su un registro in formato 2 `signer.n` di una voce firmata è indietro rispetto alla versione corrente della scheda che firma.","action":"Rileggi la scheda che firma e firma di nuovo la voce con la sua versione corrente in `signer.n`.","scope":"endpoint"},{"status":409,"code":"version_conflict","description":"Su un registro in formato 2 una versione di questa scheda è ancora in viaggio verso il registro. La chiusura deve nominare la versione corrente della scheda.","action":"Aspetta che la versione sia nel registro, rileggi la scheda e firma una nuova chiusura.","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":413,"code":"payload_too_large","description":"Il corpo della richiesta supera il limite in byte dell’endpoint.","action":"Riduci il corpo codificato. La gestione delle chiavi API ammette al massimo 8 KiB.","scope":"endpoint"},{"status":422,"code":"bad_entry","description":"Su un registro in formato 2 `salt`, `entry` o `closing` di una richiesta non vanno bene. `error.message` nomina il campo.","action":"Correggi il campo indicato, firma di nuovo la voce con la chiave della richiesta e manda una nuova richiesta firmata.","scope":"endpoint"},{"status":422,"code":"closing_required","description":"Su un registro in formato 2 una cancellazione è arrivata senza la sua voce di chiusura firmata in `closing`.","action":"Firma la voce di chiusura con la stessa chiave e mandala come `closing`, con `text` e `signature`.","scope":"endpoint"},{"status":422,"code":"invalid_statement_signature","description":"La firma della dichiarazione di cancellazione non è valida.","action":"Firma i byte esatti della dichiarazione con prefisso e chiave richiesti.","scope":"endpoint"},{"status":422,"code":"last_owner","description":"La modifica lascerebbe un’organizzazione senza un proprietario accettato.","action":"Aggiungi o accetta un altro proprietario prima di rimuovere l’ultimo.","scope":"endpoint"},{"status":422,"code":"staff_org_target","description":"Questa operazione non può riguardare l’organizzazione dello staff di Veil.","action":"Scegli un destinatario idoneo.","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"}],"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":"Retry-After","value":"integer seconds, on rate_limited or busy","description":"Attendi almeno questo intervallo prima di riprovare. Altri codici 429/503 non lo includono necessariamente."}],"documentationUrl":"https://veil.rip/docs/request-erasure?lang=it","supportsBrowserFetch":false,"browserMode":"local-or-server"}}