veil

Completa un trasloco

Al nuovo indirizzo, firmata dalla chiave del trasloco, con il segreto: la versione tenuta da parte si pubblica per la stessa strada della versione successiva di una scheda. Una seconda chiamata riceve la stessa risposta.

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

Parametri#

NomePosizioneSignificato
nonceObbligatorioPercorsoIl nonce del trasloco: 22 caratteri in base64url.

Corpo JSON#

NomePosizioneSignificato
secretObbligatorioJSONIl segreto di 32 byte del trasloco in base64url, che la pagina vecchia ha passato a questa.

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/complete' \
  -H "X-Public-Key: $NEW_KEY" -H "X-Signature: $REQUEST_SIGNATURE" --json @complete.json

Risposta#

HTTP 201application/json

201 con identity, version, url, logIndex, publishedAt, checkpoint, receipt e receiptSignature; 200 con gli stessi e again true dopo.

CampoTipoSignificato
identityintegerIl numero della scheda.
versionintegerLa versione che ha aggiunto la chiave.
logIndexintegerLa sua voce nel registro.
receiptstringLa ricevuta firmata dalla chiave vecchia.

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.

403move_forbidden

Il trasloco non spetta a chi chiama: firma un’altra chiave, il segreto non è quello del trasloco, o la pagina vecchia non l’ha ancora approvato. I tre casi hanno la stessa risposta.

Completa un trasloco solo dal browser che l’ha cominciato, con il segreto che la sua approvazione ha restituito.

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.

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.

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.