{ "read": { "x-owner": "llm_access", "get": { "operationId": "getPersonalLlmKeys", "summary": "Read the member's personal LLM key scopes and request status", "description": "Returns every Project allocation with current execution eligibility and the member's own request status. Keys are delivered by email. No key, token, address or provider binding is returned. Unknown usage measurements do not affect eligibility. Refresh explicitly to observe asynchronous fulfilment.", "security": [ { "PartySession": [] }, { "MCPAssertion": [] } ], "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Complete current private status", "content": { "application/json": { "schema": { "$ref": "keys.schemas.json#/schemas/PersonalKeys" } } } }, "400": { "description": "Invalid input" }, "401": { "description": "A current Party session is required" }, "404": { "description": "Project missing or inaccessible" }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } } } }, "manage": { "x-owner": "llm_access", "put": { "operationId": "managePersonalLlmKey", "summary": "Request, replace or revoke the member's personal LLM key", "description": "Records durable pending work against the personal access identity returned by the status query. The actor, Project and allocation must match that identity. Issuance requires fresh execution authority, a settled allocation version and the existing trusted delivery binding. Retries preserve Idempotency-Key, If-Match and body. Replacing emails one new key before retiring the previous key; revocation targets the recorded keys and preserves chat access. A pending acknowledgement does not mean a key or email has been delivered.", "security": [ { "PartySession": [] }, { "MCPAssertion": [] } ], "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "accessId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "$ref": "../../shared/http_api/parameters.json#/parameters/IdempotencyKey" }, { "$ref": "../../shared/http_api/parameters.json#/parameters/IfMatch" }, { "$ref": "../../shared/http_api/parameters.json#/parameters/CorrelationID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "keys.schemas.json#/schemas/ManagePersonalKey" } } } }, "responses": { "200": { "description": "Recorded pending outcome, or the original outcome on retry", "content": { "application/json": { "schema": { "$ref": "../../shared/http_api/schemas.json#/schemas/CommandOutcome" } } } }, "400": { "description": "Invalid input" }, "401": { "description": "A current Party session is required" }, "403": { "description": "The member is ineligible" }, "404": { "description": "Project, allocation or personal access missing or inaccessible" }, "409": { "$ref": "../../shared/http_api/responses.json#/responses/CommandConflict" }, "422": { "$ref": "../../shared/http_api/responses.json#/responses/CommandRejected" }, "428": { "description": "Expected version is required" }, "503": { "$ref": "../../shared/http_api/responses.json#/responses/503" } } } } }