{ "sites": { "x-owner": "ssh_access", "get": { "operationId": "listHpcSites", "summary": "List the Sites the caller can act for", "description": "The Sites where the signed-in member has an account, as id and name. Discovery only: every other route names its Site, and the API answers the same 404 not_found for a Site the caller cannot act at, a Site that does not exist and a missing one.", "responses": { "200": { "description": "The caller's Sites", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcSites" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "access": { "x-owner": "ssh_access", "parameters": [ { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "get": { "operationId": "getHpcAccess", "summary": "Read the caller's HPC access", "description": "Lists every reason that stops the caller submitting keys. Never fails on gates.", "responses": { "200": { "description": "The caller's HPC access read model", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/MemberHpcAccess" } } } }, "404": { "description": "not_found: the Site is not available to the caller", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "keys": { "x-owner": "ssh_access", "parameters": [ { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "get": { "operationId": "listHpcKeys", "summary": "List the caller's keys", "responses": { "200": { "description": "The caller's keys", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKeys" } } } }, "404": { "description": "not_found: the Site is not available to the caller", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] }, "post": { "operationId": "submitHpcKey", "summary": "Submit one key", "parameters": [ { "name": "Idempotency-Key", "in": "header", "required": true, "description": "Command identity: repeat it unchanged when retrying an uncertain request.", "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/KeyInput" } } } }, "responses": { "201": { "description": "The recorded key, in the state the Site side set", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKey" } } } }, "404": { "description": "not_found: the Site is not available to the caller", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "400": { "description": "Invalid JSON, identity or body", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "403": { "description": "Every failing gate, in #678 order; nothing was recorded", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/GatedErrors" } } } }, "409": { "description": "key_duplicate, key_limit_reached, submission_in_progress or idempotency_conflict", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "415": { "description": "unsupported_media_type", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "422": { "description": "A universal key check failed", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "validate": { "x-owner": "ssh_access", "parameters": [ { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "post": { "operationId": "validateHpcKey", "summary": "Check one key without submitting it", "description": "Runs every submission check in the same order and records nothing.", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/KeyInput" } } } }, "responses": { "200": { "description": "What the record would hold", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKeyPreview" } } } }, "404": { "description": "not_found: the Site is not available to the caller", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "400": { "description": "Invalid JSON or body", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "403": { "description": "Every failing gate, in #678 order; nothing was recorded", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/GatedErrors" } } } }, "409": { "description": "key_duplicate or key_limit_reached", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "415": { "description": "unsupported_media_type", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "422": { "description": "A universal key check failed", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "key": { "x-owner": "ssh_access", "parameters": [ { "name": "keyId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "get": { "operationId": "getHpcKey", "summary": "Read one of the caller's keys", "responses": { "200": { "description": "The key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKey" } } } }, "400": { "description": "invalid_id", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "404": { "description": "key_not_found; not_found for a Site the caller cannot act at", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] }, "delete": { "operationId": "deleteHpcKey", "summary": "Delete a rejected or revoked key", "parameters": [ { "name": "Idempotency-Key", "in": "header", "required": true, "description": "Command identity: repeat it unchanged when retrying an uncertain request.", "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Deleted" }, "400": { "description": "invalid_id", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "404": { "description": "key_not_found; not_found for a Site the caller cannot act at", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "409": { "description": "key_state_conflict or idempotency_conflict", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "revoke": { "x-owner": "ssh_access", "parameters": [ { "name": "keyId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "post": { "operationId": "revokeHpcKey", "summary": "Revoke a deployed key or cancel a pending one; never gated", "parameters": [ { "name": "Idempotency-Key", "in": "header", "required": true, "description": "Command identity: repeat it unchanged when retrying an uncertain request.", "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "The key as it now is", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKey" } } } }, "400": { "description": "invalid_id", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "404": { "description": "key_not_found; not_found for a Site the caller cannot act at", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "409": { "description": "idempotency_conflict", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "resubmit": { "x-owner": "ssh_access", "parameters": [ { "name": "keyId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "post": { "operationId": "resubmitHpcKey", "summary": "Submit a revoked key again, keeping its ID", "parameters": [ { "name": "Idempotency-Key", "in": "header", "required": true, "description": "Command identity: repeat it unchanged when retrying an uncertain request.", "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "The key as it now is", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/HpcKey" } } } }, "400": { "description": "invalid_id", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "403": { "description": "Every failing gate, in #678 order; nothing was recorded", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/GatedErrors" } } } }, "404": { "description": "key_not_found; not_found for a Site the caller cannot act at", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "409": { "description": "key_state_conflict, submission_in_progress or idempotency_conflict", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "422": { "description": "The stored line fails a current key check", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } }, "projection": { "x-owner": "ssh_access", "parameters": [ { "name": "siteId", "in": "path", "required": true, "description": "The Site the caller acts at, from GET /sites.", "schema": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,62}$" } } ], "get": { "operationId": "getHpcProjection", "summary": "Read the caller's live key projection", "description": "The pharos.realtime.v1.ProjectionSnapshot of the caller's keys: the projection bytes the realtime channel publishes, with each root's revision. Read it after the live connection subscribes, and again once when history cannot be recovered.", "responses": { "200": { "description": "The caller's projection snapshot", "content": { "application/x-protobuf": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "not_found: the Site is not available to the caller", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "401": { "description": "No session or CLI key", "content": { "application/json": { "schema": { "$ref": "schemas.json#/schemas/Error" } } } }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } }, "security": [{"CLIKey": []}, {"OperatorSession": []}, {"MCPAssertion": []}] } } }