Skip to main content

teams app create

Create a new Teams app with bot

Usage​

teams app create [options]

Options​

FlagDescription
-n, --name <name>App/bot name
-e, --endpoint <url>[OPTIONAL] Bot messaging endpoint URL
--env <path>[OPTIONAL] Path to credentials file (.env or appsettings.json)
--azure[OPTIONAL] Create bot in Azure (requires az CLI)
--teams-managed[OPTIONAL] Create bot managed by Teams (default)
--subscription <id>[OPTIONAL] Azure subscription ID (defaults to az CLI default)
--resource-group <name>Azure resource group (required for --azure)
--create-resource-group[OPTIONAL] Create the resource group if it doesn't exist
--region <name>[OPTIONAL] Azure region for resource group (default: westus2)
--color-icon <path>[OPTIONAL] Path to color icon (192x192 PNG)
--outline-icon <path>[OPTIONAL] Path to outline icon (32x32 PNG)
--json[OPTIONAL] Output as JSON

Details​

Creates a complete Teams bot app in a single command: AAD app registration, client secret, manifest, Teams app import, and bot registration.

Bot Location​

By default, the bot is Teams-managed (no Azure subscription needed). Use --azure to create an Azure Bot instead, which is required for OAuth and SSO features.

Precedence: --azure/--teams-managed flag > teams config set default-bot-location > Teams-managed default.

See Bot Locations for details on the trade-offs.

Examples​

Create with defaults (Teams-managed, generated manifest):

teams app create --name "My Bot"

Create with Azure bot and write credentials to .env:

teams app create --name "My Bot" --azure --resource-group my-rg --env .env

For C# projects, write credentials to appsettings.json instead:

teams app create --name "My Bot" --env appsettings.json

This writes credentials under a Teams section with PascalCase keys (ClientId, ClientSecret, TenantId).

Output​

On success, outputs:

CLIENT_ID=<app-client-id>
CLIENT_SECRET=<generated-secret>
TENANT_ID=<your-tenant-id>

Portal Equivalent​

In the Teams Developer Portal, this is equivalent to: Apps → New app, then separately configuring bot registration and generating credentials. The CLI does it all in one step.