veil

Crea la scheda di una persona

Pubblica il primo record, firmato dalla chiave che contiene.

POST/v1/identities
Accesso
Richiesta firmata
Client
Client locale o server

Corpo JSON#

NomePosizioneSignificato
recordObbligatorioJSONIl record canonico completo della persona o organizzazione, inclusi i campi della storia.
signatureObbligatorioJSONLa firma del record, distinta dall’intestazione di firma della richiesta.
logoDataJSONL’immagine che record.logo nomina per hash, in base64 standard con padding su una riga. Obbligatorio quando la versione porta un’immagine nuova. Con un’immagine invariata si può omettere, e se arriva deve corrispondere.
nonceObbligatorioJSONUn nonce nuovo da 16 a 128 caratteri con lettere, cifre, trattino basso o trattino.
timestampObbligatorioJSONMillisecondi Unix entro due minuti dall’orologio del server.
clientSalt, saltTicketJSONCoppia facoltativa per la prima versione. Chiedi il biglietto prima di scegliere il sale del client.
labelJSONFormato 2: l’intestazione come oggetto JSON; il server la codifica in forma canonica e controlla la firma su quei byte.
bodyJSONFormato 2: il corpo come oggetto JSON, con il suo hash in label.body.
pictureDataJSONFormato 2: i byte di una nuova immagine che il corpo nomina per hash, in base64 standard con padding.

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
curl -fsS -X POST \
  -H "X-Public-Key: $PUBLIC_KEY" \
  -H "X-Signature: $REQUEST_SIGNATURE" --json @request.json \
  "https://veil.rip/v1/identities"

Risposta#

HTTP 201application/json

201 con n, id, url, token, version, commitment, logIndex, publishedAt e checkpoint. La risposta segue la pubblicazione controfirmata.

CampoTipoSignificato
nintegerNumero permanente della scheda.
idstringImpegno della prima versione in hex.
urlstringURL permanente della scheda.
tokenstringPseudonimo stabile nel registro in base64url.
versionintegerNumero della versione pubblicata.
commitmentstringImpegno di questa versione in hex.
logIndexintegerIndice nel registro a partire da zero.
publishedAtstringPrima data e ora di controfirma alla pubblicazione.
checkpointCheckpointPrimo checkpoint che copre la versione.

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.

Checkpoint Checkpoint
CampoTipoSignificato
sizeintegerNumero di foglie nell’albero firmato.
rootstringHash della radice in base64.
notestringNota firmata completa, incluse le firme del registro e dei testimoni.

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.
Locationrelative URLIndirizzo della scheda o prova pubblicata, oppure destinazione permanente del widget.
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#

  • Su un registro in formato 2 il corpo è {label, body, signature, pictureData?}, con clientSalt e saltTicket obbligatori per la versione 1; un record si rifiuta con wrong_format.

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

HTTPCodiceSignificato e cosa fare
400invalid_alias

L’alias non rispetta le regole ASCII del nome.

Usa da 3 a 32 lettere ASCII minuscole, cifre, trattini o trattini bassi; inizia con una lettera e termina con una lettera o cifra.

400invalid_json

Il corpo non è un oggetto JSON, contiene chiavi duplicate o dati finali.

Invia un solo oggetto JSON valido con Content-Type application/json.

400invalid_name

Un nome contiene caratteri invisibili, controlli di direzione o caratteri di formato non ammessi.

Usa un nome visibile nella forma Unicode ammessa e firma la richiesta corretta.

400invalid_parameter

Un campo del percorso, della query o del corpo manca, è malformato o fuori intervallo.

Correggi il campo indicato in error.message prima di inviare di nuovo.

400wrong_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 format in GET /v1/log (assente vuol dire 1) e manda la forma di quel formato.

403identity_banned

La scheda che agisce è sospesa dallo staff di Veil.

Attendi la fine della restrizione o chiedi allo staff di riesaminarla.

403key_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.

404not_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.

409account_locked

La moderazione impedisce di richiedere questo account.

Controlla lo stato pubblico di moderazione della scheda corrente.

409alias_quarantined

