Generated banner for Build Zoom Team Chat App
Generated logo for Build Zoom Team Chat App

Build Zoom Team Chat App

OpenAIOfficialCreated by ZoomDistributed by OpenAI

  • Skill
  • Tool integration
  • Software development
  • MIT
  • Medium risk

From the author

Use when building Team Chat.
— the description by Zoom

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a systematic approach to building applications for Zoom Team Chat. It guides developers through selecting the appropriate API surface, configuring app settings, modeling message structures, and implementing secure authentication and webhook handling. It covers the lifecycle of building both user-scoped messaging integrations and interactive chatbot workflows.

What it does

  • Helps select between Team Chat API and Chatbot API based on integration requirements.
  • Outlines the configuration of app types, scopes, and role enablement.
  • Provides guidance on modeling message structures including rich cards, forms, and slash commands.
  • Details the implementation of OAuth flows and token management.
  • Supports the setup of webhook handlers with signature verification.
  • Assists in debugging common issues related to JID formats, channel membership, and payload shapes.

When to use it

  • When you need to integrate custom messaging or automation into Zoom Team Chat.
  • When designing interactive chatbot workflows with buttons, forms, or dropdowns.
  • When setting up OAuth authentication for Zoom-based applications.
  • When troubleshooting connectivity or message delivery issues in a Zoom integration.

Advantages

  • Provides a clear, step-by-step path for Zoom app development.
  • Ensures security best practices like signature verification are prioritized.
  • Helps avoid common pitfalls in API selection and message formatting.
  • Centralizes references for environment variables and API endpoints.

Usage examples

“How do I start building a chatbot for Zoom Team Chat?”
The agent will guide you through choosing the Chatbot API, configuring the bot identity, and setting up the necessary OAuth and webhook infrastructure.
“I am getting an invalid access token error when sending messages.”
The agent will help you verify your app type, check if the required scopes are enabled, and confirm if the user has re-consented after recent scope changes.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/openai/build-zoom-team-chat-app/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip build-zoom-team-chat-app.zip -d .agents/skills

Documentation by Zoom

Build Zoom Team Chat App

Use this skill when the target surface is Zoom Team Chat. First decide whether the integration is user-scoped messaging, a chatbot, an interactive message-card workflow, or a webhook-driven automation.

Workflow

  1. Choose the API surface: Team Chat API for user-scoped actions, Chatbot API for bot identity and chatbot workflows.

  2. Confirm app type, scopes, role enablement, and whether the account has Zoom for Developers enabled.

  3. Model message structure before coding: plain messages, rich cards, buttons, dropdowns, forms, slash commands, and threaded replies.

  4. Implement OAuth and token refresh separately from message sending, with clear storage boundaries.

  5. Add webhook handlers for interactivity and lifecycle events with signature verification and retry-safe processing.

  6. Debug by checking JID formats, channel membership, bot installation, scopes, role settings, and message-card payload shape.

References

Files

concepts/api-selection.md

API Selection Guide

Zoom Team Chat offers two distinct APIs for different use cases. Choose the right one before you start building.

Critical First Decision

Pick one of these integration types before writing code:

  • User type -> Team Chat API -> User OAuth -> /v2/chat/users/...

  • Bot type -> Chatbot API -> Client Credentials -> /v2/im/chat/messages

Most implementation issues come from mixing user-type auth with bot-type endpoints (or the opposite).

Quick Decision Matrix

Use CaseAPI to UseMessages Appear As
Send notifications from scripts/CI/CDTeam Chat APIAuthenticated user
Automate messages as a userTeam Chat APIAuthenticated user
Build an interactive chatbotChatbot APIYour bot
Respond to slash commandsChatbot APIYour bot
Create messages with buttons/formsChatbot APIYour bot
Handle user interactionsChatbot APIYour bot

Team Chat API (User-Level Messaging)

What It Is

The Team Chat API allows your application to send messages as an authenticated user. Messages appear in Team Chat as if the user sent them manually.

When to Use

✅ Use Team Chat API when:

  • You want to send simple text messages programmatically

  • Messages should appear as sent by a specific user

  • You're building CI/CD notifications

  • You're automating user-level messaging

  • You don't need interactive components (buttons, forms)

Key Characteristics
AspectDetails
AuthenticationUser OAuth (authorization_code flow)
EndpointPOST https://api.zoom.us/v2/chat/users/me/messages
Message FormatPlain text or markdown
Scopeschat_message:write, chat_channel:read
User ExperienceMessages appear from the authenticated user
Example Use Cases
  1. CI/CD Notifications

    User: "Build #123 completed successfully"
  2. Automated Reporting

    User: "Daily sales report: $10,000"
  3. Task Reminders

    User: "Reminder: Team meeting in 15 minutes"

