> ## Documentation Index
> Fetch the complete documentation index at: https://developers.notion.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get plugin

> Download a plugin directory containing skills and supporting files.

Pass in an `id` from [List plugins](/reference/agent-skills/list-skills-plugins).

Returns a signed URL to a gzipped tar archive of a plugin directory following the [Agent Plugins](https://agent-plugins.org) standard.

Currently plugins returned by Notion only contain skills and no MCP resources or extensions, but this may change in the future. You should treat the entire folder returned by the API as a standard-compliant plugin.

For an overview of how to use the Agent Skills API, see the [guide overview](/guides/agent-skills/overview).

## Plugin size limits

A plugin directory includes at most 100 skills; when a plugin has more, the most recently updated ones are included.

## Errors

| Status | Code                  | Cause                                                                             |
| :----- | :-------------------- | :-------------------------------------------------------------------------------- |
| 404    | `directory_not_found` | No plugin with that ID is shared with the connection, or the ID no longer exists. |
| 403    | `restricted_resource` | The token lacks the **Read content** capability.                                  |


## OpenAPI

````yaml openapi.json GET /v1/ai/plugins/{id}
openapi: 3.1.0
info:
  title: Notion API
  version: 1.0.0
  termsOfService: >-
    https://notion.notion.site/Terms-and-Privacy-28ffdd083dc3473e9c2da6ec011b58ac
servers:
  - url: https://api.notion.com
security:
  - bearerAuth: []
tags:
  - name: Agent Skills
    description: Skill and plugin directory endpoints
  - name: Databases
    description: Database endpoints
  - name: Data sources
    description: Data source endpoints
  - name: Pages
    description: Page endpoints
  - name: Async tasks
    description: Async task endpoints
  - name: Blocks
    description: Block endpoints
  - name: Comments
    description: Comment endpoints
  - name: File uploads
    description: File upload endpoints
  - name: OAuth
    description: OAuth endpoints (basic authentication)
  - name: Users
    description: User endpoints
  - name: Search
    description: Search endpoints
  - name: Views
    description: View endpoints
  - name: Agents
    description: Agent endpoints
  - name: Sessions
    description: Session endpoints
  - name: Custom emojis
    description: Custom emoji endpoints
  - name: Meeting notes
    description: Meeting notes endpoints
paths:
  /v1/ai/plugins/{id}:
    get:
      tags:
        - Agent Skills
      summary: Get a plugin directory
      operationId: get-plugin-directory
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 200
            pattern: ^[^\u0000-\u001f\u007f]+$
            examples:
              - 9b4a1d3f-1f0a-4c2a-9f0b-6c1f5a3d2e10
        - $ref: '#/components/parameters/notionVersion'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  version_id:
                    type: string
                    minLength: 64
                    maxLength: 64
                    description: >-
                      Opaque version identifier for the plugin directory.
                      Compare this value for equality to determine whether the
                      directory has changed. This matches the version_id in the
                      corresponding plugin summary.
                  url:
                    type: string
                    description: >-
                      Temporary signed URL for downloading the plugin directory
                      as a gzipped tar archive.
                additionalProperties: false
                required:
                  - id
                  - version_id
                  - url
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_400'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_401'
        '403':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_403'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_404'
        '406':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_406'
        '409':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_409'
        '429':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_429'
        '500':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_500'
        '503':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_503'
        '504':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_504'
        '529':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_529'
      x-codeSamples:
        - lang: javascript
          label: TypeScript SDK
          source: |-
            import { Client } from "@notionhq/client"

            const notion = new Client({
              auth: process.env.NOTION_API_KEY,
              notionVersion: "2026-03-11"
            })

            const pluginId = "b2d0a1f4-9c3e-4c07-9a1d-5f6e7c8b9a01"
            const response = await notion.request({
              method: "get",
              path: "ai/plugins/" + encodeURIComponent(pluginId)
            })
components:
  parameters:
    notionVersion:
      name: Notion-Version
      in: header
      required: true
      schema:
        enum:
          - '2026-03-11'
      description: >-
        The [API version](/reference/versioning) to use for this request. The
        latest version is `2026-03-11`.
  schemas:
    error_api_400:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - invalid_json
                - invalid_request_url
                - invalid_request
                - missing_version
                - invalid_beta
                - validation_error
                - invalid_credit_limit
            status:
              const: 400
          required:
            - code
            - status
          additionalProperties: false
    error_api_401:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - unauthorized
            status:
              const: 401
          required:
            - code
            - status
          additionalProperties: false
    error_api_403:
      oneOf:
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  enum:
                    - restricted_resource
                    - status_change_not_allowed
                status:
                  const: 403
              required:
                - code
                - status
              additionalProperties: false
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  const: workspace_credits_exhausted
                status:
                  const: 403
                additional_data:
                  type: object
                  properties:
                    tool_error_code:
                      const: workspace_credits_exhausted
                    tool_error_class:
                      const: entitlement_required
                    tool_error_retryable:
                      const: 'false'
                    recovery_kind:
                      enum:
                        - contact_workspace_owner
                        - open_workspace_credit_settings
                      description: The recovery action selected by Notion for the caller.
                    recovery_url:
                      type: string
                      format: uri
                      description: >-
                        Present when recovery_kind directs the caller to a
                        settings page.
                  required:
                    - tool_error_code
                    - tool_error_class
                    - tool_error_retryable
                    - recovery_kind
                  additionalProperties:
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
              required:
                - code
                - status
                - additional_data
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  const: agent_credit_limit_reached
                status:
                  const: 403
                additional_data:
                  type: object
                  properties:
                    tool_error_code:
                      const: agent_credit_limit_reached
                    tool_error_class:
                      const: entitlement_required
                    tool_error_retryable:
                      const: 'false'
                    recovery_kind:
                      enum:
                        - contact_workspace_owner
                        - none
                        - open_agent_settings
                        - request_agent_limit_increase
                        - request_pending
                      description: The recovery action selected by Notion for the caller.
                    recovery_url:
                      type: string
                      format: uri
                      description: >-
                        Present when recovery_kind directs the caller to a
                        settings page.
                  required:
                    - tool_error_code
                    - tool_error_class
                    - tool_error_retryable
                    - recovery_kind
                  additionalProperties:
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
              required:
                - code
                - status
                - additional_data
    error_api_404:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - object_not_found
                - directory_not_found
            status:
              const: 404
          required:
            - code
            - status
          additionalProperties: false
    error_api_406:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - row_limit_exceeded
            status:
              const: 406
          required:
            - code
            - status
          additionalProperties: false
    error_api_409:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - conflict_error
                - idempotency_key_reused
                - agent_deleted
            status:
              const: 409
          required:
            - code
            - status
          additionalProperties: false
    error_api_429:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - rate_limited
            status:
              const: 429
          required:
            - code
            - status
          additionalProperties: false
    error_api_500:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - internal_server_error
            status:
              const: 500
          required:
            - code
            - status
          additionalProperties: false
    error_api_503:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - service_unavailable
            status:
              const: 503
          required:
            - code
            - status
          additionalProperties: false
    error_api_504:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - gateway_timeout
            status:
              const: 504
          required:
            - code
            - status
          additionalProperties: false
    error_api_529:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - service_overload
            status:
              const: 529
          required:
            - code
            - status
          additionalProperties: false
    publicApiCommonErrorResponse:
      type: object
      properties:
        object:
          const: error
        message:
          type: string
        additional_data:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: array
                items:
                  type: string
      required:
        - object
        - message
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````