From 95a24ec0990daacb209ae658155dd2e957230121 Mon Sep 17 00:00:00 2001 From: Erika Doyle Navara Date: Fri, 27 Jun 2025 17:02:00 -0700 Subject: [PATCH] Remove single-page manifest ref and redirect to generated docset --- .openpublishing.redirection.json | 8 + msteams-platform/TOC.yml | 14 +- .../dev-preview/developer-preview-intro.md | 3 +- .../schema/manifest-schema-dev-preview.md | 1595 ----------------- .../resources/schema/manifest-schema.md | 1487 --------------- 5 files changed, 15 insertions(+), 3092 deletions(-) delete mode 100644 msteams-platform/resources/schema/manifest-schema-dev-preview.md delete mode 100644 msteams-platform/resources/schema/manifest-schema.md diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index cbd4a6fd552..88b000d7a23 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -1379,6 +1379,14 @@ { "source_path": "msteams-platform/sbs-meetings-sidepanel.yml", "redirect_url": "/microsoftteams/platform/apps-in-teams-meetings/build-tabs-for-meeting.md" + }, + { + "source_path": "msteams-platform/resources/schema/manifest-schema.md", + "redirect_url": "/microsoft-365/extensibility/schema" + }, + { + "source_path": "msteams-platform/resources/schema/manifest-schema-dev-preview.md", + "redirect_url": "/microsoft-365/extensibility/schema/?view=m365-app-prev" } ] } diff --git a/msteams-platform/TOC.yml b/msteams-platform/TOC.yml index 156c71a7029..61a69270e82 100644 --- a/msteams-platform/TOC.yml +++ b/msteams-platform/TOC.yml @@ -959,16 +959,12 @@ href: teams-faq.md - name: App manifest items: - - name: App manifest - href: resources/schema/manifest-schema.md - displayName: version, validDomain, valid domain, validdomain, properties, meetingExtensionDefinition - name: Public developer preview - items: - - name: Overview - href: resources/dev-preview/developer-preview-intro.md - - name: Public developer preview app manifest - href: resources/schema/manifest-schema-dev-preview.md - displayName: properties + href: resources/dev-preview/developer-preview-intro.md + displayName: dev preview, public preview, manifest schema, app manifest, app package + - name: Manifest schema reference + href: /microsoft-365/extensibility/schema/ + displayName: manifest schema, app manifest, app package - name: Test your app or agent items: - name: Overview diff --git a/msteams-platform/resources/dev-preview/developer-preview-intro.md b/msteams-platform/resources/dev-preview/developer-preview-intro.md index afcc7bf4fdf..b4d49f4310c 100644 --- a/msteams-platform/resources/dev-preview/developer-preview-intro.md +++ b/msteams-platform/resources/dev-preview/developer-preview-intro.md @@ -14,7 +14,7 @@ Developer Preview is a public program for developers, which provides early acces ## Developer preview app manifest -Many features enabled in developer preview require alterations to your app manifest (previously called Teams app manifest) JSON file. To do so, you need to use the [developer preview app manifest schema](~/resources/schema/manifest-schema-dev-preview.md). If you use this schema, you can't use [Developer Portal for Teams](~/concepts/build-and-test/teams-developer-portal.md) to make these changes or upload your app for testing. To upload your app in Teams, select **Apps** > **Manage your apps** > **Upload an app**. Using this method, you can only upload a zipped version of your app package. +Many features enabled in developer preview require alterations to your app manifest (previously called Teams app manifest) JSON file. To do so, you need to use the [developer preview app manifest schema](/microsoft-365/extensibility/schema/?view=m365-app-prev). If you use this schema, you can't use [Developer Portal for Teams](~/concepts/build-and-test/teams-developer-portal.md) to make these changes or upload your app for testing. To upload your app in Teams, select **Apps** > **Manage your apps** > **Upload an app**. Using this method, you can only upload a zipped version of your app package. You might find it useful to use Developer Portal to create the non-developer preview portions of your app package, then export that package and manually edit the `manifest.json` file to add the developer preview features you wish to use. After you added the developer preview features to the `manifest.json` file, you can't reimport the package into Developer Portal. @@ -73,4 +73,5 @@ Use the same menu item under About → Developer preview and select it to turn i ## See also +[App manifest developer public preview schema reference](/microsoft-365/extensibility/schema/?view=m365-app-prev) [Test and debug your Microsoft Teams app](~/concepts/build-and-test/debug.md) diff --git a/msteams-platform/resources/schema/manifest-schema-dev-preview.md b/msteams-platform/resources/schema/manifest-schema-dev-preview.md deleted file mode 100644 index 8e70b852c30..00000000000 --- a/msteams-platform/resources/schema/manifest-schema-dev-preview.md +++ /dev/null @@ -1,1595 +0,0 @@ ---- -title: Developer Preview App Manifest -description: Learn about public developer preview manifest schema for Microsoft Teams, sample app manifest, schema properties, and how to enable developer preview. -ms.topic: reference -ms.localizationpriority: medium -ms.date: 03/26/2025 ---- -# Public developer preview app manifest - -For information on how to enable developer preview, see [public developer preview for Microsoft Teams](~/resources/dev-preview/developer-preview-intro.md). - -> [!NOTE] -> If you aren't using developer preview features, including running [Teams personal tabs and message extensions in Outlook and Microsoft 365 app](../../m365-apps/overview.md), use the [app manifest](~/resources/schema/manifest-schema.md) (previously called Teams app manifest) for generally available (GA) features instead. - -App manifest describes how the app integrates into the Microsoft Teams platform. Your app manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json`](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json). - -## Sample app manifest - -```json -{ - "$schema": "https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json", - "manifestVersion": "devPreview", - "version": "1.0.0", - "id": "%MICROSOFT-APP-ID%", - "devicePermissions": [ - "geolocation", - "media" - ], - "developer": { - "name": "Publisher Name", - "websiteUrl": "https://example.com/", - "privacyUrl": "https://example.com/privacy", - "termsOfUseUrl": "https://example.com/app-tos", - "mpnId": "1234567890" - }, - "localizationInfo": { - "defaultLanguageTag": "en", - "defaultLanguageFile": "en.json", - "additionalLanguages": [ - { - "languageTag": "es", - "file": "es.json" - } - ] - }, - "name": { - "short": "Name of your app (<=30 chars)", - "full": "Full name of app, if longer than 30 characters" - }, - "description": { - "short": "Short description of your app", - "full": "Full description of your app" - }, - "icons": { - "outline": "%FILENAME-32x32px%", - "color": "%FILENAME-192x192px", - "color32x32": "%FILENAME-32x32px%" - }, - "accentColor": "%HEX-COLOR%", - "elementRelationshipSet": { - "oneWayDependencies" : [ - { - "element" : { - "name" : "composeExtensions", - "id" : "composeExtension-id", - "commandIds": ["exampleCmd1", "exampleCmd2"] - }, - "dependsOn" : [ - {"name" : "bots", "id" : "bot-id"} - ] - } - ], - "mutualDependencies" : [ - [ - {"name" : "bots", "id" : "bot-id"}, - {"name" : "staticTabs", "id" : "staticTab-id"}, - {"name" : "composeExtensions", "id" : "composeExtension-id"}, - {"name" : "configurableTabs", "id": "configurableTab-id"} - ] - ] - }, - "copilotAgents": { - "declarativeAgents": [ - { - "id": "agent1", - "file": "declarativeAgent1.json" - } - ] - }, - "configurableTabs": [ - { - "id": "configurableTab-id", - "configurationUrl": "https://contoso.com/teamstab/configure", - "canUpdateConfiguration": true, - "scopes": [ - "team", - "groupChat" - ], - "context": [] - } - ], - "staticTabs": [ - { - "entityId": "idForPage", - "name": "Display name of tab", - "contentUrl": "https://contoso.com/content?host=msteams", - "contentBotId": "Specifies to the app that tab is an Adaptive Card Tab. You can either provide the contentBotId or contentUrl.", - "websiteUrl": "https://contoso.com/content", - "scopes": [ - "personal" - ], - "requirementSet": { - "hostMustSupportFunctionalities": [ - {"name": "dialogUrl"}, - {"name": "dialogUrlBot"} - ] - } - } - ], - "backgroundLoadConfiguration": { - "tabConfiguration": { - "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true" - } - }, - "bots": [ - { - "botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%", - "needsChannelSelector": false, - "isNotificationOnly": false, - "scopes": [ - "team", - "personal", - "groupChat" - ], - "supportsFiles": true, - "commandLists": [ - { - "scopes": [ - "team", - "groupChat" - ], - "commands": [ - { - "title": "Command 1", - "description": "Description of Command 1" - }, - { - "title": "Command N", - "description": "Description of Command N" - } - ] - }, - { - "scopes": [ - "personal", - "groupChat" - ], - "commands": [ - { - "title": "Personal command 1", - "description": "Description of Personal command 1" - }, - { - "title": "Personal command N", - "description": "Description of Personal command N" - } - ] - } - ], - "requirementSet": { - "hostMustSupportFunctionalities": [ - {"name": "dialogUrl"}, - {"name": "dialogUrlBot"} - ] - } - } - ], - "connectors": [ - { - "connectorId": "GUID-FROM-CONNECTOR-DEV-PORTAL%", - "configurationUrl": "https://contoso.com/teamsconnector/configure", - "scopes": [ - "team" - ] - } - ], - "composeExtensions": [ - { - "botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%", - "id": "composeExtension-id", - "canUpdateConfiguration": true, - "commands": [ - { - "id": "exampleCmd1", - "title": "Example Command", - "description": "Command Description; e.g., Search on the web", - "initialRun": true, - "type": "search", - "context": [ - "compose", - "commandBox" - ], - "parameters": [ - { - "name": "keyword", - "title": "Search keywords", - "description": "Enter the keywords to search for" - } - ] - }, - { - "id": "exampleCmd2", - "title": "Example Command 2", - "description": "Command Description; e.g., Search for a customer", - "initialRun": true, - "type": "action", - "fetchTask": true, - "context": [ - "message" - ], - "parameters": [ - { - "name": "custinfo", - "title": "Customer name", - "description": "Enter a customer name", - "inputType": "text" - } - ] - }, - { - "id": "exampleMessageHandler", - "title": "Message Handler", - "description": "Domains that will create a preview when pasted into the compose box", - "messageHandlers": [ - { - "type": "link", - "value": { - "domains": [ - "mysite.someplace.com", - "othersite.someplace.com" - ] - } - } - ] - } - ], - "requirementSet": { - "hostMustSupportFunctionalities": [ - {"name": "dialogUrl"}, - {"name": "dialogUrlBot"} - ] - } - } - ], - "permissions": [ - "identity", - "messageTeamMembers" - ], - "validDomains": [ - "contoso.com", - "mysite.someplace.com", - "othersite.someplace.com" - ], - "webApplicationInfo": { - "id": "AAD App ID", - "resource": "Resource URL for acquiring auth token for SSO" - }, - "showLoadingIndicator": false, - "isFullScreen": false, - "defaultBlockUntilAdminAction": false, - "publisherDocsUrl": "https://contoso.com/teamtabapp/admin-doc", - "scopeConstraints": { - "teams": [ - { "id": "%TEAMS-THREAD-ID" } - ], - "groupChats": [ - { "id": "%GROUP-CHATS-THREAD-ID" } - ] - }, - "authorization": { - "permissions": { - "resourceSpecific": [ - { - "type": "Application", - "name": "ChannelSettings.Read.Group" - }, - { - "type": "Delegated", - "name": "ChannelMeetingParticipant.Read.Group" - } - ] - } - }, -"actions": [ - { - "id": "addTodoTask", - "displayName": "Add ToDo task", - "intent": "addTo", - "description": "Add this file with a short note to my to do list", - "handlers": [ - { - "type": "openPage", - "supportedObjects": { - "file": { - "extensions": [ - "doc", - "pdf" - ] - } - }, - "pageInfo": { - "pageId": "newTaskPage", - "subPageId": "" - } - } - ] - }, - ], - "configurableProperties": [ - "name", - "shortDescription", - "longDescription", - "smallImageUrl", - "largeImageUrl", - "accentColor", - "developerUrl", - "privacyUrl", - "termsOfUseUrl" - ], - "supportedChannelTypes": [ - "sharedChannels", - "privateChannels" - ], - "defaultInstallScope": "meetings", - "defaultGroupCapability": { - "meetings": "tab", - "team": "bot", - "groupchat": "bot" - }, - "subscriptionOffer": { - "offerId": "publisherId.offerId" - }, - "meetingExtensionDefinition": { - "scenes": [ - { - "id": "9082c811-7e6a-4174-8173-6ccd57d377e6", - "name": "Getting started sample", - "file": "scenes/sceneMetadata.json", - "preview": "scenes/scenePreview.png", - "maxAudience": 15, - "seatsReservedForOrganizersOrPresenters": 0 - }, - { - "id": "afeaed22-f89b-48e1-98b4-46a514344e4a", - "name": "Sample-1", - "file": "scenes/sceneMetadata.json", - "preview": "scenes/scenePreview.png", - "maxAudience": 15, - "seatsReservedForOrganizersOrPresenters": 3 - } - ] - } -} -``` - -The schema defines the following properties: - -## $schema - -**Optional** (but recommended) – String - -The *https://* URL referencing the JSON Schema for the app manifest. - -## manifestVersion - -**Required** – String - -The version of the app manifest schema this manifest is using. - -## version - -**Required** – String - -The version of the specific app. If you update something in your app manifest, the version must be incremented as well. This way, when the new app manifest is installed, it overwrites the existing one and the user gets the new functionality. If this app was submitted to the Microsoft Teams Store, the new app manifest has to be resubmitted and revalidated. Then, users of this app receive the new updated app manifest automatically within a few hours, after it's approved. - -If the app requested permissions change, users are prompted to upgrade and re-consent to the app. - -This version string must follow the [semver](http://semver.org/) standard (MAJOR.MINOR.PATCH). - -> [!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. - -## id - -**Required** – Microsoft app ID - -The unique Microsoft-generated identifier for this app. The format of the ID is GUID. If you've registered a bot through Microsoft Bot Framework, or your tab's web app already signs in with Microsoft, then you might already have an ID and must enter it here. Otherwise, you must generate a new ID at the Microsoft Application Registration Portal ([My Applications](https://apps.dev.microsoft.com)), enter it here, and then reuse it when you [add a bot](~/bots/how-to/create-a-bot-for-teams.md). - -## developer - -**Required** – Object - -Specifies information about the developer and their business. For Teams Store apps, the value must match the values that you provide in the Partner Center app submission form. - -| Name | Type | Maximum size | Required | Description | -|-----------------|--------|------------------|----------|----------------------------------------------------------------------------------------------------------| -| `name` | String | 32 characters | ✔️ | The display name for the developer. | -| `websiteUrl` | String | 2048 characters | ✔️ | The *https://* URL to the app-specific page on your website. | -| `privacyUrl` | String | 2048 characters | ✔️ | The *https://* URL to the app's privacy policy. | -| `termsOfUseUrl` | String | 2048 characters | ✔️ | The *https://* URL to the app's terms of use. | -| `mpnId` | String | 10 characters | | The Microsoft Cloud Partner Program (CCP) ID (formerly known as Microsoft Partner Network (MPN) ID) that identifies the partner organization creating the app. **Optional** | -| `contactInfo` | Object | | | App developer's contact information. | - -### developer.contactInfo - -**Optional** – Object - -Your contact information that is used by customers to contact you through Teams chat or email. Customers may need extra information when evaluating your app or if they have any queries about your app when it doesn't work. Customers can contact you using Teams chat, so request your IT admins to [enable external communications](/microsoftteams/communicate-with-users-from-other-organizations) in your organization. For more information, see [developer provided app and contact information](/MicrosoftTeams/manage-apps#developer-provided-app-information-support-and-documentation). - -> [!Note] -> You must provide only one contact email address. - -We recommend triaging your customer queries in a timely manner and route those internally within your organization, say to other functions to get the answers. It helps improve app adoption, builds developer trust, and increase revenue if you monetize the app. - -| Name | Type | Maximum size | Required | Description | -|----------------|--------|--------------|----------|----------------------| -|`defaultsupport`|Object| |✔️|The default contact information for your app.| -|`defaultsupport.userEmailsForChatSupport`|Array|10|✔️|Email address to receive customer queries using Teams chat. While the app manifest allows up to 10 email addresses, Teams uses only the first email address to let IT admins communicate with you. The object is an array with all elements of the type string. The maximum length of email is 80 characters.| -|`defaultsupport.emailsForEmailSupport`|Array|1|✔️|Contact email for customer inquiry (Minimum: 1; maximum: 1). The object is an array with all elements of the type string. The maximum length of email is 80 characters.| - -## localizationInfo - -**Optional** – Object - -Allows the specification of a default language, and pointers to additional language files. See [localization](~/concepts/build-and-test/apps-localization.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`defaultLanguageTag`| String | | ✔️|The language tag for the strings in this app manifest file. For example, `en`| -|`defaultLanguageFile`| String |2048 characters|| A relative file path to the .json file that contains the strings. If unspecified, strings are taken directly from the app manifest file. A default language file is required for [agents that support multiple languages](/microsoft-365-copilot/extensibility/agents-are-apps#localizing-your-agent).| - -### localizationInfo.additionalLanguages - -An array of objects with the following properties to specify additional language translations. - -| Name | Type | Maximum size | Required | Description| -|---|---|---|---|---| -|`languageTag`| String | |✔️|The language tag of the strings in the provided file. For example, `es`| -|`file`| String | 2048 characters|✔️|A relative file path to the .json file that contains the translated strings.| - -## name - -**Required** – Object - -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. - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---|---| -|`short`|String|30 characters|✔️|The short display name for the app.| -|`full`|String|100 characters|✔️|The full name of the app. It's used if the full app name exceeds 30 characters.| -|`abbreviated`|String|15 characters| |Abbreviated name for the app; used as the display name on the app bar on the left hand side of the UI. If not specified, `short` name is used on the app bar.| - -## description - -**Required** – Object - -Describes your app to users. For apps submitted to AppSource, these values must match the information in your AppSource entry. - -Ensure that your description accurately describes your experience and provides information to help potential customers understand what your experience does. You must note in the full description, if an external account is required for use. The values of `short` and `full` must be different. Your short description must not be repeated within the long description and must not include any other app name. - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---|---| -|`short`| String |80 characters|✔️|A short description of your app experience, used when space is limited.| -|`full`| String |4000 characters|✔️|The full description of your app.| - -## icons - -**Required** – Object - -Icons used within the Teams app. The icon files must be included as part of the upload package. - -|Name| Maximum size | Required | Description| -|---|---|---|---| -|`outline`|2048 characters|✔️|A relative file path to a transparent 32x32 PNG outline icon. The border color must be white.| -|`color`|2048 characters|✔️|A relative file path to a full color 192x192 PNG icon.| -|`color32x32`|2048 character| | A relative file path to a full color 32x32 PNG icon with transparent background. Used when the app is pinned in Outlook and Microsoft 365 app.| - -## accentColor - -**Required** – String - -A color to use with and as a background for your outline icons. - -The value must be a valid HTML color code starting with '#', for example `#4464ee`. - -## elementRelationshipSet - -**Optional** – Object - -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](../../m365-apps/specify-runtime-requirements.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `oneWayDependencies`| Array|||Defines one or more unidirectional dependency relationships among app components. Each relationship is represented by a `oneWayDependency` object with a *dependent* `element` and a `dependsOn` [`element`](#element) object.| -| `mutualDependencies`| Array|||Defines one or more mutual dependency relationships among app capabilities. Each relationship is represented by a `mutualDependency` array of [`element`](#element) objects. | - -### element - -**Optional** – Object - -Describes an app capability (`element`) in an `elementRelationshipSet`. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `name`| String enum|| ✔️| The type of app capability. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`| -| `id` | String | | ✔️| If there are multiple instances of a bot, tab, or message extension, this property defines a specific instance of the capability. It maps to `botId` for bots, `entityId` for static tabs, and `id` for configurable tabs and message extensions. | -| `commandIds` | Array of strings||| List of one or more message extension commands that are dependent on the specified `dependsOn` capability. Use only for message extensions. | - -### elementRelationshipSet.oneWayDependency - -**Optional** – Object - -Describes the unidirectional dependency of one app capability (X) to another (Y). If a Microsoft 365 runtime host doesn't support a required capability (Y), the dependent capability (X) won't load or surface to the user. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `element`| Object||✔️| Represents an individual app capability (represented by [`element`](#element)) that has a one-way runtime dependency on another capability being loaded. | -| `dependsOn`| Array|| ✔️| Defines one or more app capabilities (each represented by [`element`](#element)) required for the specified `element` to load.| - -### elementRelationshipSet.mutualDependencies - -**Optional** – Array of arrays (each containing two or more [`element` objects](#element)) - -Describes a set of mutual dependencies between two or more app capabilities. A Microsoft 365 runtime host must support all required capabilities for any of those capabilities to be available for users in that host. - -## copilotAgents - -**Optional** – Object - -Defines one or more agents to Microsoft 365 Copilot (formerly known as `copilotExtensions`). [Declarative agents](/microsoft-365-copilot/extensibility/overview-declarative-agent) are customizations of Microsoft 365 Copilot that run on the same orchestrator and foundation models (formerly known as `declarativeCopilots`). [Custom engine agents](/microsoft-365-copilot/extensibility/overview-custom-engine-agent) are conversational Teams bots that use custom AI language models and orchestration, yet are selectable (along with installed declarative agents) as **Agents** from the Microsoft 365 Copilot side panel. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`declarativeAgents`|Array of objects| 1 || Array of objects that each define a declarative agent. | -|`customEngineAgents`|Array of objects| 1 || Array of objects that each define a custom engine agent.| - -### declarativeAgents - -Represents a customization of Microsoft 365 Copilot, as defined by its manifest file. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String| |✔️| Unique identifier for the agent. When using Microsoft Copilot Studio to build agents, this is auto-generated. Otherwise, manually assign the value according to your own conventions or preference. | -|`file`|String| |✔️| Relative path within the app package to the [declarative agent manifest](/microsoft-365-copilot/extensibility/declarative-agent-manifest) file. | - -### customEngineAgents - -Represents a conversational Teams bot that uses custom AI language models and orchestration, surfaced as an agent in the Microsoft 365 Copilot UI. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String| |✔️| Unique (bot) identifier for the custom engine agent. Must match the `id` specified in the `bots` section of the manifest and be of `personal` scope. | -|`type`|String| |✔️| Type of the custom engine agent. Supported value: `bot` | - -## configurableTabs - -**Optional** – Array - -Used when your app experience has a team channel tab experience that requires extra configuration before it's added. Configurable tabs are supported only in the teams scope, and only one tab per app is supported. - -The object is an array with all elements of the type `object`. This block is required only for solutions that provide a configurable channel tab solution. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String||| Unique identifier for configurable tab. Used when defining one-way and mutual app capability dependencies under [elementRelationshipSet](#elementrelationshipset).| -|`configurationUrl`|String|2048 characters|✔️|The *https://* URL to use when configuring the tab.| -|`canUpdateConfiguration`|Boolean|||A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
Default value: `true`| -|`scopes`|Array of enum|2|✔️|Configurable tabs only support the `team` and `groupChat` scopes. | -|`context` |Array of enum|8||The set of `contextItem` scopes where a [tab is supported](../../tabs/how-to/access-teams-context.md).
Default values: `channelTab`, `privateChatTab`, `meetingChatTab`, `meetingDetailsTab`, `meetingSidePanel`, `meetingStage`, `personalTab`.| -|`sharePointPreviewImage`|String|2048 characters||A relative file path to a tab preview image for use in SharePoint. Size 1024x768. | -|`supportedSharePointHosts`|Array of enum|2||Defines how your tab is made available in SharePoint. Options are `sharePointFullPage`, `sharePointWebPart`| -|`meetingSurfaces`|Array of enum|2||The set of `meetingSurfaceItem` scopes to which a tab belongs.
Default values: `sidePanel`, `stage`| -|`supportedPlatform`|Array of enum|3||The set of `supportedPlatform` scopes to which a tab belongs.
Default values: `desktop`, `mobile`, `teamsMeetingDevices`| - -## staticTabs - -**Optional** – Array - -Defines a set of tabs that can 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. However, the pinned tabs can be reordered by adding the details of the tab in the same desired order. For more information, see [reorder static personal tabs](../../tabs/how-to/create-personal-tab.md#reorder-tabs). - -This property also enables you to set the default landing capability for an app supporting both tab and bot capabilities in personal scope. For more information, see [configure default landing capability](../../concepts/deploy-and-publish/add-default-install-scope.md#configure-your-apps-default-landing-capability). - -Render tabs with Adaptive Cards by specifying `contentBotId` instead of `contentUrl` in the **staticTabs** block. - -The object is an array (maximum of 16 elements) with all elements of the type `object`. This block is required only for solutions that provide a static tab solution. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`entityId`|String|64 characters|✔️|A unique identifier for the entity that the tab displays.| -|`name`|String|128 characters||The display name of the tab.| -|`contentUrl`|String|2048 characters||The *https://* URL that points to the entity UI to be displayed in the Teams canvas.| -|`contentBotId`|String| | | The Microsoft Teams app ID specified for the bot in the Bot Framework portal. | -|`websiteUrl`|String|2048 characters||The *https://* URL to point at if a user opts to view in a browser.| -|`scopes`|Array of enum|3|✔️|Static tabs support the `personal`, `team`, and `groupChat` scopes, which means it can be provisioned as part of the personal, group chat, and channel meetings experience.| -|`searchUrl`|String|2048 characters||The *https://* URL to direct a user's search queries.| -|`context`|Array of enum|8||The set of `contextItem` scopes to which a tab belongs.
Default values: `personalTab`, `channelTab`, `privateChatTab`, `meetingChatTab`, `meetingDetailsTab`, `meetingSidePanel`, `meetingStage`, `teamLevelApp`| -|`supportedPlatform`|Array of enum|3||The set of `supportedPlatform` scopes to which a tab belongs.
Default values: `desktop`, `mobile`, `teamsMeetingDevices`| -|`requirementSet`|Object|||Runtime requirements for the tab to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the tab.| - -### staticTabs.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the tab requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## backgroundLoadConfiguration - -**Optional** – Object - -Specifies if the app is eligible to be preloaded in the background in any Microsoft 365 host that supports precaching. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `tabConfiguration` | Object | | | Contains the settings to specify if the app supports background preloading of tabs. | -| `tabConfiguration.contentUrl` | String | | ✔️ | Specifies the URL for preloading the app in the background. The URL can have the same value as `staticTabs.contentUrl` or contain an alternative endpoint specifically for background loading. | - -## bots - -**Optional** – Array - -Defines a bot solution, along with optional information such as default command properties. - -The object is an array (maximum of only 1 element— only one bot is allowed per app) with all elements of the type `object`. This block is required only for solutions that provide a bot experience. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`botId`|String| |✔️|The unique Microsoft app ID for the bot as registered with the Bot Framework. The ID can be the same as the overall [app ID](#id).| -|`needsChannelSelector`|Boolean|||Describes whether the bot utilizes a user hint to add the bot to a specific channel.
Default value: `false`| -|`isNotificationOnly`|Boolean|||Indicates whether a bot is a one-way, notification-only bot, as opposed to a conversational bot.
Default value: `false`| -|`supportsFiles`|Boolean|||Indicates whether the bot supports the ability to upload/download files in personal chat.
Default value: `false`| -|`scopes`|Array of enum|3|✔️|Specifies whether the bot offers an experience in the context of a channel in a `team`, in a group chat (`groupChat`), or an experience scoped to an individual user alone (`personal`). These options are nonexclusive.| -|`supportsCalling`|Boolean|||A value indicating where a bot supports audio calling. **IMPORTANT**: This property is experimental. Experimental properties might be incomplete and might undergo changes before they're fully available. The property is provided for testing and exploration purposes only and must not be used in production applications.
Default value: `false`| -|`supportsVideo`|Boolean|||A value indicating where a bot supports video calling. **IMPORTANT**: This property is experimental. Experimental properties might be incomplete and might undergo changes before they're fully available. The property is provided for testing and exploration purposes only and must not be used in production applications.
Default value: `false`| -|`requiresSecurityEnabledGroup`|Boolean|||A value indicating whether the team's Office group needs to be security enabled.
Default value: `false`| -|`requirementSet`|Object|||Runtime requirements for the bot to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the bot.| - -### bots.configuration - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`team.fetchTask`|Boolean||✔️|A boolean value that indicates if it should fetch dialog (referred as task module in TeamsJS v1.x) dynamically.
Default value: `false`| -|`team.taskInfo`|Object||✔️|The dialog to preload when you use a bot.| -|`team.taskInfo.title`|String|64 characters|✔️|Initial dialog title.| -|`team.taskInfo.width`|String|16 characters||The dialog width is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`team.taskInfo.height`|String|16 characters||The dialog height is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`team.taskInfo.url`|String|2048 characters||Initial webview URL.| -|`groupChat.fetchTask`|Boolean||✔️|A boolean value that indicates if it should fetch dialog dynamically.
Default value: `false`| -|`groupChat.taskInfo`|Object|||Dialog to be launched when fetch task set to false.
Default value: `false`| -|`groupChat.taskInfo.title`|String|64 characters|✔️|Initial dialog title.| -|`groupChat.taskInfo.width`|String|16 characters||The dialog width is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`groupChat.taskInfo.height`|String|16 characters||The dialog height is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`groupChat.taskInfo.url`|String|2048 characters||Initial webview URL.| - -### bots.commandLists - -**Optional** – Array - -An optional list of commands that your bot can recommend to users. The object is an array (maximum of 3 elements) with all elements of type `object`; you must define a separate command list for each scope that your bot supports. For more information, see [Bot menus](~/bots/how-to/create-a-bot-commands-menu.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`scopes`|Array of enum|3|✔️|Specifies the scope for which the command list is valid. Options are `team`, `personal`, and `groupChat`.| -|`commands`|Array of objects|10|✔️|An array of commands the bot supports.| - -### bots.commandLists.commands - -**Required** – Array - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`title`|String|32 characters|✔️|The bot command name.| -|`description`|String|128 characters|✔️|A simple text description or an example of the command syntax and its arguments.| - -### bots.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the bot requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## connectors - -**Optional** – Array - -The `connectors` block defines a connector for Microsoft 365 Groups for the app. - -The object is an array (maximum of 1 element) with all elements of type `object`. This block is required only for solutions that provide a Connector. Only one connector per app is supported. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`configurationUrl`|String|2048 characters||The *https://* URL to use when configuring the connector using the inline configuration experience.| -|`connectorId`|String|64 characters|✔️|A unique identifier for the Connector that matches its ID in the [Connectors Developer Dashboard](https://aka.ms/connectorsdashboard).| -|`scopes`|Array of enum|1|✔️|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 (`personal`). The `team` scope is only supported.| - -## composeExtensions - -**Optional** – Array - -Defines a message extension for the app. - -The object is an array (maximum of 1 element) with all elements of type `object`. This block is required only for solutions that provide a message extension. - -|Name| Type | Maximum Size | Required | Description| -|---|---|---|---|---| -|`id`|String||| Unique identifier for the message extension. Used when defining one-way and mutual app capability dependencies under [elementRelationshipSet](#elementrelationshipset).| -|`botId`|String|||The unique Microsoft app ID for the bot that backs the message extension, as registered with the Bot Framework. The ID can be the same as the overall [app ID](#id).| -|`composeExtensionType`|String|||Type of the message extension. Enum values are `botBased` and `apiBased`.| -|`authorization`|Object|2||Authorization related information for the API-based message extension| -|`authorization.authType`|String|||Enum of possible authorization types. Supported values are `none`, `apiSecretServiceAuth`, and `microsoftEntra`.| -|`authorization.microsoftEntraConfiguration`|Object|||Object capturing details needed to do microsoftEntra auth flow. Applicable only when auth type is `microsoftEntra`.| -|`authorization.microsoftEntraConfiguration.supportsSingleSignOn`|Boolean|||A value indicating whether single sign-on is configured for the app.| -|`authorization.apiSecretServiceAuthConfiguration`|Object|||Object capturing details needed to do service auth. Applicable only when auth type is `apiSecretServiceAuth`.| -|`authorization.apiSecretServiceAuthConfiguration.apiSecretRegistrationId`|String|128 characters||Registration ID returned when developer submits the API key through Developer Portal.| -|`authorization.oAuthConfiguration`||Object||| -|`authorization.oAuthConfiguration.oAuthConfigurationId`|String|128 characters||| -|`apiSpecificationFile`|String|2048 characters||A relative file path to the api specification file in the manifest package.| -|`canUpdateConfiguration`|Boolean|||A value indicating whether the configuration of a message extension can be updated by the user.
Default value: `true`| -|`commands`|Array of objects|10||Array of commands the message extension supports.| -|`messageHandlers`|Array of objects|5||A list of handlers that allow apps to be invoked when certain conditions are met. Domains must also be listed in `validDomains`.| -|`messageHandlers.type`|String|||The type of message handler. Must be `link`.| -|`messageHandlers.value.domains`|Array of Strings|2048 characters||Array of domains that the link message handler can register for.| -|`messageHandlers.supportsAnonymizedPayloads`|Boolean|||A Boolean value that indicates whether the app's link message handler supports anonymous invoke flow.
Default value: `false`
To enable zero install for link unfurling, the value needs to be set to `true`.
**Note**: The property `supportAnonymousAccess` is superseded by `supportsAnonymizedPayloads`.| -| `type` | Type of the message extension. Supported values are `apiBased` or `botBased`. | -|`requirementSet`|Object|||Runtime requirements for the message extension to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the message extension.| - -### composeExtensions.commands - -Your message extension must declare one or more commands. Each command appears in Teams as a potential interaction from the UI-based entry point. There's a maximum of 10 commands. - -Each command item is an object with the following structure: - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String|64 characters|✔️|The ID for the command.| -|`type`|String|64 characters||Type of the command. One of `query` or `action`. Default: `query`| -|`samplePrompts`|Array|5 ||Property used by Microsoft 365 Copilot to display prompts supported by the agent to the user. For Microsoft 365 Copilot scenarios, this property is required in order to pass app validation for store submission. | -|`samplePrompts.text`|string|128 characters|✔️|Content of the sample prompt.| -|`apiResponseRenderingTemplateFile`|String|2048 characters||A relative file path for api [response rendering template](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json) file used to format the JSON response from developer’s API to Adaptive Card response.| -|`context`|Array of Strings|3 characters||Defines where the message extension can be invoked from. Any combination of `compose`, `commandBox`, `message`.
Default values: `compose, commandBox`| -|`title`|String|32 characters|✔️|The user-friendly command name.| -|`description`|String|128 characters||The description that appears to users to indicate the purpose of this command.| -|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).| -|`initialRun`|Boolean|||A Boolean value that indicates whether the command runs initially with no parameters.
Default value: `false`| -|`fetchTask`|Boolean|||A Boolean value that indicates if it must fetch the dialog dynamically.
Default value: `false`| -|`taskInfo`|Object|||Specify the dialog to preload when using a message extension command.| -|`taskInfo.title`|String|64 characters||Initial dialog title.| -|`taskInfo.width`|String|16 characters||Dialog width - either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`taskInfo.height`|String|16 characters||Dialog height - either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`taskInfo.url`|String|2048 characters||Initial webview URL.| -|`parameters`|Array of objects|5||The list of parameters the command takes.| -|`parameters.name`|String|64 characters|✔️|The name of the parameter as it appears in the client. This is included in the user request.
For Api-based message extension, The name must map to the `parameters.name` in the OpenAPI Description. If you're referencing a property in the request body schema, then the name must map to `properties.name` or query parameters. | -|`parameters.title`|String|32 characters|✔️|User-friendly title for the parameter.| -|`parameters.description`|String|128 characters||User-friendly string that describes this parameter’s purpose.| -|`parameters.semanticDescription`|String|2000 characters||Semantic description of the parameter for consumption by the Large Language Models (LLMs).| -|`parameters.inputType`|String|||Defines the type of control displayed on a dialog for `fetchTask: false`. Input value can only be one of `text`, `textarea`, `number`, `date`, `time`, `toggle`, `choiceset`.
Default value: `text`| -|`parameters.value`|String|512 characters||Initial value for the parameter.| -|`parameters.choices`|Array of objects|10||The choice options for the `choiceset`. Use only when `parameters.inputType` is `choiceset`.| -|`parameters.choices.title`|String|128 characters|✔️|Title of the choice.| -|`parameters.choices.value`|String|512 characters|✔️|Value of the choice.| - -### composeExtensions.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the message extension requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## 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. - -**Optional** – Object - -|Name| Type | Maximum Size | Required | Description| -|---|---|---|---|---| -|`teams`|Array|128||A list of team thread IDs to which your app is restricted.| -|`teams.id`|String|64 characters|✔️|Team's thread ID.| -|`groupChats`|Array|128||A list of chat thread IDs to which your app is restricted.| -|`groupChats.id`|String|64 characters|✔️|Chat's thread ID.| - -## permissions - -**Optional** – Array of strings - -An array of `string`, which specifies which permissions the app requests, which let end users know how the extension performs. The following options are nonexclusive: - -* `identity`   Requires user identity information. -* `messageTeamMembers`   Requires permission to send direct messages to team members. - -Changing these permissions when updating your app causes your users to repeat the consent process the first time they run the updated app. - -## devicePermissions - -**Optional** – Array of Strings - -Specifies the native features on a user's device that your app may request access to. Options are: - -* `geolocation` -* `media` -* `notifications` -* `midi` -* `openExternal` - -## validDomains - -**Optional**, except **Required** where noted - -A list of valid domains from which the app expects to load any content. Domain listings can include wildcards, for example `*.example.com`. The valid domain matches exactly one segment of the domain; if you need to match `a.b.example.com` then use `*.*.example.com`. If your tab configuration or content UI needs to go to any other domain besides the one use for tab configuration, that domain must be specified here. - -> [!NOTE] -> 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. - -It's **not** necessary to include the domains of identity providers you want to support in your app, however. For example, to authenticate using a Google ID, it's necessary to redirect to accounts.google.com, but you must not include accounts.google.com in `validDomains[]`. - -> [!IMPORTANT] -> Do not add domains that are outside your control, either directly or through wildcards. For example, `yourapp.onmicrosoft.com` is valid, but `*.onmicrosoft.com` isn't valid. - -The object is an array with all elements of the type `string`. The maximum item of the object is 16 and maximum length is 2048 characters. - -## webApplicationInfo - -**Optional** – Object - -Specify your Microsoft Entra App ID and Graph information to help users seamlessly sign into your Microsoft Entra app. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String| |✔️|Microsoft Entra application ID of the app. This ID must be a GUID.| -|`resource`|String|2048 characters||Resource URL of the app for acquiring auth token for SSO.| - -## graphConnector - -**Optional** – Object - -Specify the app's Graph connector configuration. If this is present, then [webApplicationInfo.id](#webapplicationinfo) must also be specified. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`notificationUrl`|String|2048 characters|✔️|The *https://* URL where Graph-connector notifications for the application must be sent.| - -## showLoadingIndicator - -**Optional** – Boolean - -Indicates whether to show the loading indicator when an app or tab is loading.
Default value: `false` -> [!NOTE] -> -> * If you select `showLoadingIndicator` as true in your app manifest, to load the page correctly, modify the content pages of your tabs and dialogs as described in [Show a native loading indicator](../../tabs/how-to/create-tab-pages/content-page.md#show-a-native-loading-indicator) document. -> * If you don't modify the content pages of your tab, the tab app doesn't load and shows the error `There was a problem reaching this app`. - -## isFullScreen - - **Optional** – Boolean - -Indicate where a personal app is rendered with or without a tab header bar.
Default value: `false` - -> [!NOTE] -> `isFullScreen` works only for apps published to your organization. - -## activities - -**Optional** – Object - -Define the properties your app uses to post a user activity feed. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`activityTypes`|Array of objects| 128 | | Provide the types of activities that your app can post to a users activity feed. The `systemDefault` activity type is a reserved and invalid string.| - -### activities.activityTypes - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`type`|String|32 characters|✔️|The notification type.| -|`description`|String|128 characters|✔️|A brief description of the notification.| -|`templateText`|String|128 characters|✔️|Ex: "{actor} created task {taskId} for you"| -|`allowedIconIds`|Array of strings|50| |A list of custom icon IDs valid for that activity.| - -### activities.activityIcons - -**Optional** – Array of objects - -Defines the icons of activity types that your app can post to a user's activity feed. You can define up to 50 icons per activity type. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String|64 characters|✔️|Defines the unique icon ID.| -|`iconFile`|String|128 characters|✔️|Represents the icon image mapped to the unique icon ID. The value must match the name of the custom icon you add in the Teams app package.| - -```json -{ - "activities": { - "activityTypes": [ - { - "type": "leadershipAnnouncements", - "description": "leadership Announcements", - "templateText": "Kayo Miwa shared an announcement", - "allowedIconIds" : [ - "announcementCreated" - ] - }, - { - "type": "announcementCreated", - "description": "Announcements", - "templateText": "Megan Bowen posted an announcement", - "allowedIconIds" : [ - "announcementCreated" - ] - }, - { - "type": "reaction", - "description": "reaction Activity", - "templateText": "Adele Vance reacted to your post in channel", - "allowedIconIds" : [ - "likeReaction", - "smileReaction" - ] - }, - { - "type": "taskCreated", - "description": "task created activity", - "templateText": "Pradeep Gupta created a new task item for you.", - // No icons are associated with this activity type. When you send a notification using this activity type, Teams shows the app icon. - } - ], - "activityIcons" :[ - { - "id": "likeReaction", - "iconFile": "likeReaction.png" - }, - { - "id": "smileReaction", - "iconFile": "smileReaction.png" - }, - { - "id": "announcementCreated", - "iconFile": "announcementCreated.png" - } - ] - } -} -``` - -## configurableProperties - -**Optional** – Array - -The `configurableProperties` block defines the app properties that Teams admins can customize. For more information, see [enable app customization](~/concepts/design/enable-app-customization.md). - -> [!NOTE] -> A minimum of one property must be defined. You can define a maximum of nine properties in this block. - -You 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. - -## supportedChannelTypes - -**Optional** – Array - -Enables your app in nonstandard channels. If your app supports a team scope and this property is defined, Teams enables your app in each channel type accordingly. The private and shared channel types are supported. - -> [!NOTE] -> -> * 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](~/tabs/how-to/access-teams-context.md#retrieve-context-in-private-channels) and [get context in shared channels](../../tabs/how-to/access-teams-context.md#get-context-in-shared-channels) - -## defaultBlockUntilAdminAction - -**Optional** – Boolean - -A value that indicates whether an app is blocked by default until admin allows it.
Default value: `false` - -## publisherDocsUrl - -**Optional** – String - -The *https://* URL to the page that provides additional app information for the admins. The maximum length of the string is 2048 characters. - -## defaultInstallScope - -**Optional** – String - -Specifies the install scope defined for this app by default. The defined scope is the option displayed on the button when a user tries to add the app. Options are: - -* `personal` -* `team` -* `groupChat` -* `meetings` - -## defaultGroupCapability - -**Optional** – Object - -When a group install scope is selected, it defines the default capability when the user installs the app. Options are: - -* `team` -* `groupchat` -* `meetings` - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`team`|String|||When the install scope selected is `team`, this field specifies the default capability available.
Options: `tab`, `bot`, or `connector`.| -|`groupchat`|String|||When the install scope selected is `groupChat`, this field specifies the default capability available.
Options: `tab`, `bot`, or `connector`.| -|`meetings`|String|||When the install scope selected is `meetings`, this field specifies the default capability available.
Options: `tab`, `bot`, or `connector`.| - -## subscriptionOffer - -**Optional** – Object - -Specifies the SaaS offer associated with your app. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`offerId`| String | 2048 characters | ✔️ | A unique identifier that includes your Publisher ID and Offer ID, which you can find in [Partner Center](https://partner.microsoft.com/dashboard). You must format the string as `publisherId.offerId`.| - -## meetingExtensionDefinition - -**Optional** – Object - -Specify meeting extension definition. For more information, see [custom Together Mode scenes in Teams](../../apps-in-teams-meetings/teams-together-mode.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`scenes`|Array of objects| 5 ||Meeting supported scenes.| -|`supportsStreaming`|Boolean|||A Boolean value that indicates whether an app can stream the meeting's audio and video content to a real-time meeting protocol (RTMP) endpoint.
Default value: `false`| -|`videoFiltersConfigurationUrl`|String|2048 characters||The *https://* URL for configuring the video filters.| -|`supportsAnonymousGuestUsers`|Boolean|||A Boolean value that indicates whether the app supports access by anonymous guest users.
Default value: `false`| - -### meetingExtensionDefinition.scenes - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`id`|String||✔️| The unique identifier for the scene. This ID must be a GUID. | -|`name`| String | 128 characters |✔️| The name of the scene. | -|`file`|String|2048 characters|✔️| The relative file path to the scenes' metadata json file. | -|`preview`|String|2048 characters|✔️| The relative file path to the scenes' PNG preview icon. | -|`maxAudience`| Integer | 50 |✔️| The maximum number of audiences supported in the scene. | -|`seatsReservedForOrganizersOrPresenters`| Integer | 50 |✔️| The number of seats reserved for organizers or presenters.| - -### meetingExtensionDefinition.videoFilters - -This object indicates meeting supported video filters. - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`id`|String||✔️| The unique identifier for the video filter. This ID must be a GUID. | -|`name`| String | 128 characters |✔️| The name of the video filter. | -|`thumbnail`|String|2048 characters|✔️| The relative file path to the video filter's thumbnail. | - -## authorization - -**Optional** – Object - -> [!NOTE] -> `authorization` is only supported for the app manifest version 1.12 or later. - -Specify and consolidate authorization related information for the app. - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`permissions`|Object|||List of permissions that the app needs to function.| - -### authorization.permissions - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`resourceSpecific`| Array of objects|16 ||Permissions that guard data access on resource instance level.| - -### authorization.permissions.resourceSpecific - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`type`|String||✔️| The type of resource-specific consent (RSC) or resource-specific Office permission.
Options: `Application` and `Delegated`.| -|`name`|String|128 characters|✔️|The name of the RSC or Office permission. For more information, see [RSC application permissions](#rsc-application-permissions) and [RSC delegated permissions](#rsc-delegated-permissions).| - -#### RSC application permissions - -Application permissions allow the app to access data without a signed-in user. For information on application permissions, see [RSC permissions for Microsoft Graph and Microsoft BotSDK](../../graph-api/rsc/resource-specific-consent.md). - -#### RSC delegated permissions - -Delegated permissions allow the app to access data on behalf of the signed-in user. - -* **RSC delegated permissions for a team** - - |**Name**|**Description**| - |---|---| - |`ChannelMeetingParticipant.Read.Group`| Allows the app to read participant information, including name, role, id, joined, and left times, of channel meetings associated with this team, on behalf of the signed-in user.| - |`ChannelMeetingIncomingAudio.Detect.Group`| Allows the app to detect incoming audio in channel meetings associated with the team. | - | `ChannelMeetingActiveSpeaker.Read.Group`| Allows the app to read the participants who are sending audio into the channel meetings associated with the team.| - |`ChannelMeetingAudioVideo.Stream.Group`| Allows the app to stream audio-video content from channel meetings associated with the team. | - |`InAppPurchase.Allow.Group`| Allows the app to show marketplace offers to users in the team and complete their purchases within the app, on behalf of the signed-in user.| - |`ChannelMeetingStage.Write.Group`| Allows the app to show content on the meeting stage in channel meetings associated with the team, on behalf of the signed-in user.| - |`LiveShareSession.ReadWrite.Group`|Allows the app to create and synchronize Live Share sessions for the team and get access related information, such as name and role, about the team's roster and any associated meetings, on behalf of the signed-in user.| - |`MeetingParticipantReaction.Read.Group`| Allows the app to read reactions of participants in channel meetings associated with the team.| - -* **RSC delegated permissions for chats or meetings** - - |**Name**|**Description**| - |---|---| - |`InAppPurchase.Allow.Chat`|Allows the app to show marketplace offers to the users in the chat, and any associated meeting, and complete their purchases within the app, on behalf of the signed-in user.| - |`MeetingStage.Write.Chat`|Allows the app to show content on the meeting stage in meetings associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingParticipant.Read.Chat`|Allows the app to read participant information, including name, role, id, joined, and left times, of meeting associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingParticipant.ToggleIncomingAudio.Chat`|Allows the app to toggle incoming audio for participants in meetings associated with the chat, on behalf of the signed-in user.| - |`LiveShareSession.ReadWrite.Chat`|Allows the app to create and synchronize Live Share sessions for the chat and get access related information, such as name and role, about the chat's roster and any associated meetings, on behalf of the signed-in user.| - |`MeetingParticipantReaction.Read.Chat`| Allows the app to read reactions of participants in meetings associated with the chat.| - |`OnlineMeetingIncomingAudio.Detect.Chat`|Allows the app to detect changes in the status of incoming audio in meetings associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingActiveSpeaker.Read.Chat`| Allows the app to read participants who are sending audio into the meetings associated with the chat.| - |`OnlineMeetingAudioVideo.Stream.Chat`| Allows the app to stream audio-video content of meetings associated with the chat.| - -* **RSC delegated permissions for users** - - |**Name**|**Description**| - |---|---| - |`CameraStream.Read.User`|Allows the app to read user's camera stream.| - |`InAppPurchase.Allow.User`|Allows the app to show the user marketplace offers and complete the user's purchases within the app, on behalf of the signed-in user.| - |`OutgoingVideoStream.Write.User`| Allows the app to modify the user's outgoing video.| - |`MicrophoneStream.Read.User`| Allows the app to read user's microphone stream.| - |`MeetingParticipantReaction.Read.User`| Allows the app to read user's reactions while participating in a meeting.| - -* **Office delegated permissions for users** - -For the permissions and their meaning, see [Requesting permissions for API use in Office add-ins](/office/dev/add-ins/develop/requesting-permissions-for-api-use-in-content-and-task-pane-add-ins) and [Permission model for Outlook add-ins](/office/dev/add-ins/outlook/privacy-and-security#permissions-model). - -## extensions - -**Optional** – Array - -The `extensions` property specifies Office Add-ins within an app manifest and simplifies the distribution and acquisition across the Microsoft 365 ecosystem. Each app supports only one extension. - -| Name | Type | Maximum size | Required | Description | -|---|---|---|---|---| -|`requirements`| Object | | | Specifies the set of client or host requirements for the extension. | -|`runtimes`| Array | | | Configures the set of runtimes and actions that can be used by each extension point. For more information, see [runtimes in Office Add-ins](/office/dev/add-ins/testing/runtimes). | -|`contentRuntimes`| Array | 1 | | Configures a page of content that is embedded in an Excel or PowerPoint document.| -|`ribbons`| Array | | | Defines the ribbons extension point. | -|`autoRunEvents`| Array | | | Defines the event-based activation extension point. | -|`alternates`| Array | 10 | | Specifies the relationship to alternate existing Microsoft 365 solutions. It's used to hide or prioritize add-ins from the same publisher with overlapping functionality. | -|`audienceClaimUrl`| String | 2048 characters | | Specifies the URL for your extension and is used to validate Exchange user identity tokens. For more information, see [inside the Exchange identity token](/office/dev/add-ins/outlook/inside-the-identity-token)| -|`appDeeplinks`| Array | | | Do not use. For Microsoft internal use only. | -|`getStartedMessages`| Array | 3 | | Provides information about an Office Add-in that appears in the callout that opens in the Office application (such as Excel, Outlook, PowerPoint, or Word) when an Office Add-in is installed. | -|`contextMenus`| Array | | | Specifies the context menus for your extension. A context menu is a shortcut menu that appears when you right-click (or select and hold) within an open Office document. | -|`keyboardShortcuts`| Array | 10 | | Defines custom keyboard shortcuts or key combinations to run specific actions. For more information, see [Add custom keyboard shortcuts to your Office Add-ins](/office/dev/add-ins/design/keyboard-shortcuts). | - -For more information, see [Office Add-ins manifest for Microsoft 365](/office/dev/add-ins/develop/unified-manifest-overview). - -### extensions.requirements - -The `extensions.requirements` object specifies the scopes, form factors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the add-in to be installed. Requirements are also supported on the `ribbon`, `runtime`, `alternates`, `autoRunEvents`, `contextMenus`, `contentRuntimes`, and `getStartedMessages` child properties to selectively filter out some features of the add-in. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest). - -| Name | Type | Maximum size | Required | Description | -|---|---|---|---|---| -|`capabilities`| Array | 100 | | Identifies the requirement sets.| -|`capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.runtimes - -**Optional** – Array - -The `extensions.runtimes` array configures the sets of runtimes and actions that each extension point can use. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | 64 characters | ✔️ | Specifies the ID for runtime. Must be unique across all `runtimes` and `contentRuntimes` objects. | -|`type`| String enum | | ✔️ | Specifies the type of runtime. The supported enum value for [browser-based runtime](/office/dev/add-ins/testing/runtimes#browser-runtime) is `general`. | -|`code`| Object | | ✔️ | Specifies the location of code for the runtime. Based on `runtime.type`, add-ins can use either a JavaScript file or an HTML page with an embedded `script` tag that specifies the URL of a JavaScript file. Both URLs are necessary in situations where the `runtime.type` is uncertain. | -|`code.page`| String | 2048 characters | ✔️ | Specifies the URL of the web page that contains an embedded `script` tag, which specifies the URL of a JavaScript file (to be loaded in a [browser-based runtime](/office/dev/add-ins/testing/runtimes#browser-runtime)). | -|`code.script`| String | 2048 characters | | Specifies the URL of the JavaScript file to be loaded in [JavaScript-only runtime](/office/dev/add-ins/testing/runtimes#javascript-only-runtime). | -|`lifetime`| String enum | | | Specifies the lifetime of the runtime. Runtimes with a `short` lifetime don’t preserve state across executions while runtimes with a `long` lifetime do. For more information, see [Runtimes in Office Add-ins](/office/dev/add-ins/testing/runtimes).
Default value: `short`| -|`actions`| Array | 20 | | Specifies the set of actions supported by the runtime. An action is either running a JavaScript function or opening a view such as a task pane.| -|`actions.id`| String | 64 characters | ✔️ | Specifies the ID for the action, which is passed to the code file. | -|`actions.type`| String | | ✔️ | Specifies the type of action. The `executeFunction` type runs a JavaScript function without waiting for it to finish and the `openPage` type opens a page in a given view. | -|`actions.displayName`| String | 64 characters | | Describes the action of a [custom keyboard shortcut](/office/dev/add-ins/design/keyboard-shortcuts). This description appears in a dialog when a user experiences a shortcut conflict between multiple add-ins or with Microsoft 365. If a keyboard shortcut is defined for a specific `actions` object, then the `actions.displayName` property is required. Office appends the add-in name in parentheses after the description. For instance, **Set bold (Contoso Add-in)**. For more information, see [Avoid key combinations in use by other add-ins](/office/dev/add-ins/design/keyboard-shortcuts#avoid-key-combinations-in-use-by-other-add-ins). | -|`actions.pinnable`| Boolean | | | Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection.
Default value: `false`| -|`actions.view`| String | 64 characters | | Specifies the view where the page must be opened. It's used only when `actions.type` is `openPage`. | -|`actions.multiselect`| Boolean | | | Specifies whether the end user can select multiple items, such as multiple email messages, and apply the action to all of them.
Default value: `false`| -|`actions.supportsNoItemContext`| Boolean | | | Allows task pane add-ins to activate without the Reading Pane enabled or a message selected.
Default value: `false`| -|`customFunctions`| Object | | | Custom functions enable you to add new functions to Excel by defining those functions in JavaScript as part of an add-in. Users within Excel can access custom functions as they would access any native function in Excel, such as **SUM**. | -|`customFunctions.functions`| Array | 20,000 | ✔️ | An array of custom function objects that define custom functions metadata. | -|`customFunctions.functions.id`| String | 64 characters | ✔️ | Specifies a unique ID for the function. After the ID is set, it shouldn't be changed. The ID can contain alphanumeric characters and periods. Ensure it starts with a letter and consists of a minimum of three characters. As a best practice, use uppercase letters. | -|`customFunctions.functions.name`| String | 64 characters | ✔️ | The name of the function that end users see in Excel. In Excel, this function name is prefixed by the custom functions namespace that is specified in the manifest file. It's unique within the scope of the file and can only contain alphanumeric characters. It must start with a letter and have a minimum of three characters. It shouldn't be the same as any cells between **A1** and **XFD1048576**, any cells between **R1C1** and **R1048576C16384**, or any Excel 4.0 macro function (such as **RUN** or **ECHO**). Use uppercase letters as a best practice. | -|`customFunctions.functions.description`| String | 128 characters | | Specifies the description of the function that end users see in Excel. | -|`customFunctions.functions.helpUrl`| String | 2048 characters | | Specifies a URL that provides information about the function. It's displayed in a task pane. For example, `http://contoso.com/help/convertcelsiustofahrenheit.html.` | -|`customFunctions.functions.parameters`| Array | 128 | ✔️ | Defines the input parameters for the function. | -|`customFunctions.functions.parameters.name`| String | 64 characters | ✔️ | Specifies the name of the parameter. This name is displayed in Excel's IntelliSense. | -|`customFunctions.functions.parameters.description`| String | 128 characters | | Specifies a description of the parameter that is displayed in Excel's IntelliSense. | -|`customFunctions.functions.parameters.type`| String enum | | | Specifies the data type of the parameter. Supported values: `boolean`, `number`, `string`, or `any`. Default value: `any`. | -|`customFunctions.functions.parameters.cellValueType`| String enum | | | A subfield of the `type` property. Specifies the Excel data types accepted by the custom function. Supported values: `cellvalue`, `booleancellvalue`, `doublecellvalue`, `entitycellvalue`, `errorcellvalue`, `formattednumbercellvalue`, `linkedentitycellvalue`, `localimagecellvalue`, `stringcellvalue`, or `webimagecellvalue`. The `customFunctions.functions.parameters.type` value must be `any` if `cellValueType` is used. | -|`customFunctions.functions.parameters.dimensionality`| String enum | | | Specifies the dimension of the parameter. Supported values: `scalar` (a nonarray value) or `matrix` (a 2-dimensional array). | -|`customFunctions.functions.parameters.optional`| Boolean | | | Indicates whether a parameter is optional. Default value: `false`. If set to `true`, the parameter is optional. A required parameter can't follow an optional parameter. | -|`customFunctions.functions.parameters.repeating`| Boolean | | | Indicates whether the parameters are repeating. Default value: `false`. If set to `true`, parameters populate from a specified array. All repeating parameters are considered optional parameters by definition. If this parameter is `true`, `customFunctions.functions.parameters.optional` should be empty or `true`. Only the last parameter can be `repeating`. | -|`customFunctions.functions.result`| Object | | ✔️ | Defines the type of information that is returned by the function. | -|`customFunctions.functions.result.dimensionality`| String enum | | | Specifies the dimension of the result. Supported values: `scalar` (a nonarray value) or `matrix` (a 2-dimensional array).| -|`customFunctions.functions.stream`| Boolean | | | Indicates whether the function is streaming. Default value:`false`. If set to `true`, the function can output repeatedly to the cell even when invoked only once. This option is useful for rapidly changing data sources, such as a stock price. The function should have no return statement. Instead, the result value is passed as the argument of the `StreamingInvocation.setResult` callback function. | -|`customFunctions.functions.volatile`| Boolean | | | Indicates whether the function is volatile. Default value: `false`. If set to `true`, the function recalculates each time Excel recalculates, instead of only when the formula's dependent values have changed. A function can't use both the `stream` and `volatile` properties. If the `stream` and `volatile` properties are both set to `true`, the `volatile` property is ignored.| -|`customFunctions.functions.cancelable`| Boolean | | | Indicates whether the function is cancelable. Default value: `false`. If set to `true`, Excel calls the `CancelableInvocation` handler whenever the user takes an action that has the effect of canceling the function. For example, manually triggering recalculation or editing a cell that is referenced by the function. Cancelable functions are typically only used for asynchronous functions that return a single result and need to handle the cancellation of a request for data. A function can't use both the `stream` and `cancelable` properties.| -|`customFunctions.functions.requiresAddress`| Boolean | | | Indicates whether the address of the cell that invoked the function required. Default value: `false`. If set to `true`, your custom function can access the address of the cell that invoked it. The `address` property of the invocation parameter contains the address of the cell that invoked your custom function. A function can't use both the `stream` and `requiresAddress` properties. | -|`customFunctions.functions.requiresParameterAddress`| Boolean | | | Indicates whether the addresses of the input parameters are required. Default value: `false`. If set to `true`, your custom function can access the addresses of the function's input parameters. This property must be used in combination with the `dimensionality` property of the `result` object, and `dimensionality` must be set to `matrix`. | -|`customFunctions.namespace`| Object | | ✔️ | Defines the namespace for your custom functions. A namespace prepends itself to your custom functions to help customers identify your functions as part of your add-in. | -|`customFunctions.namespace.id`| String | 32 characters | ✔️ | Specifies a unique ID for the namespace. The first character must be a letter. The subsequent characters must be alphanumeric. Use uppercase letters as a best practice. This value can't be localized. | -|`customFunctions.namespace.name`| String | 32 characters | ✔️ | Specifies a name for the namespace. The first character must be a letter. The subsequent characters must be alphanumeric. Use uppercase letters as a best practice. This value can be localized. | -|`customFunctions.allowCustomDataForDataTypeAny`| Boolean | | | Indicates whether the custom function can accept Excel data types as parameters and return values. Default value: `false`| -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript Library requirement sets that must be supported on the Office client in order for the runtime to be included in the add-in. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array | | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -To use `extensions.runtimes`, see [create add-in commands](/office/dev/add-ins/develop/create-addin-commands-unified-manifest), [configure the runtime for a task pane](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-runtime-for-the-task-pane-command), and [configure the runtime for the function command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-runtime-for-the-function-command). - -### extensions.contentRuntimes - -The `extensions.contentRuntimes` array configures pages of content that are embedded in an Excel or PowerPoint document. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | 64 characters | ✔️ | Specifies the ID for runtime. Must be unique across all `runtimes` and `contentRuntimes` objects. | -|`code`| Object | | ✔️ | Specifies the location of content for the runtime. | -|`code.page`| String | 2048 characters| ✔️ | The full URL of the page that contains the content that is embedded in the document. | -|`code.script`| String | | | Not applicable under `extensions.contentRuntimes`.| -|`requestedWidth`| Number | | | The desired initial width in pixels of the embedded content page. This must be between 32 and 1000. If this property isn't specified, the Office application determines the width.| -|`requestedHeight`| Number | | | The desired initial height in pixels of the embedded content page. This must be between 32 and 1000. If this property isn't specified, the Office application determines the height.| -|`disableSnapshot` | Boolean | | | Specifies whether a snapshot image of your content add-in is saved with the Office application document. Set to `true` to prevent a snapshot from being saved. Default value: `false`| -|`requirements`| Object | | | Not applicable under `extensions.contentRuntimes`. | - -### extensions.ribbons - -**Optional** – Array - -The `extensions.ribbons` property provides the ability to add [add-in commands](/office/dev/add-ins/design/add-in-commands) (buttons and menu items) to the Microsoft 365 application's ribbon. The ribbon definition is selected from the array based on the requirements and first-of order. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`contexts`| Array | 8 | | Specifies the Microsoft 365 application window in which the ribbon customization is available to the user. Each item in the array is a member of a string array.
Supported values: `mailRead`, `mailCompose`, `meetingDetailsOrganizer`, `meetingDetailsAttendee`, `onlineMeetingDetailsOrganizer`, `logEventMeetingDetailsAttendee`, `spamReportingOverride`, `default`| -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the ribbon customization to appear. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array | | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| -|`tabs`| Array | 20 |✔️| Configures the custom tabs on the Microsoft 365 application ribbon. | -|`tabs.id`| String | 64 characters | | Specifies the ID for the tab within the app.| -|`tabs.builtInTabId`| String | 64 characters | | Specifies the ID of a built-in Office ribbon tab. For more information on possible values, see [find the IDs of built-in Office ribbon tabs](/office/dev/add-ins/develop/built-in-ui-ids). The only other child properties of a tab object that can be included with this property are `groups` and `customMobileRibbonGroups`. | -|`tabs.label`| String | 64 characters | | Specifies the text displayed for the tab. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.position`| Object | | | Configures the position of the custom tab relative to other tabs on the ribbon.| -|`tabs.position.builtInTabId`| String | 64 characters | ✔️ | Specifies the ID of the built-in tab that the custom tab should be positioned next to. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups).| -|`tabs.position.align`| String enum | | ✔️ | Defines the alignment of custom tab relative to the specified built-in tab.
Supported values: `after`, `before`| -|`tabs.groups`| Array | 10 | | Defines groups of controls on a ribbon tab on a non-mobile device. For mobile devices, see `tabs.customMobileRibbonGroups` below.| -|`tabs.groups.id`| String |64 characters | | Specifies the ID for the tab group within the app. It must be different from any built-in group ID in the Microsoft 365 application and any other custom group.| -|`tabs.groups.label`| String | 64 characters | | Specifies the text displayed for the group. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.groups.overriddenByRibbonApi`| Boolean | | | Specifies whether the group is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))). This API installs custom contextual tabs on the ribbon.
Default value: `false`| -|`tabs.groups.icons`| Array | 3 | | Specifies the icons displayed for the group. | -|`tabs.groups.icons.size`| Number | |✔️| Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`tabs.groups.icons.url`| String | 2048 characters | ✔️ | Specifies the absolute URL of the icon.
Default value: The string must start with `https://`| -|`tabs.groups.controls`| Array | | | Configures the buttons and menus in the group. | -|`tabs.groups.controls.id`| String | 64 characters| ✔️ | Specifies the ID for the control within the app. It must be different from any built-in control ID in the Microsoft 365 application and any other custom control. | -|`tabs.groups.controls.items`| Array | | | Configures the items for a menu control. | -|`tabs.groups.controls.items.id`| String | | ✔️ | Specifies the ID for a menu item. | -|`tabs.groups.controls.items.type`| String enum | | ✔️ | Defines the menu item's control type.
Supported values: `button`| -|`tabs.groups.controls.items.label`| String | 64 characters| ✔️ | Specifies the text displayed for the menu item. | -|`tabs.groups.controls.items.icons`| Array | | | Configures the icons for the menu item.| -|`tabs.groups.controls.items.icons.size`| Number | |✔️| Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`tabs.groups.controls.items.icons.url`| URL| | ✔️ | Specifies the absolute URL of the icon.
Default value: The string must start with `https://`| -|`tabs.groups.controls.items.supertip`| | |✔️| Configures a supertip for the menu item. A supertip is a UI feature that displays a brief box of help information about a control when the cursor hovers over it. The box may contain multiple lines of text. | -|`tabs.groups.controls.items.supertip.title`| String | 64 characters | ✔️ | Specifies the title text of the supertip.| -|`tabs.groups.controls.items.supertip.description`| String | 128 characters | ✔️ | Specifies the description of the supertip.| -|`tabs.groups.controls.items.actionId`| String | 64 characters | ✔️ | Specifies the ID of the action that is taken when a user selects the control or menu item. The `actionId` must match with some `runtimes.actions.id` property value. | -|`tabs.groups.controls.items.enabled`| Boolean | | | Indicates whether the menu item is initially enabled.
Default value: `true`| -|`tabs.groups.controls.items.overriddenByRibbonApi`| Boolean | | | Specifies whether the menu item is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))). This API installs custom contextual tabs on the ribbon.
Default value: `false`| -|`tabs.groups.controls.type`| String | | ✔️ | Defines the control type.
Supported values: `button`, `menu`| -|`tabs.groups.controls.builtInControlId`| String | 64 characters | | Specifies the ID of an existing Microsoft 365 control. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups). This property can't be combined with any other child properties of the control object because built-in controls are not customizable by an add-in.| -|`tabs.groups.controls.label`| String | 64 characters | ✔️ | Specifies the text displayed for the control. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.groups.controls.icons`| Array | | ✔️ | Defines the icons for the control. There must be at least three child objects; one each with `size` properties of `16`, `32`, and `80` pixels. | -|`tabs.groups.controls.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`| -|`tabs.groups.controls.icons.url`| URL | | | Specifies the absolute URL to the icon file.
Default value: The string must start with `https://`| -|`tabs.groups.controls.supertip`| Object | | ✔️ | Configures a supertip for the control. A supertip is a UI feature that displays a brief box of help information about a control when the cursor hovers over it. The box may contain multiple lines of text. | -|`tabs.groups.controls.supertip.title`| String | 64 characters | ✔️ |Specifies the title text of the supertip.| -|`tabs.groups.controls.supertip.description`| String | 128 characters | ✔️ | Specifies the description of the supertip.| -|`tabs.groups.controls.actionId`| String | 64 characters | | Required if the control type is `button`. Don't use if the control type is `menu`. Specifies the ID of the action that is taken when a user selects the control. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object.| -|`tabs.groups.controls.enabled`| Boolean | | | Indicates whether the control is initially enabled.
Default value: `true`| -|`tabs.groups.controls.overriddenByRibbonApi`| Boolean | | | Specifies whether the control is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))). This API installs custom contextual tabs on the ribbon.
Default value: `false`| -|`tabs.groups.builtInGroupId`| String | 64 characters | | Specifies the ID of a built-in group. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups). This property can't be combined with any other child properties of the group object because built-in groups are not customizable by an add-in.| -|`tabs.customMobileRibbonGroups`| Array | 10 | | Defines groups of controls on the default tab of the ribbon on a mobile device. This array property can only be present on tab objects that have a `tabs.builtInTabId` property that is set to `DefaultTab`. For non-mobile devices, see `tabs.groups` above.| -|`tabs.customMobileRibbonGroups.id` | String | 250 characters | ✔️ | Specifies the ID of the group. It must be different from any built-in group ID in the Microsoft 365 application and any other custom group.| -|`tabs.customMobileRibbonGroups.label` | String | 32 characters | ✔️ | Specifies the label on the group. | -|`tabs.customMobileRibbonGroups.controls` | Array | 20 | ✔️ | Defines the controls in the group. Only mobile buttons are supported.| -|`tabs.customMobileRibbonGroups.controls.id` | String | 250 characters | ✔️ | Specifies the ID of the control such as `msgReadFunctionButton`.| -|`tabs.customMobileRibbonGroups.controls.type` | String enum | | ✔️ | Specifies the type of control. `MobileButton` is only supported.| -|`tabs.customMobileRibbonGroups.controls.label` | String | 32 characters | ✔️ | Specifies the label on the control.| -|`tabs.customMobileRibbonGroups.controls.actionId` | String | 64 characters | ✔️ | Specifies the ID of the action that is taken when a user selects the control. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object.| -|`tabs.customMobileRibbonGroups.controls.icons` | Array | 9 | ✔️ | Specifies the icons that will appear on the control depending on the dimensions and DPI of the mobile device screen. There must be exactly 9 icons.| -|`tabs.customMobileRibbonGroups.controls.icons.size` | Number enum | | ✔️ | Size in pixels of the icon. The possible sizes are 25, 32, and 48. There must be exactly one of each size for each possible value of the `icons.scale` property. | -|`tabs.customMobileRibbonGroups.controls.icons.url` | String | 2048 characters | ✔️ | The full, absolute URL of the icon's image file.
Default value: The string must start with `https://` | -|`tabs.customMobileRibbonGroups.controls.icons.scale` | Number enum | | ✔️ | Specifies the UIScreen.scale property for iOS devices. The possible values are 1, 2, and 3. There must be exactly one of each value for each possible value of the icons's `size` property. | -|`fixedControls`| Array | 1 | | Configures the button of an [integrated spam-reporting](/office/dev/add-ins/outlook/spam-reporting) add-in in Outlook. Must configure if `spamReportingOverride` is specified in the `extensions.ribbons.contexts` array. | -|`fixedControls.id`| String | 64 characters | ✔️ | Specifies the unique ID of the button of a spam-reporting add-in. | -|`fixedControls.type`| String | | ✔️ | Defines the control type of a spam-reporting add-in.
Supported value: `button` | -|`fixedControls.label`| String | 64 characters | ✔️ | Specifies the text that appears on button of a spam-reporting add-in. | -|`fixedControls.enabled`| Boolean | | ✔️ | This property must be specified in the `fixedControls` object, but it doesn't affect the functionality of the spam-reporting add-in.
Default value: `True` | -|`fixedControls.icons`| Array | 3 | ✔️ | Defines the icons for the button of a spam-reporting add-in. There must be at least three child objects, each with icon sizes of `16`, `32`, and `80` pixels respectively.| -|`fixedControls.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`, `20`, `24`, `32`, `40`, `48`, `64`, and `80`.
Required image sizes: `16`, `32`, `80` | -|`fixedControls.icons.url`| String | 2048 characters | ✔️ | Specifies the absolute URL to the icon.
Default value: The string must start with `https://` | -|`fixedControls.supertip`| Object | | ✔️ | Configures a supertip for the button of a spam-reporting add-in. | -|`fixedControls.supertip.title`| String | 64 characters | ✔️ | Specifies the title text of the supertip. | -|`fixedControls.supertip.description`| String | 250 characters | ✔️ | Specifies the description of the supertip. | -|`fixedControls.actionId`| String | 64 characters | ✔️ | Specifies the ID of the action taken when a user selects the button of a spam-reporting add-in. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object. | -|`spamPreProcessingDialog`| Object | | | Configures the preprocessing dialog of an [integrated spam-reporting](/office/dev/add-ins/outlook/spam-reporting) add-in in Outlook. | -|`spamPreProcessingDialog.title`| String | 128 characters | ✔️ | Specifies the custom title of the preprocessing dialog of a spam-reporting add-in. | -|`spamPreProcessingDialog.description`| String | 250 characters | ✔️ | Specifies the custom text that appears in the preprocessing dialog of a spam-reporting add-in. | -|`spamPreProcessingDialog.spamReportingOptions`| Object | | | Specifies up to five options that a user can select from the preprocessing dialog to provide a reason for reporting a message. | -|`spamPreProcessingDialog.spamReportingOptions.title`| String | 128 characters | ✔️ | Specifies the custom text or title to describe the reporting options provided in the preprocessing dialog. | -|`spamPreProcessingDialog.spamReportingOptions.options`| Array of strings | 5 options