Chatbot API (Bot-Level Interactions)

What It Is

The Chatbot API allows your application to send messages as a bot. Bots can send rich, interactive messages with buttons, forms, images, and handle user interactions via webhooks.

When to Use

✅ Use Chatbot API when:

  • You want to build an interactive chatbot

  • You need rich message formatting (cards, buttons, forms)

  • You want to handle slash commands (e.g., /weather)

  • You need to respond to button clicks or form submissions

  • You're integrating LLMs or AI provider APIs

  • You want scheduled notifications

Key Characteristics
AspectDetails
AuthenticationClient Credentials grant
EndpointPOST https://api.zoom.us/v2/im/chat/messages
Message FormatRich cards with components
Scopesimchat:bot (auto-added)
User ExperienceMessages appear from your bot
InteractivityButtons, forms, dropdowns, webhooks
Example Use Cases
  1. Support Bot

    Bot: "How can I help you?"
    [Help Center] [Contact Support] [Report Bug]
  2. Approval Workflow

    Bot: "Expense Report: $500"
    Branch: main
    Requester: John
    [Approve] [Reject]
  3. AI Assistant

    User: "/ask What's the weather?"
    Bot: "The weather in San Francisco is 72°F and sunny."

Feature Comparison

FeatureTeam Chat APIChatbot API
Plain Text Messages✅✅
Markdown✅✅
Rich Cards❌✅
Buttons❌✅
Forms❌✅
Dropdowns❌✅
Images✅ (basic)✅ (rich)
Slash Commands❌✅
Webhooks❌✅
Button Click Handling❌✅
Form Submissions❌✅

Authentication Comparison

Team Chat API (User OAuth)

Flow: authorization_code Requires: User login and consent Token Scope: User's data only

// Step 1: Redirect user to OAuth consent page
const authUrl = `https://zoom.us/oauth/authorize?response_type=code&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}`;

// Step 2: Exchange auth code for access token
const tokens = await exchangeCodeForToken(code);

// Step 3: Use access token to send messages
fetch('https://api.zoom.us/v2/chat/users/me/messages', {
  headers: { 'Authorization': `Bearer ${tokens.access_token}` }
});
Chatbot API (Client Credentials)

Flow: client_credentials Requires: No user login Token Scope: Bot actions only

// Step 1: Get bot token (no user interaction)
const credentials = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString('base64');
const response = await fetch('https://zoom.us/oauth/token', {
  method: 'POST',
  headers: { 'Authorization': `Basic ${credentials}` },
  body: 'grant_type=client_credentials'
});

const { access_token } = await response.json();

// Step 2: Use access token to send bot messages
fetch('https://api.zoom.us/v2/im/chat/messages', {
  headers: { 'Authorization': `Bearer ${access_token}` }
});

Can I Use Both?

Yes! You can use both APIs in the same application.

Example: Task management app

  • Team Chat API: User creates a task → message appears as "User created task #123"

  • Chatbot API: Bot sends reminders → "Task #123 is due today [View] [Snooze]"

Decision Tree

Need rich interactive messages?
├─ Yes → Chatbot API
└─ No
   └─ Need webhooks (slash commands, button clicks)?
      ├─ Yes → Chatbot API
      └─ No
         └─ Messages should appear as user?
            ├─ Yes → Team Chat API
            └─ No → Chatbot API

Common Misconceptions

❌ "I need to use Server-to-Server OAuth for bots"

Reality: Chatbots require General App (OAuth), not Server-to-Server OAuth. S2S apps don't support the Chatbot feature.

❌ "Team Chat API can send buttons"

Reality: Only Chatbot API supports interactive components (buttons, forms, dropdowns).

❌ "Chatbot API requires user login"

Reality: Chatbot API uses client_credentials flow (no user login needed).

❌ "OAuth token endpoint is /oauth/token"

Reality: Use https://zoom.us/oauth/token for token exchange. Keep https://zoom.us/oauth/authorize for the user consent step.

❌ "I can only use one API per app"

Reality: You can use both APIs in the same application.

Next Steps

If you chose Team Chat API:
  1. Environment Setup - Get credentials

  2. OAuth Setup - Implement OAuth flow

  3. Send Message - Send your first message

If you chose Chatbot API:
  1. Environment Setup - Get credentials (including Bot JID)

  2. Chatbot Setup - Build your first bot

  3. Webhook Architecture - Understand webhook events

Resources

Requirements and compatibility

Written for: OpenAI Codex

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Medium risk

  • Possible data-exfiltration endpoints
  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Zoom
Publisher
OpenAI (Official)
Distributed by
OpenAI
Source
openai/plugins · plugins/zoom/skills/team-chat · commit d420d13
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from plugins/zoom/LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Zoom or OpenAI.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download build-zoom-team-chat-app.zip