Pubblica una dichiarazione firmata
Una persona o un’organizzazione pubblica una dichiarazione con titolo, testo e un link facoltativo, o ne ritira una precedente. I testimoni del registro le danno una data.
/v1/identities/{n}/statements- Accesso
- Richiesta firmata
- Client
- Client locale o server
Parametri#
| Nome | Posizione | Significato |
|---|---|---|
nObbligatorio | Percorso | Numero permanente positivo della scheda. |
Corpo JSON#
| Nome | Posizione | Significato |
|---|---|---|
statementObbligatorio | JSON | {link, retracts, text, time, title, type: "statement", v: 1}: un titolo da 1 a 200 caratteri, un testo da 1 a 4 000, un link https o null, e l’id della dichiarazione che ritira o null. |
saltObbligatorio | JSON | 32 byte casuali in 64 caratteri hex minuscoli, scelti dal browser. |
entryObbligatorio | JSON | {text, signature}: la voce {c, key, kind, signer, time, token, v: 2} in JSON canonico senza firma, e la firma di "veil-rubrica:card-entry:v2\n" + text con X-Public-Key. |
Questa chiamata richiede anche le intestazioni comuni di firma, nonce e timestamp. Prepara e firma request.json prima di usare l’esempio. Firma delle richieste
Esempi di richiesta#
curl -fsS -X POST \
-H "X-Public-Key: $PUBLIC_KEY" \
-H "X-Signature: $REQUEST_SIGNATURE" --json @request.json \
"https://veil.rip/v1/identities/1/statements"Risposta#
La dichiarazione, la sua voce e la sua prova.
| Campo | Tipo | Significato |
|---|---|---|
id | integer | La posizione della voce nel registro: l’id permanente della dichiarazione. |
kind | string | statement oppure alert. |
n | integer | La scheda che fa la dichiarazione. |
signer | object | n e token della scheda di persona la cui chiave ha firmato: la scheda stessa, o un proprietario o amministratore di un’organizzazione. |
statement | string | La dichiarazione come è stata firmata, in JSON canonico. I suoi campi sono ripetuti sotto per mostrarli. |
salt | string | 32 byte in hex: c della voce è SHA-256(salt ‖ statement). |
entry | string | La voce del registro con la firma, come il registro la tiene. |
i | integer | La posizione della voce nel registro (la stessa di id). |
publishedAt | string | null | La prima controfirma sul primo checkpoint che contiene la voce. |
checkpoint | object | null | size e note del checkpoint controfirmato che data la voce. Null quando il registro non si legge. |
inclusion | array<string> | null | La prova di inclusione RFC 6962 della voce in quel checkpoint, in hex, dal più profondo. |
title | string | Il titolo, da 1 a 200 caratteri. |
text | string | Il testo, da 1 a 4 000 caratteri, con gli a capo. |
link | string | null | Un link https facoltativo. |
retracts | integer | null | L’id della dichiarazione che questa ritira. |
retractedBy | object | null | id, publishedAt e title della dichiarazione che ritira questa. |
url | string | La pagina della dichiarazione. |
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 | no-store | Richiedila ogni volta: una dichiarazione o un avviso nuovi si vedono subito. |
Note d’uso#
- Una persona firma con una sua chiave di dispositivo; un’organizzazione tramite un proprietario o un amministratore, con una chiave della propria scheda, come per le sue versioni.
- Al più 10 dichiarazioni per scheda in 24 ore, ritiri compresi. GET su questo percorso è la pagina delle dichiarazioni dello staff (from, size).
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
| HTTP | Codice | Significato e cosa fare |
|---|---|---|
| 400 | invalid_parameter | Un campo del percorso, della query o del corpo manca, è malformato o fuori intervallo. Correggi il campo indicato in |
| 400 | wrong_format | 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. Leggi |
| 403 | identity_banned | La scheda che agisce è sospesa dallo staff di Veil. Attendi la fine della restrizione o chiedi allo staff di riesaminarla. |
| 403 | key_banned | La chiave del dispositivo che firma è sospesa dallo staff di Veil. Usa una chiave attiva autorizzata o chiedi allo staff di riesaminare la restrizione. |
| 403 | key_mismatch | La chiave di firma non è autorizzata per questa scheda o operazione. Usa una chiave di dispositivo attiva con il ruolo di titolare o membro richiesto. |
| 403 | role_not_allowed | Il ruolo che firma non può eseguire questa modifica. Usa una chiave con il ruolo richiesto. |
| 404 | not_found | La scheda, la chiave, l’alias, il codice o la risorsa richiesti non sono stati trovati. Controlla l’identificatore. Codici e anteprime temporanei potrebbero essere scaduti o già usati. |
| 409 | already_retracted | La dichiarazione indicata in Pubblica invece una dichiarazione nuova. |
| 409 | erase_pending | Su un registro in formato 2 la scheda ha una cancellazione in attesa. La sua chiusura firmata nomina la versione corrente, quindi la scheda non pubblica finché la cancellazione non è annullata. Annulla la cancellazione con POST /v1/identities/{n}/erase/cancel, poi pubblica la versione. |
| 409 | signer_stale | Su un registro in formato 2 Rileggi la scheda che firma e firma di nuovo la voce con la sua versione corrente in |
| 410 | erased | La scheda esisteva ed è stata cancellata o rimossa. La risposta contiene anche la ricevuta pubblica di cancellazione. Smetti di usare questa scheda come autorità corrente. Conserva soltanto la ricevuta pubblica se serve. |
| 422 | bad_entry | Su un registro in formato 2 Correggi il campo indicato, firma di nuovo la voce con la chiave della richiesta e manda una nuova richiesta firmata. |
| 422 | invalid_statement | Un avviso o una dichiarazione di una scheda non rispetta lo schema: un campo mancante o in più, un testo troppo lungo o con caratteri nascosti, un link non https, una data nel futuro. Correggi il campo indicato in |
| 429 | statement_quota | La scheda ha pubblicato 10 dichiarazioni nelle ultime 24 ore, ritiri compresi. Aspetta i secondi indicati da |
| 503 | log_unavailable | Al momento il registro pubblico non può essere letto, verificato o usato per pubblicare. Per le letture, considera il risultato non verificato e riprova più tardi. Prima di ripetere una scrittura, leggi la scheda per controllare se la pubblicazione è terminata. |
Errori comuni delle richieste
| HTTP | Codice | Significato e cosa fare |
|---|---|---|
| 400 | invalid_json | Il corpo non è un oggetto JSON, contiene chiavi duplicate o dati finali. Invia un solo oggetto JSON valido con |
| 400 | invalid_nonce | Il nonce della richiesta firmata ha un formato errato. Genera un nuovo nonce da 16 a 128 caratteri usando lettere, cifre, _ o -. |
| 400 | invalid_signature_alg |
Usa un algoritmo di firma supportato e la codifica corretta per chiave e firma. |
| 400 | invalid_timestamp | Il timestamp della richiesta firmata non è espresso in millisecondi Unix. Usa un timestamp Unix intero in millisecondi e firma la richiesta corretta. |
| 401 | invalid_signature | La firma della richiesta HTTP non è valida. Firma metodo, percorso e byte del corpo esatti, senza modificarli dopo. |
| 401 | missing_signature | La richiesta richiede una firma del dispositivo e le intestazioni mancano o non sono leggibili. Invia |
| 401 | stale_timestamp | Il timestamp firmato è fuori dalla finestra temporale ammessa. Confronta l’intestazione Date del server con il tuo orologio, poi genera nuovi nonce, timestamp e firma. |
| 409 | replayed_nonce | La chiave di firma ha già usato questo nonce. Controlla se la richiesta precedente è riuscita prima di crearne una nuova firmata. |
| 413 | payload_too_large | Il corpo della richiesta supera il limite in byte dell’endpoint. Riduci il corpo codificato. La gestione delle chiavi API ammette al massimo 8 KiB. |
| 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 |