root object
- Article
Syntax
{
"$schema": "{string}",
"manifestVersion": "devPreview | m365DevPreview",
"version": "{string}",
"id": "{string}",
"packageName": "{string}",
"localizationInfo": {
"defaultLanguageTag": "{string}",
"defaultLanguageFile": "{string}",
"additionalLanguages": [
{
additionalLanguages object
}
]
},
"developer": {
"name": "{string}",
"mpnId": "{string}",
"websiteUrl": "{string}",
"privacyUrl": "{string}",
"termsOfUseUrl": "{string}",
"contactInfo": {
contactInfo object
}
},
"name": {
"short": "{string}",
"full": "{string}",
"abbreviated": "{string}"
},
"description": {
"short": "{string}",
"full": "{string}"
},
"icons": {
"outline": "{string}",
"color": "{string}",
"color32x32": "{string}"
},
"accentColor": "{string}",
"configurableTabs": [
{
"id": "{string}",
"configurationUrl": "{string}",
"canUpdateConfiguration": {boolean},
"scopes": [
"team | groupChat"
],
"meetingSurfaces": [
"sidePanel | stage"
],
"context": [
"personalTab | channelTab | privateChatTab | meetingChatTab | meetingDetailsTab | meetingSidePanel | meetingStage | callingSidePanel"
],
"supportedPlatform": [
"desktop | mobile | teamsMeetingDevices"
],
"sharePointPreviewImage": "{string}",
"supportedSharePointHosts": [
"sharePointFullPage | sharePointWebPart"
]
}
],
"staticTabs": [
{
"entityId": "{string}",
"name": "{string}",
"contentUrl": "{string}",
"contentBotId": "{string}",
"websiteUrl": "{string}",
"searchUrl": "{string}",
"scopes": [
"team | personal | groupChat"
],
"context": [
"personalTab | channelTab | privateChatTab | meetingChatTab | meetingDetailsTab | meetingSidePanel | meetingStage | teamLevelApp"
],
"supportedPlatform": [
"desktop | mobile | teamsMeetingDevices"
],
"requirementSet": {
elementRequirementSet object
}
}
],
"bots": [
{
"botId": "{string}",
"configuration": {
configuration object
},
"needsChannelSelector": {boolean},
"isNotificationOnly": {boolean},
"requiresSecurityEnabledGroup": {boolean},
"supportsFiles": {boolean},
"supportsCalling": {boolean},
"supportsVideo": {boolean},
"scopes": [
"team | personal | groupChat"
],
"commandLists": [
{
commandLists object
}
],
"requirementSet": {
elementRequirementSet object
}
}
],
"connectors": [
{
"connectorId": "{string}",
"configurationUrl": "{string}",
"scopes": [
"team"
]
}
],
"subscriptionOffer": {
"offerId": "{string}"
},
"composeExtensions": [
{
"id": "{string}",
"botId": "{string}",
"composeExtensionType": "botBased | apiBased",
"authorization": {
authorization object
},
"apiSpecificationFile": "{string}",
"canUpdateConfiguration": boolean | null,
"commands": [
{
commands object
}
],
"messageHandlers": [
{
messageHandlers object
}
],
"requirementSet": {
elementRequirementSet object
}
}
],
"scopeConstraints": {
"teams": [
{
teams object
}
],
"groupChats": [
{
groupChats object
}
]
},
"permissions": [
"identity | messageTeamMembers"
],
"devicePermissions": [
"geolocation | media | notifications | midi | openExternal"
],
"validDomains": [
"{string}"
],
"webApplicationInfo": {
"id": "{string}",
"resource": "{string}"
},
"graphConnector": {
"notificationUrl": "{string}"
},
"showLoadingIndicator": {boolean},
"isFullScreen": {boolean},
"activities": {
"activityTypes": [
{
activityTypes object
}
]
},
"supportedChannelTypes": [
"sharedChannels | privateChannels"
],
"configurableProperties": [
"name | shortDescription | longDescription | smallImageUrl | largeImageUrl | accentColor | developerUrl | privacyUrl | termsOfUseUrl"
],
"defaultBlockUntilAdminAction": {boolean},
"publisherDocsUrl": "{string}",
"defaultInstallScope": "personal | team | groupChat | meetings",
"defaultGroupCapability": {
"team": "tab | bot | connector",
"groupchat": "tab | bot | connector",
"meetings": "tab | bot | connector"
},
"meetingExtensionDefinition": {
"scenes": [
{
scenes object
}
],
"videoFilters": [
{
videoFilters object
}
],
"videoFiltersConfigurationUrl": "{string}",
"supportsStreaming": {boolean},
"supportsAnonymousGuestUsers": {boolean}
},
"authorization": {
"permissions": {
permissions object
}
},
"extensions": [
{
"requirements": {
requirementsExtensionElement object
},
"runtimes": [
{
extensionRuntimesArray object
}
],
"ribbons": [
{
extensionRibbonsArray object
}
],
"autoRunEvents": [
{
extensionAutoRunEventsArray object
}
],
"alternates": [
{
extensionAlternateVersionsArray object
}
],
"audienceClaimUrl": "{string}",
"appDeeplinks": [
{
extensionAppDeeplinksArray object
}
],
"contentRuntimes": [
{
extensionContentRuntimeArray object
}
],
"getStartedMessages": [
{
extensionGetStartedMessageArray object
}
],
"contextMenus": [
{
extensionContextMenuArray object
}
]
}
],
"actions": [
{
"id": "{string}",
"intent": "create | addTo | open | preview | share | sign | custom",
"displayName": "{string}",
"description": "{string}",
"icons": [
{
icons object
}
],
"handlers": [
{
handlers object
}
]
}
],
"dashboardCards": [
{
"id": "{string}",
"displayName": "{string}",
"description": "{string}",
"pickerGroupId": "{string}",
"icon": {
dashboardCardIcon object
},
"contentSource": {
dashboardCardContentSource object
},
"defaultSize": "medium | large"
}
],
"intuneInfo": {
"supportedMobileAppManagementVersion": "{string}"
},
"copilotAgents": {
"declarativeAgents": [
{
declarativeAgentRef object
}
],
"customEngineAgents": [
{
customEngineAgents object
}
]
},
"elementRelationshipSet": {
"oneWayDependencies": [
{
oneWayDependency object
}
],
"mutualDependencies": [
[
{
elementReference object
}
]
]
}
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string",
"format": "uri"
},
"manifestVersion": {
"type": "string",
"description": "The version of the schema this manifest is using.",
"enum": [
"devPreview",
"m365DevPreview"
]
},
"version": {
"type": "string",
"description": "The version of the app. Changes to your manifest should cause a version change. This version string must follow the semver standard (http://semver.org).",
"maxLength": 256
},
"id": {
"$ref": "#/definitions/guid",
"description": "A unique identifier for this app. This id must be a GUID."
},
"packageName": {
"type": "string",
"description": "A unique identifier for this app in reverse domain notation. E.g: com.example.myapp",
"maxLength": 64
},
"localizationInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"defaultLanguageTag": {
"$ref": "#/definitions/languageTag",
"description": "The language tag of the strings in this top level manifest file.",
"default": "en-us"
},
"defaultLanguageFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a the .json file containing strings in the default language."
},
"additionalLanguages": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"languageTag": {
"$ref": "#/definitions/languageTag",
"description": "The language tag of the strings in the provided file."
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a the .json file containing the translated strings."
}
},
"required": [
"languageTag",
"file"
]
}
}
},
"required": [
"defaultLanguageTag"
]
},
"developer": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The display name for the developer.",
"maxLength": 32
},
"mpnId": {
"type": "string",
"description": "The Microsoft Partner Network ID that identifies the partner organization building the app. This field is not required, and should only be used if you are already part of the Microsoft Partner Network. More info at https://aka.ms/partner",
"maxLength": 10
},
"websiteUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides support information for the app."
},
"privacyUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides privacy information for the app."
},
"termsOfUseUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides the terms of use for the app."
},
"contactInfo": {
"type": "object",
"description": "App developer contact information.",
"properties": {
"defaultSupport": {
"type": "object",
"description": "Support configuration.",
"properties": {
"userEmailsForChatSupport": {
"type": "array",
"description": "User email for chat support contacts.",
"maxItems": 10,
"minItems": 1,
"items": {
"type": "string",
"maxLength": 80
}
},
"emailsForEmailSupport": {
"type": "array",
"description": "Email address for email support.",
"maxItems": 1,
"minItems": 1,
"items": {
"type": "string",
"maxLength": 80
}
}
},
"required": [
"emailsForEmailSupport",
"userEmailsForChatSupport"
]
}
},
"required": [
"defaultSupport"
]
}
},
"required": [
"name",
"websiteUrl",
"privacyUrl",
"termsOfUseUrl"
]
},
"name": {
"type": "object",
"additionalProperties": false,
"properties": {
"short": {
"type": "string",
"description": "A short display name for the app.",
"maxLength": 30
},
"full": {
"type": "string",
"description": "The full name of the app, used if the full app name exceeds 30 characters.",
"maxLength": 100
},
"abbreviated": {
"type": "string",
"description": "An abbreviated name for the app.",
"maxLength": 15
}
},
"required": [
"short",
"full"
]
},
"description": {
"type": "object",
"additionalProperties": false,
"properties": {
"short": {
"type": "string",
"description": "A short description of the app used when space is limited. Maximum length is 80 characters.",
"maxLength": 80
},
"full": {
"type": "string",
"description": "The full description of the app. Maximum length is 4000 characters.",
"maxLength": 4000
}
},
"required": [
"short",
"full"
]
},
"icons": {
"type": "object",
"additionalProperties": false,
"properties": {
"outline": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a transparent PNG outline icon. The border color needs to be white. Size 32x32."
},
"color": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a full color PNG icon. Size 192x192."
},
"color32x32": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a full color PNG icon with transparent background. Size 32x32."
}
},
"required": [
"outline",
"color"
]
},
"accentColor": {
"$ref": "#/definitions/hexColor",
"description": "A color to use in conjunction with the icon. The value must be a valid HTML color code starting with \u0027#\u0027, for example \u0060#4464ee\u0060."
},
"configurableTabs": {
"type": "array",
"description": "These are tabs users can optionally add to their channels and 1:1 or group chats and require extra configuration before they are added. Configurable tabs are not supported in the personal scope. Currently only one configurable tab per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for the tab. This id must be unique within the app manifest.",
"maxLength": 64
},
"configurationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to use when configuring the tab."
},
"canUpdateConfiguration": {
"type": "boolean",
"description": "A value indicating whether an instance of the tab\u0027s configuration can be updated by the user after creation.",
"default": true
},
"scopes": {
"type": "array",
"description": "Specifies whether the tab offers an experience in the context of a channel in a team, in a 1:1 or group chat, or in an experience scoped to an individual user alone. These options are non-exclusive. Currently, configurable tabs are only supported in the teams and groupchats scopes.",
"maxItems": 2,
"items": {
"enum": [
"team",
"groupChat"
]
}
},
"meetingSurfaces": {
"type": "array",
"description": "The set of meetingSurfaceItem scopes that a tab belong to",
"maxItems": 2,
"items": {
"enum": [
"sidePanel",
"stage"
]
}
},
"context": {
"type": "array",
"description": "The set of contextItem scopes that a tab belong to",
"maxItems": 8,
"items": {
"enum": [
"personalTab",
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage",
"callingSidePanel"
]
}
},
"supportedPlatform": {
"type": "array",
"description": "The set of supportedPlatform scopes that a tab belong to",
"maxItems": 3,
"items": {
"enum": [
"desktop",
"mobile",
"teamsMeetingDevices"
]
}
},
"sharePointPreviewImage": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a tab preview image for use in SharePoint. Size 1024x768."
},
"supportedSharePointHosts": {
"type": "array",
"description": "Defines how your tab will be made available in SharePoint.",
"maxItems": 2,
"uniqueItems": true,
"items": {
"enum": [
"sharePointFullPage",
"sharePointWebPart"
]
}
}
},
"required": [
"configurationUrl",
"scopes"
]
}
},
"staticTabs": {
"type": "array",
"description": "A set of tabs that may be \u0027pinned\u0027 by default, without the user adding them manually. Static tabs declared in personal scope are always pinned to the app\u0027s personal experience. Static tabs do not currently support the \u0027teams\u0027 scope.",
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"entityId": {
"type": "string",
"description": "A unique identifier for the entity which the tab displays.",
"maxLength": 64
},
"name": {
"type": "string",
"description": "The display name of the tab.",
"maxLength": 128
},
"contentUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url which points to the entity UI to be displayed in the Teams canvas."
},
"contentBotId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"websiteUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to point at if a user opts to view in a browser."
},
"searchUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to direct a user\u0027s search queries."
},
"scopes": {
"type": "array",
"description": "Specifies whether the tab offers an experience in the context of a channel in a team, or an experience scoped to an individual user alone or a group chat. These options are non-exclusive. Currently static tabs are only supported in the \u0027personal\u0027 scope.",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"context": {
"type": "array",
"description": "The set of contextItem scopes that a tab belong to",
"maxItems": 8,
"items": {
"enum": [
"personalTab",
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage",
"teamLevelApp"
]
}
},
"supportedPlatform": {
"type": "array",
"description": "The set of supportedPlatform scopes that a tab belong to",
"maxItems": 3,
"items": {
"enum": [
"desktop",
"mobile",
"teamsMeetingDevices"
]
}
},
"requirementSet": {
"$ref": "#/definitions/elementRequirementSet",
"description": "The set of requirements for the tab."
}
},
"required": [
"entityId",
"scopes"
]
}
},
"bots": {
"type": "array",
"description": "The set of bots for this app. Currently only one bot per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"botId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"configuration": {
"type": "object",
"additionalProperties": false,
"properties": {
"team": {
"type": "object",
"additionalProperties": false,
"properties": {
"fetchTask": {
"type": "boolean",
"description": "A boolean value that indicates if it should fetch bot config task module dynamically.",
"default": false
},
"taskInfo": {
"$ref": "#/definitions/taskInfo",
"description": "Task module to be launched when fetch task set to false."
}
}
},
"groupChat": {
"type": "object",
"additionalProperties": false,
"properties": {
"fetchTask": {
"type": "boolean",
"description": "A boolean value that indicates if it should fetch bot config task module dynamically.",
"default": false
},
"taskInfo": {
"$ref": "#/definitions/taskInfo",
"description": "Task module to be launched when fetch task set to false."
}
}
}
}
},
"needsChannelSelector": {
"type": "boolean",
"description": "This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.",
"default": false
},
"isNotificationOnly": {
"type": "boolean",
"description": "A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.",
"default": false
},
"requiresSecurityEnabledGroup": {
"type": "boolean",
"description": "A value indicating whether the team\u0027s Office group needs to be security enabled.",
"default": false
},
"supportsFiles": {
"type": "boolean",
"description": "A value indicating whether the bot supports uploading/downloading of files.",
"default": false
},
"supportsCalling": {
"type": "boolean",
"description": "A value indicating whether the bot supports audio calling.",
"default": false
},
"supportsVideo": {
"type": "boolean",
"description": "A value indicating whether the bot supports video calling.",
"default": false
},
"scopes": {
"type": "array",
"description": "Specifies whether the bot offers an experience in the context of a channel in a team, in a 1:1 or group chat, or in an experience scoped to an individual user alone. These options are non-exclusive.",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"commandLists": {
"type": "array",
"maxItems": 3,
"description": "The list of commands that the bot supplies, including their usage, description, and the scope for which the commands are valid. A separate command list should be used for each scope.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"scopes": {
"type": "array",
"description": "Specifies the scopes for which the command list is valid",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"commands": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string",
"description": "The bot command name",
"maxLength": 32
},
"description": {
"type": "string",
"description": "A simple text description or an example of the command syntax and its arguments.",
"maxLength": 128
}
},
"required": [
"title",
"description"
]
}
}
},
"required": [
"scopes",
"commands"
]
}
},
"requirementSet": {
"$ref": "#/definitions/elementRequirementSet",
"description": "The set of requirements for the bot."
}
},
"required": [
"botId",
"scopes"
]
}
},
"connectors": {
"type": "array",
"description": "The set of Office365 connectors for this app. Currently only one connector per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"connectorId": {
"type": "string",
"description": "A unique identifier for the connector which matches its ID in the Connectors Developer Portal.",
"maxLength": 64
},
"configurationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to use for configuring the connector using the inline configuration experience."
},
"scopes": {
"type": "array",
"description": "Specifies whether the connector offers an experience in the context of a channel in a team, or an experience scoped to an individual user alone. Currently, only the team scope is supported.",
"maxItems": 1,
"items": {
"enum": [
"team"
]
}
}
},
"required": [
"connectorId",
"scopes"
]
}
},
"subscriptionOffer": {
"type": "object",
"description": "Subscription offer associated with this app.",
"properties": {
"offerId": {
"type": "string",
"description": "A unique identifier for the Commercial Marketplace Software as a Service Offer.",
"maxLength": 2048
}
},
"required": [
"offerId"
],
"additionalProperties": false
},
"composeExtensions": {
"type": "array",
"description": "The set of compose extensions for this app. Currently only one compose extension per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for the compose extension.",
"maxLength": 64
},
"botId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot powering the compose extension in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"composeExtensionType": {
"type": "string",
"enum": [
"botBased",
"apiBased"
],
"description": "Type of the compose extension."
},
"authorization": {
"type": "object",
"description": "Object capturing authorization information.",
"properties": {
"authType": {
"type": "string",
"enum": [
"none",
"apiSecretServiceAuth",
"microsoftEntra"
],
"description": "Enum of possible authorization types."
},
"microsoftEntraConfiguration": {
"type": "object",
"description": "Object capturing details needed to do microsoftEntra auth flow. It will be only present when auth type is microsoftEntra.",
"properties": {
"supportsSingleSignOn": {
"type": "boolean",
"default": false,
"description": "Boolean indicating whether single sign on is configured for the app."
}
},
"additionalProperties": false
},
"apiSecretServiceAuthConfiguration": {
"type": "object",
"description": "Object capturing details needed to do service auth. It will be only present when auth type is apiSecretServiceAuth.",
"properties": {
"apiSecretRegistrationId": {
"type": "string",
"description": "Registration id returned when developer submits the api key through Developer Portal.",
"maxLength": 128
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"apiSpecificationFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to the api specification file in the manifest package."
},
"canUpdateConfiguration": {
"type": [
"boolean",
"null"
],
"description": "A value indicating whether the configuration of a compose extension can be updated by the user.",
"default": "null"
},
"commands": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "Id of the command.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"query",
"action"
],
"description": "Type of the command",
"default": "query"
},
"samplePrompts": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "This string will hold the sample prompt",
"maxLength": 128
}
},
"required": [
"text"
]
}
},
"apiResponseRenderingTemplateFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path for api response rendering template file. The schema of the file can be referred to in this link:\u0027https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json\u0027."
},
"context": {
"type": "array",
"maxItems": 3,
"items": {
"enum": [
"compose",
"commandBox",
"message"
]
},
"description": "Context where the command would apply",
"default": [
"compose",
"commandBox"
]
},
"title": {
"type": "string",
"description": "Title of the command.",
"maxLength": 32
},
"description": {
"type": "string",
"description": "Description of the command.",
"maxLength": 128
},
"initialRun": {
"type": "boolean",
"description": "A boolean value that indicates if the command should be run once initially with no parameter.",
"default": false
},
"fetchTask": {
"type": "boolean",
"description": "A boolean value that indicates if it should fetch task module dynamically",
"default": false
},
"parameters": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "Name of the parameter.",
"maxLength": 64
},
"inputType": {
"type": "string",
"enum": [
"text",
"textarea",
"number",
"date",
"time",
"toggle",
"choiceset"
],
"description": "Type of the parameter",
"default": "text"
},
"isRequired": {
"type": "boolean",
"description": "Indicates whether this parameter is required or not. By default, it is not."
},
"title": {
"type": "string",
"description": "Title of the parameter.",
"maxLength": 32
},
"description": {
"type": "string",
"description": "Description of the parameter.",
"maxLength": 128
},
"value": {
"type": "string",
"description": "Initial value for the parameter",
"maxLength": 512
},
"choices": {
"type": "array",
"maxItems": 10,
"description": "The choice options for the parameter",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title of the choice",
"maxLength": 128
},
"value": {
"type": "string",
"description": "Value of the choice",
"maxLength": 512
}
},
"additionalProperties": false,
"required": [
"title",
"value"
]
}
},
"semanticDescription": {
"type": "string",
"description": "semantic description of the parameter. This is typically meant for consumption by the large language model.",
"maxLength": 2000
}
},
"required": [
"name",
"title"
]
}
},
"taskInfo": {
"$ref": "#/definitions/taskInfo",
"description": "Task module to be launched when fetch task set to false."
},
"semanticDescription": {
"type": "string",
"description": "semantic description of the command. This is typically meant for consumption by the large language model.",
"maxLength": 5000
}
},
"required": [
"id",
"title"
]
}
},
"messageHandlers": {
"type": "array",
"maxItems": 5,
"description": "A list of handlers that allow apps to be invoked when certain conditions are met",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"link"
],
"description": "Type of the message handler"
},
"value": {
"type": "object",
"properties": {
"domains": {
"type": "array",
"description": "A list of domains that the link message handler can register for, and when they are matched the app will be invoked",
"items": {
"type": "string",
"maxLength": 2048
}
},
"supportsAnonymousAccess": {
"type": "boolean",
"description": "A boolean value that indicates whether the app\u0027s link message handler supports anonymous invoke flow. [Deprecated]. This property has been superceded by \u0027supportsAnonymizedPayloads\u0027.",
"default": false
},
"supportsAnonymizedPayloads": {
"type": "boolean",
"description": "A boolean value that indicates whether the app\u0027s link message handler supports anonymous invoke flow.",
"default": false
}
}
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
}
},
"requirementSet": {
"$ref": "#/definitions/elementRequirementSet",
"description": "The set of requirements for the compose extension."
}
}
}
},
"scopeConstraints": {
"type": "object",
"properties": {
"teams": {
"type": "array",
"description": "A list of team thread ids to which your app is restricted to",
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"id": {
"description": "Team\u0027s thread Id",
"type": "string",
"maxLength": 64
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"groupChats": {
"type": "array",
"description": "A list of chat thread ids to which your app is restricted to",
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"id": {
"description": "Chat\u0027s thread Id",
"type": "string",
"maxLength": 64
}
},
"required": [
"id"
],
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"permissions": {
"type": "array",
"description": "Specifies the permissions the app requests from users.",
"maxItems": 2,
"items": {
"enum": [
"identity",
"messageTeamMembers"
]
}
},
"devicePermissions": {
"type": "array",
"description": "Specify the native features on a user\u0027s device that your app may request access to.",
"maxItems": 5,
"items": {
"enum": [
"geolocation",
"media",
"notifications",
"midi",
"openExternal"
]
}
},
"validDomains": {
"type": "array",
"description": "A list of valid domains from which the tabs expect to load any content. Domain listings can include wildcards, for example \u0060*.example.com\u0060. If your tab configuration or content UI needs to navigate to any other domain besides the one use for tab configuration, that domain must be specified here.",
"maxItems": 16,
"items": {
"type": "string",
"maxLength": 2048
}
},
"webApplicationInfo": {
"type": "object",
"description": "Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.",
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "AAD application id of the app. This id must be a GUID."
},
"resource": {
"type": "string",
"description": "Resource url of app for acquiring auth token for SSO.",
"maxLength": 2048
}
},
"required": [
"id"
],
"additionalProperties": false
},
"graphConnector": {
"type": "object",
"description": "Specify the app\u0027s Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.",
"properties": {
"notificationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url where Graph-connector notifications for the application should be sent."
}
},
"required": [
"notificationUrl"
],
"additionalProperties": false
},
"showLoadingIndicator": {
"type": "boolean",
"description": "A value indicating whether or not show loading indicator when app/tab is loading",
"default": false
},
"isFullScreen": {
"type": "boolean",
"description": "A value indicating whether a personal app is rendered without a tab header-bar",
"default": false
},
"activities": {
"type": "object",
"properties": {
"activityTypes": {
"type": "array",
"description": "Specify the types of activites that your app can post to a users activity feed",
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"maxLength": 32
},
"description": {
"type": "string",
"maxLength": 128
},
"templateText": {
"type": "string",
"maxLength": 128
}
},
"required": [
"type",
"description",
"templateText"
],
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"supportedChannelTypes": {
"type": "array",
"description": "The set of supported channel type that an app belongs to",
"maxItems": 2,
"items": {
"enum": [
"sharedChannels",
"privateChannels"
]
}
},
"configurableProperties": {
"type": "array",
"description": "A list of tenant configured properties for an app",
"maxItems": 9,
"items": {
"enum": [
"name",
"shortDescription",
"longDescription",
"smallImageUrl",
"largeImageUrl",
"accentColor",
"developerUrl",
"privacyUrl",
"termsOfUseUrl"
]
}
},
"defaultBlockUntilAdminAction": {
"type": "boolean",
"description": "A value indicating whether an app is blocked by default until admin allows it",
"default": false
},
"publisherDocsUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides additional app information for the admins"
},
"defaultInstallScope": {
"type": "string",
"enum": [
"personal",
"team",
"groupChat",
"meetings"
],
"description": "The install scope defined for this app by default. This will be the option displayed on the button when a user tries to add the app"
},
"defaultGroupCapability": {
"type": "object",
"properties": {
"team": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is Team, this field specifies the default capability available"
},
"groupchat": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is GroupChat, this field specifies the default capability available"
},
"meetings": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is Meetings, this field specifies the default capability available"
}
},
"description": "When a group install scope is selected, this will define the default capability when the user installs the app",
"additionalProperties": false
},
"meetingExtensionDefinition": {
"type": "object",
"properties": {
"scenes": {
"description": "Meeting supported scenes.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "A unique identifier for this scene. This id must be a GUID."
},
"name": {
"type": "string",
"description": "Scene name.",
"maxLength": 128
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a scene metadata json file."
},
"preview": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a scene PNG preview icon."
},
"maxAudience": {
"type": "integer",
"description": "Maximum audiences supported in scene.",
"maximum": 50
},
"seatsReservedForOrganizersOrPresenters": {
"type": "integer",
"description": "Number of seats reserved for organizers or presenters.",
"maximum": 50
}
},
"required": [
"id",
"name",
"file",
"preview",
"maxAudience",
"seatsReservedForOrganizersOrPresenters"
]
},
"maxItems": 5,
"type": "array",
"uniqueItems": true
},
"videoFilters": {
"description": "Meeting supported video filters.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "A unique identifier for this video filter. This id must be a GUID."
},
"name": {
"type": "string",
"description": "Video filter\u0027s name.",
"maxLength": 128
},
"thumbnail": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a video filter\u0027s thumbnail."
}
},
"required": [
"id",
"name",
"thumbnail"
]
},
"maxItems": 32,
"type": "array",
"uniqueItems": true
},
"videoFiltersConfigurationUrl": {
"type": "string",
"description": "A URL for configuring the video filters.",
"maxLength": 2048
},
"supportsStreaming": {
"type": "boolean",
"description": "A boolean value indicating whether this app can stream the meeting\u0027s audio video content to an RTMP endpoint.",
"default": false
},
"supportsAnonymousGuestUsers": {
"type": "boolean",
"description": "A boolean value indicating whether this app supports access by anonymous guest users.",
"default": false
}
},
"description": "Specify meeting extension definition.",
"additionalProperties": false
},
"authorization": {
"type": "object",
"description": "Specify and consolidates authorization related information for the App.",
"additionalProperties": false,
"properties": {
"permissions": {
"type": "object",
"description": "List of permissions that the app needs to function.",
"additionalProperties": false,
"properties": {
"resourceSpecific": {
"description": "Permissions that guard data access on a resource instance level.",
"maxItems": 16,
"type": "array",
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The name of the resource-specific permission.",
"maxLength": 128
},
"type": {
"type": "string",
"enum": [
"Application",
"Delegated"
],
"description": "The type of the resource-specific permission."
}
},
"required": [
"name",
"type"
]
}
}
}
}
}
},
"extensions": {
"$ref": "#/definitions/elementExtensions"
},
"actions": {
"$ref": "#/definitions/elementActions"
},
"dashboardCards": {
"type": "array",
"description": "Defines the list of cards which could be pinned to dashboards that can provide summarized view of information relevant to user.",
"items": {
"$ref": "#/definitions/dashboardCard"
},
"additionalProperties": false
},
"intuneInfo": {
"type": "object",
"description": "The Intune-related properties for the app.",
"properties": {
"supportedMobileAppManagementVersion": {
"type": "string",
"description": "Supported mobile app managment version that the app is compliant with.",
"maxLength": 64
}
},
"additionalProperties": false
},
"copilotAgents": {
"type": "object",
"properties": {
"declarativeAgents": {
"type": "array",
"description": "An array of declarative agent elements references. Currently, only one declarative agent per application is supported.",
"items": {
"$ref": "#/definitions/declarativeAgentRef"
},
"minItems": 1,
"maxItems": 1
},
"customEngineAgents": {
"type": "array",
"description": "An array of Custom Engine Agents. Currently only one Custom Engine Agent per application is supported.",
"items": {
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "The id of the Custom Engine Agent. If it is of type bot, the id must match the id specified in a bot in the bots node and the referenced bot must have personal scope. The app short name and short description must also be defined."
},
"type": {
"type": "string",
"enum": [
"bot"
],
"description": "The type of the Custom Engine Agent. Currently only type bot is supported."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 1
}
},
"additionalProperties": false,
"oneOf": [
{
"required": [
"declarativeAgents"
]
},
{
"required": [
"customEngineAgents"
]
}
]
},
"elementRelationshipSet": {
"type": "object",
"properties": {
"oneWayDependencies": {
"type": "array",
"items": {
"$ref": "#/definitions/oneWayDependency"
},
"minItems": 1,
"description": "An array containing multiple instances of unidirectional dependency relationships (each represented by a oneWayDependency object)."
},
"mutualDependencies": {
"type": "array",
"items": {
"$ref": "#/definitions/mutualDependency"
},
"minItems": 1,
"description": "An array containing multiple instances of mutual dependency relationships between elements (each represented by a mutualDependency object)."
}
},
"anyOf": [
{
"required": [
"oneWayDependencies"
]
},
{
"required": [
"mutualDependencies"
]
}
],
"additionalProperties": false
}
},
"required": [
"manifestVersion",
"version",
"id",
"developer",
"name",
"description",
"icons",
"accentColor"
],
"definitions": {
"relativePath": {
"type": "string",
"maxLength": 2048
},
"httpsUrl": {
"type": "string",
"maxLength": 2048,
"pattern": "^[Hh][Tt][Tt][Pp][Ss]?://"
},
"semver": {
"type": "string",
"maxLength": 256,
"pattern": "^([0-9]|[1-9]\u002B[0-9]*)\\.([0-9]|[1-9]\u002B[0-9]*)\\.([0-9]|[1-9]\u002B[0-9]*)$"
},
"hexColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"guid": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$"
},
"languageTag": {
"type": "string",
"pattern": "^[A-Za-z0-9]{1,8}(-[A-Za-z0-9]{1,8}){0,2}$"
},
"taskInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string",
"description": "Initial dialog title.",
"maxLength": 64
},
"width": {
"$ref": "#/definitions/taskInfoDimension",
"description": "Dialog width - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027."
},
"height": {
"$ref": "#/definitions/taskInfoDimension",
"description": "Dialog height - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027."
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Initial webview URL."
}
}
},
"taskInfoDimension": {
"type": "string",
"pattern": "^((([0-9]*\\.)?[0-9]\u002B)|[lL][aA][rR][gG][eE]|[mM][eE][dD][iI][uU][mM]|[sS][mM][aA][lL][lL])$",
"maxLength": 16
},
"elementExtensions": {
"type": "array",
"description": "The set of extensions for this app. Currently only one extensions per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"minProperties": 1,
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"runtimes": {
"$ref": "#/definitions/extensionRuntimesArray",
"description": "General runtime for \u0022MailApp\u0022 or \u0022TaskpaneApp\u0022. Configures the set of runtimes and actions that can be used by each extension point. Min size 1."
},
"ribbons": {
"$ref": "#/definitions/extensionRibbonsArray"
},
"autoRunEvents": {
"$ref": "#/definitions/extensionAutoRunEventsArray"
},
"alternates": {
"$ref": "#/definitions/extensionAlternateVersionsArray"
},
"audienceClaimUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url for your extension, used to validate Exchange user identity tokens."
},
"appDeeplinks": {
"$ref": "#/definitions/extensionAppDeeplinksArray"
},
"contentRuntimes": {
"$ref": "#/definitions/extensionContentRuntimeArray"
},
"getStartedMessages": {
"$ref": "#/definitions/extensionGetStartedMessageArray"
},
"contextMenus": {
"$ref": "#/definitions/extensionContextMenuArray",
"description": "Specifies the context menus for your extension. A context menu is a shortcut menu that appears when a user right-clicks (selects and holds) in the Office UI. Min size 1."
}
},
"additionalProperties": false
},
"additionalProperties": false
},
"requirementsExtensionElement": {
"type": "object",
"minProperties": 1,
"properties": {
"capabilities": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Identifies the name of the requirement sets that the add-in needs to run.",
"maxLength": 128
},
"minVersion": {
"type": "string",
"description": "Identifies the minimum version for the requirement sets that the add-in needs to run."
},
"maxVersion": {
"type": "string",
"description": "Identifies the maximum version for the requirement sets that the add-in needs to run."
}
},
"additionalProperties": false,
"required": [
"name"
]
}
},
"scopes": {
"type": "array",
"description": "Identifies the scopes in which the add-in can run. For example, mail means Outlook.",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"mail",
"workbook",
"document",
"presentation"
]
}
},
"formFactors": {
"type": "array",
"description": "Identifies the form factors that support the add-in. Supported values: mobile, desktop.",
"minItems": 1,
"maxItems": 2,
"items": {
"type": "string",
"enum": [
"desktop",
"mobile"
]
}
}
},
"additionalProperties": false
},
"extensionRuntimesArray": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"id": {
"type": "string",
"description": "A unique identifier for this runtime within the app. Maximum length is 64 characters.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"general"
],
"default": "general",
"description": "Supports running functions and launching pages."
},
"code": {
"$ref": "#/definitions/extensionRuntimeCode"
},
"lifetime": {
"type": "string",
"default": "short",
"enum": [
"short",
"long"
],
"description": "Runtimes with a short lifetime do not preserve state across executions. Runtimes with a long lifetime do."
},
"actions": {
"$ref": "#/definitions/extensionRuntimesActions"
}
},
"additionalProperties": false,
"required": [
"id",
"code"
]
}
},
"extensionRuntimesActions": {
"type": "array",
"description": "Specifies the set of actions supported by this runtime. An action is either running a JavaScript function or opening a view such as a task pane.",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRuntimesActionsItem"
},
"additionalProperties": false
},
"extensionRuntimesActionsItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifier for this action. Maximum length is 64 characters. This value is passed to the code file.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"executeFunction",
"openPage"
],
"description": "executeFunction: Run a script function without waiting for it to finish. openPate: Open a page in a view."
},
"displayName": {
"type": "string",
"description": "Display name of the action. Maximum length is 64 characters.",
"maxLength": 64
},
"pinnable": {
"type": "boolean",
"description": "Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection."
},
"view": {
"type": "string",
"description": "View where the page should be opened. Maximum length is 64 characters. ",
"maxLength": 64
},
"multiselect": {
"type": "boolean",
"description": "Whether allows the action to have multiple selection.",
"default": false
},
"supportsNoItemContext": {
"type": "boolean",
"description": "Whether allows task pane add-ins to activate without the Reading Pane enabled or a message selected. ",
"default": false
}
},
"additionalProperties": false,
"required": [
"id",
"type"
]
},
"extensionRibbonsArray": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"contexts": {
"$ref": "#/definitions/extensionContexts"
},
"tabs": {
"type": "array",
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRibbonsArrayTabsItem"
}
},
"fixedControls": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionRibbonsArrayFixedControlItem"
}
},
"spamPreProcessingDialog": {
"$ref": "#/definitions/extensionRibbonsSpamPreProcessingDialog"
}
},
"additionalProperties": false,
"required": [
"tabs"
]
}
},
"extensionContexts": {
"type": "array",
"description": "Specifies the Office application windows in which the ribbon customization is available to the user. Each item in the array is a member of a string array. Possible values are: mailRead, mailCompose, meetingDetailsOrganizer, meetingDetailsAttendee, onlineMeetingDetailsOrganizer, logEventMeetingDetailsAttendee, spamReportingOverride.",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "string",
"enum": [
"mailRead",
"mailCompose",
"meetingDetailsOrganizer",
"meetingDetailsAttendee",
"onlineMeetingDetailsOrganizer",
"logEventMeetingDetailsAttendee",
"default",
"spamReportingOverride"
]
}
},
"extensionRibbonsArrayTabsItem": {
"type": "object",
"minProperties": 1,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this tab within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the tab. Maximum length is 64 characters.",
"maxLength": 64
},
"position": {
"type": "object",
"properties": {
"builtInTabId": {
"type": "string",
"description": "The id of the built-in tab. Maximum length is 64 characters.",
"maxLength": 64
},
"align": {
"type": "string",
"description": "Define alignment of this custom tab relative to the specified built-in tab.",
"enum": [
"after",
"before"
]
}
},
"additionalProperties": false,
"required": [
"builtInTabId",
"align"
]
},
"builtInTabId": {
"type": "string",
"description": "Id of the existing office Tab. Maximum length is 64 characters.",
"maxLength": 64
},
"groups": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "Defines tab groups.",
"items": {
"$ref": "#/definitions/extensionRibbonsCustomTabGroupsItem"
}
},
"customMobileRibbonGroups": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "Defines mobile group item.",
"items": {
"$ref": "#/definitions/extensionRibbonsCustomMobileGroupItem"
}
}
},
"dependencies": {
"builtInTabId": {
"properties": {
"groups": {
"type": "array",
"maxItems": 10,
"items": {
"$ref": "#/definitions/extensionCommonCustomGroup"
}
}
},
"required": [
"builtInTabId"
]
},
"id": {
"required": [
"id",
"label",
"groups"
]
}
},
"additionalProperties": false
},
"extensionRibbonsCustomTabGroupsItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this group within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the group. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"controls": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionCommonCustomGroupControlsItem"
},
"minItems": 1,
"maxItems": 20
},
"builtInGroupId": {
"type": "string",
"description": "Id of a built-in Group. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false
},
"extensionCommonCustomGroup": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this group within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the group. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"description": "Displayed icons for the group.",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"controls": {
"type": "array",
"description": "Configures the buttons and menus in the group.",
"items": {
"$ref": "#/definitions/extensionCommonCustomGroupControlsItem"
},
"minItems": 1,
"maxItems": 20
}
},
"required": [
"id",
"label",
"controls"
],
"additionalProperties": false
},
"extensionCommonCustomGroupControlsItem": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"description": "Defines the type of control whether button or menu.",
"enum": [
"button",
"menu"
]
},
"builtInControlId": {
"type": "string",
"description": "Id of the existing office control. Maximum length is 64 characters.",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"actionId": {
"type": "string",
"description": "The ID of an execution-type action that handles this key combination. Maximum length is 64 characters.",
"maxLength": 64
},
"overriddenByRibbonApi": {
"type": "boolean",
"description": "Specifies whether a group, button, menu, or menu item will be hidden on application and platform combinations that support the API (Office.ribbon.requestCreateControls) that installs custom contextual tabs on the ribbon. Default is false.",
"default": "false"
},
"enabled": {
"type": "boolean",
"description": "Whether the control is initially enabled.",
"default": true
},
"items": {
"type": "array",
"description": "Configures the items for a menu control.",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionCommonCustomControlMenuItem"
}
}
},
"required": [
"id",
"type",
"label",
"icons",
"supertip"
]
},
"extensionRibbonsCustomMobileGroupItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specify the Id of the group. Used for mobileMessageRead ext point.",
"maxLength": 250
},
"label": {
"type": "string",
"description": "Short label of the control. Maximum length is 32 characters.",
"maxLength": 32
},
"controls": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRibbonsCustomMobileControlButtonItem"
}
}
},
"required": [
"id",
"label",
"controls"
]
},
"extensionCommonCustomControlMenu": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"menu"
]
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"items": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionCommonCustomControlMenuItem"
}
},
"overriddenByRibbonApi": {
"type": "boolean",
"description": "Specifies whether a group, button, menu, or menu item will be hidden on application and platform combinations that support the API (Office.ribbon.requestCreateControls) that installs custom contextual tabs on the ribbon. Default is false.",
"default": "false"
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"label",
"icons",
"supertip",
"items"
]
},
"extensionCommonCustomControlMenuItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"description": "Supported values: menuItem.",
"enum": [
"menuItem"
]
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
},
"enabled": {
"type": "boolean",
"description": "Whether the control is initially enabled.",
"default": true
},
"overriddenByRibbonApi": {
"type": "boolean",
"default": "false"
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"label",
"supertip",
"actionId"
]
},
"extensionRibbonsCustomMobileControlButtonItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specify the Id of the button like msgReadFunctionButton.",
"maxLength": 250
},
"type": {
"type": "string",
"enum": [
"mobileButton"
]
},
"label": {
"type": "string",
"description": "Short label of the control. Maximum length is 32 characters.",
"maxLength": 32
},
"icons": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionCustomMobileIcon"
},
"minItems": 9,
"maxItems": 9
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
}
},
"required": [
"id",
"type",
"label",
"icons",
"actionId"
]
},
"extensionCustomMobileIcon": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Size in pixels of the icon. Three image sizes are required (25, 32, and 48 pixels).",
"enum": [
25,
32,
48
]
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Url to the icon."
},
"scale": {
"type": "number",
"description": "How to scale - 1,2,3 for each image. This attribute specifies the UIScreen.scale property for iOS devices.",
"enum": [
1,
2,
3
]
}
},
"additionalProperties": false,
"required": [
"size",
"url",
"scale"
]
},
"extensionCommonSuperToolTip": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title text of the super tip. Maximum length is 64 characters.",
"maxLength": 64
},
"description": {
"type": "string",
"description": "Description of the super tip. Maximum length is 250 characters.",
"maxLength": 250
}
},
"additionalProperties": false,
"required": [
"title",
"description"
]
},
"extensionCommonIcon": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Size in pixels of the icon. Three image sizes are required (16, 32, and 80 pixels)",
"enum": [
16,
20,
24,
32,
40,
48,
64,
80
]
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Absolute Url to the icon."
}
},
"additionalProperties": false,
"required": [
"size",
"url"
]
},
"extensionAutoRunEventsArray": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"events": {
"type": "array",
"maxItems": 20,
"description": "Specifies the type of event. For supported types, please see: https://learn.microsoft.com/en-us/office/dev/add-ins/outlook/autolaunch?tabs=xmlmanifest#supported-events.",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"maxLength": 64
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
},
"options": {
"type": "object",
"description": "Configures how Outlook responds to the event.",
"properties": {
"sendMode": {
"type": "string",
"enum": [
"promptUser",
"softBlock",
"block"
]
}
},
"additionalProperties": false,
"required": [
"sendMode"
]
}
},
"additionalProperties": false,
"required": [
"type",
"actionId"
]
}
}
},
"additionalProperties": false,
"required": [
"events"
]
}
},
"extensionAlternateVersionsArray": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"prefer": {
"type": "object",
"properties": {
"comAddin": {
"type": "object",
"properties": {
"progId": {
"type": "string",
"description": "Program ID of the alternate com extension. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"progId"
]
}
},
"minProperties": 1
},
"hide": {
"type": "object",
"properties": {
"storeOfficeAddin": {
"type": "object",
"properties": {
"officeAddinId": {
"type": "string",
"description": "Solution ID of an in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
},
"assetId": {
"type": "string",
"description": "Asset ID of the in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"officeAddinId",
"assetId"
]
},
"customOfficeAddin": {
"type": "object",
"properties": {
"officeAddinId": {
"type": "string",
"description": "Solution ID of the in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"officeAddinId"
]
}
},
"minProperties": 1
},
"alternateIcons": {
"type": "object",
"additionalProperties": false,
"properties": {
"icon": {
"$ref": "#/definitions/extensionCommonIcon"
},
"highResolutionIcon": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"required": [
"icon",
"highResolutionIcon"
]
}
},
"minProperties": 1,
"additionalProperties": false,
"required": [
"alternateIcons"
]
}
},
"extensionAppDeeplinksArray": {
"type": "array",
"description": "Represents the copilot extension point",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"requirements": {
"type": "object",
"$ref": "#/definitions/requirementsExtensionElement"
},
"contexts": {
"type": "array",
"$ref": "#/definitions/extensionContexts"
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Manifest should be invalidated if no action with an id matching actionId is present in runtimes.",
"maxLength": 64
},
"label": {
"type": "string",
"description": "the text that will be shown on the app as a clickable item.",
"maxLength": 64
},
"semanticDescription": {
"type": "string",
"description": "the text metadata, for recommendation engine.",
"maxLength": 255
}
},
"additionalProperties": false,
"required": [
"contexts",
"actionId",
"label",
"semanticDescription"
]
}
},
"extensionContentRuntimeArray": {
"type": "array",
"description": "Content runtime is for \u0027ContentApp\u0027, which can be embedded directly into Excel or PowerPoint documents.",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"requirements": {
"type": "object",
"$ref": "#/definitions/requirementsExtensionElement"
},
"id": {
"type": "string",
"description": "A unique identifier for this runtime within the app. This is developer specified.",
"maxLength": 64
},
"code": {
"$ref": "#/definitions/extensionRuntimeCode"
},
"requestedHeight": {
"type": "number",
"description": "The desired height in pixels for the initial content placeholder. This value MUST be between 32 and 1000 pixels. Default value will be determined by host.",
"minimum": 32,
"maximum": 1000
},
"requestedWidth": {
"type": "number",
"description": "The desired width in pixels for the initial content placeholder. This value MUST be between 32 and 1000 pixels. Default value will be determined by host.",
"minimum": 32,
"maximum": 1000
},
"disableSnapshot": {
"type": "boolean",
"description": "Specifies whether a snapshot image of your content add-in is saved with the host document. Default value is false. Set true to disable.",
"default": false
}
},
"additionalProperties": false,
"required": [
"id",
"code"
]
}
},
"extensionGetStartedMessageArray": {
"type": "array",
"description": "Provides information used by the callout that appears when the add-in is installed.",
"minItems": 1,
"maxItems": 3,
"items": {
"type": "object",
"properties": {
"requirements": {
"type": "object",
"$ref": "#/definitions/requirementsExtensionElement"
},
"title": {
"type": "string",
"description": "The title used for the top of the callout.",
"maxLength": 125
},
"description": {
"type": "string",
"description": "The description/body content for the callout.",
"maxLength": 250
},
"learnMoreUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "A URL to a page that explains the add-in in detail."
}
},
"additionalProperties": false,
"required": [
"title",
"description",
"learnMoreUrl"
]
}
},
"extensionRuntimeCode": {
"type": "object",
"properties": {
"page": {
"$ref": "#/definitions/httpsUrl",
"description": "URL of the .html page to be loaded in browser-based runtimes."
},
"script": {
"$ref": "#/definitions/httpsUrl",
"description": "URL of the .js script file to be loaded in UI-less runtimes."
}
},
"additionalProperties": false,
"required": [
"page"
]
},
"extensionContextMenuArray": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"requirements": {
"type": "object",
"$ref": "#/definitions/requirementsExtensionElement"
},
"menus": {
"$ref": "#/definitions/extensionMenuItem",
"description": "Configures the context menus. Minimum size is 1."
}
},
"additionalProperties": false,
"required": [
"menus"
]
}
},
"extensionMenuItem": {
"type": "array",
"description": "The title used for the top of the callout.",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"entryPoint": {
"type": "string",
"description": "Use \u0027text\u0027 or \u0027cell\u0027 here for Office context menu. Use text if the context menu should open when a user right-clicks (selects and holds) on the selected text. Use cell if the context menu should open when the user right-clicks (selects and holds) on a cell in an Excel spreadsheet.",
"enum": [
"text",
"cell"
]
},
"controls": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionCommonCustomGroupControlsItem"
},
"minItems": 1
}
},
"additionalProperties": false,
"required": [
"entryPoint",
"controls"
]
}
},
"extensionRibbonsArrayFixedControlItem": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"description": "Defines the type of control.",
"enum": [
"button"
]
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"actionId": {
"type": "string",
"description": "The ID of an execution-type action that handles this key combination. Maximum length is 64 characters.",
"maxLength": 64
},
"enabled": {
"type": "boolean",
"description": "Whether the control is initially enabled.",
"default": true
}
},
"required": [
"id",
"type",
"label",
"icons",
"supertip",
"actionId",
"enabled"
]
},
"extensionRibbonsSpamPreProcessingDialog": {
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string",
"description": "Specifies the custom title of the preprocessing dialog.",
"maxLength": 128
},
"description": {
"type": "string",
"description": "Specifies the custom text that appears in the preprocessing dialog.",
"maxLength": 250
},
"spamReportingOptions": {
"type": "object",
"description": "Specifies whether the bot offers an experience in the context of a channel in a team, in a 1:1 or group chat, or in an experience scoped to an individual user alone. These options are non-exclusive.",
"properties": {
"title": {
"type": "string",
"description": "Specifies the title listed before the reporting options list.",
"maxLength": 128
},
"options": {
"type": "array",
"description": "Specifies the custom options that a user can select from the preprocessing dialog to provide a reason for reporting a message.",
"items": {
"type": "string",
"minItems": 1,
"maxItems": 5
}
}
},
"required": [
"title",
"options"
]
},
"spamFreeTextSectionTitle": {
"type": "string",
"description": "A text box to the preprocessing dialog to allow users to provide additional information on the message they\u0027re reporting. This value is the title of that text box.",
"maxLength": 128
},
"spamMoreInfo": {
"type": "object",
"description": "Specifies the custom text and URL to provide informational resources to the users.",
"properties": {
"text": {
"type": "string",
"description": "Specifies display content of the hyperlink pointing to the site containing informational resources in the preprocessing dialog of a spam-reporting add-in.",
"maxLength": 128
},
"url": {
"type": "string",
"description": "Specifies the URL of the hyperlink pointing to the site containing informational resources in the preprocessing dialog of a spam-reporting add-in.",
"maxLength": 2048
}
},
"required": [
"text",
"url"
]
}
},
"required": [
"title",
"description"
]
},
"elementActions": {
"type": "array",
"description": "Actions node contains an array of actions object.",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"intent",
"displayName",
"description",
"handlers"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "A unique identifier string in the default locale that is used to catalog actions."
},
"intent": {
"description": "An enum string that describes the intent of the action.",
"type": "string",
"enum": [
"create",
"addTo",
"open",
"preview",
"share",
"sign",
"custom"
]
},
"displayName": {
"type": "string",
"minLength": 1,
"description": "A display name for the action."
},
"description": {
"type": "string",
"minLength": 1,
"description": "A display string in the default locale to represent the action."
},
"icons": {
"type": "array",
"description": "Object containing URLs to icon images for this action intent.",
"items": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Icon size in pixels."
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "URL for the icon."
}
},
"additionalProperties": false,
"required": [
"size",
"url"
]
}
},
"handlers": {
"type": "array",
"minItems": 1,
"description": "Defining how actions can be handled. If an app has more than 1 handler, only one experience will show up at one entry point. The hub will decide which action to show up based on which experience is supported.",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"openURL",
"openPage",
"openDialog",
"openTaskpane",
"invokeAPI",
"invokeBot"
],
"description": "Required both for File Handlers and Content Actions."
},
"supportedObjects": {
"type": "object",
"properties": {
"file": {
"type": "object",
"additionalProperties": false,
"properties": {
"extensions": {
"type": "array",
"items": {
"type": "string",
"description": "File extension, e.g. .pdf, .docx."
}
}
}
},
"folder": {
"type": [
"object",
"null"
],
"description": "A null value indicates that the file handler is not available when a folder is selected. An object with no parameters indicates that the file handler is available when a folder is selected or when no files are selected."
}
}
},
"supportsMultiSelect": {
"type": "boolean",
"description": "If true, multiple files can be selected and the action will still be displayed. If false or missing, the action is only displayed when a single item is selected. "
},
"pageInfo": {
"type": "object",
"required": [
"pageId"
],
"properties": {
"pageId": {
"type": "string",
"description": "Used to navigate to the page in MetaOS app."
},
"subpageId": {
"type": "string",
"description": "Used to navigate to the subpage in MetaOS app."
}
}
},
"dialogInfo": {
"type": "object",
"required": [
"dialogType",
"width",
"height"
],
"properties": {
"dialogType": {
"type": "string",
"description": "Dialog type, defines how the developer build the dialog.",
"enum": [
"url",
"adaptiveCard"
]
},
"url": {
"type": "string",
"description": "Required for html based dialog."
},
"width": {
"description": "Dialog width - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027.",
"$ref": "#/definitions/taskInfoDimension"
},
"height": {
"description": "Dialog height - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027.",
"$ref": "#/definitions/taskInfoDimension"
},
"parameters": {
"type": "array",
"minItems": 1,
"description": "Array of parameter object, each contains: name, title, description, inputType.",
"items": {
"type": "object",
"required": [
"name",
"title",
"description",
"inputType"
],
"properties": {
"name": {
"type": "string",
"description": "Parameter name."
},
"title": {
"type": "string",
"description": "Parameter title."
},
"description": {
"type": "string",
"description": "Parameter description."
},
"inputType": {
"type": "string",
"description": "Parameter input type."
}
}
}
},
"title": {
"type": "string",
"description": "Dialog title."
}
}
},
"url": {
"type": "string",
"description": "Url for handler type openURL, invokeAPI, openTaskpane, and others."
},
"botInfo": {
"type": "object",
"required": [
"botId"
],
"properties": {
"botId": {
"type": "string",
"description": "Bot ID."
},
"fetchTask": {
"type": "boolean",
"description": "Fetch task from bot."
}
}
}
}
}
}
}
}
},
"dashboardCard": {
"type": "object",
"description": "Cards wich could be pinned to dashboard providing summarized view of information relevant to user.",
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "Unique Id for the card. Must be unique inside the app."
},
"displayName": {
"type": "string",
"description": "Represents the name of the card. Maximum length is 255 characters.",
"maxLength": 255
},
"description": {
"type": "string",
"description": "Description of the card.Maximum length is 255 characters.",
"maxLength": 255
},
"pickerGroupId": {
"$ref": "#/definitions/guid",
"description": "Id of the group in the card picker. This must be guid."
},
"icon": {
"$ref": "#/definitions/dashboardCardIcon"
},
"contentSource": {
"$ref": "#/definitions/dashboardCardContentSource"
},
"defaultSize": {
"type": "string",
"enum": [
"medium",
"large"
],
"description": "Rendering Size for dashboard card."
}
},
"required": [
"id",
"displayName",
"pickerGroupId",
"description",
"contentSource",
"defaultSize"
],
"additionalProperties": false
},
"dashboardCardIcon": {
"type": "object",
"description": "Represents a configuration for the source of the card\u2019s content",
"properties": {
"iconUrl": {
"type": "string",
"description": "The icon for the card, to be displayed in the toolbox and card bar, represented as URL.",
"maxLength": 2048
},
"officeUIFabricIconName": {
"type": "string",
"description": "Office UI Fabric/Fluent UI icon friendly name for the card. This value will be used if \u2018iconUrl\u2019 is not specified.",
"maxLength": 255
}
},
"additionalProperties": false
},
"dashboardCardContentSource": {
"type": "object",
"description": "Represents a configuration for the source of the card\u2019s content.",
"properties": {
"sourceType": {
"type": "string",
"enum": [
"bot"
],
"description": "The content of the dashboard card is sourced from a bot."
},
"botConfiguration": {
"type": "object",
"description": "The configuration for the bot source. Required if sourceType is set to bot.",
"properties": {
"botId": {
"$ref": "#/definitions/guid",
"description": "The unique Microsoft app ID for the bot as registered with the Bot Framework."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"declarativeAgentRef": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this declarative agent element."
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "Relative file path to this declarative agent element file in the application package."
}
},
"description": "A reference to a declarative agent element. The element\u0027s definition is in a separate file.",
"required": [
"id",
"file"
],
"additionalProperties": false
},
"elementReference": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"bots",
"staticTabs",
"composeExtensions",
"configurableTabs"
]
},
"id": {
"type": "string"
},
"commandIds": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
}
},
"required": [
"name",
"id"
],
"additionalProperties": false
},
"oneWayDependency": {
"type": "object",
"properties": {
"element": {
"$ref": "#/definitions/elementReference"
},
"dependsOn": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/definitions/elementReference"
}
}
},
"required": [
"element",
"dependsOn"
],
"additionalProperties": false,
"description": "An object representing a unidirectional dependency relationship, where one specific element (referred to as the \u0060element\u0060) relies on an array of other elements (referred to as the \u0060dependsOn\u0060) in a single direction."
},
"mutualDependency": {
"type": "array",
"minItems": 2,
"items": {
"$ref": "#/definitions/elementReference"
},
"description": "A specific instance of mutual dependency between two or more elements, indicating that each element depends on the others in a bidirectional manner."
},
"elementRequirementSet": {
"type": "object",
"properties": {
"hostMustSupportFunctionalities": {
"type": "array",
"items": {
"$ref": "#/definitions/hostFunctionality"
},
"minItems": 1
}
},
"required": [
"hostMustSupportFunctionalities"
],
"additionalProperties": false,
"description": "An object representing a set of requirements that the host must support for the element."
},
"hostFunctionality": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"dialogUrl",
"dialogUrlBot",
"dialogAdaptiveCard",
"dialogAdaptiveCardBot"
],
"description": "The name of the functionality."
}
},
"required": [
"name"
],
"additionalProperties": false,
"description": "An object representing a specific functionality that a host must support."
}
}
}
{
"$schema": "{string}",
"manifestVersion": "1.19",
"version": "{string}",
"id": "{string}",
"localizationInfo": {
"defaultLanguageTag": "{string}",
"defaultLanguageFile": "{string}",
"additionalLanguages": [
{
additionalLanguages object
}
]
},
"developer": {
"name": "{string}",
"mpnId": "{string}",
"websiteUrl": "{string}",
"privacyUrl": "{string}",
"termsOfUseUrl": "{string}"
},
"name": {
"short": "{string}",
"full": "{string}"
},
"description": {
"short": "{string}",
"full": "{string}"
},
"icons": {
"outline": "{string}",
"color": "{string}"
},
"accentColor": "{string}",
"configurableTabs": [
{
"configurationUrl": "{string}",
"canUpdateConfiguration": {boolean},
"scopes": [
"team | groupChat"
],
"meetingSurfaces": [
"sidePanel | stage"
],
"context": [
"personalTab | channelTab | privateChatTab | meetingChatTab | meetingDetailsTab | meetingSidePanel | meetingStage"
],
"sharePointPreviewImage": "{string}",
"supportedSharePointHosts": [
"sharePointFullPage | sharePointWebPart"
]
}
],
"staticTabs": [
{
"entityId": "{string}",
"name": "{string}",
"contentUrl": "{string}",
"contentBotId": "{string}",
"websiteUrl": "{string}",
"searchUrl": "{string}",
"scopes": [
"team | personal | groupChat"
],
"context": [
"personalTab | channelTab | privateChatTab | meetingChatTab | meetingDetailsTab | meetingSidePanel | meetingStage | teamLevelApp"
]
}
],
"bots": [
{
"botId": "{string}",
"configuration": {
configuration object
},
"needsChannelSelector": {boolean},
"isNotificationOnly": {boolean},
"supportsFiles": {boolean},
"supportsCalling": {boolean},
"supportsVideo": {boolean},
"scopes": [
"team | personal | groupChat"
],
"commandLists": [
{
commandLists object
}
]
}
],
"connectors": [
{
"connectorId": "{string}",
"configurationUrl": "{string}",
"scopes": [
"team"
]
}
],
"subscriptionOffer": {
"offerId": "{string}"
},
"composeExtensions": [
{
"botId": "{string}",
"composeExtensionType": "botBased | apiBased",
"authorization": {
authorization object
},
"apiSpecificationFile": "{string}",
"canUpdateConfiguration": boolean | null,
"commands": [
{
commands object
}
],
"messageHandlers": [
{
messageHandlers object
}
]
}
],
"permissions": [
"identity | messageTeamMembers"
],
"devicePermissions": [
"geolocation | media | notifications | midi | openExternal"
],
"validDomains": [
"{string}"
],
"webApplicationInfo": {
"id": "{string}",
"resource": "{string}"
},
"graphConnector": {
"notificationUrl": "{string}"
},
"showLoadingIndicator": {boolean},
"isFullScreen": {boolean},
"activities": {
"activityTypes": [
{
activityTypes object
}
]
},
"configurableProperties": [
"name | shortDescription | longDescription | smallImageUrl | largeImageUrl | accentColor | developerUrl | privacyUrl | termsOfUseUrl"
],
"supportedChannelTypes": [
"sharedChannels | privateChannels"
],
"defaultBlockUntilAdminAction": {boolean},
"publisherDocsUrl": "{string}",
"defaultInstallScope": "personal | team | groupChat | meetings",
"defaultGroupCapability": {
"team": "tab | bot | connector",
"groupchat": "tab | bot | connector",
"meetings": "tab | bot | connector"
},
"meetingExtensionDefinition": {
"scenes": [
{
scenes object
}
],
"supportsStreaming": {boolean},
"supportsAnonymousGuestUsers": {boolean}
},
"authorization": {
"permissions": {
permissions object
}
},
"extensions": [
{
"requirements": {
requirementsExtensionElement object
},
"runtimes": [
{
extensionRuntimesArray object
}
],
"ribbons": [
{
extensionRibbonsArray object
}
],
"autoRunEvents": [
{
extensionAutoRunEventsArray object
}
],
"alternates": [
{
extensionAlternateVersionsArray object
}
],
"audienceClaimUrl": "{string}"
}
],
"dashboardCards": [
{
"id": "{string}",
"displayName": "{string}",
"description": "{string}",
"pickerGroupId": "{string}",
"icon": {
dashboardCardIcon object
},
"contentSource": {
dashboardCardContentSource object
},
"defaultSize": "medium | large"
}
],
"copilotAgents": {
"declarativeAgents": [
{
declarativeAgentRef object
}
]
}
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string",
"format": "uri"
},
"manifestVersion": {
"type": "string",
"description": "The version of the schema this manifest is using. This schema version supports extending Teams apps to other parts of the Microsoft 365 ecosystem. More info at https://aka.ms/extendteamsapps.",
"const": "1.19"
},
"version": {
"type": "string",
"description": "The version of the app. Changes to your manifest should cause a version change. This version string must follow the semver standard (http://semver.org).",
"maxLength": 256
},
"id": {
"$ref": "#/definitions/guid",
"description": "A unique identifier for this app. This id must be a GUID."
},
"localizationInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"defaultLanguageTag": {
"$ref": "#/definitions/languageTag",
"description": "The language tag of the strings in this top level manifest file.",
"default": "en-us"
},
"defaultLanguageFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a the .json file containing strings in the default language."
},
"additionalLanguages": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"languageTag": {
"$ref": "#/definitions/languageTag",
"description": "The language tag of the strings in the provided file."
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a the .json file containing the translated strings."
}
},
"required": [
"languageTag",
"file"
]
}
}
},
"required": [
"defaultLanguageTag"
]
},
"developer": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The display name for the developer.",
"maxLength": 32
},
"mpnId": {
"type": "string",
"description": "The Microsoft Partner Network ID that identifies the partner organization building the app. This field is not required, and should only be used if you are already part of the Microsoft Partner Network. More info at https://aka.ms/partner",
"maxLength": 10
},
"websiteUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides support information for the app."
},
"privacyUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides privacy information for the app."
},
"termsOfUseUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides the terms of use for the app."
}
},
"required": [
"name",
"websiteUrl",
"privacyUrl",
"termsOfUseUrl"
]
},
"name": {
"type": "object",
"additionalProperties": false,
"properties": {
"short": {
"type": "string",
"description": "A short display name for the app.",
"maxLength": 30
},
"full": {
"type": "string",
"description": "The full name of the app, used if the full app name exceeds 30 characters.",
"maxLength": 100
}
},
"required": [
"short",
"full"
]
},
"description": {
"type": "object",
"additionalProperties": false,
"properties": {
"short": {
"type": "string",
"description": "A short description of the app used when space is limited. Maximum length is 80 characters.",
"maxLength": 80
},
"full": {
"type": "string",
"description": "The full description of the app. Maximum length is 4000 characters.",
"maxLength": 4000
}
},
"required": [
"short",
"full"
]
},
"icons": {
"type": "object",
"additionalProperties": false,
"properties": {
"outline": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a transparent PNG outline icon. The border color needs to be white. Size 32x32."
},
"color": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a full color PNG icon. Size 192x192."
}
},
"required": [
"outline",
"color"
]
},
"accentColor": {
"$ref": "#/definitions/hexColor",
"description": "A color to use in conjunction with the icon. The value must be a valid HTML color code starting with \u0027#\u0027, for example \u0060#4464ee\u0060."
},
"configurableTabs": {
"type": "array",
"description": "These are tabs users can optionally add to their channels and 1:1 or group chats and require extra configuration before they are added. Configurable tabs are not supported in the personal scope. Currently only one configurable tab per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"configurationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to use when configuring the tab."
},
"canUpdateConfiguration": {
"type": "boolean",
"description": "A value indicating whether an instance of the tab\u0027s configuration can be updated by the user after creation.",
"default": true
},
"scopes": {
"type": "array",
"description": "Specifies whether the tab offers an experience in the context of a channel in a team, in a 1:1 or group chat, or in an experience scoped to an individual user alone. These options are non-exclusive. Currently, configurable tabs are only supported in the teams and groupchats scopes.",
"maxItems": 2,
"items": {
"enum": [
"team",
"groupChat"
]
}
},
"meetingSurfaces": {
"type": "array",
"description": "The set of meetingSurfaceItem scopes that a tab belong to",
"maxItems": 2,
"items": {
"enum": [
"sidePanel",
"stage"
]
}
},
"context": {
"type": "array",
"description": "The set of contextItem scopes that a tab belong to",
"maxItems": 7,
"items": {
"enum": [
"personalTab",
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage"
]
}
},
"sharePointPreviewImage": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a tab preview image for use in SharePoint. Size 1024x768."
},
"supportedSharePointHosts": {
"type": "array",
"description": "Defines how your tab will be made available in SharePoint.",
"maxItems": 2,
"uniqueItems": true,
"items": {
"enum": [
"sharePointFullPage",
"sharePointWebPart"
]
}
}
},
"required": [
"configurationUrl",
"scopes"
]
}
},
"staticTabs": {
"type": "array",
"description": "A set of tabs that may be \u0027pinned\u0027 by default, without the user adding them manually. Static tabs declared in personal scope are always pinned to the app\u0027s personal experience. Static tabs do not currently support the \u0027teams\u0027 scope.",
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"entityId": {
"type": "string",
"description": "A unique identifier for the entity which the tab displays.",
"maxLength": 64
},
"name": {
"type": "string",
"description": "The display name of the tab.",
"maxLength": 128
},
"contentUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url which points to the entity UI to be displayed in the canvas."
},
"contentBotId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"websiteUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to point at if a user opts to view in a browser."
},
"searchUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to direct a user\u0027s search queries."
},
"scopes": {
"type": "array",
"description": "Specifies whether the tab offers an experience in the context of a channel in a team, or an experience scoped to an individual user alone or group chat. These options are non-exclusive. Currently static tabs are only supported in the \u0027personal\u0027 scope.",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"context": {
"type": "array",
"description": "The set of contextItem scopes that a tab belong to",
"maxItems": 8,
"items": {
"enum": [
"personalTab",
"channelTab",
"privateChatTab",
"meetingChatTab",
"meetingDetailsTab",
"meetingSidePanel",
"meetingStage",
"teamLevelApp"
]
}
}
},
"required": [
"entityId",
"scopes"
]
}
},
"bots": {
"type": "array",
"description": "The set of bots for this app. Currently only one bot per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"botId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"configuration": {
"type": "object",
"additionalProperties": false,
"properties": {
"team": {
"type": "object",
"additionalProperties": false,
"properties": {
"fetchTask": {
"$ref": "#/properties/composeExtensions/items/properties/commands/items/properties/fetchTask"
},
"taskInfo": {
"$ref": "#/properties/composeExtensions/items/properties/commands/items/properties/taskInfo"
}
}
},
"groupChat": {
"$ref": "#/properties/bots/items/properties/configuration/properties/team"
}
}
},
"needsChannelSelector": {
"type": "boolean",
"description": "This value describes whether or not the bot utilizes a user hint to add the bot to a specific channel.",
"default": false
},
"isNotificationOnly": {
"type": "boolean",
"description": "A value indicating whether or not the bot is a one-way notification only bot, as opposed to a conversational bot.",
"default": false
},
"supportsFiles": {
"type": "boolean",
"description": "A value indicating whether the bot supports uploading/downloading of files.",
"default": false
},
"supportsCalling": {
"type": "boolean",
"description": "A value indicating whether the bot supports audio calling.",
"default": false
},
"supportsVideo": {
"type": "boolean",
"description": "A value indicating whether the bot supports video calling.",
"default": false
},
"scopes": {
"type": "array",
"description": "Specifies whether the bot offers an experience in the context of a channel in a team, in a 1:1 or group chat, or in an experience scoped to an individual user alone. These options are non-exclusive.",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"commandLists": {
"type": "array",
"maxItems": 3,
"description": "The list of commands that the bot supplies, including their usage, description, and the scope for which the commands are valid. A separate command list should be used for each scope.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"scopes": {
"type": "array",
"description": "Specifies the scopes for which the command list is valid",
"maxItems": 3,
"items": {
"enum": [
"team",
"personal",
"groupChat"
]
}
},
"commands": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string",
"description": "The bot command name",
"maxLength": 32
},
"description": {
"type": "string",
"description": "A simple text description or an example of the command syntax and its arguments.",
"maxLength": 128
}
},
"required": [
"title",
"description"
]
}
}
},
"required": [
"scopes",
"commands"
]
}
}
},
"required": [
"botId",
"scopes"
]
}
},
"connectors": {
"type": "array",
"description": "The set of Office365 connectors for this app. Currently only one connector per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"connectorId": {
"type": "string",
"description": "A unique identifier for the connector which matches its ID in the Connectors Developer Portal.",
"maxLength": 64
},
"configurationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to use for configuring the connector using the inline configuration experience."
},
"scopes": {
"type": "array",
"description": "Specifies whether the connector offers an experience in the context of a channel in a team, or an experience scoped to an individual user alone. Currently, only the team scope is supported.",
"maxItems": 1,
"items": {
"enum": [
"team"
]
}
}
},
"required": [
"connectorId",
"scopes"
]
}
},
"subscriptionOffer": {
"type": "object",
"description": "Subscription offer associated with this app.",
"properties": {
"offerId": {
"type": "string",
"description": "A unique identifier for the Commercial Marketplace Software as a Service Offer.",
"maxLength": 2048
}
},
"required": [
"offerId"
],
"additionalProperties": false
},
"composeExtensions": {
"type": "array",
"description": "The set of compose extensions for this app. Currently only one compose extension per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"botId": {
"$ref": "#/definitions/guid",
"description": "The Microsoft App ID specified for the bot powering the compose extension in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"composeExtensionType": {
"type": "string",
"enum": [
"botBased",
"apiBased"
],
"description": "Type of the compose extension."
},
"authorization": {
"type": "object",
"description": "Object capturing authorization information.",
"properties": {
"authType": {
"type": "string",
"enum": [
"none",
"apiSecretServiceAuth",
"microsoftEntra"
],
"description": "Enum of possible authentication types."
},
"microsoftEntraConfiguration": {
"type": "object",
"description": "Object capturing details needed to do single aad auth flow. It will be only present when auth type is entraId.",
"properties": {
"supportsSingleSignOn": {
"type": "boolean",
"default": false,
"description": "Boolean indicating whether single sign on is configured for the app."
}
},
"additionalProperties": false
},
"apiSecretServiceAuthConfiguration": {
"type": "object",
"description": "Object capturing details needed to do service auth. It will be only present when auth type is apiSecretServiceAuth.",
"properties": {
"apiSecretRegistrationId": {
"type": "string",
"description": "Registration id returned when developer submits the api key through Developer Portal.",
"maxLength": 128
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"apiSpecificationFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to the api specification file in the manifest package."
},
"canUpdateConfiguration": {
"type": [
"boolean",
"null"
],
"description": "A value indicating whether the configuration of a compose extension can be updated by the user.",
"default": "null"
},
"commands": {
"type": "array",
"maxItems": 10,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "Id of the command.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"query",
"action"
],
"description": "Type of the command",
"default": "query"
},
"samplePrompts": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "This string will hold the sample prompt",
"maxLength": 128
}
},
"required": [
"text"
]
}
},
"apiResponseRenderingTemplateFile": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path for api response rendering template file."
},
"context": {
"type": "array",
"maxItems": 3,
"items": {
"enum": [
"compose",
"commandBox",
"message"
]
},
"description": "Context where the command would apply",
"default": [
"compose",
"commandBox"
]
},
"title": {
"type": "string",
"description": "Title of the command.",
"maxLength": 32
},
"description": {
"type": "string",
"description": "Description of the command.",
"maxLength": 128
},
"initialRun": {
"type": "boolean",
"description": "A boolean value that indicates if the command should be run once initially with no parameter.",
"default": false
},
"fetchTask": {
"type": "boolean",
"description": "A boolean value that indicates if it should fetch task module dynamically",
"default": false
},
"semanticDescription": {
"type": "string",
"description": "Semantic description for the command.",
"maxLength": 5000
},
"parameters": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "Name of the parameter.",
"maxLength": 64
},
"inputType": {
"type": "string",
"enum": [
"text",
"textarea",
"number",
"date",
"time",
"toggle",
"choiceset"
],
"description": "Type of the parameter",
"default": "text"
},
"title": {
"type": "string",
"description": "Title of the parameter.",
"maxLength": 32
},
"description": {
"type": "string",
"description": "Description of the parameter.",
"maxLength": 128
},
"value": {
"type": "string",
"description": "Initial value for the parameter",
"maxLength": 512
},
"isRequired": {
"type": "boolean",
"description": "The value indicates if this parameter is a required field.",
"default": false
},
"semanticDescription": {
"type": "string",
"description": "Semantic description for the parameter.",
"maxLength": 2000
},
"choices": {
"type": "array",
"maxItems": 10,
"description": "The choice options for the parameter",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title of the choice",
"maxLength": 128
},
"value": {
"type": "string",
"description": "Value of the choice",
"maxLength": 512
}
},
"additionalProperties": false,
"required": [
"title",
"value"
]
}
}
},
"required": [
"name",
"title"
]
}
},
"taskInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string",
"description": "Initial dialog title",
"maxLength": 64
},
"width": {
"$ref": "#/definitions/taskInfoDimension",
"description": "Dialog width - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027"
},
"height": {
"$ref": "#/definitions/taskInfoDimension",
"description": "Dialog height - either a number in pixels or default layout such as \u0027large\u0027, \u0027medium\u0027, or \u0027small\u0027"
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Initial webview URL"
}
}
}
},
"required": [
"id",
"title"
]
}
},
"messageHandlers": {
"type": "array",
"maxItems": 5,
"description": "A list of handlers that allow apps to be invoked when certain conditions are met",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"link"
],
"description": "Type of the message handler"
},
"value": {
"type": "object",
"properties": {
"domains": {
"type": "array",
"description": "A list of domains that the link message handler can register for, and when they are matched the app will be invoked",
"items": {
"type": "string",
"maxLength": 2048
}
},
"supportsAnonymizedPayloads": {
"type": "boolean",
"description": "A boolean that indicates whether the app\u0027s link message handler supports anonymous invoke flow.",
"default": false
}
}
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
}
}
}
}
},
"permissions": {
"type": "array",
"description": "Specifies the permissions the app requests from users.",
"maxItems": 2,
"items": {
"enum": [
"identity",
"messageTeamMembers"
]
}
},
"devicePermissions": {
"type": "array",
"description": "Specify the native features on a user\u0027s device that your app may request access to.",
"maxItems": 5,
"items": {
"enum": [
"geolocation",
"media",
"notifications",
"midi",
"openExternal"
]
}
},
"validDomains": {
"type": "array",
"description": "A list of valid domains from which the tabs expect to load any content. Domain listings can include wildcards, for example \u0060*.example.com\u0060. If your tab configuration or content UI needs to navigate to any other domain besides the one use for tab configuration, that domain must be specified here.",
"maxItems": 16,
"items": {
"type": "string",
"maxLength": 2048
}
},
"webApplicationInfo": {
"type": "object",
"description": "Specify your AAD App ID and Graph information to help users seamlessly sign into your AAD app.",
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "AAD application id of the app. This id must be a GUID."
},
"resource": {
"type": "string",
"description": "Resource url of app for acquiring auth token for SSO.",
"maxLength": 2048
}
},
"required": [
"id"
],
"additionalProperties": false
},
"graphConnector": {
"type": "object",
"description": "Specify the app\u0027s Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.",
"properties": {
"notificationUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url where Graph-connector notifications for the application should be sent."
}
},
"required": [
"notificationUrl"
],
"additionalProperties": false
},
"showLoadingIndicator": {
"type": "boolean",
"description": "A value indicating whether or not show loading indicator when app/tab is loading",
"default": false
},
"isFullScreen": {
"type": "boolean",
"description": "A value indicating whether a personal app is rendered without a tab header-bar",
"default": false
},
"activities": {
"type": "object",
"properties": {
"activityTypes": {
"type": "array",
"description": "Specify the types of activites that your app can post to a users activity feed",
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"maxLength": 64
},
"description": {
"type": "string",
"maxLength": 128
},
"templateText": {
"type": "string",
"maxLength": 128
}
},
"required": [
"type",
"description",
"templateText"
],
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"configurableProperties": {
"type": "array",
"description": "A list of tenant configured properties for an app",
"maxItems": 9,
"items": {
"enum": [
"name",
"shortDescription",
"longDescription",
"smallImageUrl",
"largeImageUrl",
"accentColor",
"developerUrl",
"privacyUrl",
"termsOfUseUrl"
]
}
},
"supportedChannelTypes": {
"type": "array",
"description": "List of \u0027non-standard\u0027 channel types that the app supports. Note: Channels of standard type are supported by default if the app supports team scope.",
"maxItems": 2,
"items": {
"enum": [
"sharedChannels",
"privateChannels"
]
}
},
"defaultBlockUntilAdminAction": {
"type": "boolean",
"description": "A value indicating whether an app is blocked by default until admin allows it",
"default": false
},
"publisherDocsUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url to the page that provides additional app information for the admins"
},
"defaultInstallScope": {
"type": "string",
"enum": [
"personal",
"team",
"groupChat",
"meetings"
],
"description": "The install scope defined for this app by default. This will be the option displayed on the button when a user tries to add the app"
},
"defaultGroupCapability": {
"type": "object",
"properties": {
"team": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is Team, this field specifies the default capability available"
},
"groupchat": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is GroupChat, this field specifies the default capability available"
},
"meetings": {
"type": "string",
"enum": [
"tab",
"bot",
"connector"
],
"description": "When the install scope selected is Meetings, this field specifies the default capability available"
}
},
"description": "When a group install scope is selected, this will define the default capability when the user installs the app",
"additionalProperties": false
},
"meetingExtensionDefinition": {
"type": "object",
"properties": {
"scenes": {
"description": "Meeting supported scenes.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "A unique identifier for this scene. This id must be a GUID."
},
"name": {
"type": "string",
"description": "Scene name.",
"maxLength": 128
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a scene metadata json file."
},
"preview": {
"$ref": "#/definitions/relativePath",
"description": "A relative file path to a scene PNG preview icon."
},
"maxAudience": {
"type": "integer",
"description": "Maximum audiences supported in scene.",
"maximum": 50
},
"seatsReservedForOrganizersOrPresenters": {
"type": "integer",
"description": "Number of seats reserved for organizers or presenters.",
"maximum": 50
}
},
"required": [
"id",
"name",
"file",
"preview",
"maxAudience",
"seatsReservedForOrganizersOrPresenters"
]
},
"maxItems": 5,
"type": "array",
"uniqueItems": true
},
"supportsStreaming": {
"type": "boolean",
"description": "A boolean value indicating whether this app can stream the meeting\u0027s audio video content to an RTMP endpoint.",
"default": false
},
"supportsAnonymousGuestUsers": {
"type": "boolean",
"description": "A boolean value indicating whether this app allows management by anonymous users.",
"default": false
}
},
"description": "Specify meeting extension definition.",
"additionalProperties": false
},
"authorization": {
"type": "object",
"description": "Specify and consolidates authorization related information for the App.",
"additionalProperties": false,
"properties": {
"permissions": {
"type": "object",
"description": "List of permissions that the app needs to function.",
"additionalProperties": false,
"properties": {
"resourceSpecific": {
"description": "Permissions that must be granted on a per resource instance basis.",
"maxItems": 16,
"type": "array",
"uniqueItems": true,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The name of the resource-specific permission.",
"maxLength": 128
},
"type": {
"type": "string",
"enum": [
"Application",
"Delegated"
],
"description": "The type of the resource-specific permission: delegated vs application."
}
},
"required": [
"name",
"type"
]
}
}
}
}
}
},
"extensions": {
"$ref": "#/definitions/elementExtensions"
},
"dashboardCards": {
"type": "array",
"description": "Defines the list of cards which could be pinned to dashboards that can provide summarized view of information relevant to user.",
"items": {
"$ref": "#/definitions/dashboardCard"
},
"additionalProperties": false
},
"copilotAgents": {
"type": "object",
"properties": {
"declarativeAgents": {
"type": "array",
"description": "An array of declarative agent elements references. Currently, only one declarative agent per application is supported.",
"items": {
"$ref": "#/definitions/declarativeAgentRef"
},
"minItems": 1,
"maxItems": 1
}
},
"additionalProperties": false,
"required": [
"declarativeAgents"
]
}
},
"required": [
"manifestVersion",
"version",
"id",
"developer",
"name",
"description",
"icons",
"accentColor"
],
"definitions": {
"relativePath": {
"type": "string",
"maxLength": 2048
},
"httpsUrl": {
"type": "string",
"maxLength": 2048,
"pattern": "^[Hh][Tt][Tt][Pp][Ss]?://"
},
"semver": {
"type": "string",
"maxLength": 256,
"pattern": "^([0-9]|[1-9]\u002B[0-9]*)\\.([0-9]|[1-9]\u002B[0-9]*)\\.([0-9]|[1-9]\u002B[0-9]*)$"
},
"hexColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"guid": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$"
},
"languageTag": {
"type": "string",
"pattern": "^[A-Za-z0-9]{1,8}(-[A-Za-z0-9]{1,8}){0,2}$"
},
"taskInfoDimension": {
"type": "string",
"pattern": "^((([0-9]*\\.)?[0-9]\u002B)|[lL][aA][rR][gG][eE]|[mM][eE][dD][iI][uU][mM]|[sS][mM][aA][lL][lL])$",
"maxLength": 16
},
"elementExtensions": {
"type": "array",
"description": "The set of extensions for this app. Currently only one extensions per app is supported.",
"maxItems": 1,
"items": {
"type": "object",
"minProperties": 1,
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"runtimes": {
"$ref": "#/definitions/extensionRuntimesArray"
},
"ribbons": {
"$ref": "#/definitions/extensionRibbonsArray"
},
"autoRunEvents": {
"$ref": "#/definitions/extensionAutoRunEventsArray"
},
"alternates": {
"$ref": "#/definitions/extensionAlternateVersionsArray"
},
"audienceClaimUrl": {
"$ref": "#/definitions/httpsUrl",
"description": "The url for your extension, used to validate Exchange user identity tokens."
}
},
"additionalProperties": false
},
"additionalProperties": false
},
"requirementsExtensionElement": {
"type": "object",
"minProperties": 1,
"properties": {
"capabilities": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Identifies the name of the requirement sets that the add-in needs to run.",
"maxLength": 128
},
"minVersion": {
"type": "string",
"description": "Identifies the minimum version for the requirement sets that the add-in needs to run."
},
"maxVersion": {
"type": "string",
"description": "Identifies the maximum version for the requirement sets that the add-in needs to run."
}
},
"additionalProperties": false,
"required": [
"name"
]
}
},
"scopes": {
"type": "array",
"description": "Identifies the scopes in which the add-in can run.",
"minItems": 1,
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"mail",
"workbook",
"document",
"presentation"
]
}
},
"formFactors": {
"type": "array",
"description": "Identifies the form factors that support the add-in. Supported values: mobile, desktop.",
"minItems": 1,
"maxItems": 2,
"items": {
"type": "string",
"enum": [
"desktop",
"mobile"
]
}
}
},
"additionalProperties": false
},
"extensionRuntimesArray": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "object",
"description": "A runtime environment for a page or script",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"id": {
"type": "string",
"description": "A unique identifier for this runtime within the app. Maximum length is 64 characters.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"general"
],
"default": "general",
"description": "Supports running functions and launching pages."
},
"code": {
"$ref": "#/definitions/extensionRuntimeCode"
},
"lifetime": {
"type": "string",
"default": "short",
"enum": [
"short",
"long"
],
"description": "Runtimes with a short lifetime do not preserve state across executions. Runtimes with a long lifetime do."
},
"actions": {
"$ref": "#/definitions/extensionRuntimesActions"
}
},
"additionalProperties": false,
"required": [
"id",
"code"
]
}
},
"extensionRuntimesActions": {
"type": "array",
"description": "Specifies the set of actions supported by this runtime. An action is either running a JavaScript function or opening a view such as a task pane.",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRuntimesActionsItem"
},
"additionalProperties": false
},
"extensionRuntimesActionsItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifier for this action. Maximum length is 64 characters. This value is passed to the code file.",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"executeFunction",
"openPage"
],
"description": "executeFunction: Run a script function without waiting for it to finish. openPate: Open a page in a view."
},
"displayName": {
"type": "string",
"description": "Display name of the action. Maximum length is 64 characters.",
"maxLength": 64
},
"pinnable": {
"type": "boolean",
"description": "Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection."
},
"view": {
"type": "string",
"description": "View where the page should be opened. Maximum length is 64 characters. ",
"maxLength": 64
},
"multiselect": {
"type": "boolean",
"description": "Whether allows the action to have multiple selection.",
"default": false
},
"supportsNoItemContext": {
"type": "boolean",
"description": "Whether allows task pane add-ins to activate without the Reading Pane enabled or a message selected. ",
"default": false
}
},
"additionalProperties": false,
"required": [
"id",
"type"
]
},
"extensionRibbonsArray": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"contexts": {
"$ref": "#/definitions/extensionContexts"
},
"tabs": {
"type": "array",
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRibbonsArrayTabsItem"
}
}
},
"additionalProperties": false,
"required": [
"tabs"
]
}
},
"extensionContexts": {
"type": "array",
"description": "Specifies the Office application windows in which the ribbon customization is available to the user. Each item in the array is a member of a string array. Possible values are: mailRead, mailCompose, meetingDetailsOrganizer, meetingDetailsAttendee.",
"minItems": 1,
"maxItems": 7,
"items": {
"type": "string",
"enum": [
"mailRead",
"mailCompose",
"meetingDetailsOrganizer",
"meetingDetailsAttendee",
"onlineMeetingDetailsOrganizer",
"logEventMeetingDetailsAttendee",
"default"
]
}
},
"extensionRibbonsArrayTabsItem": {
"type": "object",
"minProperties": 1,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this tab within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the tab. Maximum length is 64 characters.",
"maxLength": 64
},
"position": {
"type": "object",
"properties": {
"builtInTabId": {
"type": "string",
"description": "The id of the built-in tab. Maximum length is 64 characters.",
"maxLength": 64
},
"align": {
"type": "string",
"description": "Define alignment of this custom tab relative to the specified built-in tab.",
"enum": [
"after",
"before"
]
}
},
"additionalProperties": false,
"required": [
"builtInTabId",
"align"
]
},
"builtInTabId": {
"type": "string",
"description": "Id of the existing office Tab. Maximum length is 64 characters.",
"maxLength": 64
},
"groups": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "Defines tab groups.",
"items": {
"$ref": "#/definitions/extensionRibbonsCustomTabGroupsItem"
}
},
"customMobileRibbonGroups": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "Defines mobile group item.",
"items": {
"$ref": "#/definitions/extensionRibbonsCustomMobileGroupItem"
}
}
},
"dependencies": {
"builtInTabId": {
"properties": {
"groups": {
"type": "array",
"maxItems": 10,
"items": {
"$ref": "#/definitions/extensionCommonCustomGroup"
}
}
},
"required": [
"builtInTabId"
]
},
"id": {
"required": [
"id",
"label",
"groups"
]
}
},
"additionalProperties": false
},
"extensionRibbonsCustomTabGroupsItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this group within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the group. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"controls": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionCommonCustomGroupControlsItem"
},
"minItems": 1,
"maxItems": 20
},
"builtInGroupId": {
"type": "string",
"description": "Id of a built-in Group. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false
},
"extensionCommonCustomGroup": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this group within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the group. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"description": "Displayed icons for the group.",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"controls": {
"type": "array",
"description": "Configures the buttons and menus in the group.",
"items": {
"$ref": "#/definitions/extensionCommonCustomGroupControlsItem"
},
"minItems": 1,
"maxItems": 20
}
},
"required": [
"id",
"label",
"controls"
],
"additionalProperties": false
},
"extensionCommonCustomGroupControlsItem": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"description": "Defines the type of control whether button or menu.",
"enum": [
"button",
"menu"
]
},
"builtInControlId": {
"type": "string",
"description": "Id of the existing office control. Maximum length is 64 characters.",
"maxLength": 64
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"actionId": {
"type": "string",
"description": "The ID of an execution-type action that handles this key combination. Maximum length is 64 characters.",
"maxLength": 64
},
"overriddenByRibbonApi": {
"type": "boolean",
"description": "Specifies whether a group, button, menu, or menu item will be hidden on application and platform combinations that support the API (Office.ribbon.requestCreateControls) that installs custom contextual tabs on the ribbon. Default is false.",
"default": "false"
},
"enabled": {
"type": "boolean",
"description": "Whether the control is initially enabled.",
"default": true
},
"items": {
"type": "array",
"description": "Configures the items for a menu control.",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionCommonCustomControlMenuItem"
}
}
},
"required": [
"id",
"type",
"label",
"icons",
"supertip",
"actionId"
]
},
"extensionRibbonsCustomMobileGroupItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specify the Id of the group. Used for mobileMessageRead ext point.",
"maxLength": 250
},
"label": {
"type": "string",
"description": "Short label of the control. Maximum length is 32 characters.",
"maxLength": 32
},
"controls": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionRibbonsCustomMobileControlButtonItem"
}
}
},
"required": [
"id",
"label",
"controls"
]
},
"extensionCommonCustomControlMenu": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"enum": [
"menu"
]
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"items": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"$ref": "#/definitions/extensionCommonCustomControlMenuItem"
}
},
"overriddenByRibbonApi": {
"type": "boolean",
"description": "Specifies whether a group, button, menu, or menu item will be hidden on application and platform combinations that support the API (Office.ribbon.requestCreateControls) that installs custom contextual tabs on the ribbon. Default is false.",
"default": "false"
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"label",
"icons",
"supertip",
"items"
]
},
"extensionCommonCustomControlMenuItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this control within the app. Maximum length is 64 characters. ",
"maxLength": 64
},
"type": {
"type": "string",
"description": "Supported values: menuItem.",
"enum": [
"menuItem"
]
},
"label": {
"type": "string",
"description": "Displayed text for the control. Maximum length is 64 characters.",
"maxLength": 64
},
"icons": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"supertip": {
"$ref": "#/definitions/extensionCommonSuperToolTip"
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
},
"enabled": {
"type": "boolean",
"description": "Whether the control is initially enabled.",
"default": true
},
"overriddenByRibbonApi": {
"type": "boolean",
"default": "false"
}
},
"additionalProperties": false,
"required": [
"id",
"type",
"label",
"supertip",
"actionId"
]
},
"extensionRibbonsCustomMobileControlButtonItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specify the Id of the button like msgReadFunctionButton.",
"maxLength": 250
},
"type": {
"type": "string",
"enum": [
"mobileButton"
]
},
"label": {
"type": "string",
"description": "Short label of the control. Maximum length is 32 characters.",
"maxLength": 32
},
"icons": {
"type": "array",
"items": {
"$ref": "#/definitions/extensionCustomMobileIcon"
},
"minItems": 9,
"maxItems": 9
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
}
},
"required": [
"id",
"type",
"label",
"icons",
"actionId"
]
},
"extensionCustomMobileIcon": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Size in pixels of the icon. Three image sizes are required (25, 32, and 48 pixels).",
"enum": [
25,
32,
48
]
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Url to the icon."
},
"scale": {
"type": "number",
"description": "How to scale - 1,2,3 for each image. This attribute specifies the UIScreen.scale property for iOS devices.",
"enum": [
1,
2,
3
]
}
},
"additionalProperties": false,
"required": [
"size",
"url",
"scale"
]
},
"extensionCommonSuperToolTip": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title text of the super tip. Maximum length is 64 characters.",
"maxLength": 64
},
"description": {
"type": "string",
"description": "Description of the super tip. Maximum length is 250 characters.",
"maxLength": 250
}
},
"additionalProperties": false,
"required": [
"title",
"description"
]
},
"extensionCommonIcon": {
"type": "object",
"properties": {
"size": {
"type": "number",
"description": "Size in pixels of the icon. Three image sizes are required (16, 32, and 80 pixels)",
"enum": [
16,
20,
24,
32,
40,
48,
64,
80
]
},
"url": {
"$ref": "#/definitions/httpsUrl",
"description": "Absolute Url to the icon."
}
},
"additionalProperties": false,
"required": [
"size",
"url"
]
},
"extensionAutoRunEventsArray": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"events": {
"type": "array",
"maxItems": 20,
"description": "Specifies the type of event. For supported types, please see: https://review.learn.microsoft.com/en-us/office/dev/add-ins/outlook/autolaunch?tabs=xmlmanifest#supported-events.",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"maxLength": 64
},
"actionId": {
"type": "string",
"description": "The ID of an action defined in runtimes. Maximum length is 64 characters.",
"maxLength": 64
},
"options": {
"type": "object",
"description": "Configures how Outlook responds to the event.",
"properties": {
"sendMode": {
"type": "string",
"enum": [
"promptUser",
"softBlock",
"block"
]
}
},
"additionalProperties": false,
"required": [
"sendMode"
]
}
},
"additionalProperties": false,
"required": [
"type",
"actionId"
]
}
}
},
"additionalProperties": false,
"required": [
"events"
]
}
},
"extensionAlternateVersionsArray": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"properties": {
"requirements": {
"$ref": "#/definitions/requirementsExtensionElement"
},
"prefer": {
"type": "object",
"properties": {
"comAddin": {
"type": "object",
"properties": {
"progId": {
"type": "string",
"description": "Program ID of the alternate com extension. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"progId"
]
}
},
"minProperties": 1
},
"hide": {
"type": "object",
"properties": {
"storeOfficeAddin": {
"type": "object",
"properties": {
"officeAddinId": {
"type": "string",
"description": "Solution ID of an in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
},
"assetId": {
"type": "string",
"description": "Asset ID of the in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"officeAddinId",
"assetId"
]
},
"customOfficeAddin": {
"type": "object",
"properties": {
"officeAddinId": {
"type": "string",
"description": "Solution ID of the in-market add-in to hide. Maximum length is 64 characters.",
"maxLength": 64
}
},
"additionalProperties": false,
"required": [
"officeAddinId"
]
}
},
"minProperties": 1
},
"alternateIcons": {
"type": "object",
"additionalProperties": false,
"properties": {
"icon": {
"$ref": "#/definitions/extensionCommonIcon"
},
"highResolutionIcon": {
"$ref": "#/definitions/extensionCommonIcon"
}
},
"required": [
"icon",
"highResolutionIcon"
]
}
},
"minProperties": 1,
"additionalProperties": false
}
},
"extensionRuntimeCode": {
"type": "object",
"properties": {
"page": {
"$ref": "#/definitions/httpsUrl",
"description": "URL of the .html page to be loaded in browser-based runtimes."
},
"script": {
"$ref": "#/definitions/httpsUrl",
"description": "URL of the .js script file to be loaded in UI-less runtimes."
}
},
"additionalProperties": false,
"required": [
"page"
]
},
"dashboardCard": {
"type": "object",
"description": "Cards wich could be pinned to dashboard providing summarized view of information relevant to user.",
"properties": {
"id": {
"$ref": "#/definitions/guid",
"description": "Unique Id for the card. Must be unique inside the app."
},
"displayName": {
"type": "string",
"description": "Represents the name of the card. Maximum length is 255 characters.",
"maxLength": 255
},
"description": {
"type": "string",
"description": "Description of the card.Maximum length is 255 characters.",
"maxLength": 255
},
"pickerGroupId": {
"$ref": "#/definitions/guid",
"description": "Id of the group in the card picker. This must be guid."
},
"icon": {
"$ref": "#/definitions/dashboardCardIcon"
},
"contentSource": {
"$ref": "#/definitions/dashboardCardContentSource"
},
"defaultSize": {
"type": "string",
"enum": [
"medium",
"large"
],
"description": "Rendering Size for dashboard card."
}
},
"required": [
"id",
"displayName",
"pickerGroupId",
"description",
"contentSource",
"defaultSize"
],
"additionalProperties": false
},
"dashboardCardIcon": {
"type": "object",
"description": "Represents a configuration for the source of the card\u2019s content",
"properties": {
"iconUrl": {
"type": "string",
"description": "The icon for the card, to be displayed in the toolbox and card bar, represented as URL.",
"maxLength": 2048
},
"officeUIFabricIconName": {
"type": "string",
"description": "Office UI Fabric/Fluent UI icon friendly name for the card. This value will be used if \u2018iconUrl\u2019 is not specified.",
"maxLength": 255
}
},
"additionalProperties": false
},
"dashboardCardContentSource": {
"type": "object",
"description": "Represents a configuration for the source of the card\u2019s content.",
"properties": {
"sourceType": {
"type": "string",
"enum": [
"bot"
],
"description": "The content of the dashboard card is sourced from a bot."
},
"botConfiguration": {
"type": "object",
"description": "The configuration for the bot source. Required if sourceType is set to bot.",
"properties": {
"botId": {
"$ref": "#/definitions/guid",
"description": "The unique Microsoft app ID for the bot as registered with the Bot Framework."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"declarativeAgentRef": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier for this declarative agent element."
},
"file": {
"$ref": "#/definitions/relativePath",
"description": "Relative file path to this declarative agent element file in the application package."
}
},
"description": "A reference to a declarative agent element. The element\u0027s definition is in a separate file.",
"required": [
"id",
"file"
],
"additionalProperties": false
}
}
}
Properties
$schema
The https:// URL referencing the JSON Schema for the app manifest. Optional, but recommended.
Type
string
Required
—
Constraints
Supported values
manifestVersion
The version of the app manifest schema that this app is using.
Type
string
Required
✅
Constraints
Supported values
Allowed values: devPreview
, m365DevPreview
.
manifestVersion
The version of the app manifest schema that this app is using.
Type
string
Required
✅
Constraints
Supported values
Allowed values: 1.19
.
version
The version of the app, in semver standard (http://semver.org) format.
Update or additions to your app manifest require the version to be incremented. This way, when the new app manifest is installed, it overwrites the existing one and the user gets the new functionality. If the app was submitted to the Microsoft Teams Store, the new app manifest must be resubmitted and revalidated. After it's approved, users of this app receive the new updated app manifest automatically.
If there is a change to the app's requested permissions, users are prompted to upgrade and re-consent to the app.
Note
If your app includes an Office Add-in, each segment of the version string is limited to a maximum of five digits. The semver standard's prerelease and metadata version string extensions aren't supported.
Type
string
Required
✅
Constraints
Maximum string length: 256.
Supported values
id
Microsoft Entra application registration ID for your app.
The ID is a unique Microsoft-generated identifier for the app in the form of a GUID. You have an ID if your bot is registered through the Microsoft Bot Framework. You have an ID if your tab's web app already signs in with Microsoft. You must enter the ID here. Otherwise, you must generate a new ID at the Microsoft Application Registration Portal. Use the same ID if you add a bot.
The ID stored in Teams admin center is the External App ID and it's visible as ExternalID on the traces.
Note
If you are submitting an update to your existing app in AppSource, the ID in your app manifest must not be modified.
Type
string
Required
✅
Constraints
Supported values
The string value must be a guid.
packageName
A unique identifier for this app in reverse domain notation. E.g: com.example.myapp
Type
string
Required
—
Constraints
Maximum string length: 64.
Supported values
localizationInfo
Allows the specification of a default language, and pointers to additional language files. See localization.
Type
localizationInfo
Required
—
Constraints
Supported values
developer
Specifies information about your company. For apps submitted to the Teams Store, these values must match the information in your Teams Store listing. For more information, see the Teams Store publishing guidelines. Developer name helps improve your app discoverability in the Teams Store.
Type
developer
Required
✅
Constraints
Supported values
name
The name of your app experience, displayed to users in the Teams experience. For apps submitted to AppSource, these values must match the information in your AppSource entry. The values of short
and full
must be different. App name helps improve your app discoverability in the Teams Store.
Type
name
Required
✅
Constraints
Supported values
icons
Icons used within the Teams app. The icon files must be included as part of the upload package. For more information, see Icons.
Type
icons
Required
✅
Constraints
Supported values
accentColor
A color to use in conjunction with the icon. The value must be a valid HTML color code starting with '#', for example #4464ee
.
Type
string
Required
✅
Constraints
Supported values
Value must be a hexidecimal color value, like #FFFFF
.
configurableTabs
These are tabs users can optionally add to their channels and 1:1 or group chats and require extra configuration before they are added. Configurable tabs are not supported in the personal scope. Currently only one configurable tab per app is supported.
Type
Array of configurableTabs
Required
—
Constraints
Maximum array items: 1.
Supported values
staticTabs
A set of tabs that may be 'pinned' by default, without the user adding them manually. Static tabs declared in personal scope are always pinned to the app's personal experience. Static tabs do not currently support the 'teams' scope.
This property is required only for solutions that provide a static tab solution.
Type
Array of staticTabs
Required
—
Constraints
Maximum array items: 16. Array items must be unique.
Supported values
bots
The set of bots for this app. Currently only one bot per app is supported.
Type
Array of bots
Required
—
Constraints
Maximum array items: 1.
Supported values
connectors
The set of Office365 connectors for this app. Currently only one connector per app is supported.
Type
Array of connectors
Required
—
Constraints
Maximum array items: 1.
Supported values
subscriptionOffer
Subscription offer associated with this app.
Type
subscriptionOffer
Required
—
Constraints
Supported values
composeExtensions
The set of compose extensions for this app. Currently only one compose extension per app is supported.
Type
Array of composeExtensions
Required
—
Constraints
Maximum array items: 1.
Supported values
scopeConstraints
The scope constraints imposed on an app to specify in which threads you can install the app. When no constraints are specified, you can install the app to all threads within the specific scope.
Type
scopeConstraints
Required
—
Constraints
Supported values
permissions
Deprecated. Specifies the permissions the app requests from users.
Type
Array of enum
Required
—
Constraints
Maximum array items: 2.
Supported values
Allowed values: identity
, messageTeamMembers
.
devicePermissions
Specifies the permissions the app requests for accessing the user's device capabilities.
Type
Array of enum
Required
—
Constraints
Maximum array items: 5.
Supported values
Allowed values: geolocation
, media
, notifications
, midi
, openExternal
.
validDomains
A list of valid domains from which the tabs expect to load any content. Domain listings can include wildcards, for example *.example.com
. If your tab configuration or content UI needs to navigate to any other domain besides the one use for tab configuration, that domain must be specified here.
Do not include the domains of identity providers supported by your app.
If your app relies on SharePoint, you can include the associated root SharePoint site as a valid domain using the Teams JavaScript client library teamSiteDomain
property from the SharePointSiteInfo context interface.
Office Add-ins, configured with an extensions
property in the manifest, disregard domains containing a wildcard. If your app incorporates an Office Add-in, specify the full domain name for the domains that the add-in accesses.
Important
Don't add domains that are outside your control, either directly or through wildcards (). For example,.yoursite.com is valid, but *.onmicrosoft.com isn't valid as it isn't under your control.
When using wildcards, the following rules apply:
- If a subdomain segment includes a wildcard, it must be the only character in the segment.
- Any segment preceding a wildcard segment must also be a wildcard segment.
For example, *.*.domain.com is valid, but foo.*.myteam.domain.com is not valid.
Type
Array of string
Required
—
Constraints
Maximum string length: 2048. Maximum array items: 16.
Supported values
webApplicationInfo
Specifies information about the app's Microsoft Entra ID application registration.
If your app is registered with Microsoft Entra ID, use this object to provide application ID information. Administrators can easily review permissions and grant consent in Teams admin center.
The webApplicationInfo
property is related to a single domain and isn't supported for multiple domains. Therefore, if you've two apps hosted on different domains, you need to create separate app manifests for each app.
Type
webApplicationInfo
Required
—
Constraints
Supported values
graphConnector
Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.
Type
graphConnector
Required
—
Constraints
Supported values
showLoadingIndicator
Specifies whether or not to display a loading indicator when opening a tab or dialog in the app. If you set as true
, follow the Teams platform guidance to show a native loading indicator, otherwise your page won't load correctly and will display the error message There was a problem reaching this app.
Type
boolean
Required
—
Constraints
Supported values
Default value: False
.
isFullScreen
Specifies if a tab app is rendered without a tab header bar (signifying full screen mode).
This property only applies to apps published to your organization; it's ignored for uploaded and published third-party apps.
An isFullScreen value of true
eliminates the app header bar and title for apps with tabs and dialogs. Best practice for chat bot apps is to leave this parameter as false
.
Type
boolean
Required
—
Constraints
Supported values
Default value: False
.
activities
Defines the notifications your app posts to the user's activity feed in Teams.
Type
activities
Required
—
Constraints
Supported values
supportedChannelTypes
Enables your app in non-standard channels. If your app supports a team scope and this property is defined, Teams enables your app in each channel type accordingly.
If your app supports a team scope, it functions in the standard channels regardless of the values that are defined in this property.
Your app can account for the unique properties of each of the channel types to function properly. To enable your tab for private and shared channels, see retrieve context in private channels and get context in shared channels.
Type
Array of enum
Required
—
Constraints
Maximum array items: 2.
Supported values
Allowed values: sharedChannels
, privateChannels
.
configurableProperties
Defines the app properties that Administrators can customize. For more information, see Enable customization for your app.
If present, a minimum of one property must be specified.
App customization isn't supported for custom apps uploaded or built for your org (line-of-business apps).
Administrators can define any of the following properties:
name
: The app's display name.shortDescription
: The app's short description.longDescription
: The app's detailed description.smallImageUrl
: The app's outline icon.largeImageUrl
: The app's color icon.accentColor
: The color to use with and as a background for your outline icons.developerUrl
: The HTTPS URL of the developer's website.privacyUrl
: The HTTPS URL of the developer's privacy policy.termsOfUseUrl
: The HTTPS URL of the developer's terms of use.
Type
Array of enum
Required
—
Constraints
Maximum array items: 9.
Supported values
Allowed values: name
, shortDescription
, longDescription
, smallImageUrl
, largeImageUrl
, accentColor
, developerUrl
, privacyUrl
, termsOfUseUrl
.
defaultBlockUntilAdminAction
A value indicating whether an app is blocked by default until admin allows it.
Type
boolean
Required
—
Constraints
Supported values
Default value: False
.
publisherDocsUrl
The https:// URL to a page that provides additional information about your app.
Type
string
Required
—
Constraints
Maximum string length: 2048.
Supported values
The string must start with https://
.
defaultInstallScope
The install scope defined for this app by default. This will be the option displayed with a Recommended option adjacent to the corresponding scope in the scope selection dialog, after the user adds the app.
Type
string
Required
—
Constraints
Supported values
Allowed values: personal
, team
, groupChat
, meetings
.
defaultGroupCapability
When a group install scope is selected, this will define the default capability when the user installs the app.
Required
—
Constraints
Supported values
meetingExtensionDefinition
Specify meeting extension definition.
Required
—
Constraints
Supported values
authorization
Specify and consolidates authorization related information for the App.
Type
authorization
Required
—
Constraints
Supported values
extensions
Type
Array of elementExtensions
Required
—
Constraints
Maximum array items: 1.
Supported values
actions
Defines one or more custom file handling actions your app can perform when invoked by the user from the context menu of a file in Microsoft 365 (Office) app.
Type
Array of elementActions
Required
—
Constraints
Minimum array items: 1.
Supported values
dashboardCards
Defines a list of cards that can be pinned to a dashboard, such as Microsoft Viva Connections, to provide a summarized view of app information. To learn more about creating cards for Viva Connections Dashboard, see Overview of Bot Powered Adaptive Card Extensions.
Type
Array of dashboardCard
Required
—
Constraints
Supported values
intuneInfo
The Intune-related properties for the app.
Type
intuneInfo
Required
—
Constraints
Supported values
copilotAgents
Defines one or more agents to Microsoft 365 Copilot. Declarative agents are customizations of Microsoft 365 Copilot that run on its same orchestrator and foundation models.
Type
copilotAgents
Required
—
Constraints
Supported values
elementRelationshipSet
Describes relationships among individual app capabilities, including staticTabs
, configurableTabs
, composeExtensions
, and bots
. It's used to specify runtime dependencies to ensure that the app only launches in applicable Microsoft 365 hosts, such as Teams, Outlook, and the Microsoft 365 (Office) app. For more information, see how to specify runtime requirements in your app manifest.
Required
—
Constraints
Supported values
Feedback
Was this page helpful?