Files
openapi/keystore.yaml
zeekayandHanzo Dev 7c5871d531 kms.lux.cloud is the brand host; kms.lux.network is retired
The .network host was retired 2026-07-27 and no longer resolves at all (a
request to it now returns nothing, not an error), so every reference to it named
an address that cannot answer. The brand host is .cloud, matching kms.zoo.cloud
and the rest of the white-label convention.

Left alone deliberately, because rewriting them would invert what they say:
the LLM.md line that RECORDS the retirement, the e2e spec that ASSERTS
kms.lux.network must not resolve, and the recorded applies + cluster backups,
which are faithful accounts of what was applied and are not config.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 07:50:38 -07:00

137 lines
4.3 KiB
YAML

openapi: '3.1.0'
info:
title: Keystore API
description: |
Local keystore. Off by default in production deployments. Enabled
via `--api-keystore-enabled=true`. The keystore stores user-named
secp256k1 private keys encrypted at rest with a user-supplied
password.
**Production keys belong in KMS** (`kms.lux.cloud`), not in the
node's local keystore. The keystore is provided for development,
test, and single-node operator workflows.
All methods are JSON-RPC 2.0. Mount point: `/v1/keystore`.
Canonical implementation: `~/work/lux/node/service/keystore/service.go`.
version: '1.0.0'
contact:
name: Lux Industries
url: https://lux.network
servers:
- url: https://api.lux.network/v1
- url: https://api-test.lux.network/v1
- url: https://api-dev.lux.network/v1
paths:
/v1/keystore:
post:
summary: Keystore JSON-RPC
operationId: keystore.rpc
description: |
Single JSON-RPC endpoint. `method` field selects the operation.
Canonical impl:
`~/work/lux/node/service/keystore/service.go`.
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateUserRequest'
- $ref: '#/components/schemas/DeleteUserRequest'
- $ref: '#/components/schemas/ListUsersRequest'
- $ref: '#/components/schemas/ImportUserRequest'
- $ref: '#/components/schemas/ExportUserRequest'
responses:
'200':
description: JSON-RPC envelope.
content:
application/json:
schema:
$ref: '#/components/schemas/JsonRpcResponse'
components:
schemas:
JsonRpcResponse:
type: object
required: [jsonrpc, id, result]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
result: {}
UserPass:
type: object
required: [username, password]
properties:
username:
type: string
minLength: 1
password:
type: string
minLength: 1
description: |
Symmetric password used to derive the at-rest encryption
key. The keystore stores `argon2id(password, salt)` for
verification; the password itself is never persisted.
CreateUserRequest:
type: object
required: [jsonrpc, id, method, params]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
method: { type: string, enum: ['keystore.createUser'] }
params: { $ref: '#/components/schemas/UserPass' }
description: |
Canonical impl: `service/keystore/service.go:CreateUser`.
DeleteUserRequest:
type: object
required: [jsonrpc, id, method, params]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
method: { type: string, enum: ['keystore.deleteUser'] }
params: { $ref: '#/components/schemas/UserPass' }
ListUsersRequest:
type: object
required: [jsonrpc, id, method]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
method: { type: string, enum: ['keystore.listUsers'] }
params:
type: object
maxProperties: 0
ImportUserRequest:
type: object
required: [jsonrpc, id, method, params]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
method: { type: string, enum: ['keystore.importUser'] }
params:
type: object
required: [username, password, user]
properties:
username: { type: string }
password: { type: string }
user:
type: string
description: hex-encoded exported user blob.
ExportUserRequest:
type: object
required: [jsonrpc, id, method, params]
properties:
jsonrpc: { type: string, enum: ['2.0'] }
id: { oneOf: [{type: string}, {type: integer}] }
method: { type: string, enum: ['keystore.exportUser'] }
params: { $ref: '#/components/schemas/UserPass' }