{
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/apps/me": {
      "get": {
        "operationId": "AppsController_getMe",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Get me",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ]
      }
    },
    "/api/v1/apps/groups": {
      "post": {
        "operationId": "AppsController_createGroup",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGroupDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Create group",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "groups:create",
        "description": "**Required scope:** `groups:create`"
      },
      "get": {
        "operationId": "AppsController_listGroups",
        "parameters": [
          {
            "name": "cursor",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "List groups",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "groups:manage",
        "description": "**Required scope:** `groups:manage`"
      }
    },
    "/api/v1/apps/groups/{roomId}": {
      "get": {
        "operationId": "AppsController_getGroup",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Get group",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "groups:manage",
        "description": "**Required scope:** `groups:manage`"
      },
      "patch": {
        "operationId": "AppsController_updateGroup",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGroupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Update group",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "groups:manage",
        "description": "**Required scope:** `groups:manage`"
      },
      "delete": {
        "operationId": "AppsController_deleteGroup",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Delete group",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "groups:manage",
        "description": "**Required scope:** `groups:manage`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members": {
      "post": {
        "operationId": "AppsController_inviteMembers",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteMembersDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Invite members",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:invite",
        "description": "**Required scope:** `members:invite`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}": {
      "delete": {
        "operationId": "AppsController_kickMember",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Kick member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}/ban": {
      "post": {
        "operationId": "AppsController_banMember",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BanMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Ban member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}/unban": {
      "post": {
        "operationId": "AppsController_unbanMember",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Unban member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}/mute": {
      "post": {
        "operationId": "AppsController_muteMember",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MuteMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Mute member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}/unmute": {
      "post": {
        "operationId": "AppsController_unmuteMember",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Unmute member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/members/{wallet}/role": {
      "post": {
        "operationId": "AppsController_setMemberRole",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wallet",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetRoleDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Set member role",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "members:moderate",
        "description": "**Required scope:** `members:moderate`"
      }
    },
    "/api/v1/apps/groups/{roomId}/messages": {
      "post": {
        "operationId": "AppsController_sendMessage",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendMessageDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Send message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "messages:send",
        "description": "**Required scope:** `messages:send`"
      },
      "get": {
        "operationId": "AppsController_listMessages",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "List messages",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "messages:read",
        "description": "**Required scope:** `messages:read`"
      }
    },
    "/api/v1/apps/groups/{roomId}/messages/{messageId}": {
      "delete": {
        "operationId": "AppsController_deleteMessage",
        "parameters": [
          {
            "name": "roomId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "messageId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Apps API"
        ],
        "summary": "Delete message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "messages:delete",
        "description": "**Required scope:** `messages:delete`"
      }
    },
    "/api/v1/bots/me": {
      "get": {
        "operationId": "BotsController_getMe",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Get me",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ]
      }
    },
    "/api/v1/bots/sendDirectMessage": {
      "post": {
        "operationId": "BotsController_sendDirectMessage",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendDmDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Send direct message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:dm:send",
        "description": "**Required scope:** `bots:dm:send`"
      }
    },
    "/api/v1/bots/getDirectChat": {
      "get": {
        "operationId": "BotsController_getDirectChat",
        "parameters": [
          {
            "name": "withWallet",
            "required": true,
            "in": "query",
            "schema": {
              "minLength": 32,
              "maxLength": 44,
              "type": "string"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "type": "number"
            }
          },
          {
            "name": "before",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Get direct chat",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:dm:read",
        "description": "**Required scope:** `bots:dm:read`"
      }
    },
    "/api/v1/bots/sendInteractiveMessage": {
      "post": {
        "operationId": "BotsController_sendInteractiveMessage",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendInteractiveMessageDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Send interactive message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:interactive",
        "description": "**Required scope:** `bots:interactive`"
      }
    },
    "/api/v1/bots/sendGroupMessage": {
      "post": {
        "operationId": "BotsController_sendGroupMessage",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendGroupMessageDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Send group message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:send",
        "description": "**Required scope:** `bots:groups:send`"
      }
    },
    "/api/v1/bots/banGroupMember": {
      "post": {
        "operationId": "BotsController_banGroupMember",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BanGroupMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Ban group member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/unbanGroupMember": {
      "post": {
        "operationId": "BotsController_unbanGroupMember",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModerateGroupMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Unban group member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/kickGroupMember": {
      "post": {
        "operationId": "BotsController_kickGroupMember",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModerateGroupMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Kick group member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/muteGroupMember": {
      "post": {
        "operationId": "BotsController_muteGroupMember",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModerateGroupMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Mute group member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/unmuteGroupMember": {
      "post": {
        "operationId": "BotsController_unmuteGroupMember",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModerateGroupMemberDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Unmute group member",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/deleteGroupMessage": {
      "post": {
        "operationId": "BotsController_deleteGroupMessage",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteGroupMessageDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Delete group message",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:groups:moderate",
        "description": "**Required scope:** `bots:groups:moderate`"
      }
    },
    "/api/v1/bots/editMessageText": {
      "post": {
        "operationId": "BotsController_editMessageText",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditMessageTextDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Edit message text",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "messages:edit",
        "description": "**Required scope:** `messages:edit`"
      }
    },
    "/api/v1/bots/editMessageReplyMarkup": {
      "post": {
        "operationId": "BotsController_editMessageReplyMarkup",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditReplyMarkupDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Edit message reply markup",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "messages:edit",
        "description": "**Required scope:** `messages:edit`"
      }
    },
    "/api/v1/bots/getUpdates": {
      "get": {
        "operationId": "BotsController_getUpdates",
        "parameters": [
          {
            "name": "offset",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "type": "number"
            }
          },
          {
            "name": "timeout",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 0,
              "maximum": 50,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Get updates",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:updates:poll",
        "description": "**Required scope:** `bots:updates:poll`"
      }
    },
    "/api/v1/bots/setWebhook": {
      "post": {
        "operationId": "BotsController_setWebhook",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetWebhookDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Set webhook",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:webhook:manage",
        "description": "**Required scope:** `bots:webhook:manage`"
      }
    },
    "/api/v1/bots/deleteWebhook": {
      "post": {
        "operationId": "BotsController_deleteWebhook",
        "parameters": [],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Delete webhook",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:webhook:manage",
        "description": "**Required scope:** `bots:webhook:manage`"
      }
    },
    "/api/v1/bots/answerCallbackQuery": {
      "post": {
        "operationId": "BotsController_answerCallbackQuery",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnswerCallbackDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Bot API"
        ],
        "summary": "Answer callback query",
        "security": [
          {
            "projectKey": []
          },
          {
            "botKey": []
          }
        ],
        "x-required-scope": "bots:callback:answer",
        "description": "**Required scope:** `bots:callback:answer`"
      }
    }
  },
  "info": {
    "title": "Cherry API",
    "description": "The public Cherry server-to-server REST API. Two surfaces, each with its own key: the **Apps API** (`/api/v1/apps`, project key `cherry_sk_…`) for managing rooms, members, and messages your project owns; and the **Bot API** (`/api/v1/bots`, bot key `cherry_bot_…`) for acting as a bot (DMs, group posts, interactive messages, in-room moderation). Autogenerated from the controllers — the `x-required-scope` extension on each operation is the single source of truth for its @RequireScope.",
    "version": "1.0.0",
    "contact": {}
  },
  "tags": [],
  "servers": [
    {
      "url": "https://api.cherry.fun"
    }
  ],
  "components": {
    "securitySchemes": {
      "projectKey": {
        "scheme": "bearer",
        "bearerFormat": "cherry_sk_<projectId>_<secret>",
        "type": "http",
        "description": "Project key — the Apps API surface (`cherry_sk_…`)."
      },
      "botKey": {
        "scheme": "bearer",
        "bearerFormat": "cherry_bot_<botId>_<secret>",
        "type": "http",
        "description": "Bot key — the Bot API surface (`cherry_bot_…`)."
      }
    },
    "schemas": {
      "CreateGroupDto": {
        "type": "object",
        "properties": {
          "ownerWallet": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "description": {
            "type": "string",
            "maxLength": 1000
          },
          "avatarUrl": {
            "type": "string",
            "maxLength": 2000
          },
          "settings": {
            "type": "object",
            "additionalProperties": true
          },
          "gatingRule": {
            "type": "object",
            "additionalProperties": true
          },
          "initialMembers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "allowOwnerDetach": {
            "type": "boolean"
          },
          "allowOwnerDelete": {
            "type": "boolean"
          },
          "allowOwnerTransfer": {
            "type": "boolean"
          }
        },
        "required": [
          "ownerWallet",
          "title"
        ]
      },
      "UpdateGroupDto": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "description": {
            "type": "string",
            "maxLength": 1000
          },
          "avatarUrl": {
            "type": "string",
            "maxLength": 2000
          },
          "settings": {
            "type": "object",
            "additionalProperties": true
          },
          "allowOwnerDetach": {
            "type": "boolean"
          },
          "allowOwnerDelete": {
            "type": "boolean"
          },
          "allowOwnerTransfer": {
            "type": "boolean"
          }
        }
      },
      "InviteMembersDto": {
        "type": "object",
        "properties": {
          "wallets": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "autoAccept": {
            "type": "boolean"
          }
        },
        "required": [
          "wallets"
        ]
      },
      "BanMemberDto": {
        "type": "object",
        "properties": {
          "deleteMessages": {
            "type": "boolean"
          }
        }
      },
      "MuteMemberDto": {
        "type": "object",
        "properties": {
          "untilTs": {
            "type": "string"
          }
        }
      },
      "SetRoleDto": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "member",
              "admin",
              "moderator"
            ]
          }
        },
        "required": [
          "role"
        ]
      },
      "SendMessageDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "messageType": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "content"
        ]
      },
      "SendDmDto": {
        "type": "object",
        "properties": {
          "toWallet": {
            "type": "string",
            "minLength": 32,
            "maxLength": 44
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "toWallet",
          "content"
        ]
      },
      "ReplyMarkupDto": {
        "type": "object",
        "properties": {
          "inline_keyboard": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "object"
              }
            }
          }
        },
        "required": [
          "inline_keyboard"
        ]
      },
      "BlinkDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "miniapp",
              "url"
            ]
          },
          "route": {
            "type": "string",
            "maxLength": 257
          },
          "url": {
            "type": "string",
            "maxLength": 2048,
            "format": "uri"
          },
          "params": {
            "type": "object",
            "additionalProperties": true
          },
          "height": {
            "type": "string",
            "enum": [
              "compact",
              "medium",
              "tall"
            ]
          },
          "initialHeight": {
            "type": "number",
            "minimum": 1
          },
          "interactive": {
            "type": "boolean"
          }
        }
      },
      "SendInteractiveMessageDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "replyToMessageId": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "reply_markup": {
            "$ref": "#/components/schemas/ReplyMarkupDto"
          },
          "blink": {
            "$ref": "#/components/schemas/BlinkDto"
          }
        },
        "required": [
          "roomId",
          "content"
        ]
      },
      "SendGroupMessageDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "replyToMessageId": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "roomId",
          "content"
        ]
      },
      "BanGroupMemberDto": {
        "type": "object",
        "properties": {
          "deleteMessages": {
            "type": "boolean"
          },
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "wallet": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        },
        "required": [
          "roomId",
          "wallet"
        ]
      },
      "ModerateGroupMemberDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "wallet": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        },
        "required": [
          "roomId",
          "wallet"
        ]
      },
      "DeleteGroupMessageDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "messageId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        },
        "required": [
          "roomId",
          "messageId"
        ]
      },
      "EditMessageTextDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "messageId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          "replyMarkup": {
            "anyOf": [
              {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ReplyMarkupDto"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "roomId",
          "messageId",
          "content"
        ]
      },
      "EditReplyMarkupDto": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "messageId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "replyMarkup": {
            "anyOf": [
              {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ReplyMarkupDto"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "roomId",
          "messageId",
          "replyMarkup"
        ]
      },
      "SetWebhookDto": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2048
          },
          "secret": {
            "type": "string",
            "minLength": 16,
            "maxLength": 256
          },
          "events": {
            "type": "array",
            "uniqueItems": true,
            "maxItems": 16,
            "items": {
              "type": "string",
              "enum": [
                "bot_update"
              ]
            }
          }
        },
        "required": [
          "url"
        ]
      },
      "EditMessagePayloadDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          }
        },
        "required": [
          "content"
        ]
      },
      "AnswerCallbackDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "text": {
            "type": "string",
            "maxLength": 256
          },
          "alert": {
            "type": "boolean"
          },
          "editMessage": {
            "$ref": "#/components/schemas/EditMessagePayloadDto"
          },
          "editReplyMarkup": {
            "anyOf": [
              {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ReplyMarkupDto"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "updateBlink": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "id"
        ]
      }
    }
  }
}
