{
  "openapi": "3.0.1",
  "info": {
    "title": "Halo",
    "version": "2.17.0-SNAPSHOT"
  },
  "servers": [
    {
      "url": "http://localhost:8091",
      "description": "Generated server url"
    }
  ],
  "security": [
    {
      "basicAuth": [],
      "bearerAuth": []
    }
  ],
  "paths": {
    "/apis/uc.api.content.halo.run/v1alpha1/attachments": {
      "post": {
        "description": "Create attachment for the given post.",
        "operationId": "CreateAttachmentForPost",
        "parameters": [
          {
            "description": "Wait for permalink.",
            "in": "query",
            "name": "waitForPermalink",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/PostAttachmentRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "AttachmentV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/posts": {
      "get": {
        "description": "List posts owned by the current user.",
        "operationId": "ListMyPosts",
        "parameters": [
          {
            "description": "Page number. Default is 0.",
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "description": "Size number. Default is 0.",
            "in": "query",
            "name": "size",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "description": "Label selector. e.g.: hidden!\u003dtrue",
            "in": "query",
            "name": "labelSelector",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Field selector. e.g.: metadata.name\u003d\u003dhalo",
            "in": "query",
            "name": "fieldSelector",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.",
            "in": "query",
            "name": "sort",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Posts filtered by publish phase.",
            "in": "query",
            "name": "publishPhase",
            "schema": {
              "type": "string",
              "enum": [
                "DRAFT",
                "PENDING_APPROVAL",
                "PUBLISHED",
                "FAILED"
              ]
            }
          },
          {
            "description": "Posts filtered by keyword.",
            "in": "query",
            "name": "keyword",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Posts filtered by category including sub-categories.",
            "in": "query",
            "name": "categoryWithChildren",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListedPostList"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      },
      "post": {
        "description": "Create my post. If you want to create a post with content, please set\n annotation: \"content.halo.run/content-json\" into annotations and refer\n to Content for corresponding data type.\n",
        "operationId": "CreateMyPost",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/Post"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/posts/{name}": {
      "get": {
        "description": "Get post that belongs to the current user.",
        "operationId": "GetMyPost",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      },
      "put": {
        "description": "Update my post.",
        "operationId": "UpdateMyPost",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/Post"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/posts/{name}/draft": {
      "get": {
        "description": "Get my post draft.",
        "operationId": "GetMyPostDraft",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Should include patched content and raw or not.",
            "in": "query",
            "name": "patched",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Snapshot"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      },
      "put": {
        "description": "Update draft of my post. Please make sure set annotation:\n\"content.halo.run/content-json\" into annotations and refer to\nContent for corresponding data type.\n",
        "operationId": "UpdateMyPostDraft",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/Snapshot"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Snapshot"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/posts/{name}/publish": {
      "put": {
        "description": "Publish my post.",
        "operationId": "PublishMyPost",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/posts/{name}/unpublish": {
      "put": {
        "description": "Unpublish my post.",
        "operationId": "UnpublishMyPost",
        "parameters": [
          {
            "description": "Post name",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PostV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.content.halo.run/v1alpha1/snapshots/{name}": {
      "get": {
        "description": "Get snapshot for one post.",
        "operationId": "GetSnapshotForPost",
        "parameters": [
          {
            "description": "Snapshot name.",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Post name.",
            "in": "query",
            "name": "postName",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Should include patched content and raw or not.",
            "in": "query",
            "name": "patched",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Snapshot"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "SnapshotV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/settings": {
      "get": {
        "description": "Get Two-factor authentication settings.",
        "operationId": "GetTwoFactorAuthenticationSettings",
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TwoFactorAuthSettings"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/settings/disabled": {
      "put": {
        "description": "Disable Two-factor authentication",
        "operationId": "DisableTwoFactor",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/PasswordRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TwoFactorAuthSettings"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/settings/enabled": {
      "put": {
        "description": "Enable Two-factor authentication",
        "operationId": "EnableTwoFactor",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/PasswordRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TwoFactorAuthSettings"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/totp": {
      "post": {
        "description": "Configure a TOTP",
        "operationId": "ConfigurerTotp",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/TotpRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TwoFactorAuthSettings"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/totp/-": {
      "delete": {
        "operationId": "DeleteTotp",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/PasswordRequest"
              }
            }
          }
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TwoFactorAuthSettings"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/totp/auth-link": {
      "get": {
        "description": "Get TOTP auth link, including secret",
        "operationId": "GetTotpAuthLink",
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TotpAuthLinkResponse"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "TwoFactorAuthV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/devices": {
      "get": {
        "description": "List all user devices",
        "operationId": "ListDevices",
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserDevice"
                  }
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "DeviceV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/devices/{deviceId}": {
      "delete": {
        "description": "Revoke a own device",
        "operationId": "RevokeDevice",
        "parameters": [
          {
            "description": "Device ID",
            "in": "path",
            "name": "deviceId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204 NO_CONTENT": {
            "description": "default response"
          }
        },
        "tags": [
          "DeviceV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/personalaccesstokens": {
      "get": {
        "description": "Obtain PAT list.",
        "operationId": "ObtainPats",
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PersonalAccessToken"
                  }
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      },
      "post": {
        "description": "Generate a PAT.",
        "operationId": "GeneratePat",
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/PersonalAccessToken"
              }
            }
          },
          "required": true
        },
        "responses": {
          "default": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalAccessToken"
                }
              }
            },
            "description": "default response"
          }
        },
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/personalaccesstokens/{name}": {
      "delete": {
        "description": "Delete a PAT",
        "operationId": "DeletePat",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {},
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      },
      "get": {
        "description": "Obtain a PAT.",
        "operationId": "ObtainPat",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {},
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/personalaccesstokens/{name}/actions/restoration": {
      "put": {
        "description": "Restore a PAT.",
        "operationId": "RestorePat",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {},
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      }
    },
    "/apis/uc.api.security.halo.run/v1alpha1/personalaccesstokens/{name}/actions/revocation": {
      "put": {
        "description": "Revoke a PAT",
        "operationId": "RevokePat",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {},
        "tags": [
          "PersonalAccessTokenV1alpha1Uc"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AddOperation": {
        "required": [
          "op",
          "path",
          "value"
        ],
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "add"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          },
          "value": {
            "description": "Value can be any JSON value"
          }
        }
      },
      "Attachment": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/AttachmentSpec"
          },
          "status": {
            "$ref": "#/components/schemas/AttachmentStatus"
          }
        }
      },
      "AttachmentSpec": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "description": "Display name of attachment"
          },
          "groupName": {
            "type": "string",
            "description": "Group name"
          },
          "mediaType": {
            "type": "string",
            "description": "Media type of attachment"
          },
          "ownerName": {
            "type": "string",
            "description": "Name of User who uploads the attachment"
          },
          "policyName": {
            "type": "string",
            "description": "Policy name"
          },
          "size": {
            "minimum": 0,
            "type": "integer",
            "description": "Size of attachment. Unit is Byte",
            "format": "int64"
          },
          "tags": {
            "uniqueItems": true,
            "type": "array",
            "description": "Tags of attachment",
            "items": {
              "type": "string",
              "description": "Tag name"
            }
          }
        }
      },
      "AttachmentStatus": {
        "type": "object",
        "properties": {
          "permalink": {
            "type": "string",
            "description": "Permalink of attachment.\nIf it is in local storage, the public URL will be set.\nIf it is in s3 storage, the Object URL will be set.\n"
          }
        }
      },
      "Category": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/CategorySpec"
          },
          "status": {
            "$ref": "#/components/schemas/CategoryStatus"
          }
        }
      },
      "CategorySpec": {
        "required": [
          "displayName",
          "priority",
          "slug"
        ],
        "type": "object",
        "properties": {
          "children": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "cover": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "displayName": {
            "minLength": 1,
            "type": "string"
          },
          "hideFromList": {
            "type": "boolean"
          },
          "postTemplate": {
            "maxLength": 255,
            "type": "string"
          },
          "preventParentPostCascadeQuery": {
            "type": "boolean"
          },
          "priority": {
            "type": "integer",
            "format": "int32",
            "default": 0
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          },
          "template": {
            "maxLength": 255,
            "type": "string"
          }
        }
      },
      "CategoryStatus": {
        "type": "object",
        "properties": {
          "permalink": {
            "type": "string"
          },
          "postCount": {
            "type": "integer",
            "format": "int32"
          },
          "visiblePostCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "Condition": {
        "required": [
          "lastTransitionTime",
          "status",
          "type"
        ],
        "type": "object",
        "properties": {
          "lastTransitionTime": {
            "type": "string",
            "format": "date-time"
          },
          "message": {
            "maxLength": 32768,
            "type": "string"
          },
          "reason": {
            "maxLength": 1024,
            "pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "TRUE",
              "FALSE",
              "UNKNOWN"
            ]
          },
          "type": {
            "maxLength": 316,
            "pattern": "^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$",
            "type": "string"
          }
        }
      },
      "Contributor": {
        "type": "object",
        "properties": {
          "avatar": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CopyOperation": {
        "required": [
          "op",
          "from",
          "path"
        ],
        "type": "object",
        "properties": {
          "from": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          },
          "op": {
            "type": "string",
            "enum": [
              "copy"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          }
        }
      },
      "Device": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec",
          "status"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/DeviceSpec"
          },
          "status": {
            "$ref": "#/components/schemas/DeviceStatus"
          }
        }
      },
      "DeviceSpec": {
        "required": [
          "ipAddress",
          "principalName",
          "sessionId"
        ],
        "type": "object",
        "properties": {
          "ipAddress": {
            "maxLength": 129,
            "type": "string"
          },
          "lastAccessedTime": {
            "type": "string",
            "format": "date-time"
          },
          "lastAuthenticatedTime": {
            "type": "string",
            "format": "date-time"
          },
          "principalName": {
            "minLength": 1,
            "type": "string"
          },
          "rememberMeSeriesId": {
            "type": "string"
          },
          "sessionId": {
            "minLength": 1,
            "type": "string"
          },
          "userAgent": {
            "maxLength": 500,
            "type": "string"
          }
        }
      },
      "DeviceStatus": {
        "type": "object",
        "properties": {
          "browser": {
            "type": "string"
          },
          "os": {
            "type": "string"
          }
        }
      },
      "Excerpt": {
        "required": [
          "autoGenerate"
        ],
        "type": "object",
        "properties": {
          "autoGenerate": {
            "type": "boolean",
            "default": true
          },
          "raw": {
            "type": "string"
          }
        }
      },
      "JsonPatch": {
        "minItems": 1,
        "uniqueItems": true,
        "type": "array",
        "description": "JSON schema for JSONPatch operations",
        "items": {
          "oneOf": [
            {
              "$ref": "#/components/schemas/AddOperation"
            },
            {
              "$ref": "#/components/schemas/ReplaceOperation"
            },
            {
              "$ref": "#/components/schemas/TestOperation"
            },
            {
              "$ref": "#/components/schemas/RemoveOperation"
            },
            {
              "$ref": "#/components/schemas/MoveOperation"
            },
            {
              "$ref": "#/components/schemas/CopyOperation"
            }
          ]
        }
      },
      "ListedPost": {
        "required": [
          "categories",
          "contributors",
          "owner",
          "post",
          "stats",
          "tags"
        ],
        "type": "object",
        "properties": {
          "categories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category"
            }
          },
          "contributors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Contributor"
            }
          },
          "owner": {
            "$ref": "#/components/schemas/Contributor"
          },
          "post": {
            "$ref": "#/components/schemas/Post"
          },
          "stats": {
            "$ref": "#/components/schemas/Stats"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          }
        },
        "description": "A chunk of items."
      },
      "ListedPostList": {
        "required": [
          "first",
          "hasNext",
          "hasPrevious",
          "items",
          "last",
          "page",
          "size",
          "total",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "first": {
            "type": "boolean",
            "description": "Indicates whether current page is the first page."
          },
          "hasNext": {
            "type": "boolean",
            "description": "Indicates whether current page has previous page."
          },
          "hasPrevious": {
            "type": "boolean",
            "description": "Indicates whether current page has previous page."
          },
          "items": {
            "type": "array",
            "description": "A chunk of items.",
            "items": {
              "$ref": "#/components/schemas/ListedPost"
            }
          },
          "last": {
            "type": "boolean",
            "description": "Indicates whether current page is the last page."
          },
          "page": {
            "type": "integer",
            "description": "Page number, starts from 1. If not set or equal to 0, it means no pagination.",
            "format": "int32"
          },
          "size": {
            "type": "integer",
            "description": "Size of each page. If not set or equal to 0, it means no pagination.",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "description": "Total elements.",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "description": "Indicates total pages.",
            "format": "int64"
          }
        }
      },
      "Metadata": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "annotations": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "creationTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "deletionTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "finalizers": {
            "uniqueItems": true,
            "type": "array",
            "nullable": true,
            "items": {
              "type": "string",
              "nullable": true
            }
          },
          "generateName": {
            "type": "string",
            "description": "The name field will be generated automatically according to the given generateName field"
          },
          "labels": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string",
            "description": "Metadata name"
          },
          "version": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          }
        }
      },
      "MoveOperation": {
        "required": [
          "op",
          "from",
          "path"
        ],
        "type": "object",
        "properties": {
          "from": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          },
          "op": {
            "type": "string",
            "enum": [
              "move"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          }
        }
      },
      "PasswordRequest": {
        "required": [
          "password"
        ],
        "type": "object",
        "properties": {
          "password": {
            "type": "string"
          }
        }
      },
      "PatSpec": {
        "required": [
          "name",
          "tokenId",
          "username"
        ],
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastUsed": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "revoked": {
            "type": "boolean"
          },
          "revokesAt": {
            "type": "string",
            "format": "date-time"
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tokenId": {
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        }
      },
      "PersonalAccessToken": {
        "required": [
          "apiVersion",
          "kind",
          "metadata"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/PatSpec"
          }
        }
      },
      "Post": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/PostSpec"
          },
          "status": {
            "$ref": "#/components/schemas/PostStatus"
          }
        }
      },
      "PostAttachmentRequest": {
        "required": [
          "file"
        ],
        "type": "object",
        "properties": {
          "file": {
            "type": "string",
            "format": "binary"
          },
          "postName": {
            "type": "string",
            "description": "Post name."
          },
          "singlePageName": {
            "type": "string",
            "description": "Single page name."
          }
        }
      },
      "PostSpec": {
        "required": [
          "allowComment",
          "deleted",
          "excerpt",
          "pinned",
          "priority",
          "publish",
          "slug",
          "title",
          "visible"
        ],
        "type": "object",
        "properties": {
          "allowComment": {
            "type": "boolean",
            "default": true
          },
          "baseSnapshot": {
            "type": "string"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "cover": {
            "type": "string"
          },
          "deleted": {
            "type": "boolean",
            "default": false
          },
          "excerpt": {
            "$ref": "#/components/schemas/Excerpt"
          },
          "headSnapshot": {
            "type": "string"
          },
          "htmlMetas": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            }
          },
          "owner": {
            "type": "string"
          },
          "pinned": {
            "type": "boolean",
            "default": false
          },
          "priority": {
            "type": "integer",
            "format": "int32",
            "default": 0
          },
          "publish": {
            "type": "boolean",
            "default": false
          },
          "publishTime": {
            "type": "string",
            "format": "date-time"
          },
          "releaseSnapshot": {
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "template": {
            "type": "string"
          },
          "title": {
            "minLength": 1,
            "type": "string"
          },
          "visible": {
            "type": "string",
            "enum": [
              "PUBLIC",
              "INTERNAL",
              "PRIVATE"
            ],
            "default": "PUBLIC"
          }
        }
      },
      "PostStatus": {
        "required": [
          "phase"
        ],
        "type": "object",
        "properties": {
          "commentsCount": {
            "type": "integer",
            "format": "int32"
          },
          "conditions": {
            "type": "array",
            "properties": {
              "empty": {
                "type": "boolean"
              }
            },
            "items": {
              "$ref": "#/components/schemas/Condition"
            }
          },
          "contributors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "excerpt": {
            "type": "string"
          },
          "hideFromList": {
            "type": "boolean"
          },
          "inProgress": {
            "type": "boolean"
          },
          "lastModifyTime": {
            "type": "string",
            "format": "date-time"
          },
          "observedVersion": {
            "type": "integer",
            "format": "int64"
          },
          "permalink": {
            "type": "string"
          },
          "phase": {
            "type": "string"
          }
        }
      },
      "Ref": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "group": {
            "type": "string",
            "description": "Extension group"
          },
          "kind": {
            "type": "string",
            "description": "Extension kind"
          },
          "name": {
            "type": "string",
            "description": "Extension name. This field is mandatory"
          },
          "version": {
            "type": "string",
            "description": "Extension version"
          }
        },
        "description": "Extension reference object. The name is mandatory"
      },
      "RemoveOperation": {
        "required": [
          "op",
          "path"
        ],
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "remove"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          }
        }
      },
      "ReplaceOperation": {
        "required": [
          "op",
          "path",
          "value"
        ],
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "replace"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          },
          "value": {
            "description": "Value can be any JSON value"
          }
        }
      },
      "SnapShotSpec": {
        "required": [
          "owner",
          "rawType",
          "subjectRef"
        ],
        "type": "object",
        "properties": {
          "contentPatch": {
            "type": "string"
          },
          "contributors": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lastModifyTime": {
            "type": "string",
            "format": "date-time"
          },
          "owner": {
            "minLength": 1,
            "type": "string"
          },
          "parentSnapshotName": {
            "type": "string"
          },
          "rawPatch": {
            "type": "string"
          },
          "rawType": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "subjectRef": {
            "$ref": "#/components/schemas/Ref"
          }
        }
      },
      "Snapshot": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/SnapShotSpec"
          }
        }
      },
      "Stats": {
        "type": "object",
        "properties": {
          "approvedComment": {
            "type": "integer",
            "format": "int32"
          },
          "totalComment": {
            "type": "integer",
            "format": "int32"
          },
          "upvote": {
            "type": "integer",
            "format": "int32"
          },
          "visit": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "Tag": {
        "required": [
          "apiVersion",
          "kind",
          "metadata",
          "spec"
        ],
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Metadata"
          },
          "spec": {
            "$ref": "#/components/schemas/TagSpec"
          },
          "status": {
            "$ref": "#/components/schemas/TagStatus"
          }
        }
      },
      "TagSpec": {
        "required": [
          "displayName",
          "slug"
        ],
        "type": "object",
        "properties": {
          "color": {
            "pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
            "type": "string"
          },
          "cover": {
            "type": "string"
          },
          "displayName": {
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "minLength": 1,
            "type": "string"
          }
        }
      },
      "TagStatus": {
        "type": "object",
        "properties": {
          "observedVersion": {
            "type": "integer",
            "format": "int64"
          },
          "permalink": {
            "type": "string"
          },
          "postCount": {
            "type": "integer",
            "format": "int32"
          },
          "visiblePostCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "TestOperation": {
        "required": [
          "op",
          "path",
          "value"
        ],
        "type": "object",
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "test"
            ]
          },
          "path": {
            "pattern": "^(/[^/~]*(~[01][^/~]*)*)*$",
            "type": "string",
            "description": "A JSON Pointer path pointing to the location to move/copy from.",
            "example": "/a/b/c"
          },
          "value": {
            "description": "Value can be any JSON value"
          }
        }
      },
      "TotpAuthLinkResponse": {
        "type": "object",
        "properties": {
          "authLink": {
            "type": "string",
            "format": "uri"
          },
          "rawSecret": {
            "type": "string"
          }
        }
      },
      "TotpRequest": {
        "required": [
          "code",
          "password",
          "secret"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "secret": {
            "type": "string"
          }
        }
      },
      "TwoFactorAuthSettings": {
        "type": "object",
        "properties": {
          "available": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "totpConfigured": {
            "type": "boolean"
          }
        }
      },
      "UserDevice": {
        "required": [
          "active",
          "currentDevice",
          "device"
        ],
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "currentDevice": {
            "type": "boolean"
          },
          "device": {
            "$ref": "#/components/schemas/Device"
          }
        }
      }
    },
    "securitySchemes": {
      "basicAuth": {
        "scheme": "basic",
        "type": "http"
      },
      "bearerAuth": {
        "bearerFormat": "JWT",
        "scheme": "bearer",
        "type": "http"
      }
    }
  }
}