veil

Approva un trasloco

Al vecchio indirizzo, firmata da una chiave di dispositivo attiva della scheda: la versione successiva della scheda che aggiunge la chiave del trasloco come dispositivo, la ricevuta e lo SHA-256 del segreto. Controllata come una pubblicazione, tenuta e non pubblicata.

POST/v1/moves/{nonce}/approve
Accesso
Richiesta firmata
Client
Client locale o server

Parametri#

NomePosizioneSignificato
nonceObbligatorioPercorsoIl nonce del trasloco: 22 caratteri in base64url.

Corpo JSON#

NomePosizioneSignificato
labelObbligatorioJSONLa label della versione, come per una pubblicazione.
bodyObbligatorioJSONIl corpo della versione.
signatureObbligatorioJSONLa firma della label con la chiave che firma la richiesta.
secretHashObbligatorioJSONSHA-256 del segreto di 32 byte del trasloco, in hex minuscolo.
retireObbligatorioJSONSe la chiave vecchia si ritira dopo.
chatObbligatorioJSONSe il browser vecchio tiene chiavi della chat da consegnare.
receiptObbligatorioJSONLa ricevuta, veil-rubrica:move-receipt:v1 e le sue otto righe.
receiptSignatureObbligatorioJSONLa firma Ed25519 della ricevuta in hex con la stessa chiave.

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 'https://veil.pub/v1/moves/MOVE_NONCE/approve' \
  -H "X-Public-Key: $OLD_KEY" -H "X-Signature: $REQUEST_SIGNATURE" --json @approval.json

Risposta#

HTTP 200application/json

200 con nonce, identity e version.

CampoTipoSignificato
noncestringIl trasloco.
identityintegerIl numero della scheda.
versionintegerLa versione che aggiunge la chiave nuova.

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.
Cache-Controlno-storeNon conservare le risposte private o temporanee in una cache condivisa.
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#

  • Spostare un browser dal vecchio indirizzo della rubrica al nuovo (dal 6 novembre 2026): una chiave vive sull’origine che l’ha fatta, quindi il nuovo indirizzo fa una chiave sua e la scheda la aggiunge con una versione firmata al vecchio indirizzo, nello stesso browser. La versione resta da parte finché la chiave nuova non torna con il segreto.

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_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_nonce

Il nonce della richiesta firmata ha un formato errato.

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

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.

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.

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.

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.

403signer_not_authorised

Il membro dell’organizzazione o il ruolo di firma non può pubblicare questa modifica.

Controlla l’affiliazione accettata e il ruolo richiesto per la modifica.

404no_move

Questa rubrica ha un indirizzo solo, quindi non c’è un browser da spostare.

Fai una scheda o accedi a questo indirizzo.

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.

409move_approved

Il trasloco è già stato approvato.

Completalo dal nuovo indirizzo, o comincia un altro trasloco.

409move_done

Il trasloco è finito: la chiave nuova è sulla scheda.

Non c’è niente da fare. Leggi la scheda per vedere la chiave nuova.

409replayed_nonce

La chiave di firma ha già usato questo nonce.

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

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.

410move_expired

Il trasloco ha aspettato più di dieci minuti.

Comincia un altro trasloco.

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.

422invalid_move

L’approvazione non è un trasloco: la sua versione deve aggiungere solo la chiave del trasloco come dispositivo della scheda, e la sua ricevuta deve nominare il trasloco, la scheda, le due chiavi, la versione e le scelte, firmata dalla chiave che firma la richiesta.

Ricostruisci la versione e la ricevuta dalla scheda e dal trasloco come sono adesso.

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.