{
  "openapi": "3.1.1",
  "info": {
    "title": "MonkeyBrain.Api | v1",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://monkeybrain.adambirkner.com/"
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "tags": [
          "Platform"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/version": {
      "get": {
        "tags": [
          "Platform"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/extension/download": {
      "get": {
        "tags": [
          "Platform"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/logs": {
      "post": {
        "tags": [
          "Platform"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogEntryDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/demo": {
      "get": {
        "tags": [
          "MonkeyBrain.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/register": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/extension-login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/logout": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/me": {
      "get": {
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/tokens": {
      "get": {
        "tags": [
          "API Tokens"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "API Tokens"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/tokens/{id}": {
      "delete": {
        "tags": [
          "API Tokens"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/documents": {
      "post": {
        "tags": [
          "Documents"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDocumentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/documents/{id}": {
      "get": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceDocumentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "patch": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchDocumentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/documents/upsert": {
      "post": {
        "tags": [
          "Documents"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpsertDocumentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/documents/query": {
      "post": {
        "tags": [
          "Documents"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentQueryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/documents/{id}/resources": {
      "post": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceModificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Documents"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceModificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ContextQueryFilter": {
        "type": "object",
        "properties": {
          "url": {
            "type": [
              "null",
              "string"
            ]
          },
          "origin": {
            "type": [
              "null",
              "string"
            ]
          },
          "domain": {
            "type": [
              "null",
              "string"
            ]
          },
          "pathPrefix": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "CreateDocumentRequest": {
        "required": [
          "namespace",
          "key",
          "type",
          "data"
        ],
        "type": "object",
        "properties": {
          "namespace": {
            "type": "string"
          },
          "key": {
            "type": [
              "null",
              "string"
            ]
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/JsonElement"
          },
          "resources": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CreateTokenRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "expiresInDays": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "DocumentQueryRequest": {
        "type": "object",
        "properties": {
          "namespace": {
            "type": [
              "null",
              "string"
            ]
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "key": {
            "type": [
              "null",
              "string"
            ]
          },
          "resource": {
            "type": [
              "null",
              "string"
            ]
          },
          "resources": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          },
          "resourceMatch": {
            "type": "string",
            "default": "ANY"
          },
          "resourcePrefix": {
            "type": [
              "null",
              "string"
            ]
          },
          "context": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ContextQueryFilter"
              }
            ]
          },
          "filters": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/JsonFieldFilter"
            }
          },
          "sortBy": {
            "type": [
              "null",
              "string"
            ],
            "default": "updatedAt"
          },
          "sortDirection": {
            "type": [
              "null",
              "string"
            ],
            "default": "desc"
          },
          "page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32",
            "default": 1
          },
          "pageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32",
            "default": 50
          }
        }
      },
      "JsonElement": { },
      "JsonFieldFilter": {
        "required": [
          "field"
        ],
        "type": "object",
        "properties": {
          "field": {
            "type": "string"
          },
          "operator": {
            "type": "string",
            "default": "eq"
          },
          "value": { }
        }
      },
      "LogEntryDto": {
        "type": "object",
        "properties": {
          "level": {
            "type": "string",
            "default": "info"
          },
          "category": {
            "type": "string",
            "default": "EXT"
          },
          "message": {
            "type": "string",
            "default": ""
          },
          "data": {
            "type": [
              "null",
              "string"
            ]
          },
          "timestamp": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "LoginRequest": {
        "required": [
          "email",
          "password"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "tokenName": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "PatchDocumentRequest": {
        "type": "object",
        "properties": {
          "key": {
            "type": [
              "null",
              "string"
            ]
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "data": { },
          "mergeData": {
            "type": "boolean",
            "default": true
          },
          "resources": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RegisterRequest": {
        "required": [
          "email",
          "password"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "displayName": {
            "type": [
              "null",
              "string"
            ]
          },
          "tenantName": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ReplaceDocumentRequest": {
        "required": [
          "namespace",
          "key",
          "type",
          "data"
        ],
        "type": "object",
        "properties": {
          "namespace": {
            "type": "string"
          },
          "key": {
            "type": [
              "null",
              "string"
            ]
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/JsonElement"
          },
          "resources": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ResourceModificationRequest": {
        "required": [
          "resources"
        ],
        "type": "object",
        "properties": {
          "resources": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UpsertDocumentRequest": {
        "required": [
          "namespace",
          "key",
          "type",
          "data"
        ],
        "type": "object",
        "properties": {
          "namespace": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "data": {
            "$ref": "#/components/schemas/JsonElement"
          },
          "mergeData": {
            "type": "boolean",
            "default": false
          },
          "resources": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            }
          },
          "mergeResources": {
            "type": "boolean",
            "default": false
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Platform"
    },
    {
      "name": "MonkeyBrain.Api"
    },
    {
      "name": "Authentication"
    },
    {
      "name": "API Tokens"
    },
    {
      "name": "Documents"
    }
  ]
}