{
  "name": "user_service",
  "contracts": [
    {
      "contract": "user_service.api_account.CreateApiAccount",
      "name": "CreateApiAccount",
      "version": "1.0.0",
      "description": "创建api用户",
      "endpoint": {
        "method": "POST",
        "uri": "/api/user_service/v1/api_account"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "nickname",
            "type": "string",
            "description": "用户昵称"
          }
        ],
        "required": ["user"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "instanceId",
            "type": "string",
            "description": "jobID"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "Create Api Account",
            "zh": "创建api用户"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/user_service/v1/api_account",
            "body": "{\n  \"user\": \"easyops\",\n  \"nickname\": \"easyops\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": {\n      \"instanceId\": \"5c2d520975c6b\"\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.api_account.ListApiAccount",
      "name": "ListApiAccount",
      "version": "1.0.0",
      "description": "api用户列表",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/user_service/v1/api_account"
      },
      "import": ["easyops/model/user_service/api_account"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "每页数据量"
          },
          {
            "name": "q",
            "type": "string",
            "description": "模糊搜索账号名"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 10
        }
      },
      "response": {
        "type": "ApiCount"
      },
      "examples": [
        {
          "description": {
            "en": "List Api Account",
            "zh": "搜索api用户列表"
          },
          "request": {
            "method": "GET",
            "uri": "http://127.0.0.1:8111/api/user_service/v1/api_account"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": {\n      \"list\": [\n        {\"instanceId\": \"5c2d520975c6b\",\"user\": \"easyops\",\"nickname\":\"easyops\"}\n      ]\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.api_account.UpdateApiAccount",
      "name": "UpdateApiAccount",
      "version": "1.0.0",
      "description": "修改api账户",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/user_service/v1/api_account/:id"
      },
      "import": ["easyops/model/user_service/api_account"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "ApiCount.id"
          },
          {
            "ref": "ApiCount.nickname"
          },
          {
            "ref": "ApiCount.status"
          },
          {
            "ref": "ApiCount.access_key"
          },
          {
            "name": "XXX_RestFieldMask",
            "type": "string[]",
            "description": "更新参数过滤，如仅更新昵称，该值里写[\"nickname\"]，为空时更新所有字段"
          }
        ]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "Update Api Account",
            "zh": "创建api用户"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/user_service/v1/api_account/5c2d520975c6b",
            "body": "{\n  \"user\": \"easyops\",\n  \"nickname\": \"easyops\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{}"
          }
        }
      ]
    },
    {
      "contract": "user_service.apikey.CreateApiKey",
      "name": "CreateApiKey",
      "version": "1.0.0",
      "description": "创建用户ApiKey[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/apikey/:user"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          },
          {
            "name": "secret_key",
            "type": "string",
            "description": "secret_key"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "ctime",
            "type": "string",
            "description": "创建时间"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "更新时间戳"
          }
        ],
        "required": [
          "user",
          "access_key",
          "secret_key",
          "state",
          "org",
          "ctime",
          "ts"
        ]
      }
    },
    {
      "contract": "user_service.apikey.DeleteApiKey",
      "name": "DeleteApiKey",
      "version": "1.0.0",
      "description": "删除用户ApiKey[内部]",
      "endpoint": {
        "method": "DELETE",
        "uri": "/api/v1/apikey/delete/:access_key"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          }
        ],
        "required": ["access_key"]
      },
      "response": null
    },
    {
      "contract": "user_service.apikey.DisableApiKey",
      "name": "DisableApiKey",
      "version": "1.0.0",
      "description": "禁用用户ApiKey[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/apikey/disable/:access_key"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          }
        ],
        "required": ["access_key"]
      },
      "response": null
    },
    {
      "contract": "user_service.apikey.EnableApiKey",
      "name": "EnableApiKey",
      "version": "1.0.0",
      "description": "启用用户ApiKey[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/apikey/enable/:access_key"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          }
        ],
        "required": ["access_key"]
      },
      "response": null
    },
    {
      "contract": "user_service.apikey.GetApiKey",
      "name": "GetApiKey",
      "version": "1.0.0",
      "description": "查询个人apikey",
      "endpoint": {
        "method": "GET",
        "uri": "/profile/apikey"
      },
      "request": null,
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          },
          {
            "name": "secret_key",
            "type": "string",
            "description": "secret_key"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "ctime",
            "type": "string",
            "description": "创建时间"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "更新时间戳"
          }
        ],
        "required": [
          "user",
          "access_key",
          "secret_key",
          "state",
          "org",
          "ctime",
          "ts"
        ]
      }
    },
    {
      "contract": "user_service.apikey.ListApiKey",
      "name": "ListApiKey",
      "version": "1.0.0",
      "description": "获取用户ApiKey[内部]",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/v1/apikey"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "page_size",
            "type": "page_size",
            "description": "页大小"
          },
          {
            "name": "q",
            "type": "string",
            "description": "按用户名模糊搜索"
          }
        ],
        "default": {
          "page": 1,
          "page_size": 30
        }
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          },
          {
            "name": "secret_key",
            "type": "string",
            "description": "secret_key"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "ctime",
            "type": "string",
            "description": "创建时间"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "更新时间戳"
          }
        ],
        "required": [
          "user",
          "access_key",
          "secret_key",
          "state",
          "org",
          "ctime",
          "ts"
        ]
      }
    },
    {
      "contract": "user_service.apikey.ResetApiKey",
      "name": "ResetApiKey",
      "version": "1.0.0",
      "description": "重置用户ApiKey[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/apikey/_reset/:user"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          },
          {
            "name": "secret_key",
            "type": "string",
            "description": "secret_key"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "ctime",
            "type": "string",
            "description": "创建时间"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "更新时间戳"
          }
        ],
        "required": [
          "user",
          "access_key",
          "secret_key",
          "state",
          "org",
          "ctime",
          "ts"
        ]
      }
    },
    {
      "contract": "user_service.apikey.UpdateApiKey",
      "name": "UpdateApiKey",
      "version": "1.0.0",
      "description": "修改用户ApiKey[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/apikey/update/:user"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "switchUsers",
            "type": "string[]",
            "description": "切换用户(组)"
          }
        ],
        "required": ["user"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "switchUsers",
            "type": "string[]",
            "description": "切换用户id(组id)"
          }
        ],
        "required": ["user", "switchUsers"]
      },
      "examples": [
        {
          "description": {
            "en": "UpdateApiKey",
            "zh": "修改apikey"
          },
          "request": {
            "method": "PUT",
            "uri": "http://localhost:8111/api/v1/apikey/easyops",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"user\": \"easyops\",\n  \"switchUsers\": [\"fanpu\"]\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n        \"user\": \"easyops\",\n        \"switchUsers\": [\"fanpu\"]\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.auth.GetCaptcha",
      "name": "GetCaptcha",
      "version": "1.0.0",
      "description": "登录验证码[内部]",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/captcha"
      },
      "request": null,
      "response": {
        "type": "file"
      }
    },
    {
      "contract": "user_service.auth.UserAuth",
      "name": "UserAuth",
      "version": "1.0.0",
      "description": "登录认证[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/auth"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          },
          {
            "name": "phrase",
            "type": "string",
            "description": "验证码"
          },
          {
            "name": "loginBy",
            "type": "string",
            "description": "校验密码的方式 easyops: 默认账号密码的方式 custom: 通过客户自定义方式校验, 这种方式需要在 sso-adapter 实现和客户对接的逻辑 ldap: 通过 ldap 登录"
          },
          {
            "name": "clientIp",
            "type": "ip",
            "description": "客户端 ip, 某些客户需要此字段"
          }
        ],
        "required": ["name", "password"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "changePasswordRequired",
            "type": "bool",
            "description": "是否需要修改密码（开启 check-password-security 特性时, 初次登录和密码过期时需要修改密码）"
          },
          {
            "name": "changePasswordReason",
            "type": "string",
            "enum": ["firstLogin", "expired"],
            "description": "修改密码的具体原因（firstLogin:初次登录, expired:密码已过期）"
          },
          {
            "name": "passwordRemainingDays",
            "type": "int",
            "description": "密码有效期剩余时间（当 changePasswordRequired 为 true 时，这个值为 -1）"
          }
        ],
        "required": ["name", "org"]
      },
      "examples": [
        {
          "description": {
            "en": "UserAuth",
            "zh": "登录认证"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/auth",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"name\": \"easyops\",\n  \"password\": \"password\",\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n        \"name\": \"easyops\",\n        \"instanceId\": \"1234567\",\n        \"org\": 2988466,\n        \"changePasswordRequired\": true,\n        \"changePasswordReason\": \"firstLogin\",\n        \"passwordRemainingDays\": 30,\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.auth.UserNameValidate",
      "name": "UserNameValidate",
      "version": "1.0.0",
      "description": "用户名验证[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/name/validate"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "string",
            "description": "用户名"
          }
        ],
        "required": ["name"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          }
        ],
        "required": ["name", "org"]
      },
      "examples": [
        {
          "description": {
            "en": "UserNameValidate",
            "zh": "用户名验证"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/name/validate",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"name\": \"easyops\",\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n        \"name\": \"easyops\",\n        \"instanceId\": \"1234567\",\n        \"org\": 2988466,\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.auth.UserValidate",
      "name": "UserValidate",
      "version": "1.0.0",
      "description": "用户密码验证[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/validate"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          }
        ],
        "required": ["name", "password"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          }
        ],
        "required": ["name", "org"]
      },
      "examples": [
        {
          "description": {
            "en": "UserValidate",
            "zh": "用户密码验证"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/validate",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"name\": \"easyops\",\n  \"password\": \"password\",\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n        \"name\": \"easyops\",\n        \"instanceId\": \"1234567\",\n        \"org\": 2988466,\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.auth.ValidateCaptcha",
      "name": "ValidateCaptcha",
      "version": "1.0.0",
      "description": "验证码校验",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/validate/captcha"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "phrase",
            "type": "string",
            "description": "验证码"
          }
        ],
        "required": ["phrase"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "ValidateCaptcha",
            "zh": "验证码校验"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/validate/captcha",
            "headers": {
              "Cookie": "Captcha:0bb9939df162401ca35048d15fd6761e"
            },
            "body": "{\n    \"phrase\": \"57mn\"\n}"
          },
          "response": {
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"codeExplain\": \"\",\n    \"data\": {}\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.gateway.ListApiKey",
      "name": "ListApiKey",
      "version": "1.0.0",
      "description": "获取用户ApiKey",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/user_service/v1/apikey"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "page_size",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "required": ["page", "page_size"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "access_key",
            "type": "string",
            "description": "access_key"
          },
          {
            "name": "secret_key",
            "type": "string",
            "description": "secret_key"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "ctime",
            "type": "string",
            "description": "创建时间"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "更新时间戳"
          }
        ],
        "required": [
          "user",
          "access_key",
          "secret_key",
          "state",
          "org",
          "ctime",
          "ts"
        ]
      }
    },
    {
      "contract": "user_service.gateway.UserRegister",
      "name": "UserRegister",
      "version": "1.0.0",
      "description": "用户邀请注册",
      "endpoint": {
        "method": "POST",
        "uri": "/api/user_service/v1/users/register"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          },
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "invite",
            "type": "string",
            "description": "邀请码"
          },
          {
            "name": "nickname",
            "type": "string",
            "description": "用户姓名"
          }
        ],
        "required": ["name", "password", "email", "invite"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "nickname",
            "type": "string",
            "description": "用户姓名"
          }
        ],
        "required": ["name", "email", "org", "instanceId"]
      }
    },
    {
      "contract": "user_service.invitation_code.CheckInvitationCode",
      "name": "CheckInvitationCode",
      "version": "1.0.0",
      "description": "邀请码检查[内部]",
      "detail": "已过期或不存在会返回失败",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/invitation/code/:code/check"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "string",
            "description": "邀请码"
          }
        ],
        "required": ["code"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "string",
            "description": "邀请码"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          }
        ],
        "required": ["code", "org"]
      }
    },
    {
      "contract": "user_service.invitation_code.GetInvitationCode",
      "name": "GetInvitationCode",
      "version": "1.0.0",
      "description": "邀请码获取[内部]",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/invitation/code"
      },
      "request": null,
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "string",
            "description": "邀请码"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "expires",
            "type": "string",
            "description": "过期时间"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          }
        ],
        "required": ["code", "org", "expires", "state"]
      }
    },
    {
      "contract": "user_service.invitation_code.ResetInvitationCode",
      "name": "ResetInvitationCode",
      "version": "1.0.0",
      "description": "重置邀请码[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/invitation/code/_reset"
      },
      "request": null,
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "string",
            "description": "邀请码"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "expires",
            "type": "string",
            "description": "过期时间"
          },
          {
            "name": "state",
            "type": "string",
            "enum": ["invalid", "valid"],
            "description": "是否可用"
          }
        ],
        "required": ["code", "org", "expires", "state"]
      }
    },
    {
      "contract": "user_service.launchpad.CreateCollection",
      "name": "CreateCollection",
      "version": "1.0.0",
      "description": "新增我的收藏",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/launchpad/collection"
      },
      "import": ["easyops/model/user_service/launchpad_collection"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "launchpadCollection",
            "type": "LaunchpadCollection",
            "description": "LaunchpadCollection"
          },
          {
            "name": "microAppId",
            "type": "string",
            "description": "microApp Id, 当type为microApp时必填"
          }
        ],
        "required": ["launchpadCollection.type", "launchpadCollection.name"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "launchpadInstanceId",
            "type": "instance_id",
            "description": "LaunchpadCollection instanceId"
          }
        ],
        "required": ["launchpadInstanceId"]
      }
    },
    {
      "contract": "user_service.launchpad.CreateCollectionV2",
      "name": "CreateCollectionV2",
      "version": "1.0.0",
      "description": "新增我的收藏V2",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v2/launchpad/collection"
      },
      "import": ["easyops/model/user_service/launchpad_collection_v2"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "LaunchpadCollectionV2.name"
          },
          {
            "ref": "LaunchpadCollectionV2.icon"
          },
          {
            "ref": "LaunchpadCollectionV2.link"
          },
          {
            "ref": "LaunchpadCollectionV2.type"
          },
          {
            "name": "relatedInstanceId",
            "type": "string",
            "description": "type是microApp或者customItem时生效，表示关联对象的实例Id，并且 name/icon/link 参数无效; 类型是link时此参数无效，name/icon/link 参数生效。"
          }
        ],
        "required": ["LaunchpadCollectionV2.type"]
      },
      "response": {
        "type": "LaunchpadCollectionV2"
      },
      "examples": [
        {
          "description": {
            "en": "Create micro app collection",
            "zh": "新增微应用收藏"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v2/launchpad/collection",
            "headers": {
              "Content-Type": "application/json",
              "Org": 8888,
              "User": "easyops"
            },
            "body": "{\n    \"type\": \"microApp\",\n    \"relatedInstanceId\": \"6032b0f9a3d6d\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"instanceId\": \"5cb76b1845ec6\",\n    \"type\": \"microApp\",\n    \"relatedApp\": {\n        \"instanceId\": \"6032b0f9a3d6d\",\n        \"id\": \"app-deploy\",\n        \"name\": \"next 应用部署\",\n        \"homepage\": \"/app-deploy\",\n        \"menuIcon\": {\n            \"lib\": \"easyops\",\n            \"type\": \"\",\n            \"theme\": \"\",\n            \"icon\": \"cd-deploy\",\n            \"prefix\": \"\",\n            \"category\": \"app\",\n            \"color\": \"\",\n            \"imgSrc\": \"\"\n        },\n        \"locales\": {\n            \"en\": {\n                \"name\": \"App Deploy\"\n            },\n            \"zh\": {\n                \"name\": \"应用部署\"\n            }\n        }\n    },\n    \"relatedCustomItem\": null\n}"
          }
        },
        {
          "description": {
            "en": "Create link collection",
            "zh": "新增链接收藏"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v2/launchpad/collection",
            "headers": {
              "Content-Type": "application/json",
              "Org": 8888,
              "User": "easyops"
            },
            "body": "{\n    \"name\": \"常用工具\",\n    \"type\": \"link\",\n    \"icon\": {\n        \"lib\": \"fa\",\n        \"type\": \"\",\n        \"theme\": \"\",\n        \"icon\": \"apple-alt\",\n        \"prefix\": \"fas\",\n        \"category\": \"\"\n    },\n    \"link\": \"/tools\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"instanceId\": \"5cb76b1845ec6\",\n    \"name\": \"常用工具\",\n    \"type\": \"link\",\n    \"icon\": {\n        \"lib\": \"fa\",\n        \"type\": \"\",\n        \"theme\": \"\",\n        \"icon\": \"apple-alt\",\n        \"prefix\": \"fas\",\n        \"category\": \"\"\n    },\n    \"link\": \"/tools\",\n    \"relatedApp\": null,\n    \"relatedCustomItem\": null\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.launchpad.DeleteCollection",
      "name": "DeleteCollection",
      "version": "1.0.0",
      "description": "删除我的收藏",
      "endpoint": {
        "method": "DELETE",
        "uri": "/api/v1/launchpad/collection/:instanceId"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "launchpad instanceId"
          }
        ],
        "required": ["instanceId"]
      },
      "response": null
    },
    {
      "contract": "user_service.launchpad.DeleteCollectionV2",
      "name": "DeleteCollectionV2",
      "version": "1.0.0",
      "description": "删除我的收藏V2",
      "endpoint": {
        "method": "DELETE",
        "uri": "/api/v2/launchpad/collection/:instanceId"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "实例Id"
          }
        ],
        "required": ["instanceId"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "Delete collection v2",
            "zh": "删除我的收藏V2"
          },
          "request": {
            "method": "DELETE",
            "uri": "http://127.0.0.1:8111/api/v2/launchpad/collection/5cb76b1845ec6",
            "headers": {
              "Content-Type": "application/json",
              "Org": 8888,
              "User": "easyops"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": null\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.launchpad.ListCollection",
      "name": "ListCollection",
      "version": "1.0.0",
      "description": "获取我的收藏列表",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/v1/launchpad/collection"
      },
      "import": ["easyops/model/user_service/launchpad_collection"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 24
        }
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "launchpadCollection",
            "type": "LaunchpadCollection",
            "description": "LaunchpadCollection"
          },
          {
            "name": "microAppId",
            "type": "string",
            "description": "microApp Id, 当type为microApp时有该字段"
          }
        ],
        "required": [
          "launchpadCollection.name",
          "launchpadCollection.icon",
          "launchpadCollection.type",
          "launchpadCollection.instanceId"
        ]
      }
    },
    {
      "contract": "user_service.launchpad.ListCollectionV2",
      "name": "ListCollectionV2",
      "version": "1.0.0",
      "description": "获取我的收藏列表V2",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/v2/launchpad/collection"
      },
      "import": ["easyops/model/user_service/launchpad_collection_v2"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 10
        }
      },
      "response": {
        "type": "LaunchpadCollectionV2"
      },
      "examples": [
        {
          "description": {
            "en": "List collection v2",
            "zh": "获取我的收藏列表V2"
          },
          "request": {
            "method": "GET",
            "uri": "http://127.0.0.1:8111/api/v2/launchpad/collection?page=1&pageSize=10",
            "headers": {
              "Content-Type": "application/json",
              "Org": 8888,
              "User": "easyops"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": {\n        \"page\": 1,\n        \"page_size\": 25,\n        \"total\": 13,\n        \"list\": [\n            {\n                \"instanceId\": \"5cb76baf334de\",\n                \"type\": \"link\",\n                \"name\": \"常用工具\",\n                \"link\": \"/tools\",\n                \"icon\": {\n                    \"lib\": \"fa\",\n                    \"type\": \"\",\n                    \"theme\": \"\",\n                    \"icon\": \"apple-alt\",\n                    \"prefix\": \"fas\",\n                    \"category\": \"\"\n                },\n                \"relatedApp\": null,\n                \"relatedCustomItem\": null\n            },\n            {\n                \"instanceId\": \"5cb76b1845ec6\",\n                \"type\": \"microApp\",\n                \"name\": \"\",\n                \"link\": \"\",\n                \"icon\": null,\n                \"relatedApp\": {\n                    \"instanceId\": \"6032b0f9a3d6d\",\n                    \"id\": \"app-deploy\",\n                    \"name\": \"next 应用部署\",\n                    \"homepage\": \"/app-deploy\",\n                    \"menuIcon\": {\n                        \"lib\": \"easyops\",\n                        \"type\": \"\",\n                        \"theme\": \"\",\n                        \"icon\": \"cd-deploy\",\n                        \"prefix\": \"\",\n                        \"category\": \"app\",\n                        \"color\": \"\",\n                        \"imgSrc\": \"\"\n                    },\n                    \"locales\": {\n                        \"en\": {\n                            \"name\": \"App Deploy\"\n                        },\n                        \"zh\": {\n                            \"name\": \"应用部署\"\n                        }\n                    }\n                },\n                \"relatedCustomItem\": null\n            },\n            {\n                \"instanceId\": \"5cb76b1845ec6\",\n                \"type\": \"customItem\",\n                \"name\": \"\",\n                \"link\": \"\",\n                \"icon\": null,\n                \"relatedCustomItem\": {\n                    \"instanceId\": \"6089893b13bed\",\n                    \"type\": \"custom\",\n                    \"id\": \"david_test\",\n                    \"name\": \"david_test\",\n                    \"url\": \"https://www.baidu.com\",\n                    \"menuIcon\": {\n                        \"lib\": \"antd\",\n                        \"type\": \"\",\n                        \"theme\": \"outlined\",\n                        \"icon\": \"cloud-server\",\n                        \"prefix\": \"\",\n                        \"category\": \"\",\n                        \"color\": \"\",\n                        \"imgSrc\": \"\"\n                    }\n                },\n                \"relatedApp\": null\n            }\n        ]\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.launchpad.SortCollection",
      "name": "SortCollection",
      "version": "1.0.0",
      "description": "我的收藏排序",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/launchpad/sort-collection"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "list",
            "type": "instance_id[]",
            "description": "launchpad instanceId列表"
          }
        ]
      },
      "response": null
    },
    {
      "contract": "user_service.launchpad.UpdateCollection",
      "name": "UpdateCollection",
      "version": "1.0.0",
      "description": "修改我的收藏",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/launchpad/collection/:instanceId"
      },
      "import": ["easyops/model/user_service/launchpad_collection"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "LaunchpadCollection.instanceId"
          },
          {
            "name": "launchpadCollection",
            "type": "LaunchpadCollection",
            "description": "LaunchpadCollection"
          },
          {
            "name": "microAppId",
            "type": "string",
            "description": "microApp Id, 当type为microApp时必填"
          }
        ],
        "required": [
          "LaunchpadCollection.instanceId",
          "launchpadCollection.type",
          "launchpadCollection.name"
        ]
      },
      "response": null
    },
    {
      "contract": "user_service.ldap.Auth",
      "name": "Auth",
      "version": "1.0.1",
      "description": "LDAP认证",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/ldap_auth"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "login_id",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          },
          {
            "name": "ldapServer",
            "type": "string",
            "description": "ladp服务器名称"
          }
        ],
        "required": ["login_id", "password"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "name",
            "type": "string",
            "description": "用户名,和username一致(兼容以前返回)"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "isAdmin",
            "type": "bool",
            "description": "是否为管理员"
          }
        ],
        "required": ["username", "name", "org"]
      },
      "examples": [
        {
          "description": {
            "en": "Auth",
            "zh": "LDAP认证"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v1/users/ldap_auth",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n\t\"login_id\": \"test\",\n    \"password:\" \"aaa\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": {\n        \"username\": \"test\",\n        \"name\": \"test\",\n        \"instanceId\": \"5fd9b1a84ce09\",\n        \"org\": 8888,\n        \"isAdmin\": false\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.ldap.Config",
      "name": "Config",
      "version": "1.0.0",
      "description": "LDAP配置",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/ldap_conf"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "key",
            "type": "string",
            "description": "key"
          },
          {
            "name": "conf",
            "type": "object",
            "fields": [
              {
                "name": "name",
                "type": "string",
                "description": "name"
              },
              {
                "name": "user_search_dn",
                "type": "string",
                "description": "user_search_dn"
              },
              {
                "name": "user_filter",
                "type": "string",
                "description": "user_filter"
              },
              {
                "name": "manager_dn",
                "type": "string",
                "description": "manager_dn"
              },
              {
                "name": "manager_password",
                "type": "string",
                "description": "manager_password"
              },
              {
                "name": "username",
                "type": "string",
                "description": "username"
              },
              {
                "name": "org",
                "type": "int",
                "description": "org"
              }
            ],
            "description": "配置"
          }
        ],
        "required": ["key", "conf"]
      },
      "response": null
    },
    {
      "contract": "user_service.my_collection.ListMyCollection",
      "name": "ListMyCollection",
      "version": "1.0.0",
      "description": "获取我的收藏列表",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/user_service/my_collection/collections"
      },
      "import": ["easyops/model/user_service/my_collection"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "MyCollection.module"
          },
          {
            "ref": "MyCollection.collectionName"
          }
        ],
        "required": ["MyCollection.module", "MyCollection.collectionName"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "ref": "MyCollection.*"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "Get",
            "zh": "获取我的收藏列表"
          },
          "request": {
            "method": "GET",
            "uri": "http://localhost:8111/api/v1/user_service/my_collection/collections?module=ci&collectionName=my_collection",
            "headers": {
              "Content-Type": "application/json"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": {\n               \"name\": \"ci_test_my_collection\",\n               \"module\": \"ci\",\n               \"collectionName\": \"my_collection\",\n               \"payloads\": [\n                   {\n                       \"name\": \"ci\",\n                       \"to\": \"/ci/xxx\"\n                   }\n               ]\n            }\n\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.my_collection.UpsertMyCollection",
      "name": "UpsertMyCollection",
      "version": "1.0.0",
      "description": "更新/新增我的收藏，这个接口用于全量更新单实例",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/user_service/my_collection/upsert_collections"
      },
      "import": ["easyops/model/user_service/my_collection"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "MyCollection.*"
          }
        ]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "UpsertMyCollection",
            "zh": "更新/新增我的收藏，这个接口用于全量更新单实例"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/user_service/my_collection/upsert_collections",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n     \"name\": \"ci_test_my_collection\",\n     \"module\": \"ci\",\n     \"collectionName\": \"my_collection\",\n     \"payloads\": [\n         {\n             \"name\": \"ci\",\n             \"instanceId\": \"instanceId\",\n             \"url\": \"/ci/xxx\"\n         }\n     ]\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": \"\"\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.organization.CreateOrg",
      "name": "CreateOrg",
      "version": "1.0.0",
      "description": "创建Org[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/org"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "OrgInfo.id"
          },
          {
            "ref": "OrgInfo.name"
          },
          {
            "ref": "OrgInfo.memo"
          },
          {
            "ref": "OrgInfo.namespaces"
          },
          {
            "name": "expired_days",
            "type": "int",
            "description": "过期日期(天数)"
          },
          {
            "name": "edition",
            "type": "string",
            "description": "版本类型"
          }
        ],
        "required": ["edition"],
        "default": {
          "id": 0,
          "expired_days": 0
        }
      },
      "response": {
        "type": "OrgInfo",
        "required": [
          "OrgInfo.id",
          "OrgInfo.expires",
          "OrgInfo.createAt",
          "OrgInfo.valid",
          "OrgInfo.ts"
        ]
      }
    },
    {
      "contract": "user_service.organization.CreateOrgV2",
      "name": "CreateOrgV2",
      "version": "1.0.0",
      "description": "创建OrgV2, 在cmdb创建org信息",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v2/org"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "OrgInfo.id"
          },
          {
            "ref": "OrgInfo.name"
          },
          {
            "ref": "OrgInfo.memo"
          },
          {
            "ref": "OrgInfo.namespaces"
          },
          {
            "name": "expired_days",
            "type": "int",
            "description": "过期日期(天数)"
          }
        ],
        "default": {
          "id": 0,
          "expired_days": 0
        }
      },
      "response": {
        "type": "OrgInfo",
        "required": [
          "OrgInfo.id",
          "OrgInfo.expires",
          "OrgInfo.createAt",
          "OrgInfo.valid",
          "OrgInfo.ts"
        ]
      },
      "examples": [
        {
          "description": {
            "en": "create org to mongoDB",
            "zh": "创建org，在mongoDB写入org信息"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v2/org",
            "headers": {
              "Content-Type": "application/json",
              "user": "defaultUser"
            },
            "body": "{\n  \"id\": 8888,\n  \"name\": \"8888\",\n  \"memo\": \"memo\",\n  \"expired_days\": -1\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"id\": 8888\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.organization.DisableOrg",
      "name": "DisableOrg",
      "version": "1.0.0",
      "description": "禁用Org[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/org/:id/disable"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          }
        ],
        "required": ["id"]
      },
      "response": null
    },
    {
      "contract": "user_service.organization.EnableOrg",
      "name": "EnableOrg",
      "version": "1.0.0",
      "description": "启用Org[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/org/:id/enable"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          }
        ],
        "required": ["id"]
      },
      "response": null
    },
    {
      "contract": "user_service.organization.GetCurrentOrg",
      "name": "GetCurrentOrg",
      "version": "1.0.0",
      "description": "获取当前用户所属Org[内部]",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/org/current"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": null,
      "response": {
        "type": "OrgInfo",
        "required": [
          "OrgInfo.id",
          "OrgInfo.expires",
          "OrgInfo.createAt",
          "OrgInfo.valid",
          "OrgInfo.ts"
        ]
      }
    },
    {
      "contract": "user_service.organization.GetOrgInfo",
      "name": "GetOrgInfo",
      "version": "1.0.0",
      "description": "获取Org信息[内部]",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/org/info/:id"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          }
        ],
        "required": ["id"]
      },
      "response": {
        "type": "OrgInfo",
        "required": [
          "OrgInfo.id",
          "OrgInfo.expires",
          "OrgInfo.createAt",
          "OrgInfo.valid",
          "OrgInfo.ts"
        ]
      }
    },
    {
      "contract": "user_service.organization.ListOrg",
      "name": "ListOrg",
      "version": "1.0.0",
      "description": "获取所有Org[内部]",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/org/list"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": null,
      "response": {
        "wrapper": false,
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "int",
            "description": "返回码"
          },
          {
            "name": "error",
            "type": "string",
            "description": "错误信息"
          },
          {
            "name": "message",
            "type": "string",
            "description": "返回消息"
          },
          {
            "name": "data",
            "type": "OrgInfo[]",
            "description": "org列表"
          }
        ],
        "required": ["code", "error", "message", "data"]
      }
    },
    {
      "contract": "user_service.organization.SetOrgExpiredDate",
      "name": "SetOrgExpiredDate",
      "version": "1.0.0",
      "description": "设置Org过期日期[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/org/:id/_expired_date"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          },
          {
            "name": "expired_date",
            "type": "string",
            "validate": {
              "pattern": "^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$"
            },
            "description": "过期日期"
          }
        ],
        "required": ["id", "expired_date"]
      },
      "response": null
    },
    {
      "contract": "user_service.organization.SetOrgName",
      "name": "SetOrgName",
      "version": "1.0.0",
      "description": "设置Org名称[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/org/:id/name"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          },
          {
            "ref": "OrgInfo.name"
          }
        ],
        "required": ["id", "OrgInfo.name"]
      },
      "response": null
    },
    {
      "contract": "user_service.organization.SetOrgNamespaces",
      "name": "SetOrgNamespaces",
      "version": "1.0.0",
      "description": "设置Org模型命名空间[内部]",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/org/:id/namespaces"
      },
      "import": ["easyops/model/user_service/org_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "org"
          },
          {
            "ref": "OrgInfo.namespaces"
          }
        ],
        "required": ["id", "OrgInfo.namespaces"]
      },
      "response": null
    },
    {
      "contract": "user_service.recent_visited.Get",
      "name": "Get",
      "version": "1.0.0",
      "description": "获取最近访问数据",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/user_services/users/:userId/recent_visited"
      },
      "import": [],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "keys",
            "type": "string",
            "description": "最近访问keys,多个key逗号隔开"
          },
          {
            "name": "userId",
            "type": "instance_id",
            "description": "用户ID"
          }
        ],
        "required": ["keys", "userId"]
      },
      "response": {
        "type": "map"
      },
      "examples": [
        {
          "description": {
            "en": "Get",
            "zh": "获取最近访问"
          },
          "request": {
            "method": "GET",
            "uri": "http://localhost:8111/api/v1/user_services/users/5ae38530df806/recent_visited?keys=key1,key2,key3",
            "headers": {
              "Content-Type": "application/json"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": {\n                \"key1\":[\n                    {\n                        \"jobId\":\"cc420631f8478c48912d49349caf6583\",\n                        \"jobName\":\"notify\",\n                        \"visitedAt\":\"2022-05-27T09:07:37+08:00\"\n                    },\n                    {\n                        \"jobId\":\"b7e23d5e2b5b95f54b6f827888431a72\",\n                        \"jobName\":\"influxdb\",\n                        \"visitedAt\":\"2022-05-27T09:07:45+08:00\"\n                    }\n                ],\n                \"key2\":[\n                    {\n                        \"id\":\"5df67d3330cc9\",\n                        \"name\":\"Form Builder\",\n                        \"visitedAt\":\"2022-05-27T09:08:00+08:00\"\n                    },\n                    {\n                        \"id\":\"5df57d131685b\",\n                        \"name\":\"部署工单\",\n                        \"visitedAt\":\"2022-05-27T09:08:04+08:00\"\n                    }\n                ],\n                \"key3\":[\n                    {\n                        \"id\":\"5c60b63ad7651\",\n                        \"name\":\"paul-test\",\n                        \"visitedAt\":\"2022-05-27T09:08:12+08:00\"\n                    },\n                    {\n                        \"id\":\"5d4f88c5b30b7\",\n                        \"name\":\"需求管理后台服务\",\n                        \"visitedAt\":\"2022-05-27T09:08:18+08:00\"\n                    }\n                ]\n            }\n\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.recent_visited.Set",
      "name": "Set",
      "version": "1.0.0",
      "description": "保存最近访问数据",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/user_services/users/:userId/recent_visited"
      },
      "import": [],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "userId",
            "type": "instance_id",
            "description": "用户ID"
          },
          {
            "name": "type",
            "type": "string",
            "enums": ["tag", "recentHistory"],
            "description": "标识最近访问或者过滤标签"
          },
          {
            "name": "data",
            "type": "object",
            "fields": [
              {
                "name": "key",
                "type": "string",
                "description": "key"
              },
              {
                "name": "value",
                "type": "object[]",
                "fields": [
                  {
                    "name": "visitObjectId",
                    "type": "string",
                    "description": "访问实例ID"
                  },
                  {
                    "name": "visitObjectName",
                    "type": "string",
                    "description": "访问实例名称"
                  },
                  {
                    "name": "visitedAt",
                    "type": "string",
                    "description": "访问时间"
                  },
                  {
                    "name": "count",
                    "type": "int",
                    "description": "访问次数"
                  }
                ],
                "description": "value"
              }
            ],
            "description": "最近访问列表"
          }
        ],
        "required": ["data", "userId"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "Set",
            "zh": "保存最近访问数据"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/user_services/users/5ae38530df806/recent_visited",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"data\": [\n        {\n            \"key\": \"object_visit_history5ae38530df806_invisible\",\n            \"valye\": [\n                {\n                    \"visitObjectId\": \"PACKAGE\",\n                    \"visitObjectName\": \"包\",\n                    \"visitedAt\": \"2022-05-27T09:00:42+08:00\",\n                    \"count\": 2\n                },\n                {\n                    \"visit_objectId\": \"CLUSTER\",\n                    \"visit_objectName\": \"集群\",\n                    \"visitedAt\": \"2022-05-27T09:00:26+08:00\",\n                    \"count\": 1\n                }\n            ]\n        }\n    ]\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\":null\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.sso_auth_server.OauthAccessToken",
      "name": "OauthAccessToken",
      "version": "1.0.0",
      "description": "oauth2授权码模式，获取accessToken接口",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/user_service/sso_auth_server/oauth2/access_token"
      },
      "import": ["easyops/model/user_service/sso_client"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "SSOClient.redirectUri"
          },
          {
            "ref": "SSOClient.clientId"
          },
          {
            "ref": "SSOClient.clientSecret"
          },
          {
            "name": "code",
            "type": "string",
            "description": "授权码，这里传拿到的授权码"
          },
          {
            "name": "grantType",
            "type": "string",
            "description": "授权类型，这里是使用授权码，传authorization_code"
          }
        ],
        "required": [
          "SSOClient.clientId",
          "SSOClient.redirectUri",
          "grantType",
          "code"
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "accessToken",
            "type": "string",
            "description": "生成的accessToken"
          },
          {
            "name": "expiresIn",
            "type": "int64",
            "description": "超时时间，单位秒"
          },
          {
            "name": "tokenType",
            "type": "string",
            "description": "访问令牌的类型，通常值为 \"Bearer\""
          },
          {
            "name": "scope",
            "type": "string",
            "description": "表示访问令牌的范围"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "OauthAccessToken",
            "zh": "oauth2授权码模式，获取accessToken接口"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/user_service/sso_auth_server/oauth2/access_token",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"redirectUri\": \"http://your_redirect_uri\",\n    \"clientId\": \"your_client_id\",\n    \"clientSecret\": \"your_client_secret\",\n    \"code\": \"your_authorization_code\",\n    \"grantType\": \"authorization_code\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": {\n        \"accessToken\": \"your_access_token\",\n        \"tokenType\": \"Bearer\",\n        \"scope\": \"read\",\n        \"expiresIn\": 3600\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.sso_auth_server.OauthAuth",
      "name": "OauthAuth",
      "version": "1.0.0",
      "description": "oauth2授权码模式，授权接口",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/user_service/sso_auth_server/oauth2/auth"
      },
      "import": ["easyops/model/user_service/sso_client"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "SSOClient.redirectUri"
          },
          {
            "ref": "SSOClient.clientId"
          },
          {
            "name": "responseType",
            "type": "string",
            "description": "响应类型，这里默认传code"
          },
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "scope",
            "type": "string",
            "description": "授权范围，这里直接传read，授权后可以获取用户名"
          },
          {
            "name": "state",
            "type": "string",
            "description": "用于防止 CSRF 攻击，客户端生成的随机值，认证服务器会原样返回，推荐传这个参数"
          }
        ],
        "required": [
          "SSOClient.redirectUri",
          "SSOClient.clientId",
          "SSOClient.responseType"
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "string",
            "description": "授权码"
          },
          {
            "name": "state",
            "type": "string",
            "description": "与授权请求中的 state 参数一致，用于防止 CSRF 攻击，认证服务器会原样返回"
          },
          {
            "name": "redirectWay",
            "type": "string",
            "enum": ["GET", "POST"],
            "description": "重定向方式，在oauth2中，这里应该是直接接口302，但为了后续可以兼容多种协议，这里由页面重定向"
          },
          {
            "name": "redirectUri",
            "type": "url",
            "description": "重定向uri"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "OauthAuth",
            "zh": "oauth2授权码模式，授权接口"
          },
          "request": {
            "method": "GET",
            "uri": "http://localhost:8111/api/v1/user_service/sso_auth_server/oauth2/auth?redirectUri=http://127.0.0.1/redirect_uri&clientId=clientId&responseType=code&scope=read&state=testState",
            "headers": {
              "Content-Type": "application/json"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": {\n       \"code\": \"your_authorization_code\",\n       \"state\": \"testState\",\n       \"redirectWay\": \"GET\",\n       \"redirectUri\": \"http://127.0.0.1/redirect_uri\"\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.sso_auth_server.OauthUserInfo",
      "name": "OauthUserInfo",
      "version": "1.0.0",
      "description": "oauth2授权码模式，获取userInfo接口",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/user_service/sso_auth_server/oauth2/user_info"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "accessToken",
            "type": "string",
            "description": "token"
          }
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "sub",
            "type": "string",
            "description": "用户信息"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "OauthUserInfo",
            "zh": "oauth2授权码模式，获取userInfo接口"
          },
          "request": {
            "method": "GET",
            "uri": "http://localhost:8111/api/v1/user_service/sso_auth_server/oauth2/user_info&accessToken={your_access_token}",
            "headers": {
              "Content-Type": "application/json"
            }
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n   \"code\":0,\n   \"codeExplain\":\"\",\n   \"error\":\"\",\n   \"data\":{\n      \"sub\": \"user_id\"\n   }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.sso_auth_server.RegisterSSOClient",
      "name": "RegisterSSOClient",
      "version": "1.0.0",
      "description": "注册sso client",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/user_service/sso_auth_server/sso_clients"
      },
      "import": ["easyops/model/user_service/sso_client"],
      "request": {
        "type": "object",
        "fields": [
          {
            "ref": "SSOClient.clientName"
          },
          {
            "ref": "SSOClient.redirectUri"
          },
          {
            "ref": "SSOClient.clientUser"
          },
          {
            "ref": "SSOClient.email"
          },
          {
            "ref": "SSOClient.phone"
          },
          {
            "ref": "SSOClient.describe"
          },
          {
            "ref": "SSOClient.clientImage"
          }
        ],
        "required": ["clientName", "redirectUri"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "RegisterSSOClient",
            "zh": "注册sso client"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/user_service/sso_auth_server/register_sso_client",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"clientName\": \"测试应用\",\n    \"redirectUri\": \"http://127.0.0.1/redirect_uri\",\n    \"clientUser\": \"test\",\n    \"email\": \"xxx@easyops.cn\",\n    \"phone\": \"12345\"\n    \"describe\": \"demo\",\n    \"clientImage\": \n    {\n        \"name\": \"test\",\n        \"url\": \"xxx.png\"\n    }\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\":null\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.AlterPassword",
      "name": "AlterPassword",
      "version": "1.0.0",
      "description": "修改密码[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/alter_password"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          }
        ],
        "required": ["name"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "zh": "修改密码",
            "en": "Alter Password"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v1/users/alter_password",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"name\": \"easyops\",\n    \"password\": \"test123\"\n}"
          },
          "response": {
            "response": {
              "headers": {
                "Content-Type": "application/json; charset=utf-8"
              },
              "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n    }\n}"
            }
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.AlterSelfPassword",
      "name": "AlterSelfPassword",
      "version": "1.0.0",
      "description": "修改自己密码",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/password"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "password",
            "type": "string",
            "description": "新密码"
          },
          {
            "name": "oldPassword",
            "type": "string",
            "description": "原密码"
          }
        ],
        "required": ["password", "oldPassword"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "zh": "修改自己密码",
            "en": "Alter Self Password"
          },
          "request": {
            "method": "POST",
            "uri": "http://127.0.0.1:8111/api/v1/users/password",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"password\": \"123456\",\n    \"oldPassword\": \"test123\"\n}"
          },
          "response": {
            "response": {
              "headers": {
                "Content-Type": "application/json; charset=utf-8"
              },
              "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n    }\n}"
            }
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.CheckUserExist",
      "name": "CheckUserExist",
      "version": "1.0.0",
      "description": "验证用户或者邮箱是否存在",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/user_exist"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "parameter",
            "type": "string",
            "description": "用户名或者邮箱"
          },
          {
            "name": "type",
            "type": "string",
            "enum": ["username", "email"],
            "description": "校验类型"
          }
        ],
        "required": ["parameter", "type"]
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.ForgotPassword",
      "name": "ForgotPassword",
      "version": "1.0.0",
      "description": "用户忘记密码",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/password/forgot"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "url",
            "type": "string",
            "description": "重置密码地址"
          }
        ],
        "required": ["email", "url"]
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.GetPasswordConfig",
      "name": "GetPasswordConfig",
      "version": "1.0.0",
      "description": "获取密码配置",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/passconf"
      },
      "request": null,
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "regex",
            "type": "string",
            "description": "正则"
          },
          {
            "name": "description",
            "type": "string",
            "description": "提示"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.GetUserInfo",
      "name": "GetUserInfo",
      "version": "1.0.0",
      "description": "获取用户信息",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/detail/:username"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "map"
      }
    },
    {
      "contract": "user_service.user_admin.GetSimpleUserInfo",
      "name": "GetSimpleUserInfo",
      "version": "1.1.0",
      "description": "获取简单用户信息",
      "detail": "返回结构化信息,方便使用--无需登录即可获取用户信息",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/simple_detail/:username"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "string",
            "description": "用户name"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.GetUserInfoV2",
      "name": "GetUserInfoV2",
      "version": "1.1.0",
      "description": "获取用户信息v2",
      "detail": "返回结构化信息,方便使用",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/detail/:username"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "UserInfo"
      }
    },
    {
      "contract": "user_service.user_admin.GetUserInfoV3",
      "name": "GetUserInfoV3",
      "version": "1.1.0",
      "description": "获取用户信息v3",
      "detail": "返回结构化信息,方便使用",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v3/users/detail/:username"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "type": "UserInfo"
      }
    },
    {
      "contract": "user_service.user_admin.GetUserOrgs",
      "name": "GetUserOrgs",
      "version": "1.0.0",
      "description": "获取用户关联的所有org",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/orgs"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "user_name",
            "description": "用户名"
          }
        ],
        "required": ["username"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "orgList",
            "type": "object[]",
            "description": "已加入的组织列表",
            "fields": [
              {
                "name": "org",
                "type": "org",
                "description": "用户关联的组织"
              },
              {
                "name": "name",
                "type": "string",
                "description": "组织名称"
              }
            ]
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "GetUserOrgs",
            "zh": "获取用户关联的所有org"
          },
          "request": {
            "method": "GET",
            "uri": "http://localhost:8111/api/v1/users/orgs",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"username\": \"easyops\",\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {\n        \"orgList\": [\n              {\n                   \"org\": 1888,\n                   \"name\": \"1888org\",\n              },\n              {\n                   \"org\": 8888,\n                   \"name\": \"8888org\",\n              }\n        ]\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.GetUserAllRoles",
      "name": "GetUserAllRoles",
      "version": "1.0.0",
      "description": "获取用户所有角色",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/roles/:username/all"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "user_name",
            "description": "用户名"
          }
        ]
      },
      "response": {
        "wrapper": false,
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "int",
            "description": "返回码"
          },
          {
            "name": "error",
            "type": "string",
            "description": "错误信息"
          },
          {
            "name": "codeExplain",
            "type": "string",
            "description": "错误码解析"
          },
          {
            "name": "data",
            "type": "string[]",
            "description": "角色"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "en": "get user all roles",
            "zh": "获取用户所有角色"
          },
          "request": {
            "method": "GET",
            "uri": "http://127.0.0.1:8111/api/v1/users/roles/ronezhan/all"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": [\"运维自动化使用人员\",\"自动采集管理人员\",\"自动采集使用人员\"]\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.InviteUserToOrg",
      "name": "InviteUserToOrg",
      "version": "1.0.0",
      "description": "邀请用户加入组织",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/orgs/join"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string[]",
            "description": "用户名, 可以批量邀请多个用户"
          },
          {
            "name": "org",
            "type": "org",
            "description": "邀请加入的组织"
          }
        ],
        "required": ["username", "org"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "InviteUserToOrg",
            "zh": "邀请用户加入组织"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/orgs/join",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"username\": [\"easyops\", \"test\"],\n  \"org\": 8888,\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {}\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.InvitedUserRegister",
      "name": "InvitedUserRegister",
      "version": "1.1.0",
      "description": "受邀用户注册",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/register_with_code"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "password",
            "description": "密码"
          },
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "invitation_code",
            "type": "string",
            "description": "邀请码"
          }
        ],
        "required": ["username", "password", "email", "invitation_code"]
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.ListGroupsInfo",
      "name": "ListGroupsInfo",
      "version": "1.0.0",
      "description": "获取用户组信息列表",
      "endpoint": {
        "method": "LIST",
        "uri": "/api/v1/groups"
      },
      "import": ["easyops/model/user_service/user_group"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "comma_separated_string",
            "description": "查询的name列表(精确匹配),使用逗号分隔"
          },
          {
            "name": "keyword",
            "type": "string",
            "description": "name字段模糊搜索，如name字段不为空则忽略当前字段"
          },
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 20
        }
      },
      "response": {
        "type": "UserGroup"
      },
      "examples": [
        {
          "description": {
            "en": "list group info",
            "zh": "获取用户组信息列表"
          },
          "request": {
            "method": "GET",
            "uri": "http://127.0.0.1:8111/api/v1/groups",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"page\": 1,\n    \"pageSize\": 10\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\": 0,\n    \"error\": \"\",\n    \"message\": \"\",\n    \"data\": {\n       \"page\": 1,\n       \"pageSize\": 10,\n       \"total\": 100,\n       \"list\": [\n          {\n              \"instanceId\": \"5a3dd40fd55f8\",\n              \"name\": \"samuel\",\n              \"description\": \"\"\n          }\n       ]\n    }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.ListGroupsId",
      "name": "ListGroupsId",
      "version": "1.0.0",
      "description": "获取用户组Id列表",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/groups/id"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user_id",
            "type": "string",
            "description": "用户id, 传此参数返回用户所在的所有用户组, 默认返回所有用户组"
          }
        ]
      },
      "response": {
        "wrapper": false,
        "type": "object",
        "fields": [
          {
            "name": "code",
            "type": "int",
            "description": "返回码"
          },
          {
            "name": "error",
            "type": "string",
            "description": "错误信息"
          },
          {
            "name": "codeExplain",
            "type": "string",
            "description": "错误码解析"
          },
          {
            "name": "data",
            "type": "string[]",
            "description": "用户组列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.ListGroupsIdName",
      "name": "ListGroupsIdName",
      "version": "1.0.0",
      "description": "获取用户组Id与name映射",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/groups/id_map_name"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user_id",
            "type": "string",
            "description": "用户id, 传此参数返回用户所在的所有用户组, 默认返回所有用户组"
          }
        ]
      },
      "response": {
        "type": "map"
      }
    },
    {
      "contract": "user_service.user_admin.ListUsersInfo",
      "name": "ListUsersInfo",
      "version": "1.0.0",
      "description": "获取用户信息列表",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "state",
            "type": "string",
            "description": "状态"
          },
          {
            "name": "name",
            "type": "comma_separated_string",
            "description": "查询的name列表,使用逗号分隔"
          },
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 20
        }
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          },
          {
            "name": "total",
            "type": "int",
            "description": "总数"
          },
          {
            "name": "list",
            "type": "map[]",
            "description": "用户列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.ListUsersId",
      "name": "ListUsersId",
      "version": "1.0.0",
      "description": "获取用户name列表",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/id"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "state",
            "type": "string",
            "description": "状态"
          }
        ]
      },
      "response": {
        "type": "string[]"
      }
    },
    {
      "contract": "user_service.user_admin.ListUsersIdNick",
      "name": "ListUsersIdNick",
      "version": "1.0.0",
      "description": "获取用户name与昵称映射",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users/id_map_nickname"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "state",
            "type": "string",
            "description": "状态"
          }
        ]
      },
      "response": {
        "type": "map"
      }
    },
    {
      "contract": "user_service.user_admin.ListUsersInfoV2",
      "name": "ListUsersInfoV2",
      "version": "1.1.0",
      "description": "获取用户信息列表v2",
      "detail": "返回结构化信息,方便使用",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/users"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "state",
            "type": "string",
            "description": "状态"
          },
          {
            "name": "comma_separated_string",
            "type": "string",
            "description": "查询的name列表,使用逗号分隔"
          },
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 20
        }
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          },
          {
            "name": "total",
            "type": "int",
            "description": "总数"
          },
          {
            "name": "list",
            "type": "UserInfo[]",
            "description": "用户列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.ListUsersInfoV3",
      "name": "ListUsersInfoV3",
      "version": "1.2.0",
      "description": "获取用户信息列表v3",
      "detail": "返回结构化信息,方便使用",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v3/users"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "state",
            "type": "string",
            "description": "状态"
          },
          {
            "name": "name",
            "type": "comma_separated_string",
            "description": "查询的name列表(精确匹配),使用逗号分隔"
          },
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "keyword",
            "type": "string",
            "description": "name字段模糊搜索，如name字段不为空则忽略当前字段"
          },
          {
            "name": "fields",
            "type": "string",
            "description": "查询字段列表,使用逗号分隔"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          }
        ],
        "default": {
          "page": 1,
          "pageSize": 20
        }
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "page",
            "type": "page",
            "description": "页码"
          },
          {
            "name": "pageSize",
            "type": "page_size",
            "description": "页大小"
          },
          {
            "name": "total",
            "type": "int",
            "description": "总数"
          },
          {
            "name": "list",
            "type": "UserInfo[]",
            "description": "用户列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.RemoveUserFromOrg",
      "name": "RemoveUserFromOrg",
      "version": "1.0.0",
      "description": "将用户移出组织[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/orgs/remove"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string[]",
            "description": "即将移出组织的用户, 可以批量移出多个用户"
          },
          {
            "name": "org",
            "type": "org",
            "description": "移出哪个组织"
          }
        ],
        "required": ["username", "org"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "RemoveUserFromOrg",
            "zh": "将用户移出组织"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/v1/users/orgs/remove",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n  \"username\": [\"easyops\", \"test\"],\n  \"org\": 8888,\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "status_code": 200,
            "body": "{\n    \"code\": 0,\n    \"codeExplain\": \"\",\n    \"error\": \"\",\n    \"data\": {}\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.ResetPassword",
      "name": "ResetPassword",
      "version": "1.0.0",
      "description": "用户重置密码",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/password/reset"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "ts",
            "type": "int",
            "description": "时间戳"
          },
          {
            "name": "password",
            "type": "string",
            "description": "新密码"
          },
          {
            "name": "key",
            "type": "string",
            "description": "重置密码key"
          }
        ],
        "required": ["username", "ts", "password", "key"]
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.SearchAllUserGroup",
      "name": "SearchAllUserGroup",
      "version": "1.0.0",
      "description": "搜索所有用户组列表",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/group/all"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "query",
            "type": "map",
            "description": "e.g.: { name: { $like: '%q%' } }, { $or: [{ name: { $like: '%q%' }}] }"
          },
          {
            "name": "fields",
            "type": "map",
            "description": "e.g.: { instanceId: true, name: true }"
          },
          {
            "name": "sort",
            "type": "map",
            "description": "按字段排序, 留空默认按照实例ID降序排序(1表示升序, -1表示降序) e.g.: { instanceId: 1 }"
          }
        ],
        "required": ["fields"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "list",
            "type": "map[]",
            "description": "用户组列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.SearchAllUsersInfo",
      "name": "SearchAllUsersInfo",
      "version": "1.0.0",
      "description": "搜索所有用户信息列表",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/all"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "query",
            "type": "map",
            "description": "e.g.: { name: { $like: '%q%' } }, { $or: [{ name: { $like: '%q%' }}] }"
          },
          {
            "name": "fields",
            "type": "map",
            "description": "e.g.: { instanceId: true, name: true }"
          },
          {
            "name": "sort",
            "type": "map",
            "description": "按字段排序, 留空默认按照实例ID降序排序(1表示升序, -1表示降序) e.g.: { instanceId: 1 }"
          }
        ],
        "required": ["fields"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "list",
            "type": "map[]",
            "description": "用户列表"
          }
        ]
      }
    },
    {
      "contract": "user_service.user_admin.UpdateGroupMembers",
      "name": "UpdateGroupMembers",
      "version": "1.0.0",
      "description": "更新用户组成员(添加/移除)",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/groups/:groupId/members"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "groupId",
            "type": "string",
            "description": "group id"
          },
          {
            "name": "userIds",
            "type": "string[]",
            "description": "用户instanceId列表"
          },
          {
            "name": "op",
            "type": "string",
            "enum": ["append", "remove"],
            "description": "操作, append: 添加用户到用户组 remove: 将用户从用户组中移除"
          }
        ],
        "required": ["groupId", "userIds"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "UpdateGroupMembers",
            "zh": "更新用户组成员"
          },
          "request": {
            "method": "PUT",
            "uri": "http://127.0.0.1:8111/api/v1/groups/:groupId/members",
            "body": "{\n  \"op\": \"append\",\n  \"userIds\": [\n    \"6357978df5b4f\"\n  ]\n}"
          },
          "response": {
            "status_code": 200,
            "body": "{\n  \"code\": 0,\n  \"msg\": \"OK\",\n  \"data\": {\n  }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.UpdateUserAvatar",
      "name": "UpdateUserAvatar",
      "version": "1.1.0",
      "description": "更新用户头像",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/users/avatar/:name"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "multipart_enable": true,
        "type": "object",
        "fields": [
          {
            "ref": "UserInfo.name"
          },
          {
            "name": "avatarFile",
            "type": "file",
            "description": "avatar file"
          },
          {
            "name": "isSystemAvatar",
            "type": "bool",
            "description": "上传的头像文件是否是自带头像"
          }
        ]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "bucketName",
            "type": "string",
            "description": "bucket"
          },
          {
            "name": "objectName",
            "type": "string",
            "description": "object name"
          }
        ]
      },
      "examples": [
        {
          "description": {
            "zh": "更新用户头像",
            "en": "Update User Avatar"
          },
          "request": {
            "method": "PUT",
            "uri": "http://127.0.0.1:8111/api/v1/users/icon/easyops",
            "headers": {
              "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryfbNzkSVBVBBrbum5"
            },
            "body": "------WebKitFormBoundaryfbNzkSVBVBBrbum5 Content-Disposition: form-data; name=\"file\"; filename=\"blob\" Content-Type: image/png ------WebKitFormBoundaryfbNzkSVBVBBrbum5--"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json;charset=utf-8"
            },
            "body": "{\n  \"code\": 0,\n  \"codeExplain\": \"\",\n  \"error\": \"\",\n  \"data\": {\n    \"bucketName\": \"avatar\",\n    \"objectName\": \"blob1720424100462523309\"\n  }\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.user_admin.UpdateUserInfo",
      "name": "UpdateUserInfo",
      "version": "1.1.0",
      "description": "更新用户信息",
      "detail": "更新用户信息",
      "endpoint": {
        "method": "PUT",
        "uri": "/api/v1/users/info/:instanceId"
      },
      "import": ["easyops/model/user_service/user_info"],
      "request": {
        "type": "UserInfo"
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.UserDelete",
      "name": "UserDelete",
      "version": "1.0.0",
      "description": "用户删除[内部]",
      "endpoint": {
        "method": "DELETE",
        "uri": "/api/v1/users/:username"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "username",
            "type": "user_name",
            "description": "用户名"
          }
        ],
        "required": ["username"]
      },
      "response": null
    },
    {
      "contract": "user_service.user_admin.GetUserLoginInfo",
      "name": "GetUserLoginInfo",
      "version": "1.0.1",
      "description": "查询用户登录信息",
      "endpoint": {
        "method": "GET",
        "uri": "/api/v1/user/login_info"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "login_key",
            "type": "string",
            "description": "登录的key字符串, 例如SSO登录时候的工号的key"
          },
          {
            "name": "login_value",
            "type": "string",
            "description": "登录的值, 例如SSO登录时候的工号的值"
          }
        ],
        "required": ["login_key", "login_value"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "string",
            "description": "用户name"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "用户instanceId"
          },
          {
            "name": "isAdmin",
            "type": "bool",
            "description": "是否为管理员"
          }
        ],
        "required": ["name", "org"]
      }
    },
    {
      "contract": "user_service.user_admin.UserRegister",
      "name": "UserRegister",
      "version": "1.0.1",
      "description": "用户注册[内部]",
      "endpoint": {
        "method": "POST",
        "uri": "/api/v1/users/register"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "password",
            "type": "string",
            "description": "密码"
          },
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "isAdmin",
            "type": "bool",
            "description": "isAdmin"
          },
          {
            "name": "nickname",
            "type": "string",
            "description": "昵称"
          }
        ],
        "required": ["name", "password", "email", "org"]
      },
      "response": {
        "type": "object",
        "fields": [
          {
            "name": "name",
            "type": "user_name",
            "description": "用户名"
          },
          {
            "name": "email",
            "type": "email",
            "description": "邮箱"
          },
          {
            "name": "org",
            "type": "int",
            "description": "org"
          },
          {
            "name": "instanceId",
            "type": "instance_id",
            "description": "instanceId"
          }
        ],
        "required": ["name", "email", "org", "instanceId"]
      }
    },
    {
      "contract": "user_service.verification_code.CheckVerificationCode",
      "name": "CheckVerificationCode",
      "version": "1.0.0",
      "description": "校验验证码",
      "endpoint": {
        "method": "POST",
        "uri": "/api/user_service/v1/verification/codes/check"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名"
          },
          {
            "name": "type",
            "type": "string",
            "description": "发送类型（eg: email, phone）"
          },
          {
            "name": "service",
            "type": "string",
            "description": "服务名称（eg: tool_service）"
          },
          {
            "name": "scene",
            "type": "string",
            "description": "使用场景 （eg: tool_execute）"
          },
          {
            "name": "resourceIds",
            "type": "string[]",
            "description": "资源id （eg: 9ff366020435ce53d73e69128c611bdd）"
          },
          {
            "name": "code",
            "type": "string",
            "description": "验证码"
          }
        ],
        "required": ["user", "service", "code"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "CheckVerificationCode",
            "zh": "校验验证码"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/user_service/v1/verification/codes/check",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"user\": \"easyops\",\n    \"type\": \"email\",\n    \"service\": \"tool_service\",\n    \"scene\": \"tool_execute\",\n    \"code\": \"123456\",\n    \"resourceIds\": [\"9ff366020435ce53d73e69128c611bdd\"]\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": null\n}"
          }
        }
      ]
    },
    {
      "contract": "user_service.verification_code.SendVerificationCode",
      "name": "SendVerificationCode",
      "version": "1.0.0",
      "description": "发送验证码",
      "endpoint": {
        "method": "POST",
        "uri": "/api/user_service/v1/verification/codes"
      },
      "request": {
        "type": "object",
        "fields": [
          {
            "name": "user",
            "type": "string",
            "description": "用户名(多个用逗号,分割)"
          },
          {
            "name": "type",
            "type": "string",
            "description": "发送类型（多个用逗号,分割; eg: email, phone）"
          },
          {
            "name": "service",
            "type": "string",
            "description": "服务名称（eg: tool_service）"
          },
          {
            "name": "scene",
            "type": "string",
            "description": "使用场景 （eg: tool_execute）"
          },
          {
            "name": "resourceIds",
            "type": "string[]",
            "description": "资源id （eg: 9ff366020435ce53d73e69128c611bdd）"
          },
          {
            "name": "template",
            "type": "string",
            "description": "验证码模板 （eg: 工具验证码为 %s（10分钟内有效）。此验证码用于【easyops】申请执行工具【安装agent】，请确认工具可被执行后，将验证码转告给该用户。）"
          },
          {
            "name": "expiredTime",
            "type": "int",
            "description": "验证码有效期（秒）"
          }
        ],
        "required": ["user", "type", "service", "template"]
      },
      "response": null,
      "examples": [
        {
          "description": {
            "en": "SendVerificationCode",
            "zh": "发送验证码"
          },
          "request": {
            "method": "POST",
            "uri": "http://localhost:8111/api/user_service/v1/verification/codes",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": "{\n    \"user\": \"easyops\",\n    \"type\": \"email\",\n    \"service\": \"tool_service\",\n    \"scene\": \"tool_execute\",\n    \"resourceIds\": [\"9ff366020435ce53d73e69128c611bdd\"],\n    \"template\": \"此验证码用于【easyops】申请执行工具【安装agent】，请确认工具可被执行后，将验证码转告给该用户。\"\n}"
          },
          "response": {
            "headers": {
              "Content-Type": "application/json; charset=utf-8"
            },
            "body": "{\n    \"code\":0,\n    \"codeExplain\":\"\",\n    \"error\":\"\",\n    \"data\": null\n}"
          }
        }
      ]
    }
  ]
}
