swagger: '2.0' info: title: Blue API reference Admin Luster API description: 'Alphaus provides an API for interacting with its services. Blue API is a RESTful API that can be accessed by an HTTP client such as `curl`, or any HTTP library which is part of most modern programming languages. This API reference is autogenerated from [protocol buffers](https://developers.google.com/protocol-buffers) defined in this [repository](https://github.com/alphauslabs/blueapi), together with our supported [client libraries](https://alphauslabs.github.io/docs/blueapi/client-sdks/). See the official [documentation](https://alphauslabs.github.io/docs/blueapi/overview/) for more information. You may encounter the following feature maturity indicators: - **(WORK-IN-PROGRESS)** - Development is ongoing, don''t use yet; - **(BETA)** - New or experimental features, subject to changes; and - **(DEPRECATED)** - Outdated or replaced features. Some endpoints, especially those that return lists of resources, have streaming responses; newline-separated stream of “chunks”. Each chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, if any.' version: v1 host: api.alphaus.cloud basePath: /m/blue schemes: - https consumes: - application/json produces: - application/json tags: - name: Luster description: '(ALPHA) Luster API. Base URL: https://api.alphaus.cloud/m/blue/luster' externalDocs: description: Luster is a service that manages user contexts. url: https://github.com/alphauslabs/blueapi/tree/main/luster/ paths: /v1/contexts/label: post: summary: (ALPHA) [LABEL] Creates label. operationId: Luster_CreateLabel responses: '200': description: A successful response. schema: $ref: '#/definitions/apiLusterLabel' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: body description: Request message for the Luster.CreateLabel rpc. in: body required: true schema: $ref: '#/definitions/v1CreateLabelRequest' tags: - Luster /v1/contexts/label/{id}: delete: summary: (ALPHA) [LABEL] Deletes label. operationId: Luster_DeleteLabel responses: '200': description: A successful response. schema: type: object properties: {} default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: id description: Required. the label id. in: path required: true type: string tags: - Luster put: summary: (ALPHA) [LABEL] Updates label. operationId: Luster_UpdateLabel responses: '200': description: A successful response. schema: $ref: '#/definitions/apiLusterLabel' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: id description: Required. the label id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterUpdateLabelBody' tags: - Luster /v1/contexts/label:read: post: summary: (ALPHA) [LABEL] Reads labels. operationId: Luster_ReadLabels responses: '200': description: A successful response.(streaming responses) schema: type: object properties: result: $ref: '#/definitions/apiLusterLabel' error: $ref: '#/definitions/rpcStatus' title: Stream result of apiLusterLabel default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: body description: Request message for the Luster.ReadLabels rpc. in: body required: true schema: $ref: '#/definitions/v1ReadLabelsRequest' tags: - Luster /v1/contexts/{spaceId}/context: post: summary: (ALPHA) [CONTEXT] Creates context. operationId: Luster_CreateContext responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterContext' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. The space id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterCreateContextBody' tags: - Luster /v1/contexts/{spaceId}/context/{contextId}/comment: post: summary: (ALPHA) [COMMENT] Creates comment in context. operationId: Luster_CreateContextComment responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterComment' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. the space id. in: path required: true type: string - name: contextId description: Required. the context id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterCreateContextCommentBody' tags: - Luster /v1/contexts/{spaceId}/context/{contextId}/comment/{id}: delete: summary: (ALPHA) [COMMENT] Deletes comment in context. operationId: Luster_DeleteContextComment responses: '200': description: A successful response. schema: type: object properties: {} default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. the space id. in: path required: true type: string - name: contextId description: Required. the context id. in: path required: true type: string - name: id description: Required. the comment id. in: path required: true type: string tags: - Luster put: summary: (ALPHA) [COMMENT] Updates comment in context. operationId: Luster_UpdateContextComment responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterComment' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. the space id. in: path required: true type: string - name: contextId description: Required. the context id. in: path required: true type: string - name: id description: Required. the comment id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterUpdateContextCommentBody' tags: - Luster /v1/contexts/{spaceId}/context/{id}: get: summary: (ALPHA [CONTEXT]) Gets context. operationId: Luster_GetContext responses: '200': description: A successful response. schema: $ref: '#/definitions/v1GetContextResponse' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. The space id. in: path required: true type: string - name: id description: the context id. in: path required: true type: string - name: fieldMask description: 'Optional. field_mask see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' in: query required: false type: string tags: - Luster delete: summary: (ALPHA) [CONTEXT] Deletes context. operationId: Luster_DeleteContext responses: '200': description: A successful response. schema: type: object properties: {} default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. The space id. in: path required: true type: string - name: id description: Required. the context id. in: path required: true type: string tags: - Luster put: summary: (ALPHA) [CONTEXT] Updates context. operationId: Luster_UpdateContext responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterContext' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. The space id. in: path required: true type: string - name: id description: Required. the context id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterUpdateContextBody' tags: - Luster /v1/contexts/{spaceId}:read: post: summary: (ALPHA) [CONTEXT] Reads contexts. operationId: Luster_ReadContexts responses: '200': description: A successful response.(streaming responses) schema: type: object properties: result: $ref: '#/definitions/lusterContext' error: $ref: '#/definitions/rpcStatus' title: Stream result of lusterContext default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: spaceId description: Required. The space id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterReadContextsBody' tags: - Luster /v1/hubs/{hubType}: get: summary: (ALPHA) [HUB] Gets hub. operationId: Luster_GetHub responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterHub' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: hubType description: Required. the hub type. in: path required: true type: string - name: fieldMask description: 'Optional. field_mask see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' in: query required: false type: string tags: - Luster /v1/hubs:read: post: summary: (ALPHA) [HUB] Reads hubs. operationId: Luster_ReadHubs responses: '200': description: A successful response.(streaming responses) schema: type: object properties: result: $ref: '#/definitions/lusterHub' error: $ref: '#/definitions/rpcStatus' title: Stream result of lusterHub default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: body description: Request message for the Luster.ReadHubs rpc. in: body required: true schema: $ref: '#/definitions/v1ReadHubsRequest' tags: - Luster /v1/spaces: post: summary: (ALPHA) [SPACE] Creates space. operationId: Luster_CreateSpace responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterSpace' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: body description: Request message for the Luster.CreateSpace rpc. in: body required: true schema: $ref: '#/definitions/v1CreateSpaceRequest' tags: - Luster /v1/spaces/{id}: get: summary: (ALPHA) [SPACE] Gets space. operationId: Luster_GetSpace responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterSpace' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: id description: the space id. in: path required: true type: string - name: fieldMask description: 'Optional. field_mask see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' in: query required: false type: string tags: - Luster delete: summary: (ALPHA) [SPACE] Deletes space. description: When deleted, contexts created within the space will also be deleted and cannot be viewed. operationId: Luster_DeleteSpace responses: '200': description: A successful response. schema: type: object properties: {} default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: id description: the space id. in: path required: true type: string tags: - Luster put: summary: (ALPHA) [SPACE] Updates space. operationId: Luster_UpdateSpace responses: '200': description: A successful response. schema: $ref: '#/definitions/lusterSpace' default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: id description: Required. the space id. in: path required: true type: string - name: body in: body required: true schema: $ref: '#/definitions/LusterUpdateSpaceBody' tags: - Luster /v1/spaces:read: post: summary: (ALPHA) [SPACE] Reads spaces. operationId: Luster_ReadSpaces responses: '200': description: A successful response.(streaming responses) schema: type: object properties: result: $ref: '#/definitions/lusterSpace' error: $ref: '#/definitions/rpcStatus' title: Stream result of lusterSpace default: description: An unexpected error response. schema: $ref: '#/definitions/rpcStatus' parameters: - name: body description: Request message for the Luster.ReadSpaces rpc. in: body required: true schema: $ref: '#/definitions/v1ReadSpacesRequest' tags: - Luster definitions: lusterContextState: type: string enum: - OPEN - IN_PROGRESS - CLOSED default: OPEN description: "The context state.\n\n - OPEN: open\nInitial state when context is created.\n - IN_PROGRESS: in progress\nIndicates work is in progress.\n - CLOSED: closed\nFinal state indicating work is completed." LusterUpdateContextBody: type: object properties: title: type: string title: 'Optional. The context title. String length 1-500 characters' content: type: string title: 'Optional. The context content. String length 0-10000 characters' labels: type: array items: type: string title: 'Optional. The context labels. "labels": ["bug" "documentation"]' assignees: type: array items: type: string title: 'Optional. The context assignees. "assignees": ["username1" "username2"]' contextType: $ref: '#/definitions/lusterContextType' title: 'Optional. The context type. if not set, default: `any`' state: $ref: '#/definitions/lusterContextState' description: Optional. The context state. updateMask: type: string title: 'Required. see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' description: Request message for the Luster.UpdateContext rpc. required: - updateMask LusterUpdateLabelBody: type: object properties: name: type: string description: Optional. the label name. color: type: string title: 'The label color. Optional. format: HEX color code (#RRGGBB). Example: #FF5733 (valid), #FFF (invalid - must be 6 digits), rgb(255, 87, 51) (invalid format)' description: type: string title: 'Optional. the description. String length 0-500 characters' updateMask: type: string title: 'Required. see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' description: Request message for the Luster.UpdateLabel rpc. required: - updateMask LusterCreateContextCommentBody: type: object properties: content: type: string title: 'Required. The comment content. String length 1-10000 characters' description: Request message for the Luster.CreateContextComment rpc. v1ReadLabelsRequest: type: object properties: fieldMask: type: string title: Optional. field_mask description: Request message for the Luster.ReadLabels rpc. LusterUpdateContextCommentBody: type: object properties: content: type: string title: 'Required. The comment content. String length 1-10000 characters' updateMask: type: string title: 'Required. see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' description: Request message for the Luster.UpdateContextComment rpc. required: - updateMask lusterSpace: type: object properties: id: type: string description: The space id. name: type: string description: The space name. description: type: string description: The space description. members: type: array items: type: string description: The members in space. createdAt: type: string title: 'The space created_at. "created_at": "2023-10-27T10:00:00Z"' readOnly: true updatedAt: type: string title: 'The space updated_at. "updated_at": "2023-10-27T10:00:00Z"' readOnly: true title: The message defines the space v1GetContextResponse: type: object properties: space: $ref: '#/definitions/lusterSpace' context: $ref: '#/definitions/lusterContext' comment: type: array items: type: object $ref: '#/definitions/lusterComment' description: Response message for the Luster.GetContextResponse rpc. rpcStatus: type: object properties: code: type: integer format: int32 description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. message: type: string description: 'A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.' details: type: array items: type: object $ref: '#/definitions/protobufAny' description: 'A list of messages that carry the error details. There is a common set of message types for APIs to use.' description: 'The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).' v1CreateSpaceRequest: type: object properties: name: type: string title: 'Required. the space name. String length 1-60 characters' description: type: string title: 'Optional. the space description. String length 0-1000 characters' members: type: array items: type: string description: Optional. the member ids. description: Request message for the Luster.CreateSpace rpc. LusterReadContextsBody: type: object properties: fieldMask: type: string title: Optional. field_mask description: Request message for the Luster.ReadContexts rpc. LusterUpdateSpaceBody: type: object properties: name: type: string title: 'Optional. the space name. String length 1-60 characters' description: type: string title: 'Optional. the space description. String length 0-1000 characters' members: type: array items: type: string description: Optional. the member ids. updateMask: type: string title: 'Required. see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' description: Request message for the Luster.UpdateSpace rpc. required: - updateMask v1ReadSpacesRequest: type: object properties: fieldMask: type: string title: 'Optional. field_mask see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto Available fields: id,name,description,members,created_at,updated_at' description: Request message for the Luster.ReadSpaces rpc. protobufAny: type: object properties: '@type': type: string description: "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." additionalProperties: {} description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" v1CreateLabelRequest: type: object properties: name: type: string title: 'The label name. String length 1-100 characters' color: type: string title: 'The label color. Required format: HEX color code (#RRGGBB). Example: #FF5733 (valid), #FFF (invalid - must be 6 digits), rgb(255, 87, 51) (invalid format)' description: type: string title: 'The label description. String length 0-500 characters' description: Request message for the Luster.CreateLabel rpc. v1ReadHubsRequest: type: object properties: fieldMask: type: string title: 'Optional. field_mask see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto' description: Request message for the Luster.ReadHubs rpc. lusterComment: type: object properties: id: type: string description: The comment id. name: type: string description: The comment name. content: type: string description: The comment content. userId: type: string description: The comment user_id. readOnly: true createdAt: type: string title: 'The comment created_at. "created_at": "2023-10-27T10:00:00Z"' readOnly: true updatedAt: type: string title: 'The comment updated_at. "updated_at": "2023-10-27T10:00:00Z"' readOnly: true title: The message defines the comment LusterCreateContextBody: type: object properties: title: type: string title: 'Required. The context title. String length 1-500 characters' content: type: string title: 'Required. The context content. String length 0-10000 characters' labels: type: array items: type: string title: 'Optional. The context labels. "labels": ["bug" "documentation"]' assignees: type: array items: type: string title: 'Optional. The context assignees. "assignees": ["username1" "username2"]' contextType: $ref: '#/definitions/lusterContextType' title: 'Optional. The context type. if not set, default: `any`' description: Request message for the Luster.CreateContext rpc. lusterHub: type: object properties: id: type: string description: The hub id. name: type: string description: The hub name. cost: type: array items: type: string description: The cost in hub. recommendation: type: array items: type: string description: The recommendation in hub. title: The message defines the hub lusterContextType: type: string enum: - ANY - SPACE - ACCOUNT - COST default: ANY description: "The context type.\n\n - ANY: Any type of context.\n - SPACE: Space-related context.\n - ACCOUNT: Account-related context.\n - COST: Cost-related context." lusterContext: type: object properties: id: type: string description: The context id. name: type: string description: The context name. number: type: string description: 'The context number. Sequential number assigned to the context.' title: type: string description: The context title. content: type: string description: 'The context content. Detailed content or description of the context.' contextType: $ref: '#/definitions/lusterContextType' description: The context type. state: $ref: '#/definitions/lusterContextState' description: The context state. labels: type: array items: type: string title: 'The context labels. "labels": ["bug" "documentation"]' assignees: type: array items: type: string title: 'The context assignees. "assignees": ["username1" "username2"]' commentsCount: type: string format: int64 title: 'The context comments_count. "comments_count": 0' readOnly: true createdAt: type: string title: 'The context created_at. "created_at": "2023-10-27T10:00:00Z"' readOnly: true updatedAt: type: string title: 'The context updated_at. "updated_at": "2023-10-27T10:00:00Z"' readOnly: true closedAt: type: string title: 'The context closed_at. "closed_at": "2023-10-27T10:00:00Z"' readOnly: true userId: type: string description: The context user_id. readOnly: true title: The message defines the context apiLusterLabel: type: object properties: id: type: string description: The label id. name: type: string description: The label name. color: type: string description: 'The label color. format: HEX color code ( #FF0000 ).' description: type: string description: The label description. createdAt: type: string title: 'The label createdAt. "created_at": "2023-10-27T10:00:00Z"' readOnly: true updatedAt: type: string title: 'The label updatedAt. "updated_at": "2023-10-27T10:00:00Z"' readOnly: true title: The message defines the label