{ "openapi": "3.0.2", "info": { "title": "Brick Server", "version": "0.1.0" }, "paths": { "/brickapi/v1/data/timeseries": { "get": { "tags": [ "Data", "Data" ], "summary": "Get", "operationId": "get_brickapi_v1_data_timeseries_get", "parameters": [ { "required": true, "schema": { "title": "Entity Id", "type": "string" }, "name": "entity_id", "in": "query" }, { "description": "Starting time of the data in UNIX timestamp in seconds (float). If not given, the beginning of the data will be assumed.", "required": false, "schema": { "title": "Start Time", "type": "number", "description": "Starting time of the data in UNIX timestamp in seconds (float). If not given, the beginning of the data will be assumed." }, "name": "start_time", "in": "query" }, { "description": "Ending time of the data in UNIX timestamp in seconds (float). If not given, the end of the data will be assumed.", "required": false, "schema": { "title": "End Time", "type": "number", "description": "Ending time of the data in UNIX timestamp in seconds (float). If not given, the end of the data will be assumed." }, "name": "end_time", "in": "query" }, { "description": "The type of value. Currently, there are numbers (for both floating points and integers), texts, and locations (blobs are under dev.)", "required": false, "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ValueType" }, "description": "The type of value. Currently, there are numbers (for both floating points and integers), texts, and locations (blobs are under dev.)", "default": [ "number" ] }, "name": "value_types", "in": "query" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeseriesData" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "post": { "tags": [ "Data", "Data" ], "summary": "Post", "description": "Post data. If fields are not given, default values are assumed.", "operationId": "post_brickapi_v1_data_timeseries_post", "requestBody": { "content": { "application/json": { "schema": { "title": "Data", "allOf": [ { "$ref": "#/components/schemas/TimeseriesData" } ], "description": "A table of data where each row represents a value tuple. `data` field contains actual data and `columns` field contains information about the columns of the data." } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsSuccess" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "delete": { "tags": [ "Data", "Data" ], "summary": "Delete", "description": "Delete data of an entity with in a time range or all the data if a time range is not given.", "operationId": "delete_brickapi_v1_data_timeseries_delete", "parameters": [ { "required": true, "schema": { "title": "Entity Id", "type": "string" }, "name": "entity_id", "in": "query" }, { "description": "Starting time of the data in UNIX timestamp in seconds (float). If not given, the beginning of the data will be assumed.", "required": false, "schema": { "title": "Start Time", "type": "number", "description": "Starting time of the data in UNIX timestamp in seconds (float). If not given, the beginning of the data will be assumed." }, "name": "start_time", "in": "query" }, { "description": "Ending time of the data in UNIX timestamp in seconds (float). If not given, the end of the data will be assumed.", "required": false, "schema": { "title": "End Time", "type": "number", "description": "Ending time of the data in UNIX timestamp in seconds (float). If not given, the end of the data will be assumed." }, "name": "end_time", "in": "query" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsSuccess" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/entities/upload": { "post": { "tags": [ "Entities", "Entities" ], "summary": "Uplaod a Turtle file", "description": "Upload a Turtle file. An example file: https://gitlab.com/jbkoh/brick-server-dev/blob/dev/examples/data/bldg.ttl", "operationId": "upload_brickapi_v1_entities_upload_post", "parameters": [ { "description": "The name of the graph. This is similar to a database name in relational databases.", "required": false, "schema": { "title": "Named Graph", "type": "string", "description": "The name of the graph. This is similar to a database name in relational databases." }, "name": "named_graph", "in": "query" } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_upload_brickapi_v1_entities_upload_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsSuccess" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/entities/": { "get": { "tags": [ "Entities", "Entities" ], "summary": "Get Entity By Id", "description": "Get information about an entity including type and its relationships with others. The definition of entity: An entity can be defined in two ways. It's an instance of a (Brick) Class. More specifically, it is either a physical or a virtual thing whose properties are well-maintained to be a thing. Top three Brick Classes are Point (e.g., sensors, setpoints, etc.), Equipment (e.g., VAV, Luminaire, AHU, etc.), and Location (e.g., Room, Floor, etc.)", "operationId": "get_entity_by_id_brickapi_v1_entities__get", "parameters": [ { "required": true, "schema": { "title": "Entity Id", "type": "string" }, "name": "entity_id", "in": "query" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Entity" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/entities/list": { "post": { "tags": [ "Entities", "Entities" ], "summary": "Post", "description": "List all entities with their types and relations.", "operationId": "post_brickapi_v1_entities_list_post", "requestBody": { "content": { "application/json": { "schema": { "title": "Params", "allOf": [ { "$ref": "#/components/schemas/ListEntityParams" } ], "description": "A list of object URIs for the corresponding predicate. Brick Server will find entities having relations with all the objects with the predicate (i.e., AND operation.)", "default": { "hasPoint": [], "isPointOf": [], "hasPart": [], "isPartOf": [], "hasLocation": [], "isLocationOf": [], "feeds": [], "isFedBy": [] } } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EntityIds" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/rawqueries/timeseries": { "post": { "tags": [ "Raw Queries", "Raw Queries" ], "summary": "Post", "description": "Raw PostgreSQL query for timeseries. (May not be exposed in the production deployment.)", "operationId": "post_brickapi_v1_rawqueries_timeseries_post", "requestBody": { "content": { "application/sql": { "schema": { "title": "Query", "type": "string", "description": "A raw SQL query for timeseries data. The table consist of the columns as in `value_types`." } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/rawqueries/sparql": { "post": { "tags": [ "Raw Queries", "Raw Queries" ], "summary": "Post", "description": "Raw SPARQL for Brick metadata. (May not be exposed in the production deployment.", "operationId": "post_brickapi_v1_rawqueries_sparql_post", "requestBody": { "content": { "application/sparql-query": { "schema": { "title": "Query", "type": "string", "description": "A raw SPARQL query." } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "title": "Response Post Brickapi V1 Rawqueries Sparql Post", "type": "object" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/actuation/": { "post": { "tags": [ "Actuation", "Actuation" ], "summary": "Post", "description": "Actuate an entity to a value", "operationId": "post_brickapi_v1_actuation__post", "parameters": [ { "description": "The identifier of an entity. Often a URI. This should be unique across the target systems (i.e., the graphs of the interest.)", "required": true, "schema": { "title": "Entity Id", "type": "string", "description": "The identifier of an entity. Often a URI. This should be unique across the target systems (i.e., the graphs of the interest.)" }, "name": "entity_id", "in": "query" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ActuationRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsSuccess" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/grafana/details": { "get": { "tags": [ "Data", "Data" ], "summary": "Get", "description": "Get dashbaord metadata for the `uid`.", "operationId": "get_brickapi_v1_grafana_details_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/grafana/": { "get": { "tags": [ "Data", "Data" ], "summary": "Get", "operationId": "get_brickapi_v1_grafana__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GrafanaDashboardResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "post": { "tags": [ "Data", "Data" ], "summary": "Post", "description": "Create or update the Grafana Dashboard. If JSON body is not given, it creates a Dashboard and assign it to the user. If JSON body is given, the body should be same as Grafana's dashboard model as defined at `https://grafana.com/docs/grafana/latest/http_api/dashboard/` except that uid, id, and title should be empty.", "operationId": "post_brickapi_v1_grafana__post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GrafanaDashboardResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/auth/login": { "get": { "tags": [ "Auth" ], "summary": "Get Login Via Google", "operationId": "get_login_via_google_brickapi_v1_auth_login_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/brickapi/v1/auth/is_registered": { "get": { "tags": [ "Auth" ], "summary": "Get Is Registered", "operationId": "get_is_registered_brickapi_v1_auth_is_registered_get", "responses": { "302": { "description": "Successful Response" } } } }, "/brickapi/v1/auth/logincallback": { "get": { "summary": "Get Authorize", "operationId": "get_authorize_brickapi_v1_auth_logincallback_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/brickapi/v1/auth/app_tokens/{app_token}": { "delete": { "tags": [ "Auth" ], "summary": "Del Token", "operationId": "del_token_brickapi_v1_auth_app_tokens__app_token__delete", "parameters": [ { "description": "Token to delete.", "required": true, "schema": { "title": "App Token", "type": "string", "description": "Token to delete." }, "name": "app_token", "in": "path" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsSuccess" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/auth/app_tokens": { "get": { "tags": [ "Auth" ], "summary": "Get Tokens", "operationId": "get_tokens_brickapi_v1_auth_app_tokens_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "title": "Response Get Tokens Brickapi V1 Auth App Tokens Get", "type": "array", "items": { "$ref": "#/components/schemas/TokenResponse" } } } } } }, "security": [ { "HTTPBearer": [] } ] }, "post": { "tags": [ "Auth" ], "summary": "Gen Token", "operationId": "gen_token_brickapi_v1_auth_app_tokens_post", "parameters": [ { "description": "The name of an app the user needs to generate a token for", "required": false, "schema": { "title": "App Name", "type": "string", "description": "The name of an app the user needs to generate a token for", "default": "" }, "name": "app_name", "in": "query" }, { "description": "Expiration time of the requested token in seconds.", "required": false, "schema": { "title": "Token Lifetime", "type": "integer", "description": "Expiration time of the requested token in seconds.", "default": 3600 }, "name": "token_lifetime", "in": "query" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/brickapi/v1/auth/register": { "get": { "tags": [ "Auth" ], "summary": "Post Register User", "operationId": "post_register_user_brickapi_v1_auth_register_get", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/Body_post_register_user_brickapi_v1_auth_register_get" } } } }, "responses": { "302": { "description": "Successful Response" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } } }, "components": { "schemas": { "ActuationRequest": { "title": "ActuationRequest", "required": [ "value" ], "type": "object", "properties": { "value": { "title": "Value", "type": "number", "description": "A value to set the target entity." } } }, "Body_post_register_user_brickapi_v1_auth_register_get": { "title": "Body_post_register_user_brickapi_v1_auth_register_get", "type": "object", "properties": { "is_admin": { "title": "Is Admin", "type": "boolean", "description": "Designate if the user is going to be an admin or not.", "default": false } } }, "Body_upload_brickapi_v1_entities_upload_post": { "title": "Body_upload_brickapi_v1_entities_upload_post", "required": [ "file" ], "type": "object", "properties": { "file": { "title": "File", "type": "string", "format": "binary" } } }, "ColumnType": { "title": "ColumnType", "enum": [ "number", "text", "loc", "uuid", "timestamp" ], "type": "string", "description": "An enumeration." }, "Entity": { "title": "Entity", "required": [ "type", "entity_id" ], "type": "object", "properties": { "relationships": { "title": "Relationships", "type": "array", "items": { "maxItems": 2, "minItems": 2, "type": "array", "items": { "type": "string" } }, "description": "The list of relationships for the target entity. Assuming the target entity is the subject, each relation consists of the subject's predicate and object.s", "default": [] }, "type": { "title": "Type", "type": "string", "description": "The entity's type, which is often a Brick Class." }, "entity_id": { "title": "Entity Id", "type": "string", "description": "The identifier of an entity. Often a URI. This should be unique across the target systems (i.e., the graphs of the interest.)" }, "name": { "title": "Name", "type": "string", "description": "An informative name for the entity. This does not have to be unique." } } }, "EntityIds": { "title": "EntityIds", "required": [ "entity_ids" ], "type": "object", "properties": { "entity_ids": { "title": "Entity Ids", "type": "array", "items": { "type": "string" }, "description": "The list of `entity_id`s" } } }, "GrafanaDashboardResponse": { "title": "GrafanaDashboardResponse", "required": [ "url", "uid", "grafana_id" ], "type": "object", "properties": { "url": { "title": "Url", "type": "string", "description": "Grafana dashboard url for the user" }, "uid": { "title": "Uid", "type": "string", "description": "Grafana dashboard uid for the user" }, "grafana_id": { "title": "Grafana Id", "type": "string", "description": "Grafana dashboard id for the user" } } }, "HTTPValidationError": { "title": "HTTPValidationError", "type": "object", "properties": { "detail": { "title": "Detail", "type": "array", "items": { "$ref": "#/components/schemas/ValidationError" } } } }, "IsSuccess": { "title": "IsSuccess", "type": "object", "properties": { "is_success": { "title": "Is Success", "type": "boolean", "default": true }, "reason": { "title": "Reason", "type": "string", "default": "" } } }, "ListEntityParams": { "title": "ListEntityParams", "type": "object", "properties": { "hasPoint": { "title": "Haspoint", "type": "array", "items": { "type": "string" }, "default": [] }, "isPointOf": { "title": "Ispointof", "type": "array", "items": { "type": "string" }, "default": [] }, "hasPart": { "title": "Haspart", "type": "array", "items": { "type": "string" }, "default": [] }, "isPartOf": { "title": "Ispartof", "type": "array", "items": { "type": "string" }, "default": [] }, "hasLocation": { "title": "Haslocation", "type": "array", "items": { "type": "string" }, "default": [] }, "isLocationOf": { "title": "Islocationof", "type": "array", "items": { "type": "string" }, "default": [] }, "feeds": { "title": "Feeds", "type": "array", "items": { "type": "string" }, "default": [] }, "isFedBy": { "title": "Isfedby", "type": "array", "items": { "type": "string" }, "default": [] } } }, "TimeseriesData": { "title": "TimeseriesData", "required": [ "data" ], "type": "object", "properties": { "data": { "title": "Data", "type": "array", "items": { "type": "array", "items": {} }, "description": "A value tuple is actually an array in JSON and consists of different columns such as an identifier, a timestamp, and a number. For example, `[\"http://brickserver.com#znt1\", 1582412083, 71.4]`. A list of such tuples is a set of data. They share the same type of columns in a set of data, and the columns are explicitly represented in a separate field." }, "columns": { "type": "array", "items": { "$ref": "#/components/schemas/ColumnType" }, "description": "Columns explain how to interpret the values in the data. `uuid` and `timestamp` are mandatory, and specific `value_type`s can be specified.", "default": [ "uuid", "timestamp", "number" ] } } }, "TokenResponse": { "title": "TokenResponse", "required": [ "token", "name", "exp" ], "type": "object", "properties": { "token": { "title": "Token", "type": "string", "description": "JWT token" }, "name": { "title": "Name", "type": "string", "description": "Associated name with the token" }, "exp": { "title": "Exp", "type": "integer", "description": "The token's expiration time in unix timestamp" } } }, "ValidationError": { "title": "ValidationError", "required": [ "loc", "msg", "type" ], "type": "object", "properties": { "loc": { "title": "Location", "type": "array", "items": { "type": "string" } }, "msg": { "title": "Message", "type": "string" }, "type": { "title": "Error Type", "type": "string" } } }, "ValueType": { "title": "ValueType", "enum": [ "number", "text", "loc" ], "type": "string", "description": "An enumeration." } }, "securitySchemes": { "HTTPBearer": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } } } }