Skip to content

Plugin manifest

Installation and review validate this contract. Download the full example and try the playground validator.

{
  "key": "com.example.minutes",
  "name": "Meeting minutes",
  "version": "1.0.0",
  "description": "Review decisions and action items.",
  "uiUrl": "https://plugins.example.com/minutes",
  "configurationUrl": "https://plugins.example.com/settings",
  "meetingTabs": [
    {
      "id": "minutes",
      "title": "Meeting minutes",
      "url": "https://plugins.example.com/minutes"
    }
  ],
  "sidebarActions": [
    {
      "id": "prepare",
      "title": "Prepare minutes",
      "url": "https://plugins.example.com/prepare"
    }
  ],
  "permissions": [
    "meeting:read",
    "transcript:read",
    "notes:write",
    "tags:read",
    "identity:read",
    "settings:read",
    "settings:write"
  ]
}
Field Rule
key 3–80 characters; starts with a lowercase letter; lowercase letters, digits, dots and hyphens
name 1–80 characters
version Three numeric groups, e.g. 1.0.0
description Up to 1000 characters
uiUrl Public HTTPS, no credentials or custom port
configurationUrl Optional; same origin as uiUrl
meetingTabs Up to 3 tabs with id, title, url
sidebarActions Up to 3 actions with id, title, url
permissions 1–7 permissions

Surface IDs are unique across tabs and actions, at most 40 characters, matching [a-z][a-z0-9-]*. Titles have 1–40 characters. Every URL is at most 2048 characters and shares the plugin's public origin. Unknown fields are rejected.

Available permissions

meeting:read, transcript:read, tags:read, notes:write, identity:read, settings:read, settings:write.

Request only what you need. session renews an SDK grant; it is not a manifest permission. The server rechecks authorization on every call. See the operation contracts.

Hosting the manifest

Serve GET /manifest.json under the base URL submitted in the dashboard. See the URL submission and endpoint contract for limits, revalidation and private/public audiences.