L’alias è nei 30 giorni di quarantena dopo il rilascio.

Leggi reusableAt e il titolare precedente tramite l’endpoint degli alias.

409alias_reserved

L’alias scelto è riservato al servizio.

Scegli un altro alias.

409alias_taken

L’alias è assegnato oppure riservato da una pubblicazione in corso.

Scegli un altro alias oppure ricontrolla la disponibilità dopo la pubblicazione.

409grant_used

Un grant di verifica o affiliazione è già stato usato.

Controlla la versione risultante della scheda, poi ottieni un nuovo grant se serve ancora.

409identity_exists

Un’identità usa già questo token.

Controlla la pubblicazione esistente. Genera una nuova identità soltanto se serve una scheda diversa.

409key_already_used

Una chiave del dispositivo appartiene già a un’identità e non può essere riusata da un’altra.

Usa la scheda esistente oppure genera una nuova chiave del dispositivo.

409salt_ticket_invalid

Il ticket del sale è sconosciuto, scaduto o già usato.

Richiedi un nuovo ticket e ricostruisci e firma la prima versione con esso.

409takeover_already_open

Un subentro per questo account collegato è già aperto.

Leggi il subentro in attesa invece di aprirne un altro.

409version_conflict

La versione non può essere pubblicata rispetto allo stato corrente della scheda.

Leggi la scheda più recente, riconcilia la modifica e firma una nuova versione.

410erased

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.

413payload_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.

422grant_expired

Il grant di verifica o affiliazione è scaduto.

Ottieni un nuovo grant prima di pubblicare la versione.

422invalid_grant

Il grant di verifica o affiliazione non è valido oppure appartiene a un’altra operazione.

Usa il grant emesso per questa specifica scheda, account o affiliazione.

422invalid_op

Un’operazione è sconosciuta, malformata, non è del tipo o della versione della scheda, oppure non cambia niente.

Correggi l’operazione indicata in error.message.

422invalid_record

La versione dell’identità viola le regole del record firmato.

Correggi il problema di convalida, rendi canonico il record e firmalo di nuovo.

422invalid_record_signature

La firma della versione dell’identità non è valida.

Firma il record canonico esatto con il prefisso identity-version e la chiave dichiarata.

422label_mismatch

prev, body, auth o state dell’intestazione non sono quelli che danno la catena, il corpo e le operazioni.

Rileggi la scheda, pianifica le operazioni sul suo stato corrente e firma la nuova intestazione.

422membership_needs_grant

Un’affiliazione all’organizzazione non ha il grant di accettazione.

Accetta l’invito e includi il grant nella prossima versione firmata.

422not_a_person

La scheda è un’organizzazione dove è richiesta una persona.

Usa l’endpoint delle organizzazioni oppure la scheda di una persona idonea.

502log_mismatch

La risposta del registro non corrisponde alla voce firmata o alla prova attese.

Non considerare verificata la pubblicazione. Controlla scheda e registro prima di riprovare.

503log_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
HTTPCodiceSignificato e cosa fare
400invalid_nonce

Il nonce della richiesta firmata ha un formato errato.

Genera un nuovo nonce da 16 a 128 caratteri usando lettere, cifre, _ o -.

400invalid_signature_alg

X-Signature-Alg non è supportato.

Usa un algoritmo di firma supportato e la codifica corretta per chiave e firma.

400invalid_timestamp

Il timestamp della richiesta firmata non è espresso in millisecondi Unix.

Usa un timestamp Unix intero in millisecondi e firma la richiesta corretta.

401invalid_signature

La firma della richiesta HTTP non è valida.

Firma metodo, percorso e byte del corpo esatti, senza modificarli dopo.

401missing_signature

La richiesta richiede una firma del dispositivo e le intestazioni mancano o non sono leggibili.

Invia X-Public-Key, X-Signature e i metadati della richiesta firmata. Una chiave API non sostituisce la firma del dispositivo.

401stale_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.

403key_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.

409replayed_nonce

La chiave di firma ha già usato questo nonce.

Controlla se la richiesta precedente è riuscita prima di crearne una nuova firmata.

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.