128 characters per option | ✔️ | Specifies a custom option with a checkbox that a user can select from the preprocessing dialog to provide a reason for reporting a message. At least one option must be specified. A maximum of five options can be included.| -|`spamPreProcessingDialog.spamFreeTextSectionTitle`| String | 128 characters | | Adds a text box to the preprocessing dialog for users to provide additional information on the message they're reporting. The string provided in this property appears above the text box. | -|`spamPreProcessingDialog.spamMoreInfo`| Object | | | Configures a link to provide informational resources to a user. In the preprocessing dialog, the link appears below the text provided in `spamPreProcessingDialog.description`.| -|`spamPreProcessingDialog.spamMoreInfo.text`| String | 128 characters | ✔️ | Specifies the link text for a URL that directs users to informational resources from the preprocessing dialog. | -|`spamPreProcessingDialog.spamMoreInfo.url`| String | 2048 characters | ✔️ | Specifies the HTTPS URL of a site that contains informational resources. | - -To use `extensions.ribbons`, see [create add-in commands](/office/dev/add-ins/develop/create-addin-commands-unified-manifest), [configure the UI for the task pane command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-ui-for-the-task-pane-command), and [configure the UI for the function command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-ui-for-the-function-command). - -### extensions.autoRunEvents - -**Optional** – Array - -The `extensions.autoRunEvents` property defines event-based activation extension points. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`events`| Array |20 | ✔️ | Configures the event that cause actions in an Outlook add-in to run automatically. For example, see [use smart alerts and the `OnMessageSend` and `OnAppointmentSend` events in your Outlook add-ins](/office/dev/add-ins/outlook/smart-alerts-onmessagesend-walkthrough?tabs=jsonmanifest).| -|`events.type`| String | 64 characters | | Specifies the type of event. For supported types, see [supported events](/office/dev/add-ins/outlook/autolaunch?tabs=xmlmanifest#supported-events).| -|`events.actionId`| String | 64 characters | | Identifies the action that is taken when the event fires. The `actionId` must match with `runtime.actions.id`. | -|`events.options`| Object | | | Configures how Outlook responds to the event.| -|`events.options.sendMode`| String | | ✔️ | Specifies the actions to take during a mail send action.
Supported values: `promptUser`, `softBlock`, `block`. For more information, see [available send mode options](/office/dev/add-ins/outlook/smart-alerts-onmessagesend-walkthrough?tabs=jsonmanifest#available-send-mode-options).| -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the event handling code to run. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array | | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.alternates - -The `extensions.alternates` property is used to hide or prioritize specific in-market add-ins when you've published multiple add-ins with overlapping functionality. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`prefer`| Object | | | Specifies the backward compatibility with an equivalent COM add-in, XLL add-in, or both.| -|`prefer.comAddin`| Object | | | Specifies a COM add-in that must be used in place of the Microsoft 365 Web Add-in for Windows.| -|`prefer.comAddin.progId`| String | 64 characters | ✔️ | Identifies the application type in which the extension can run.| -|`hide`| Object | | | Configures how to hide another add-in that you've published whenever the add-in is installed, so users don't see both in the Microsoft 365 UI. For example, use this property when you've previously published an add-in that uses the old XML app manifest and you're replacing it with a version that uses the new JSON app manifest. | -|`hide.storeOfficeAddin`| Object | | | Specifies a Microsoft 365 Add-in available in Microsoft AppSource. | -|`hide.storeOfficeAddin.officeAddinId`| String | 64 characters | ✔️ | Specifies the ID of the in-market add-in to hide. The GUID is taken from the app manifest `id` property if the in-market add-in uses the JSON app manifest. The GUID is taken from the `` element if the in-market add-in uses the XML app manifest. | -|`hide.storeOfficeAddin.assetId`| String | 64 characters | ✔️ | Specifies the AppSource asset ID of the in-market add-in to hide.| -|`hide.customOfficeAddin`| Object | | | Configures how to hide an in-market add-in that isn't distributed through AppSource.| -|`hide.customOfficeAddin.officeAddinId`|String | 64 characters | ✔️ | Specifies the ID of the in-market add-in to hide. The GUID is taken from the app manifest `id` property if the in-market add-in uses the JSON app manifest. The GUID is taken from the `` element if the in-market add-in uses the XML app manifest. | -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the `hide`, `prefer`, or `alternateIcons` properties to take effect. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array | | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| -|`alternateIcons`| Object | | | Specifies the main icons that are used to represent the add-in on older versions of Office. This property is **required** if the Office Add-in is to be installable in Office on Mac, perpetual Office licenses, and Microsoft 365 subscription versions of Office on Windows earlier than 2304 (Build 16320.00000).| -|`alternateIcons.icon`| Object | | ✔️ | Specifies properties of the image file used to represent the add-in. | -|`alternateIcons.icon.size`| Number enum | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`alternateIcons.icon.url`| String | 2048 characters | ✔️ | Specifies the full, absolute URL of the image file that is used to represent the add-in. Icon image must be 64 x 64 pixels and use one of the following file formats: GIF, JPG, PNG, EXIF, BMP, TIFF.| -|`alternateIcons.highResolutionIcon`| Object | | ✔️ | Specifies properties of the image file used to represent the add-in on high DPI screens. | -|`alternateIcons.highResolutionIcon.size`| Number enum | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`alternateIcons.highResolutionIcon.url`| String | 2048 characters | ✔️ | Specifies the full, absolute URL of the image file that is used to represent the add-in on high DPI screens. Icon image must be 128 x 128 pixels and use one of the following file formats: GIF, JPG, PNG, EXIF, BMP, TIFF.| - -### extensions.getStartedMessages - -The `extensions.getStartedMessages` array provides information about an Office Add-in that appears in the callout that opens in Office when an Office Add-in is installed. There can be a maximum of three objects in the array. If there is more than one, use the `extensions.getStartedMessages.requirements` property to ensure that only one of these objects is used in any given Office client. If `extensions.getStartedMessages` is not specified, Office uses the values from the `name.short` and `description.short` properties instead. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`title`|String| 125 characters | ✔️ | The title used for the heading of the callout. | -|`description`|String| 250 characters | ✔️ | A description of the add-in that provides the body content for the callout.| -|`learnMoreUrl`|String| 2048 characters | ✔️ | A URL to a page that explains the add-in in detail.| -|`requirements`| Object | | | Specifies the scopes, form factors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the get started message to be available. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array | | | Identifies the requirement sets. | -|`requirements.capabilities.name`| String | 128 characters | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run.
Supported values: `workbook` (Excel), `presentation` (PowerPoint), `document` (Word) | -|`requirements.formFactors`| Array of enums | 2 | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.contextMenus - -A context menu is a shortcut menu that appears when you right-click (or select and hold) in an open Office document. This feature is supported for Word, Excel, and PowerPoint. - -|Name | Type | Maximum size | Required | Description | -|---|---|---|---|---| -|`menus`| Array | | ✔️ | Configures the context menus. | -|`menus.entryPoint`| String enum | | ✔️ | Defines the method for opening the context menu. Use `text` if the context menu should open when a user right-clicks (or selects and holds) on the selected text. Use `cell` if the context menu should open when the user right-clicks (or selects and holds) on a cell in an Excel spreadsheet. | -|`menus.controls`| Array | | ✔️ | Configures the menu buttons. | -|`menus.controls.id`| String | 64 characters | ✔️ | Specifies the ID for the menu control within the app. It must be different from any built-in control ID in the Microsoft 365 application and any other custom control ID defined in the manifest.| -|`menus.controls.items`| Array | | | Configures the items for the menu control. | -|`menus.controls.items.id`| String | | ✔️ | Specifies the ID for a menu item. | -|`menus.controls.items.type`| String enum | | ✔️ | Defines the item's control type.
Supported value: `button`| -|`menus.controls.items.label`| String | 64 characters | ✔️ | Specifies the text displayed for the item. | -|`menus.controls.items.icons`| Array | | | Configures the icons for the custom item.| -|`menus.controls.items.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`, `20`, `24`, `32`, `40`, `48`, `64`, `80`.
Required image sizes: `16`, `32`, `80`| -|`menus.controls.items.icons.url`| String | 2048 characters | ✔️ | Specifies the absolute URL of the icon.| -|`menus.controls.items.supertip`| | | ✔️ | Configures a supertip for the custom item. A supertip is a UI feature that displays a brief box of help information about a control when the cursor hovers over it. The box may contain multiple lines of text. | -|`menus.controls.items.supertip.title`| String | 64 characters | ✔️ | Specifies the title text of the supertip.| -|`menus.controls.items.supertip.description`| String | 250 characters | ✔️ | Specifies the description of the supertip.| -|`menus.controls.items.actionId`| String | 64 characters | ✔️ | Specifies the ID of the action that is taken when a user selects the menu item. The `actionId` must match with `runtime.actions.id`. | -|`menus.controls.items.enabled`| Boolean | | | Indicates whether the menu item is initially enabled.
Default value: `true`| -|`menus.controls.items.overriddenByRibbonApi`| Boolean | | | Specifies whether the menu item is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))) that installs custom contextual tabs on the ribbon.
Default value: `false`| -|`menus.controls.type`| String | | ✔️ | Defines the control type.
Supported value: `menu`| -|`menus.controls.builtInControlId`| String | 64 characters | ✔️ | Specifies the ID of an existing Microsoft 365 control. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups). If this property is present, you cannot use any other `menus.*` child properties may be used because a built-in Office control is not customizable by an add-in.| -|`menus.controls.label`| String | 64 characters | ✔️ | Specifies the text displayed for the menu control.| -|`menus.controls.icons`| Array | | ✔️ | Defines the icons for the menu control. There must be at least three child objects; one each with `size` of `16`, `32`, and `80` pixels. | -|`menus.controls.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`, `20`, `24`, `32`, `40`, `48`, `64`, `80`.
Required image sizes: `16`, `32`, `80`| -|`menus.controls.icons.url`| String | 2048 characters | | Specifies the absolute URL to the icon.| -|`menus.controls.supertip`| Object | | ✔️ | Configures a supertip for the menu control. | -|`menus.controls.supertip.title`| String | 64 characters | ✔️ |Specifies the title text of the supertip.| -|`menus.controls.supertip.description`| String | 128 characters | ✔️ | Specifies the description of the supertip.| -|`menus.controls.actionId`| String | 64 characters | | Don't use `actionId` for `menus.controls` as the action of the menu control, to display the list of menu items, is always the same. | -|`menus.controls.enabled`| Boolean | | | Indicates whether the control is initially enabled.
Default value: `true`| -|`menus.controls.overriddenByRibbonApi`| Boolean | | | Specifies whether the menu is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))) that installs custom contextual tabs on the ribbon.
Default value: `false`| -|`requirements`| Object | | | Specifies the scopes, form factors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the context menus to appear. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest). | -|`requirements.capabilities`| Array | | | Identifies the requirement sets.| -|`requirements.capabilities.name`| String | 128 characters | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run.
Supported values: `workbook` (Excel), `presentation` (PowerPoint), `document` (Word)| -|`requirements.formFactors`| Array of enums | 2 | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.keyboardShortcuts - -The `extensions.keyboardShortcuts` property defines custom keyboard shortcuts or key combinations to run specific actions. For more information, see [Add custom keyboard shortcuts to your Office Add-ins](/office/dev/add-ins/design/keyboard-shortcuts). - -| Name | Type | Maximum size | Required | Description | -|---|---|---|---|---| -|`requirements`| Object | | | Specifies the scopes, form factors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the custom keyboard shortcuts to take effect. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest). | -|`requirements.capabilities`| Array | | | Identifies the requirement sets. | -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run.
Supported value: `workbook` (Excel) | -|`requirements.formFactors`| Array of enums | 2 | | Identifies the form factors that support the add-in.
Supported value: `desktop` | -|`shortcuts`| Array | 20,000 | ✔️ | Specifies the custom keyboard shortcuts and the action each one performs. | -|`shortcuts.key`| Object | | ✔️ | Specifies custom key combinations for a single action across supported platforms. | -|`shortcuts.key.default`| String | 32 | ✔️ | Specifies the default key combination that can be used on all supported platforms if there isn't a specific combination configured for a particular platform. | -|`shortcuts.key.mac`| String | 32 | | Specifies the key combination of an add-in in Office on Mac. | -|`shortcuts.key.web`| String | 32 | | Specifies the key combination of an add-in in Office on the web. | -|`shortcuts.key.windows`| String | 32 | | Specifies the key combination of an add-in in Office on Windows. | -|`shortcuts.actionId`| String | 64 | ✔️ | Identifies the action that is performed when a keyboard shortcut is used. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object. | - -> [!NOTE] -> Keyboard shortcuts defined for an add-in must follow the [guidelines for custom key combinations](/office/dev/add-ins/design/keyboard-shortcuts#guidelines-for-custom-key-combinations). - -## actions - -> [!NOTE] -> -> * Actions for Microsoft 365 is available in [public developer preview](../dev-preview/developer-preview-intro.md). -> -> * Actions is supported for Microsoft 365 (Office) app for web and desktop. - -The object is an array of action objects. This block is required only for solutions that provides Actions. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | 64 characters | ✔️ | An identifier string in the default locale that is used to catalog actions. Must be unique across all actions for this app. For example, `openDocInContoso`. | -|`displayName`| String | 64 characters | ✔️ | A display name for the action. Capitalize first letter and brand name. For example, Add to suppliers, Open in Contoso, and Request signatures.| -|`description`| String | | ✔️ | Specifies the description of the actions. | -|`intent`| String enum | | ✔️ | Specifies the type of intent. The supported enum values are `open`, `addTo`, and `custom`. | -|`handlers`| Array of objects | | ✔️ | An array of handler objects defines how Actions are managed. In the current public preview, add a single handler for each action. | - -### actions.handlers - -Defines the handlers of the Action. The handlers are an array of handler objects. Each Action must have at least one handler. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`supportedObjects`| Object | | | Objects defining what objects can trigger this Action. | -|`type`| String enum | | ✔️ | Specifies the handler type of Actions. The supported enum value is `openPage`. | -|`pageInfo`| Object | | | Required if the handler type is `openPage`. Object containing metadata of the page to open. | - -### actions.handlers.supportedObjects - -The supported object types that can trigger this Action. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`file`| Object | | | Supported file types. | -|`file.extensions`| Array of strings | | | Array of strings. File extensions of the file type the Action can trigger. For example, pdf and docx.| - -### actions.handlers.pageInfo - -Required if the handler type is `openPage`. Object containing metadata of the page to open. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`PageId`| String | | | Maps to the `EntityId` of the static tab. | -|`SubPageId`| String | | | Maps to the `SubEntityId` of the static tab. | - -## dashboardCards - -**Optional** – Array - -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. For more information on creating cards for Viva Connections Dashboard, see [overview of Bot Powered Adaptive Card Extensions](/sharepoint/dev/spfx/viva/bot-powered/overview-bot-powered-aces). - -The `dashboardCards` property is an array of elements of the type `object`. - -### dashboardCards.dashboardCard - -Defines a single dashboard card and its properties. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | | ✔️ | A unique identifier for this dashboard card. The ID must be a GUID. | -|`displayName`| String | 255 characters | ✔️ | Display name of the card.| -|`description`| String | 255 characters | ✔️ | Description of the card.| -|`pickerGroupId`| String | | ✔️ | ID of the group in the card picker. The ID must be a GUID. | -|`icon`| Object | | | Specifies the icon for the card. | -|`contentSource`| Object | | ✔️ | Specifies the source of the card's content | -|`defaultSize`| String | | ✔️ | Rendering size for the dashboard card. Options: `medium` or `large`. | - -### dashboardCards.dashboardCard.icon - -Defines the icon properties of a given dashboard card. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`iconUrl`| String | 2048 characters | | Location of the icon for the card, to be displayed in the toolbox and card bar. | -|`officeUIFabricIconName`| String | 255 characters | | Office UI Fabric or Fluent UI icon friendly name for the card. This value is used if `iconUrl` is not specified. | - -### dashboardCards.dashboardCard.contentSource - -Defines the content source of a given dashboard card. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`sourceType`| String | | | Represents the source of a card's content. Option: `bot`. -|`botConfiguration`| Object | | | The configuration for the bot source. Required if the `sourceType` is set to `bot`. | - -#### dashboardCards.dashboardCard.contentSource.botConfiguration - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`botId`| String | | | The unique Microsoft app ID for the bot as registered with the Bot Framework. The ID must be a GUID. | - -## intuneInfo - -**Optional** – Object - -Properties related to app support for Microsoft Intune. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`supportedMobileAppManagementVersion`| String | 64 characters | | Supported [Microsoft Intune Mobile App Management](/mem/intune/apps/app-management) (MAM) version. The value is a single version number in the format `integer.integer`, such as `1.2`, indicating the highest level of support the app confirms. If no value is provided, the app doesn't attest to being Intune MAM compliant. | - -## See also - -* [Understand the Microsoft Teams app structure](~/concepts/design/app-structure.md) -* [Enable app customization](~/concepts/design/enable-app-customization.md) -* [Localize your app](~/concepts/build-and-test/apps-localization.md) -* [Integrate media capabilities](~/concepts/device-capabilities/media-capabilities.md) -* [Different versions of app manifest schema](https://github.com/microsoft/json-schemas/tree/main/teams) diff --git a/msteams-platform/resources/schema/manifest-schema.md b/msteams-platform/resources/schema/manifest-schema.md deleted file mode 100644 index afa0a54629e..00000000000 --- a/msteams-platform/resources/schema/manifest-schema.md +++ /dev/null @@ -1,1487 +0,0 @@ ---- -title: App Manifest Reference -description: In this article, you'll have the latest version of the public manifest schema for Microsoft Teams reference, schema, and sample full manifest. -ms.topic: reference -ms.localizationpriority: high -ms.date: 5/29/2025 ---- - -# App manifest - -The app manifest (previously called Teams app manifest) describes how your app integrates into the Microsoft Teams product. Your app manifest must conform to the schema hosted at [https://developer.microsoft.com/json-schemas/teams/v1.22/MicrosoftTeams.schema.json](https://developer.microsoft.com/json-schemas/teams/v1.22/MicrosoftTeams.schema.json). Previous versions 1.0, 1.1,...,1.21, and the current version is 1.22 are each supported (using "v1.x" in the URL). Version 1.18 is not available. -For more information on the changes made in each version, see [app manifest change log](https://github.com/OfficeDev/microsoft-teams-app-schema/releases) and for previous versions, see [app manifest versions](https://github.com/microsoft/json-schemas/tree/main/teams). - -The following table lists TeamsJS version and app manifest versions as per different app scenarios: - -[!INCLUDE [pre-release-label](~/includes/teamjs-version-details.md)] - -> [!NOTE] -> If your Teams app is using the app manifest version 1.13 or later, ensure that your app meets the criteria to [extend your app to run across Microsoft 365 or Outlook](../../m365-apps/extend-m365-teams-personal-tab.md). - -The following is the sample app manifest schema: - -## Sample app manifest - -```json -{ - "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.22/MicrosoftTeams.schema.json", - "manifestVersion": "1.22", - "version": "1.0.0", - "id": "%MICROSOFT-APP-ID%", - "localizationInfo": { - "defaultLanguageTag": "en", - "defaultLanguageFile": "en.json", - "additionalLanguages": [ - { - "languageTag": "es", - "file": "es.json" - } - ] - }, - "developer": { - "name": "Publisher Name", - "websiteUrl": "https://example.com/", - "privacyUrl": "https://example.com/privacy", - "termsOfUseUrl": "https://example.com/app-tos", - "mpnId": "1234567890" - }, - "name": { - "short": "Name of your app (<=30 chars)", - "full": "Full name of app, if longer than 30 characters (<=100 chars)" - }, - "description": { - "short": "Short description of your app (<= 80 chars)", - "full": "Full description of your app (<= 4000 chars)" - }, - "icons": { - "outline": "A relative path to a transparent .png icon — 32px X 32px", - "color": "A relative path to a full color .png icon — 192px X 192px" - }, - "accentColor": "A valid HTML color code.", - "elementRelationshipSet": { - "oneWayDependencies" : [ - { - "element" : { - "name" : "composeExtensions", - "id" : "composeExtension-id", - "commandIds": ["exampleCmd1", "exampleCmd2"] - }, - "dependsOn" : [ - {"name" : "bots", "id" : "bot-id"} - ] - } - ], - "mutualDependencies" : [ - [ - {"name" : "bots", "id" : "bot-id"}, - {"name" : "staticTabs", "id" : "staticTab-id"}, - {"name" : "composeExtensions", "id" : "composeExtension-id"}, - {"name" : "configurableTabs", "id": "configurableTab-id"} - ] - ], - }, - "copilotAgents": { - "declarativeAgents": [ - { - "id": "agent1", - "file": "declarativeAgent1.json" - } - ] - }, - "configurableTabs": [ - { - "id": "configurableTab-id", - "configurationUrl": "https://contoso.com/teamstab/configure", - "scopes": [ - "team", - "groupChat" - ], - "canUpdateConfiguration": true, - "context": [ - "channelTab", - "privateChatTab", - "meetingChatTab", - "meetingDetailsTab", - "meetingSidePanel", - "meetingStage" - ], - "sharePointPreviewImage": "Relative path to a tab preview image for use in SharePoint — 1024px X 768", - "supportedSharePointHosts": [ - "sharePointFullPage", - "sharePointWebPart" - ] - } - ], - "staticTabs": [ - { - "entityId": "idForPage", - "scopes": [ - "personal" - ], - "context": [ - "personalTab", - "channelTab" - ], - "name": "Display name of tab", - "contentUrl": "https://contoso.com/content (displayed in Teams canvas)", - "websiteUrl": "https://contoso.com/content (displayed in web browser)", - "searchUrl": "https://contoso.com/content (displayed in web browser)", - "requirementSet": { - "hostMustSupportFunctionalities": [ - {"name": "dialogUrl"}, - {"name": "dialogUrlBot"} - ] - } - } - ], - "supportedChannelTypes": [ - "sharedChannels", - "privateChannels" - ], - "bots": [ - { - "botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%", - "scopes": [ - "team", - "personal", - "groupChat" - ], - "needsChannelSelector": false, - "isNotificationOnly": false, - "supportsFiles": true, - "supportsCalling": false, - "supportsVideo": true, - "commandLists": [ - { - "scopes": [ - "team", - "groupChat" - ], - "commands": [ - { - "title": "Command 1", - "description": "Description of Command 1" - }, - { - "title": "Command 2", - "description": "Description of Command 2" - } - ] - }, - { - "scopes": [ - "personal", - "groupChat" - ], - "commands": [ - { - "title": "Personal command 1", - "description": "Description of Personal command 1" - }, - { - "title": "Personal command N", - "description": "Description of Personal command N" - } - ] - } - ] - } - ], - "connectors": [ - { - "connectorId": "GUID-FROM-CONNECTOR-DEV-PORTAL%", - "scopes": [ - "team" - ], - "configurationUrl": "https://contoso.com/teamsconnector/configure" - } - ], - "composeExtensions": [ - { - "id": "composeExtension-id", - "canUpdateConfiguration": true, - "botId": "%MICROSOFT-APP-ID-REGISTERED-WITH-BOT-FRAMEWORK%", - "commands": [ - { - "id": "exampleCmd1", - "title": "Example Command", - "type": "query", - "context": [ - "compose", - "commandBox" - ], - "description": "Command Description; e.g., Search on the web", - "initialRun": true, - "fetchTask": false, - "parameters": [ - { - "name": "keyword", - "title": "Search keywords", - "inputType": "choiceset", - "description": "Enter the keywords to search for", - "value": "Initial value for the parameter", - "choices": [ - { - "title": "Title of the choice", - "value": "Value of the choice" - } - ] - } - ] - }, - { - "id": "exampleCmd2", - "title": "Example Command 2", - "type": "action", - "context": [ - "message" - ], - "description": "Command Description; e.g., Add a customer", - "initialRun": true, - "fetchTask": false , - "parameters": [ - { - "name": "custinfo", - "title": "Customer name", - "description": "Enter a customer name", - "inputType": "text" - } - ] - }, - { - "id": "exampleCmd3", - "title": "Example Command 3", - "type": "action", - "context": [ - "compose", - "commandBox", - "message" - ], - "description": "Command Description; e.g., Add a customer", - "fetchTask": false, - "taskInfo": { - "title": "Initial dialog title", - "width": "Dialog width", - "height": "Dialog height", - "url": "Initial webview URL" - } - } - ], - "messageHandlers": [ - { - "type": "link", - "value": { - "domains": [ - "mysite.someplace.com", - "othersite.someplace.com" - ], - "supportsAnonymizedPayloads": false - } - } - ], - "requirementSet": { - "hostMustSupportFunctionalities": [ - {"name": "dialogUrl"}, - {"name": "dialogUrlBot"} - ] - } - } - ], - "permissions": [ - "identity", - "messageTeamMembers" - ], - "devicePermissions": [ - "geolocation", - "media", - "notifications", - "midi", - "openExternal" - ], - "validDomains": [ - "contoso.com", - "mysite.someplace.com", - "othersite.someplace.com" - ], - "webApplicationInfo": { - "id": "AAD App ID", - "resource": "Resource URL for acquiring auth token for SSO" - }, - "authorization": { - "permissions": { - "resourceSpecific": [ - { - "type": "Application", - "name": "ChannelSettings.Read.Group" - }, - { - "type": "Delegated", - "name": "ChannelMeetingParticipant.Read.Group" - } - ] - } - }, - "showLoadingIndicator": false, - "isFullScreen": false, - "activities": { - "activityTypes": [ - { - "type": "taskCreated", - "description": "Task created activity", - "templateText": " created task for you" - }, - { - "type": "userMention", - "description": "Personal mention activity", - "templateText": " mentioned you" - } - ] - }, - "defaultBlockUntilAdminAction": true, - "publisherDocsUrl": "https://example.com/app-info", - "defaultInstallScope": "meetings", - "defaultGroupCapability": { - "meetings": "tab", - "team": "bot", - "groupchat": "bot" - }, - "configurableProperties": [ - "name", - "shortDescription", - "longDescription", - "smallImageUrl", - "largeImageUrl", - "accentColor", - "developerUrl", - "privacyUrl", - "termsOfUseUrl" - ], - "subscriptionOffer": { - "offerId": "publisherId.offerId" - }, - "meetingExtensionDefinition": { - "scenes": [ - { - "id": "9082c811-7e6a-4174-8173-6ccd57d377e6", - "name": "Getting started sample", - "file": "scenes/sceneMetadata.json", - "preview": "scenes/scenePreview.png", - "maxAudience": 15, - "seatsReservedForOrganizersOrPresenters": 0 - }, - { - "id": "afeaed22-f89b-48e1-98b4-46a514344e4a", - "name": "Sample-1", - "file": "scenes/sceneMetadata.json", - "preview": "scenes/scenePreview.png", - "maxAudience": 15, - "seatsReservedForOrganizersOrPresenters": 3 - } - ] - } -} -``` - -The schema defines the following properties: - -## $schema - -Optional, but recommended – String - -The https:// URL referencing the JSON Schema for the app manifest. - -## manifestVersion - -**Required** – String - -The version of the app manifest schema that this manifest is using. Use `1.13` to enable Teams app support in Outlook and Microsoft 365 app; use `1.12` (or earlier) for Teams-only apps. - -## version - -**Required** – String - -The version of a specific app. When you update something in your app manifest, the version must be incremented too. This way, when the new app manifest is installed, it overwrites the existing one and the user receives the new functionality. When this app was submitted to the Microsoft Teams Store, the new app manifest must be resubmitted and revalidated. The app users receive the new updated app manifest automatically within few hours after the app manifest is approved. - -If the app requests for permissions change, the users are prompted to upgrade and reconsent to the app. - -This version string must follow the [semver](http://semver.org/) standard (MAJOR.MINOR.PATCH). - -> [!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 pre-release and metadata version string extensions aren't supported. - -## ID - -**Required** – Microsoft app ID - -The ID is a unique Microsoft-generated identifier for the app. The format of the ID is 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](https://aka.ms/appregistrations). 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. - -## developer - -**Required** – Object - -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](~/concepts/deploy-and-publish/appsource/publish.md). Developer name helps improve your app discoverability in the Teams Store. - -|Name|Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`name`|String|32 characters|✔️|The display name for the developer.| -|`websiteUrl`|String|2048 characters|✔️|The https:// URL to the developer's website. This link must take users to your company or product-specific landing page.| -|`privacyUrl`|String|2048 characters|✔️|The https:// URL to the developer's privacy policy.| -|`termsOfUseUrl`|String|2048 characters|✔️|The https:// URL to the developer's terms of use.| -|`mpnId`|String|10 characters| |**Optional** The Microsoft Cloud Partner Program ID (formerly known as Microsoft Partner Network (MPN) ID) that identifies the partner organization building the app.| - -## name - -**Required** – Object - -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. - -|Name|Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`short`|String|30 characters|✔️|The short display name for the app. Use `short` property where the space is limited, such as the app header.| -|`full`|String|100 characters||The full name of the app, used if the full app name exceeds 30 characters. Use `full` property where there's more space, such as the app catalog or the app details page.| - -> [!NOTE] -> -> * In the app manifest v1.17 or later the `full` property is required and for app manifest v1.16 or earlier it isn't required. -> * The `short` property is used across all UI surfaces. - -## description - -**Required** – Object - -Describes your app to users. For apps submitted to AppSource, these values must match the information in your AppSource entry. App description helps improve your app discoverability in the Teams Store. - -Ensure that your description describes your experience and helps potential customers understand what your experience does. You must note in the full description, if an external account is required for use. The values of `short` and `full` must be different. Your short description can't be repeated within the long description and must not include any other app name. - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---|---| -|`short`|String|80 characters|✔️|A short description of your app experience, used when space is limited.| -|`full`|String|4000 characters|✔️|The full description of your app.| - -## localizationInfo - -**Optional** – Object - -Allows the specification of a default language, and pointers to additional language files. See [localization](~/concepts/build-and-test/apps-localization.md). - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---| -|`defaultLanguageTag`| String | |✔️|The language tag for the strings in this top-level app manifest file. Default is `en-us`.| -|`defaultLanguageFile`| String | 2048 characters|| A relative file path to the .json file that contains the strings. If unspecified, strings are taken directly from the app manifest file. A default language file is required for [agents that support multiple languages](/microsoft-365-copilot/extensibility/agents-are-apps#localizing-your-agent).| - -### localizationInfo.additionalLanguages - -An array of objects, each with the following properties to specify additional language translations. - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---| -|`languageTag`| String | |✔️|The language tag of the strings in the provided file. For example, `es`| -|`file`| String | 2048 characters|✔️|A relative file path to the .json file that contains the translated strings.| - -## icons - -**Required** – Object - -Icons used within the Teams app. The icon files must be included as part of the upload package. For more information, see [Icons](../../concepts/build-and-test/apps-package.md#app-icons). - -|Name| Type | Maximum size | Required | Description| -|---|---|---|---|---| -|`outline`|String|32 x 32 pixels|✔️|A relative file path to a transparent 32x32 PNG outline icon. The border color must be white.| -|`color`|String|192 x 192 pixels|✔️|A relative file path to a full color 192x192 PNG icon.| -|`color 32x32`|String|32 x 32 pixels| |A relative file path to a full color PNG icon with transparent background. Size 32x32.| - -## accentColor - -**Required** – HTML Hex color code - -A color to use and as a background for your color icons. - -The value must be a valid HTML color code starting with '#', for example `#4464ee`. For more information, see [accentColor](../../task-modules-and-cards/cards/cards-reference.md#properties-of-the-connector-card-for-microsoft-365-groups). - -## elementRelationshipSet - -**Optional** – Object - -Describes relationships between individual app capabilities, including `staticTabs`, `configurableTabs`, `composeExtensions`, and `bots`. It's used to specify runtime dependencies to ensure that the app launches only 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](../../m365-apps/specify-runtime-requirements.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `oneWayDependencies`| Array|✔️||Defines one or more unidirectional dependency relationships among app components. Each relationship is represented by a `oneWayDependency` object with a *dependent* `element` and a `dependsOn` [`element`](#element) object.| -| `mutualDependencies`| Array||✔️|Defines one or more mutual dependency relationships among app capabilities. Each relationship is represented by a `mutualDependency` array of [`element`](#element) objects. | - -### element - -**Optional** – Object - -Describes an app capability (`element`) in an `elementRelationshipSet`. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `name`| String enum|| ✔️| The type of app capability. Supported values: `bots`, `staticTabs`, `composeExtensions`, `configurableTabs`| -| `id` | String | | ✔️| If there are multiple instances of a bot, tab, or message extension, this property defines a specific instance of the capability. It maps to `botId` for bots, `entityId` for static tabs, and `id` for configurable tabs and message extensions. | -| `commandIds` | Array of strings||| List of one or more message extension commands that are dependent on the specified `dependsOn` capability. Use only for message extensions. | - -### elementRelationshipSet.oneWayDependency - -**Optional** – Object - -Describes the unidirectional dependency of one app capability (X) to another (Y). If a Microsoft 365 runtime host doesn't support a required capability (Y), the dependent capability (X) won't load or surface to the user. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `element`| Object||✔️| Represents an individual app capability (represented by [`element`](#element)) that has a one-way runtime dependency on another capability being loaded. | -| `dependsOn`| Array|| ✔️| Defines one or more app capabilities (each represented by [`element`](#element)) required for the specified `element` to load.| - -### elementRelationshipSet.mutualDependencies - -**Optional** – Array of arrays (each containing two or more [`element` objects](#element)) - -Describes a set of mutual dependencies between two or more app capabilities. A Microsoft 365 runtime host must support all required capabilities for any of those capabilities to be available for users in that host. - -## copilotAgents - -**Optional** – Object - -Defines one or more agents to Microsoft 365 Copilot. [Declarative agents](/microsoft-365-copilot/extensibility/overview-declarative-agent) are customizations of Microsoft 365 Copilot that run on the same orchestrator and foundation models (formerly known as `declarativeCopilots`). [Custom engine agents](/microsoft-365-copilot/extensibility/overview-custom-engine-agent) are conversational Teams bots that use custom AI language models and orchestration, yet are selectable (along with installed declarative agents) as **Agents** from the Microsoft 365 Copilot side panel. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`declarativeAgents`|Array of objects| 1 || Array of objects that each define a declarative agent. | -|`customEngineAgents`|Array of objects| 1 || Array of objects that each define a custom engine agent.| - -> [!NOTE] -> The `copilotAgents` object must contain either `declarativeAgents` or `customEngineAgents`, but not both agents at the same time. - -### declarativeAgents - -Represents a customization of Microsoft 365 Copilot, as defined by its manifest file. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String| |✔️| Unique identifier for the agent. When using Microsoft Copilot Studio to build agents, this is auto-generated. Otherwise, manually assign the value according to your own conventions or preference. | -|`file`| String | 2048 characters |✔️| Relative file path within the app package to the [declarative agent manifest](/microsoft-365-copilot/extensibility/declarative-agent-manifest) file. | - -### customEngineAgents - -Represents a conversational Teams bot that uses custom AI language models and orchestration, surfaced as an agent in the Microsoft 365 Copilot UI. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String| |✔️| Unique (bot) identifier for the custom engine agent. Must match the `id` specified in the `bots` section of the manifest and be of `personal` scope. | -|`type`|String| |✔️| Type of the custom engine agent. Supported value: `bot` | -|`disclaimer.text`|String|500|✔️| The message shown to users before they interact with this application. - -## configurableTabs - -**Optional** – Array - -Used when your app experience has a team channel tab experience that requires extra configuration before it's added. Configurable tabs are supported only in the `team` and `groupChat` scopes and you can configure the same tabs multiple times. However, you can define it in the app manifest only once. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String|64|| Unique identifier for configurable tab. Used when defining one-way and mutual app capability dependencies under [elementRelationshipSet](#elementrelationshipset).| -|`configurationUrl`|String|2048 characters|✔️|The https:// URL to use when configuring the tab.| -|`scopes`|Array of enums|2|✔️|The configurable tabs support only the `team` and `groupChat` scopes. | -|`canUpdateConfiguration`|Boolean|||A value indicating whether an instance of the tab's configuration can be updated by the user after creation.
Default value: `true` | -|`meetingSurfaces`|Array of enums|2||The set of `meetingSurfaceItem` scopes where a [tab is supported](../../tabs/how-to/access-teams-context.md).
Default values: `sidePanel`, `stage` | -|`context` |Array of enums|7||The set of `contextItem` scopes where a [tab is supported](../../tabs/how-to/access-teams-context.md). Accepted value: **[personalTab, channelTab, privateChatTab, meetingChatTab, meetingDetailsTab, meetingSidePanel, meetingStage]**.| -|`sharePointPreviewImage`|String|2048 characters||A relative file path to a tab preview image for use in SharePoint. Size 1024x768. | -|`supportedSharePointHosts`|Array of enums|2||Defines how your tab is made available in SharePoint. Options are `sharePointFullPage` and `sharePointWebPart`. | - -## staticTabs - -**Optional** – Array - -Defines a set of tabs that can 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. However, the pinned tabs can be reordered by adding the details of the tab in the same desired order. For more information, see [reorder static personal tabs](../../tabs/how-to/create-personal-tab.md#reorder-tabs). - -This property also enables you to set the default landing capability for an app supporting both tab and bot capabilities in personal scope. For more information, see [configure default landing capability](../../concepts/deploy-and-publish/add-default-install-scope.md#configure-your-apps-default-landing-capability). - -This item is an array (maximum of 16 elements) with all elements of the type `object`. This block is required only for solutions that provide a static tab solution. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`entityId`|String|64 characters|✔️|A unique identifier for the entity that the tab displays.| -|`name`|String|128 characters||The display name of the tab.| -|`contentUrl`|String|2048 characters||The https:// URL that points to the entity UI to be displayed in the Teams canvas.| -|`contentBotId`|String|128 characters||The Microsoft app ID specified for the bot in the [Bot Framework portal](https://dev.botframework.com/bots).| -|`websiteUrl`|String|2048 characters||The https:// URL to point to if a user opts to view in a browser.| -|`searchUrl`|String|2048 characters||The https:// URL to point to for a user's search queries.| -|`scopes`|Array of enums|3|✔️|Specifies whether the tab offers an experience in the context of a channel in a team, or an experience scoped to an individual user or group chat. The static tabs support `personal` scope only.| -|`context` | Array of enums| 8|| The set of `contextItem` contexts where a [tab is supported](../../tabs/how-to/access-teams-context.md).
Accepted values: `personalTab`, `channelTab`, `privateChatTab`, `meetingChatTab`, `meetingDetailsTab`, `meetingStage`, `meetingSidepanel`, `teamLevelApp`.
Default values: `personalTab`, `channelTab`, `privateChatTab`, `meetingChatTab`, `meetingDetailsTab`. | -|`requirementSet`|Object|||Runtime requirements for the tab to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the tab.| - -> [!NOTE] -> -> * The `contentBotId` property isn't supported in apps that are verified and published on AppSource. -> * The `groupChat` and `team` scopes are supported only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). -> * The `teamLevelApp` context is dedicated only for Education tenants. -> * The `searchUrl` feature is not available for the third-party developers. -> * If your tabs require context-dependent information to display relevant content or for initiating an authentication flow, For more information, see [Get context for your Microsoft Teams tab](../../tabs/how-to/access-teams-context.md). - -### staticTabs.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the tab requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## bots - -**Optional** – Array - -Defines a bot solution, along with optional information such as default command properties. - -The item is an array (maximum of only one element— only one bot is allowed per app) with all elements of the type `object`. This block is required only for solutions that provide a bot experience. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`botId`|String||✔️|The unique Microsoft app ID for the bot as registered with the Bot Framework. The ID can be the same as the overall [app ID](#id).| -|`scopes`|Array of enums|3|✔️|Specifies whether the bot offers an experience in the context of a channel in a `team`, in a group chat (`groupChat`), or an experience scoped to an individual user alone (`personal`). These options are non-exclusive.| -|`needsChannelSelector`|Boolean|||Describes whether or not the bot uses a user hint to add the bot to a specific channel.
Default value: `false` | -|`isNotificationOnly`|Boolean|||Indicates whether a bot is a one-way, notification-only bot, as opposed to a conversational bot.
Default value: `false` | -|`supportsFiles`|Boolean|||Indicates whether the bot supports the ability to upload/download files in personal chat.
Default value: `false`| -|`supportsCalling`|Boolean|||A value indicating where a bot supports audio calling. **IMPORTANT**: This property is experimental. Experimental properties might be incomplete and might undergo changes before they're fully available. The property is provided for testing and exploration purposes only and must not be used in production applications.
Default value: `false`| -|`supportsVideo`|Boolean|||A value indicating where a bot supports video calling. **IMPORTANT**: This property is experimental. Experimental properties might be incomplete and might undergo changes before they're fully available. The property is provided for testing and exploration purposes only and must not be used in production applications.
Default value: `false`| -|`requirementSet`|Object|||Runtime requirements for the bot to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the bot.| - -### bots.configuration - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`team.fetchTask`|Boolean||✔️|A boolean value that indicates if it should fetch dialog (referred as task module in TeamsJS v1.x) dynamically.
Default value: `false`| -|`team.taskInfo`|Object||✔️|The dialog to preload when you use a bot | -|`team.taskInfo.title`|String|64 characters|✔️|Initial dialog title.| -|`team.taskInfo.width`|String|16 characters||The dialog width is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`team.taskInfo.height`|String|16 characters||The dialog height is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`team.taskInfo.url`|String|2048 characters||Initial webview URL.| -|`groupChat.fetchTask`|Boolean||✔️|A boolean value that indicates if it should fetch dialog dynamically.
Default value: `false`| -|`groupChat.taskInfo`|Object|||Dialog to be launched when fetch task set to false.
Default value: `false`| -|`groupChat.taskInfo.title`|String|64 characters|✔️|Initial dialog title.| -|`groupChat.taskInfo.width`|String|16||The dialog width is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`groupChat.taskInfo.height`|String|16||The dialog height is either a number in pixels or default layout such as `large`, `medium`, or `small`.| -|`groupChat.taskInfo.url`|String|2048 characters||Initial webview URL.| - -### bots.commandLists - -**Optional** – Array - -A list of commands that your bot can recommend to users. The object is an array (maximum of three elements) with all elements of type `object`; you must define a separate command list for each scope that your bot supports. For more information, see [Bot menus](~/bots/how-to/create-a-bot-commands-menu.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`scopes`|Array of enums|3|✔️|Specifies the scope for which the command list is valid. Options are `team`, `personal`, and `groupChat`.| -|`commands`|Array of objects|10|✔️|An array of commands the bot supports.| - -> [!NOTE] -> Teams mobile client doesn't support the bot app when there is no value in the `commandLists` property. - -### bots.commandLists.commands - -**Required** – Array - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`title`|String|128|✔️|The bot command name.| -|`description`|String|4000 characters|✔️|A simple text description or an example of the command syntax and its arguments.| - -### bots.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the bot requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## connectors - -**Optional** – Array - -The `connectors` block defines a connector card for Microsoft 365 Groups for the app. - -The object is an array (maximum of one element) with all elements of type `object`. This block is required only for solutions that provide a Connector. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`configurationUrl`|String|2048 characters| |The https:// URL to use when configuring the connector using the inline configuration experience.| -|`scopes`|Array of enums|1|✔️|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 (`personal`). The `team` scope is only supported.| -|`connectorId`|String|64 characters|✔️|A unique identifier for the Connector that matches its ID in the [Connectors Developer Dashboard](https://aka.ms/connectorsdashboard).| - -## composeExtensions - -**Optional** – Array - -Defines a message extension for the app. - -The item is an array (maximum of one element) with all elements of type `object`. This block is required only for solutions that provide a message extension. - -|Name| Type | Maximum Size | Required | Description       | -|---|---|---|---|---| -|`id`|String||64| Unique identifier for the message extension. Used when defining one-way and mutual app capability dependencies under [elementRelationshipSet](#elementrelationshipset).| -|`botId`|String|||The unique Microsoft app ID for the bot that backs the message extension, as registered with the Bot Framework. The ID can be the same as the overall App ID.| -|`composeExtensionType`|String||✔️|Type of the compose extension. Enum values are `botBased` and `apiBased`.| -|`authorization`|Object| ||Authorization related information for the API-based message extension.| -|`authorization.authType`|String|||Enum of possible authorization types. Supported values are `none`, `apiSecretServiceAuth`, and `microsoftEntra`.| -|`authorization.microsoftEntraConfiguration`|Object|||Object capturing details needed to do microsoftEntra auth flow. Applicable only when auth type is `microsoftEntra`.| -|`authorization.microsoftEntraConfiguration.supportsSingleSignOn`|Boolean|||A value indicating whether single sign-on is configured for the app.| -|`authorization.apiSecretServiceAuthConfiguration`|Object|||Object capturing details needed to do service auth. Applicable only when auth type is `apiSecretServiceAuth`.| -|`authorization.apiSecretServiceAuthConfiguration.apiSecretRegistrationId`|String|128 characters||Registration ID returned when developer submits the API key through Developer Portal.| -|`apiSpecificationFile`|String|2048 characters||A relative file path to the API specification file in the manifest package.| -|`canUpdateConfiguration`|Boolean|||A value indicating whether the configuration of a message extension can be updated by the user.
Default value: `false`| -|`commands`|Array of objects|10||Array of commands the message extension supports.| -|`messageHandlers`|Array of objects|5||A list of handlers that allow apps to be invoked when certain conditions are met.| -|`messageHandlers.type`|String|||The type of message handler. Must be `link`.| -|`messageHandlers.value.domains`|Array of strings|2048 characters||Array of domains that the link message handler can register for.| -|`messageHandlers.value.supportsAnonymizedPayloads`|Boolean||| A boolean value that indicates whether the app's link message handler supports anonymous invoke flow.
Default value: `false`| -|`requirementSet`|Object|||Runtime requirements for the message extension to function properly in the Microsoft 365 host application. If one or more of the requirements aren't supported by the runtime host, the host won't load the message extension.| - -### composeExtensions.commands - -Your message extension must declare one or more commands with a maximum of 10 commands. Each command appears in Microsoft Teams as a potential interaction from the UI-based entry point. - -Each command item is an object with the following structure: - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String|64 characters|✔️|The ID for the command.| -|`type`|String|||Type of the command. One of `query` or `action`.
Default value: `query` | -|`samplePrompts`|Array|5 ||Property used by Microsoft 365 Copilot to display prompts supported by the agent to the user.| -|`samplePrompts.text`|String|128 characters|✔️|Content of the sample prompt.| -|`apiResponseRenderingTemplateFile`|String|2048 characters||A relative file path for api [response rendering template](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json) file used to format the JSON response from developer’s API to Adaptive Card response.| -|`context`|Array of strings|3 ||Defines where the message extension can be invoked from. Any combination of `compose`, `commandBox`, `message`.
Default values: `compose, commandBox`| -|`title`|String|32 characters|✔️|The user-friendly command name.| -|`description`|String|128 characters||The description that appears to users to indicate the purpose of this command.| -|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).| -|`initialRun`|Boolean|||A Boolean value indicates whether the command runs initially with no parameters.
Default value: `false` | -|`fetchTask`|Boolean|||A Boolean value that indicates if it must fetch the dialog (referred as task module in TeamsJS v1.x) dynamically.
Default value: `false` | -|`taskInfo`|Object|||Specify the dialog to preload when using a message extension command.| -|`taskInfo.title`|String|64 characters||Initial dialog title.| -|`taskInfo.width`|String|16 characters||Dialog width - either a number in pixels or default layout values such as `large`, `medium`, or `small`.| -|`taskInfo.height`|String|16 characters||Dialog height - either a number in pixels or default layout values such as `large`, `medium`, or `small`.| -|`taskInfo.url`|String|2048 characters||Initial webview URL.| -|`parameters`|Array of objects|5 ||The list of parameters the command takes.| -|`parameters.name`|String|64 characters|✔️|The name of the parameter as it appears in the client. The parameter name is included in the user request.| -|`parameters.title`|String|32 characters|✔️|User-friendly title for the parameter.| -|`parameters.description`|String|128 characters||User-friendly string that describes this parameter’s purpose.| -|`parameters.semanticDescription`|String|2000 characters||Semantic description of the parameter for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).| -|`parameters.value`|String|512 characters||Initial value for the parameter. The value isn't supported.| -|`parameters.inputType`|String|||Defines the type of control displayed on a dialog for `fetchTask: false`. Input value can only be one of `text`, `textarea`, `number`, `date`, `time`, `toggle`, `choiceset`.
Default value: `text` | -|`parameters.choices`|Array of objects|10 items||The choice options for the `choiceset`. Use only when `parameters.inputType` is `choiceset`.| -|`parameters.choices.title`|String|128 characters|✔️|Title of the choice.| -|`parameters.choices.value`|String|512 characters|✔️|Value of the choice.| - -### composeExtensions.requirementSet - -**Optional** – Object - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -| `requirementSet.hostMustSupportFunctionalities`|Array of objects| |✔️| Specifies one or more runtime capabilities the message extension requires to function properly. Supported values: `dialogUrl`, `dialogUrlBot`, `dialogAdaptiveCard`, `dialogAdaptiveCardBot`. For more information, see [how to specify runtime requirements in your app manifest](../../m365-apps/specify-runtime-requirements.md). | - -## permissions - -**Optional** – Array of strings - -An array of `string`, which specifies which permissions the app requests, which let end users know how the extension does. The following options are non-exclusive: - -* `identity`   Requires user identity information. -* `messageTeamMembers`   Requires permission to send direct messages to team members. - -Changing these permissions during app update, causes your users to repeat the consent process after they run the updated app. For more information, see [Updating your app](~/concepts/deploy-and-publish/appsource/post-publish/overview.md). - -> [!NOTE] -> Permissions are deprecated now. - -## devicePermissions - -**Optional** – Array of strings - -Provides the native features on a user's device that your app requests access to. Options are: - -* `geolocation` -* `media` -* `notifications` -* `midi` -* `openExternal` - -## validDomains - -**Optional** (except **Required** where noted) – Array of strings - -A list of valid domains for websites the app expects to load within the Teams client. Domain listings can include wildcards, for example, `*.example.com`. The valid domain matches exactly one segment of the domain; if you need to match `a.b.example.com` then use `*.*.example.com`. If your tab configuration or content UI navigates to any other domain other than tab configuration, that domain must be specified here. - -Do **not** include the domains of identity providers you want to support in your app. For example, to authenticate using a Google ID, it's required to redirect to accounts.google.com, however, you must not include accounts.google.com in `validDomains[]`. - -Teams apps that require their own SharePoint URLs to function well, includes "{teamsitedomain}" in their valid domain list. - -> [!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. - -The object is an array with all elements of the type `string`. The maximum item of the object is 16 and maximum length is 2048 characters. - -## webApplicationInfo - -> [!NOTE] -> 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. - -**Optional** – Object - -Provide your Microsoft Entra App ID and Microsoft Graph information to help users seamlessly sign into your app. If your app is registered in Microsoft Entra ID, you must provide the App ID. Administrators can easily review permissions and grant consent in Teams admin center. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String||✔️|Microsoft Entra application ID of the app. This ID must be a GUID.| -|`resource`|String|2048 characters||Resource URL of app for acquiring auth token for SSO.
**NOTE:** If you aren't using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, `https://example` to avoid an error response. The dummy URL string value mustn't contain domains or URLs that aren't in your control, either directly or through wildcards. For example, `yourapp.onmicrosoft.com` is valid, but `*.onmicrosoft.com` isn't valid. The top-level domains are prohibited, for example, `*.com`, `*.org`. | -|`nestedAppAuthInfo`|Array|5|| An NAA token based on its contents will be prefetched when the tab is loaded.| -|`nestedAppAuthInfo.redirectUri`|String||✔️| Represents the nested app's valid redirect URI (always a base origin).| -|`nestedAppAuthInfo.scopes`|Array|20|✔️| Represents the stringified list of scopes the access token requested requires. Order must match that of the proceeding NAA request in the app.| -|`nestedAppAuthInfo.claims`|String|||An optional JSON formatted object of client capabilities that represents if the resource server is CAE capable. Do not use an empty string for this value. If unsupported, keep the field undefined.| - -## graphConnector - -**Optional** – Object - -Specify the app's Graph connector configuration. If this is present, then [webApplicationInfo.id](#webapplicationinfo) must also be specified. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`notificationUrl`|String|2048 characters|✔️|The url where Graph-connector notifications for the application should be sent.| - -## showLoadingIndicator - -**Optional** – Boolean - -Indicates if or not to show the loading indicator when an app or tab is loading. Default is **false**. ->[!NOTE] -> -> * If you select `showLoadingIndicator` as true in your app manifest, to load the page correctly, modify the content pages of your tabs and dialogs as described in [Show a native loading indicator](../../tabs/how-to/create-tab-pages/content-page.md#show-a-native-loading-indicator) document. -> * If you don't modify the content pages of your tab, the tab app doesn't load and shows the error `There was a problem reaching this app`. - -## isFullScreen - - **Optional** – Boolean - -Indicates if a personal app is rendered without a tab header bar (signifying full screen mode). Default value: `false` - -> [!NOTE] -> -> * `isFullScreen` only works for apps published to your organization. Uploaded and published third-party apps can't use this property (it's ignored). -> -> * The `isFullScreen=true` parameter eliminates the header bar and title provided by Teams from personal apps and dialogs. However, it's recommended not to use the `isFullScreen=true` parameter with chat bot apps. - -## activities - -**Optional** – Object - -Define the properties your app uses to post a user activity feed. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`activityTypes`|Array of objects|128 items| | Provide the types of activities that your app can post to a users activity feed.| - -### activities.activityTypes - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`type`|String|64 characters|✔️|The notification type.| -|`description`|String|128 characters|✔️|A brief description of the notification.| -|`templateText`|String|128 characters|✔️|Ex: "{actor} created task {taskId} for you"| -|`allowedIconIds`|Array|50 characters||An array containing valid icon IDs per activity type.| - -### activities.activityIcons - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`|String|64 characters|✔️|Represents the unique icon ID.| -|`iconFile`|String|128 characters|✔️|Represents the relative path to the icon image. Image should be size 32x32.| - -```json -{ - "activities":{ - "activityTypes":[ - { - "type":"taskCreated", - "description":"Task Created Activity", - "templateText":"{actor} created task {taskId} for you" - }, - { - "type":"teamMention", - "description":"Team Mention Activity", - "templateText":"{actor} mentioned team" - }, - { - "type":"channelMention", - "description":"Channel Mention Activity", - "templateText":"{actor} mentioned channel" - }, - { - "type":"userMention", - "description":"Personal Mention Activity", - "templateText":"{actor} mentioned user" - }, - { - "type":"calendarForward", - "description":"Forwarding a Calendar Event", - "templateText":"{actor} sent user an invite on behalf of {eventOwner}" - }, - { - "type":"calendarForward", - "description":"Forwarding a Calendar Event", - "templateText":"{actor} sent user an invite on behalf of {eventOwner}" - }, - { - "type":"creatorTaskCreated", - "description":"Created Task Created", - "templateText":"The Creator created task {taskId} for you" - } - ] - } -} -``` - -*** - -## defaultInstallScope - -**Optional** – String - -Specifies the install scope defined for this app by default. The default install scope is denoted with a **Recommended** option adjacent to the corresponding scope in the scope selection dialog, after the user adds the app. The options are: - -* `personal` -* `team` -* `groupChat` -* `meetings` -* `copilot` - -## defaultGroupCapability - -**Optional** – Object - -When a group install scope is selected, it defines the default capability when the user installs the app. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`team`|String|||When the install scope selected is `team`, this field specifies the default capability available. Options: `tab`, `bot`, or `connector`.| -|`groupchat`|String|||When the install scope selected is `groupChat`, this field specifies the default capability available. Options: `tab`, `bot`, or `connector`.| -|`meetings`|String|||When the install scope selected is `meetings`, this field specifies the default capability available. Options: `tab`, `bot`, or `connector`.| - -## configurableProperties - -**Optional** – Array - -The `configurableProperties` block defines the app properties that Teams Administrators can customize. For more information, see [enable app customization](~/concepts/design/enable-app-customization.md). The app customization feature isn't supported in custom apps or custom apps built for your org (LOB apps). - -> [!NOTE] -> A minimum of one property must be defined. You can define a maximum of nine properties in this block. - -You can define any of the following properties: - -* [name](#name): The app's display name. -* [shortDescription](#description): The app's short description. -* [longDescription](#description): The app's long description. -* [smallImageUrl](#icons): The app's outline icon. -* [largeImageUrl](#icons): The app's color icon. -* [accentColor](#accentcolor): The color to use and a background for your outline icons. -* [developerUrl](#developer): The HTTPS URL of the developer's website. -* [privacyUrl](#developer): The HTTPS URL of the developer's privacy policy. -* [termsOfUseUrl](#developer): The HTTPS URL of the developer's terms of use. - -## supportedChannelTypes - -**Optional** – Array - -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. The supportedChannelTypes property only supports `sharedChannels` and `privateChannels`. - -> [!NOTE] -> -> * 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](~/tabs/how-to/access-teams-context.md#retrieve-context-in-private-channels) and [get context in shared channels](../../tabs/how-to/access-teams-context.md#get-context-in-shared-channels) - -## defaultBlockUntilAdminAction - -**Optional** – Boolean - -When `defaultBlockUntilAdminAction` property is set to **true**, the app is hidden from users by default until admin allows it. If set to **true**, the app is hidden for all tenants and end users. The Teams Administrators can see the app in the Teams admin center and take action to allow or block the app. The default value is **false**. For more information on default app block, see [Block apps by default for users until an admin approves](../../concepts/deploy-and-publish/add-default-install-scope.md#block-apps-by-default-for-users-until-an-admin-approves). - -## publisherDocsUrl - -**Optional** – String - -**Maximum size** - 2048 characters - -The value of the `publisherDocsUrl` parameter is a secure HTTPS URL to the app documentation and information page that app developers choose to provide. Teams Administrators get documentation about the app at this URL. Teams admin center displays the URL in the app details page. The documentation may include the instructions for admins to facilitate app adoption and app rollout. In the app documentation, you can also include instructions or information about the app that is useful for the Teams Administrator, users, and other business stakeholders. - -## subscriptionOffer - -**Optional** – Object - -Specifies the SaaS offer associated with your app. - -|Name| Type|Maximum size|Required|Description| -|---|---|---|---|---| -|`offerId`| String | 2048 characters | ✔️ | A unique identifier that includes your Publisher ID and Offer ID, which you can find in [Partner Center](https://partner.microsoft.com/dashboard). You must format the string as `publisherId.offerId`.| - -## meetingExtensionDefinition - -**Optional** – Object - -Specify meeting extension definition. For more information, see [custom Together Mode scenes in Teams](../../apps-in-teams-meetings/teams-together-mode.md). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`scenes`|Array of objects| 5 items||Meeting supported scenes.| -|`supportsCustomShareToStage`|Boolean|||Represents if the app has added support for sharing to stage.| -|`supportsStreaming`|Boolean|||A value that indicates whether an app can stream the meeting's audio and video content to a real-time meeting protocol (RTMP) endpoint.
Default value: `false` | -|`supportsAnonymousGuestUsers`|Boolean|||A value that indicates whether an app supports access for anonymous users.
Default value: `false` | - -> [!NOTE] -> The `supportsAnonymousGuestUsers` property in the app manifest schema v1.16 is supported only in [new Teams client](~/resources/teams-updates.md). - -### meetingExtensionDefinition.scenes - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`id`|String ||✔️| The unique identifier for the scene. This id must be a GUID. | -|`name`| String | 128 characters |✔️| The name of the scene. | -|`file`|String|2048 characters|✔️| The relative file path to the scenes' metadata json file. | -|`preview`|String|2048 characters|✔️| The relative file path to the scenes' PNG preview icon. | -|`maxAudience`| Integer | 50 |✔️| The maximum number of audiences supported in the scene. | -|`seatsReservedForOrganizersOrPresenters`| Integer | 50 |✔️| The number of seats reserved for organizers or presenters.| - -## authorization - -**Optional** – Object - -> [!NOTE] -> `authorization` is only supported for the app manifest version 1.12 or later. - -Specify and consolidate authorization related information for the app. - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`permissions`|Object|||List of permissions that the app needs to function.| - -### authorization.permissions - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`resourceSpecific`| Array of objects|16 items||Permissions that guard data access on resource instance level.| - -### authorization.permissions.resourceSpecific - -|Name| Type|Maximum size|Required |Description| -|---|---|---|---|---| -|`type`|String||✔️| The type of the resource-specific consent (RSC) permission. Options: `Application` and `Delegated`.| -|`name`|String|128 characters|✔️|The name of the RSC permission. For more information, see [RSC application permissions](#rsc-application-permissions) and [RSC delegated permissions](#rsc-delegated-permissions)| - -#### RSC application permissions - -Application permissions allow the app to access data without a signed-in user. For information on application permissions, see [RSC permissions for Microsoft Graph and Microsoft BotSDK](../../graph-api/rsc/resource-specific-consent.md). - -#### RSC delegated permissions - -Delegated permissions allow the app to access data on behalf of the signed-in user. - -* **RSC delegated permissions for a team** - - |**Name**|**Description**| - |---|---| - |`ChannelMeetingParticipant.Read.Group`| Allows the app to read participant information, including name, role, id, joined, and left times, of channel meetings associated with this team, on behalf of the signed-in user.| - |`ChannelMeetingIncomingAudio.Detect.Group`| Allows the app to detect incoming audio in channel meetings associated with the team. | - | `ChannelMeetingActiveSpeaker.Read.Group`| Allows the app to read the participants who are sending audio into the channel meetings associated with the team.| - |`ChannelMeetingAudioVideo.Stream.Group`| Allows the app to stream audio-video content from channel meetings associated with the team. | - |`InAppPurchase.Allow.Group`| Allows the app to show marketplace offers to users in the team and complete their purchases within the app, on behalf of the signed-in user.| - |`ChannelMeetingStage.Write.Group`| Allows the app to show content on the meeting stage in channel meetings associated with the team, on behalf of the signed-in user.| - |`LiveShareSession.ReadWrite.Group`|Allows the app to create and synchronize Live Share sessions for the team and get access related information, such as name and role, about the team's roster and any associated meetings, on behalf of the signed-in user.| - |`MeetingParticipantReaction.Read.Group`| Allows the app to read reactions of participants in channel meetings associated with the team.| - -* **RSC delegated permissions for chats or meetings** - - |**Name**|**Description**| - |---|---| - |`InAppPurchase.Allow.Chat`|Allows the app to show marketplace offers to the users in the chat, and any associated meeting, and complete their purchases within the app, on behalf of the signed-in user.| - |`MeetingStage.Write.Chat`|Allows the app to show content on the meeting stage in meetings associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingParticipant.Read.Chat`|Allows the app to read participant information, including name, role, id, joined, and left times, of meeting associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingParticipant.ToggleIncomingAudio.Chat`|Allows the app to toggle incoming audio for participants in meetings associated with the chat, on behalf of the signed-in user.| - |`LiveShareSession.ReadWrite.Chat`|Allows the app to create and synchronize Live Share sessions for the chat and get access related information, such as name and role, about the chat's roster and any associated meetings, on behalf of the signed-in user.| - |`MeetingParticipantReaction.Read.Chat`| Allows the app to read reactions of participants in meetings associated with the chat.| - |`OnlineMeetingIncomingAudio.Detect.Chat`|Allows the app to detect changes in the status of incoming audio in meetings associated with the chat, on behalf of the signed-in user.| - |`OnlineMeetingActiveSpeaker.Read.Chat`| Allows the app to read participants who are sending audio into the meetings associated with the chat.| - |`OnlineMeetingAudioVideo.Stream.Chat`| Allows the app to stream audio-video content of meetings associated with the chat.| - -* **RSC delegated permissions for users** - - |**Name**|**Description**| - |---|---| - |`CameraStream.Read.User`|Allows the app to read user's camera stream.| - |`InAppPurchase.Allow.User`|Allows the app to show the user marketplace offers and complete the user's purchases within the app, on behalf of the signed-in user.| - |`OutgoingVideoStream.Write.User`| Allows the app to modify the user's outgoing video.| - |`MicrophoneStream.Read.User`| Allows the app to read user's microphone stream.| - |`MeetingParticipantReaction.Read.User`| Allows the app to read user's reactions while participating in a meeting.| - -## extensions - -**Optional** – Object - -The `extensions` property specifies Outlook Add-ins within an app manifest and simplifies the distribution and acquisition across the Microsoft 365 ecosystem. Each app supports only one extension. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`requirements`| Object | | | Specifies the set of client or host requirements for the extension. | -|`runtimes`| Array | 20 | | Configures the set of runtimes and actions that can be used by each extension point. For more information, see [runtimes in Office Add-ins](/office/dev/add-ins/testing/runtimes). | -|`ribbons`| Array | 20 | | Defines the ribbons extension point. | -|`autoRunEvents`| Array | 10 | | Defines the event-based activation extension point. | -|`alternates`| Array | | 10 | Specifies the relationship to alternate existing Microsoft 365 solutions. It's used to hide or prioritize add-ins from the same publisher with overlapping functionality. | -|`audienceClaimUrl`| String | 2048 characters | | Specifies the URL for your extension and is used to validate Exchange user identity tokens. For more information, see [inside the Exchange identity token](/office/dev/add-ins/outlook/inside-the-identity-token)| - -For more information, see [Office Add-ins manifest for Microsoft 365](/office/dev/add-ins/develop/unified-manifest-overview). - -### extensions.requirements - -The `extensions.requirements` object specifies the scopes, form factors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the add-in to be installed. Requirements are also supported on the `ribbon`, `runtime`, `alternates`, and `autoRunEvents` child properties to selectively filter out some features of the add-in. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest). - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`capabilities`| Array | 100 | | Identifies the requirement sets.| -|`capabilities.name`| String |128| ✔️ | Identifies the name of the requirement set. | -|`capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`formFactors`| Array of enums | 2| | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.runtimes - -**Optional** – Array - -The `extensions.runtimes` array configures the sets of runtimes and actions that each extension point can use. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | 64 characters | ✔️ | Specifies the ID for runtime. | -|`type`| String enum | | ✔️ | Specifies the type of runtime. The supported enum value for [browser-based runtime](/office/dev/add-ins/testing/runtimes#browser-runtime) is `general`. | -|`code`| Object | | ✔️ | Specifies the location of code for the runtime. Based on `runtime.type`, add-ins can use either a JavaScript file or an HTML page with an embedded `script` tag that specifies the URL of a JavaScript file. Both URLs are necessary in situations where the `runtime.type` is uncertain. | -|`code.page`| String | 2048 characters| ✔️ | Specifies the URL of the web page that contains an embedded `script` tag, which specifies the URL of a JavaScript file (to be loaded in a [browser-based runtime](/office/dev/add-ins/testing/runtimes#browser-runtime)). | -|`code.script`| String | 2048 characters | | Specifies the URL of the JavaScript file to be loaded in [JavaScript-only runtime](/office/dev/add-ins/testing/runtimes#javascript-only-runtime). | -|`lifetime`| String enum | | | Specifies the lifetime of the runtime. Runtimes with a `short` lifetime don’t preserve state across executions while runtimes with a `long` lifetime do. For more information, see [Runtimes in Office Add-ins](/office/dev/add-ins/testing/runtimes).
Default value: `short` | -|`actions`| Array | 20 | | Specifies the set of actions supported by the runtime. An action is either running a JavaScript function or opening a view such as a task pane.| -|`actions.id`| String | 64 characters | ✔️ | Specifies the ID for the action, which is passed to the code file. | -|`actions.type`| String | | ✔️ | Specifies the type of action. The `executeFunction` type runs a JavaScript function without waiting for it to finish and the `openPage` type opens a page in a given view. | -|`actions.displayName`| String | 64 characters | | Specifies the display name of the action and it isn't the label of a button or a menu item that invokes the action (which is configured with `tabs.groups.controls.label`).| -|`actions.pinnable`| Boolean | | | Specifies that a task pane supports pinning, which keeps the task pane open when the user changes the selection.
Default value: `false` | -|`actions.view`| String | 64 characters | | Specifies the view where the page must be opened. It's used only when `actions.type` is `openPage`. | -|`actions.multiselect`| Boolean | | | Specifies whether the end user can select multiple items, such as multiple email messages, and apply the action to all of them.
Default value: `false` | -|`actions.supportsNoItemContext`| Boolean | | | Allows task pane add-ins to activate without the reading pane enabled or a message selected.
Default value: `false` | -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the runtime to be included in the add-in. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array |100 | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String |128 | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums |2 | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -To use `extensions.runtimes`, see [create add-in commands](/office/dev/add-ins/develop/create-addin-commands-unified-manifest), [configure the runtime for a task pane](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-runtime-for-the-task-pane-command), and [configure the runtime for the function command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-runtime-for-the-function-command). - -### extensions.ribbons - -**Optional** – Array - -The `extensions.ribbons` property provides the ability to add [add-in commands](/office/dev/add-ins/design/add-in-commands) (buttons and menu items) to the Microsoft 365 application's ribbon. The ribbon definition is selected from the array based on the requirements and first-of order. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`contexts`| Array | 8 | | Specifies the Microsoft 365 application window in which the ribbon customization is available to the user. Each item in the array is a member of a string array.
Supported values: `mailRead`, `mailCompose`, `meetingDetailsOrganizer`, `meetingDetailsAttendee`, `onlineMeetingDetailsOrganizer`, `logEventMeetingDetailsAttendee`, `spamReportingOverride`, `default`| -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the ribbon customization to appear. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array |100 | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String |128 | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums |2 | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| -|`tabs`| Array | 20 |✔️| Configures the custom tabs on the Microsoft 365 application ribbon. | -|`tabs.id`| String | 64 characters | | Specifies the ID for the tab within the app.| -|`tabs.builtInTabId`| String | 64 characters | | Specifies the ID of a built-in Office ribbon tab. For more information on possible values, see [find the IDs of built-in Office ribbon tabs](/office/dev/add-ins/develop/built-in-ui-ids). The only other child properties of the tab object that can be combined with this one are `groups` and `customMobileRibbonGroups`. | -|`tabs.label`| String | 64 characters | | Specifies the text displayed for the tab. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.position`| Object |64 characters | | Configures the position of the custom tab relative to other tabs on the ribbon.| -|`tabs.position.builtInTabId`| String | 64 characters | ✔️ | Specifies the ID of the built-in tab that the custom tab should be positioned next to. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups).| -|`tabs.position.align`| String enum | | ✔️ | Defines the alignment of custom tab relative to the specified built-in tab.
Supported values: `after`, `before`| -|`tabs.groups`| Array | 10 | | Defines groups of controls on a ribbon tab on a non-mobile device. For mobile devices, see `tabs.customMobileRibbonGroups`.| -|`tabs.groups.id`| String |64 characters | | Specifies the ID for the tab group within the app. It must be different from any built-in group ID in the Microsoft 365 application and any other custom group.| -|`tabs.groups.label`| String | 64 characters | | Specifies the text displayed for the group. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.groups.icons`| Array | 3 | | Specifies the icons displayed for the group. | -|`tabs.groups.icons.size`| Number | |✔️| Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`tabs.groups.icons.url`| String | 2048 characters | ✔️| Specifies the absolute URL of the icon.
Default value: The string must start with `https://` | -|`tabs.groups.controls`| Array | | | Configures the buttons and menus in the group. | -|`tabs.groups.controls.id`| String | 64 characters| ✔️ | Specifies the ID for the control within the app. It must be different from any built-in control ID in the Microsoft 365 application and any other custom control. | -|`tabs.groups.controls.items`| Array | | | Configures the items for a menu control. | -|`tabs.groups.controls.items.id`| String |64 characters | ✔️ | Specifies the ID for a menu item. | -|`tabs.groups.controls.items.type`| String enum | | ✔️ | Defines the menu item's control type.
Supported values: `button`| -|`tabs.groups.controls.items.label`| String | 64 characters| ✔️ | Specifies the text displayed for the menu item. | -|`tabs.groups.controls.items.icons`| Array |3 characters | | Configures the icons for the menu item.| -|`tabs.groups.controls.items.icons.size`| Number | |✔️| Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`tabs.groups.controls.items.icons.url`| URL|2048 characters | ✔️ | Specifies the absolute URL of the icon.
Default value: The string must start with `https://` | -|`tabs.groups.controls.items.supertip`| Object| |✔️| Configures a supertip for the menu item. A supertip is a UI feature that displays a brief box of help information about a control when the cursor hovers over it. The box may contain multiple lines of text. | -|`tabs.groups.controls.items.supertip.title`| String | 64 characters | ✔️ | Specifies the title text of the supertip.| -|`tabs.groups.controls.items.supertip.description`| String | 250 characters | ✔️ | Specifies the description of the supertip.| -|`tabs.groups.controls.items.actionId`| String | 64 characters | ✔️ | Specifies the ID of the action that is taken when a user selects the control or menu item. The `actionId` must match with some `runtimes.actions.id` property value. | -|`tabs.groups.controls.items.enabled`| Boolean | | | Indicates whether the menu item is initially enabled.
Default value: `true`| -|`tabs.groups.controls.items.overriddenByRibbonApi`| Boolean | | | Specifies whether the menu item is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))). This API installs custom contextual tabs on the ribbon.
Default value: `false`| -|`tabs.groups.controls.type`| String | | ✔️ | Defines the control type.
Supported values: `button`, `menu`| -|`tabs.groups.controls.builtInControlId`| String | 64 characters | ✔️ | Specifies the ID of an existing Microsoft 365 control. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups). This property can't be combined with any other child properties of the control object because built-in controls are not customizable by an add-in.| -|`tabs.groups.controls.label`| String | 64 characters | ✔️ | Specifies the text displayed for the control. Despite the maximum length of 64 characters, to correctly align the tab in the ribbon, we recommend you limit the label to 16 characters.| -|`tabs.groups.controls.icons`| Array |3 characters | ✔️ | Defines the icons for the control. There must be at least three child objects; one each with `size` properties of `16`, `32`, and `80` pixels. | -|`tabs.groups.controls.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`| -|`tabs.groups.controls.icons.url`| URL |2048 characters | | Specifies the absolute URL to the icon file.
Default value: The string must start with `https://` | -|`tabs.groups.controls.supertip`| Object | | ✔️ | Configures a supertip for the control. A supertip is a UI feature that displays a brief box of help information about a control when the cursor hovers over it. The box may contain multiple lines of text. | -|`tabs.groups.controls.supertip.title`| String | 64 characters | ✔️ |Specifies the title text of the supertip.| -|`tabs.groups.controls.supertip.description`| String | 250 characters | ✔️ | Specifies the description of the supertip.| -|`tabs.groups.controls.actionId`| String | 64 characters | | Required if the control type is `button`. Don't use if the control type is `menu`. Specifies the ID of the action that is taken when a user selects the control. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object.| -|`tabs.groups.controls.enabled`| Boolean | | | Indicates whether the control is initially enabled.
Default value: `true`| -|`tabs.groups.controls.overriddenByRibbonApi`| Boolean | | | Specifies whether the control is hidden on application and platform combinations which support the API ([Office.ribbon.requestCreateControls](/javascript/api/office/office.ribbon#office-office-ribbon-requestcreatecontrols-member(1))). This API installs custom contextual tabs on the ribbon.
Default value: `false`| -|`tabs.groups.builtInGroupId`| String | 64 characters | | Specifies the ID of a built-in group. For more information, see [find the IDs of controls and control groups](/office/dev/add-ins/design/built-in-button-integration#find-the-ids-of-controls-and-control-groups). This property can't be combined with any other child properties of the group object because built-in groups are not customizable by an add-in.| -|`tabs.customMobileRibbonGroups`| Array | 10 | | Defines groups of controls on the default tab of the ribbon on a mobile device. This array property can only be present on tab objects that have a `tabs.builtInTabId` property that is set to `DefaultTab`. For non-mobile devices, see `tabs.groups` above.| -|`tabs.customMobileRibbonGroups.id` | String | 250 characters | ✔️ | Specifies the ID of the group. It must be different from any built-in group ID in the Microsoft 365 application and any other custom group.| -|`tabs.customMobileRibbonGroups.label` | String | 32 characters | ✔️ | Specifies the label on the group. | -|`tabs.customMobileRibbonGroups.controls` | Array | 20 | ✔️ | Defines the controls in the group. Only mobile buttons are supported.| -|`tabs.customMobileRibbonGroups.controls.id` | String | 250 characters | ✔️ | Specifies the ID of the control such as `msgReadFunctionButton`.| -|`tabs.customMobileRibbonGroups.controls.type` | String enum | | ✔️ | Specifies the type of control.
Supported value: `MobileButton`| -|`tabs.customMobileRibbonGroups.controls.label` | String | 32 characters | ✔️ | Specifies the label on the control.| -|`tabs.customMobileRibbonGroups.controls.actionId` | String | 64 characters |✔️ | Specifies the ID of the action that is taken when a user selects the control. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object.| -|`tabs.customMobileRibbonGroups.controls.icons` | Array | 9 | ✔️ | Specifies the icons that appear on the control depending on the dimensions and DPI of the mobile device screen. There must be exactly 9 icons.| -|`tabs.customMobileRibbonGroups.controls.icons.size` | Number enum | | ✔️ | Size in pixels of the icon. The required sizes are 25, 32, and 48. There must be exactly one of each size for each possible value of the icons' `scale` property. | -|`tabs.customMobileRibbonGroups.controls.icons.url` | String | 2048 characters | ✔️ | The full, absolute URL of the icon's image file.
Default value: The string must start with `https://` | -|`tabs.customMobileRibbonGroups.controls.icons.scale` | Number enum | | ✔️ | Specifies the UIScreen.scale property for iOS devices. The possible values are 1, 2, and 3. There must be exactly one of each value for each possible value of the icons's `size` property. | -|`fixedControls`| Array | 1 | | Configures the button of an [integrated spam-reporting](/office/dev/add-ins/outlook/spam-reporting) add-in in Outlook. Must configure if `spamReportingOverride` is specified in the `extensions.ribbons.contexts` array. | -|`fixedControls.id`| String | 64 characters | ✔️ | Specifies the unique ID of the button of a spam-reporting add-in. | -|`fixedControls.type`| String | | ✔️ | Defines the control type of a spam-reporting add-in.
Supported value: `button` | -|`fixedControls.label`| String | 64 characters | ✔️ | Specifies the text that appears on button of a spam-reporting add-in. | -|`fixedControls.enabled`| Boolean | | ✔️ | This property must be specified in the `fixedControls` object, but it doesn't affect the functionality of the spam-reporting add-in.
Default value: `True` | -|`fixedControls.icons`| Array | 3 | ✔️ | Defines the icons for the button of a spam-reporting add-in. There must be at least three child objects, each with icon sizes of `16`, `32`, and `80` pixels respectively.| -|`fixedControls.icons.size`| Number | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`, `20`, `24`, `32`, `40`, `48`, `64`, and `80`.
Required image sizes: `16`, `32`, `80` | -|`fixedControls.icons.url`| String | 2048 characters | ✔️ | Specifies the absolute URL to the icon.
Default value: The string must start with `https://` | -|`fixedControls.supertip`| Object | | ✔️ | Configures a supertip for the button of a spam-reporting add-in. | -|`fixedControls.supertip.title`| String | 64 characters | ✔️ | Specifies the title text of the supertip. | -|`fixedControls.supertip.description`| String | 250 characters | ✔️ | Specifies the description of the supertip. | -|`fixedControls.actionId`| String | 64 characters | ✔️ | Specifies the ID of the action taken when a user selects the button of a spam-reporting add-in. The `actionId` must match the `runtime.actions.id` property of an action in the `runtimes` object. | -|`fixedControls.enabled`| Boolean | | ✔️ | This property must be specified in the `fixedControls` object. However, it doesn't affect the functionality of a spam-reporting add-in.
Supported value: `True`| -|`spamPreProcessingDialog`| Object | | | Configures the preprocessing dialog of an [integrated spam-reporting](/office/dev/add-ins/outlook/spam-reporting) add-in in Outlook. | -|`spamPreProcessingDialog.title`| String | 128 characters | ✔️ | Specifies the custom title of the preprocessing dialog of a spam-reporting add-in. | -|`spamPreProcessingDialog.description`| String | 250 characters | ✔️ | Specifies the custom text that appears in the preprocessing dialog of a spam-reporting add-in. | -|`spamPreProcessingDialog.spamNeverShowAgainOption`| Boolean | | |Indicating if the developer will allow the user to permanently bypass the PreProcessing Dialog for this add-in. \"false\" is the default value if not specified.| -|`spamPreProcessingDialog.spamReportingOptions`| Object | | | Specifies up to five options that a user can select from the preprocessing dialog to provide a reason for reporting a message. | -|`spamPreProcessingDialog.spamReportingOptions.title`| String | 128 characters | ✔️ | Specifies the custom text or title to describe the reporting options provided in the preprocessing dialog. | -|`spamPreProcessingDialog.spamReportingOptions.options`| Array of strings | 5 options

128 characters per option | ✔️ | Specifies a custom option with a checkbox that a user can select from the preprocessing dialog to provide a reason for reporting a message. At least one option must be specified. A maximum of five options can be included.| -|`spamPreProcessingDialog.spamFreeTextSectionTitle`| String | 128 characters | | Adds a text box to the preprocessing dialog for users to provide additional information on the message they're reporting. The string provided in this property appears above the text box. | -|`spamPreProcessingDialog.spamMoreInfo`| Object | | | Configures a link to provide informational resources to a user. In the preprocessing dialog, the link appears below the text provided in `spamPreProcessingDialog.description`.| -|`spamPreProcessingDialog.spamMoreInfo.text`| String | 128 characters | ✔️ | Specifies the link text for a URL that directs users to informational resources from the preprocessing dialog. | -|`spamPreProcessingDialog.spamMoreInfo.url`| String | 2048 characters | ✔️ | Specifies the HTTPS URL of a site that contains informational resources. | - -To use `extensions.ribbons`, see [create add-in commands](/office/dev/add-ins/develop/create-addin-commands-unified-manifest), [configure the UI for the task pane command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-ui-for-the-task-pane-command), and [configure the UI for the function command](/office/dev/add-ins/develop/create-addin-commands-unified-manifest#configure-the-ui-for-the-function-command). - -### extensions.autoRunEvents - -**Optional** – Array - -The `extensions.autoRunEvents` property defines event-based activation extension points. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`events`| Array |20 | ✔️ | Configures the event that cause actions in an Outlook Add-in to run automatically. For example, see [use smart alerts and the `OnMessageSend` and `OnAppointmentSend` events in your Outlook Add-ins](/office/dev/add-ins/outlook/smart-alerts-onmessagesend-walkthrough?tabs=jsonmanifest).| -|`events.type`| String | 64 characters | ✔️ | Specifies the type of event. For supported types, see [supported events](/office/dev/add-ins/outlook/autolaunch?tabs=xmlmanifest#supported-events).| -|`events.actionId`| String | 64 characters | ✔️ | Identifies the action that is taken when the event fires. The `actionId` must match with `runtime.actions.id`. | -|`events.options`| Object | | | Configures how Outlook responds to the event.| -|`events.options.sendMode`| String | | ✔️ | Specifies the actions to take during a mail send action.
Supported values: `promptUser`, `softBlock`, `block`. For more information, see [available send mode options](/office/dev/add-ins/outlook/smart-alerts-onmessagesend-walkthrough?tabs=jsonmanifest#available-send-mode-options).| -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the event handling code to run. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array |100 | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String |128 characters | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums |4 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | 2| | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| - -### extensions.alternates - -**Optional** – Array - -The `extensions.alternates` property is used to hide or prioritize specific in-market add-ins when you've published multiple add-ins with overlapping functionality. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`prefer`| Object | | | Specifies the backward compatibility with an equivalent COM add-in, XLL add-in, or both.| -|`prefer.comAddin`| Object | | | Specifies a COM add-in that must be used in place of the Microsoft 365 Web Add-in for Windows.| -|`prefer.comAddin.progId`| String | 64 characters | ✔️ | Identifies the application type in which the extension can run.| -|`hide`| Object | | | Configures how to hide another add-in that you've published whenever the add-in is installed, so users don't see both in the Microsoft 365 UI. For example, use this property when you've previously published an add-in that uses the old XML app manifest and you're replacing it with a version that uses the new JSON app manifest. | -|`hide.storeOfficeAddin`| Object | | | Specifies a Microsoft 365 Add-in available in Microsoft AppSource. | -|`hide.storeOfficeAddin.officeAddinId`| String | 64 characters | ✔️ | Specifies the ID of the in-market add-in to hide. The GUID is taken from the app manifest `id` property if the in-market add-in uses the JSON app manifest. The GUID is taken from the `` element if the in-market add-in uses the XML app manifest. | -|`hide.storeOfficeAddin.assetId`| String | 64 characters | ✔️ | Specifies the AppSource asset ID of the in-market add-in to hide.| -|`hide.customOfficeAddin`| Object | | | Configures how to hide an in-market add-in that isn't distributed through AppSource.| -|`hide.customOfficeAddin.officeAddinId`|String | 64 characters | ✔️ | Specifies the ID of the in-market add-in to hide. The GUID is taken from the app manifest `id` property if the in-market add-in uses the JSON app manifest. The GUID is taken from the `` element if the in-market add-in uses the XML app manifest. | -|`requirements`| Object | | | Specifies the scopes, formFactors, and Office JavaScript library requirement sets that must be supported on the Office client in order for the `hide`, `prefer`, or `alternateIcons` properties to take effect. For more information, see [Specify Office Add-in requirements in the unified manifest for Microsoft 365](/office/dev/add-ins/develop/requirements-property-unified-manifest).| -|`requirements.capabilities`| Array |100 | | Identifies the requirement sets.
Options: `name` (required), `minVersion`, `maxVersion`| -|`requirements.capabilities.name`| String | | ✔️ | Identifies the name of the requirement set. | -|`requirements.capabilities.minVersion`| String | | | Identifies the minimum version for the requirement set. | -|`requirements.capabilities.maxVersion`| String | | | Identifies the maximum version for the requirement set. | -|`requirements.scopes`| Array of enums | 1 | | Identifies the scopes in which the add-in can run and defines the Microsoft 365 applications in which the extension can run. For example, `mail` (Outlook).
Supported value: `mail` | -|`requirements.formFactors`| Array of enums | | | Identifies the form factors that support the add-in.
Supported values: `mobile`, `desktop`| -|`alternateIcons`| Object | | | Specifies the main icons that are used to represent the add-in on older versions of Office. This property is **required** if the Office add-in is to be installable in Office on Mac, perpetual Office licenses, and Microsoft 365 subscription versions of Office on Windows earlier than 2304 (Build 16320.00000).| -|`alternateIcons.icon`| Object | | ✔️ | Specifies properties of the image file used to represent the add-in. | -|`alternateIcons.icon.size`| Number enum | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`alternateIcons.icon.url`| String | 2048 characters | ✔️ | Specifies the full, absolute URL of the image file that is used to represent the add-in. Icon image must be 64 x 64 pixels and use one of the following file formats: GIF, JPG, PNG, EXIF, BMP, TIFF.| -|`alternateIcons.highResolutionIcon`| Object | | ✔️ | Specifies properties of the image file used to represent the add-in on high DPI screens. | -|`alternateIcons.highResolutionIcon.size`| Number enum | | ✔️ | Specifies the size of the icon in pixels, enumerated as `16`,`20`,`24`,`32`,`40`,`48`,`64`,`80`.
Required image sizes: `16`, `32`, `80`. | -|`alternateIcons.highResolutionIcon.url`| String | 2048 characters | ✔️ | Specifies the full, absolute URL of the image file that is used to represent the add-in on high DPI screens. Icon image must be 128 x 128 pixels and use one of the following file formats: GIF, JPG, PNG, EXIF, BMP, TIFF.| - -## dashboardCards - -**Optional** – Array - -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](/sharepoint/dev/spfx/viva/bot-powered/overview-bot-powered-aces). - -This item is an array of `dashboardCard` elements of type `object`. - -### dashboardCards.dashboardCard - -Defines a single dashboard card and its properties. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`id`| String | | ✔️ | A unique identifier for this dashboard card. ID must be a GUID. | -|`displayName`| String | 255 characters | ✔️ | Display name of the card.| -|`description`| String | 255 characters | ✔️ | Description of the card.| -|`pickerGroupId`| String | | ✔️ | ID of the group in the card picker. ID must be a GUID.| -|`icon`| Object | | | Specifies icon for the card. | -|`contentSource`| Object | | ✔️ | Specifies the source of the card's content | -|`defaultSize`| String | | ✔️ | Rendering size for the dashboard card. Options: `medium` or `large`. | - -### dashboardCards.dashboardCard.icon - -Defines the icon properties of a given dashboard card. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`iconUrl`| String | 2048 characters | | Location of the icon for the card, to be displayed in the toolbox and card bar. | -|`officeUIFabricIconName`| String | 255 characters | | Office UI Fabric or Fluent UI icon's friendly name for the card. This value is used if `iconUrl` is not specified. | - -### dashboardCards.dashboardCard.contentSource - -Defines the content source of a given dashboard card. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`sourceType`| String | | | Represents the source of a card's content. Option: `bot`.| -|`botConfiguration`| Object | | | The configuration for the bot source. Required if the `sourceType` is set to `bot`.| - -#### dashboardCards.dashboardCard.contentSource.botConfiguration - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`botId`| String | | | The unique Microsoft app ID for the bot as registered with the Bot Framework. ID must be a GUID.| - -## intuneInfo - -**Optional** – Object - -Properties related to app support for Microsoft Intune. - -|Name| Type| Maximum size | Required | Description| -|---|---|---|---|---| -|`supportedMobileAppManagementVersion`| String | 64 characters | | Supported [Microsoft Intune Mobile App Management](/mem/intune/apps/app-management) (MAM) version. The value is a single version number in the format `integer.integer`, such as `1.2`, indicating the highest level of support the app confirms. If no value is provided, the app doesn't attest to being Intune MAM compliant. | - -## Create an app manifest file - -If your app doesn't have an app manifest file, you need to create it. - -To create an app manifest file: - -1. Use the [sample app manifest schema](#sample-app-manifest) to create a .json file. -1. Save it in the root of your project folder as `manifest.json`. - -
-
-Here's an example of the app manifest schema for a tab app with SSO enabled: -
- -> [!NOTE] -> The app manifest example content shown here is only for a tab app. It uses example values for subdomain URI. For more information, see [sample app manifest schema](#sample-app-manifest). - - ```json -{ - "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.11/MicrosoftTeams.schema.json", - "manifestVersion": "1.12", - "version": "1.0.0", - "id": "{new GUID for this Teams app - not the Microsoft Entra App ID}", - "developer": { - "name": "Microsoft", - "websiteUrl": "https://www.microsoft.com", - "privacyUrl": "https://www.microsoft.com/privacy", - "termsOfUseUrl": "https://www.microsoft.com/termsofuse" - }, - - "name": { - "short": "Teams Auth SSO", - "full": "Teams Auth SSO" - }, - - - "description": { - "short": "Teams Auth SSO app", - "full": "The Teams Auth SSO app" - }, - - "icons": { - "outline": "outline.png", - "color": "color.png" - }, - - "accentColor": "#60A18E", - "staticTabs": [ - { - "entityId": "auth", - "name": "Auth", - "contentUrl": "https://subdomain.example.com/Home/Index", - "scopes": [ "personal" ] - } - ], - - "configurableTabs": [ - { - "configurationUrl": "https://subdomain.example.com/Home/Configure", - "canUpdateConfiguration": true, - "scopes": [ - "team" - ] - } - ], - "permissions": [ "identity", "messageTeamMembers" ], - "validDomains": [ - "{subdomain or ngrok url}" - ], - "webApplicationInfo": { - "id": "{Microsoft Entra AppId}", - "resource": "api://subdomain.example.com/{Microsoft Entra AppId}" - } -} -``` - -
- -## See also - -* [Understand the Microsoft Teams app structure](~/concepts/design/app-structure.md) -* [Enable app customization](~/concepts/design/enable-app-customization.md) -* [Localize your app](~/concepts/build-and-test/apps-localization.md) -* [Integrate media capabilities](~/concepts/device-capabilities/media-capabilities.md) -* [Public developer preview app manifest schema](manifest-schema-dev-preview.md)