{"revision":"0ed62d2c742f8e20","language":"en","entry":{"id":"salt-ticket","kind":"endpoint","group":"manage","title":"Request a first-version salt ticket","method":"POST","path":"/v1/salt-tickets","paths":[],"summary":"Commit the server’s half of the first-version salt before the device chooses its half.","response":"201 with ticket, serverSalt and expiresAt. The ticket lasts ten minutes, is used once and can be lost on restart.","parameters":[],"sample":"/v1/salt-tickets","access":"public-write","base":"directory","notes":[],"errors":["400 invalid_json","413 payload_too_large","429 rate_limited","500 internal_error","503 busy"],"related":[],"sections":[{"kind":"code","language":"shell","code":"curl -fsS -X POST 'https://veil.rip/v1/salt-tickets'"}],"live":false,"responses":[{"status":201,"contentType":"application/json","description":"201 with ticket, serverSalt and expiresAt. The ticket lasts ten minutes, is used once and can be lost on restart.","fields":[{"name":"ticket","type":"string","description":"Single-use opaque ticket."},{"name":"serverSalt","type":"string","description":"Server’s 16-byte salt contribution in hex."},{"name":"expiresAt","type":"string","description":"Ticket expiry time."}]}],"responseObjects":[],"errorFormat":"json","errorDetails":[{"status":400,"code":"invalid_json","description":"The body is not a JSON object, contains duplicate keys or has trailing data.","action":"Send one valid JSON object with `Content-Type` application/json.","scope":"endpoint"},{"status":413,"code":"payload_too_large","description":"The request body exceeds this endpoint’s byte limit.","action":"Reduce the encoded body. API-key management accepts at most 8 KiB.","scope":"endpoint"},{"status":429,"code":"rate_limited","description":"An anonymous, signed-request or API-key allowance was exceeded.","action":"Wait at least `Retry-After` seconds. Share a queue and retry budget across your workers.","scope":"common"},{"status":500,"code":"internal_error","description":"An unexpected server error occurred. Internal details are not returned.","action":"Retry reads with bounded backoff. Check write results before sending a new signed operation.","scope":"common"},{"status":503,"code":"busy","description":"The application has reached a temporary concurrency or database limit.","action":"Wait `Retry-After` seconds and retry with bounded backoff.","scope":"common"}],"responseHeaders":[{"name":"Content-Type","value":"application/json","description":"Use the declared media type before choosing a parser."},{"name":"Date","value":"HTTP date","description":"Server time. Compare it with your clock when signing requests."},{"name":"Cache-Control","value":"no-store","description":"Do not persist private or temporary responses in a shared cache."},{"name":"Retry-After","value":"integer seconds, on rate_limited or busy","description":"Wait at least this long before retrying. Other 429/503 codes do not necessarily include it."}],"documentationUrl":"https://veil.rip/docs/salt-ticket","supportsBrowserFetch":false,"browserMode":"local-or-server"}}