---
title: "Create plugin"
method: POST
path: "/v1/plugins"
tags: ["Plugins"]
---

# Create plugin

`POST /v1/plugins`

Creates a plugin and can also create components, share org-wide, and publish to a marketplace in one request.

## Request body

- object
  - `name` string, required
  - `description` string, nullable
  - `sourceRepositoryUrl` string
  - `components` object[]
    - `type` 'skill' | 'agent' | 'command' | 'tool' | 'mcp' | 'hook' | 'context' | 'custom' | 'script' | 'workflow' | 'app', required
    - `input` object, required
      - `rawSourceText` string
      - `normalizedPayloadJson` object
      - `parserMode` string
      - `schemaVersion` string
      - `metadata` object
  - `orgWide` boolean
  - `marketplaceId` string, typeid — Den TypeID with 'mkt_' prefix and a 26-character base32 suffix.

## Response `201`

Plugin created successfully.

- PluginArchPluginMutationResponse
  - `ok` true, required
  - `item` PluginArchPlugin, required
    - `id` string, typeid, required — Den TypeID with 'plg_' prefix and a 26-character base32 suffix.
    - `organizationId` string, typeid, required — Den TypeID with 'org_' prefix and a 26-character base32 suffix.
    - `name` string, required
    - `description` string, nullable, required
    - `sourceRepositoryUrl` string, nullable, required
    - `sourceFormat` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', nullable, required
    - `sourceSchemaVersion` string, nullable, required
    - `status` 'active' | 'inactive' | 'deleted' | 'archived', required
    - `createdByOrgMembershipId` string, typeid, required — Den TypeID with 'om_' prefix and a 26-character base32 suffix.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `deletedAt` string, date-time, nullable, required
    - `memberCount` integer
    - `marketplaces` object[]
      - `id` string, typeid, required — Den TypeID with 'mkt_' prefix and a 26-character base32 suffix.
      - `name` string, required
    - `extension` PluginArchExtensionProjection
      - `id` string, typeid, required — Den TypeID with 'plg_' prefix and a 26-character base32 suffix.
      - `name` string, required
      - `description` string, nullable, required
      - `sourceFormat` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', required
      - `manifest` OpenWorkExtensionManifest, required
        - `schemaVersion` 1, required
        - `id` string, required
        - `name` string, required
        - `description` string, required
        - `source` object, required
          - `format` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', required
          - `trusted` boolean, required
          - `origin` 'builtin' | 'den' | 'workspace' | 'local'
          - `reference` string
        - `resources` object[], required
        - `contributions` object[]
        - `setup` object
        - `lifecycle` object

## Other responses

- `400` — The plugin creation request was invalid.
- `401` — The caller must be signed in to create plugins.
- `403` — The caller lacks permission to create plugins.
- `404` — The marketplace could not be found.

## Changes

> 25 revisions in range; 5 could not be searched.

- **2026-08-20** `93df40e2efd5` — 7 info
  - added the new `workflow` enum value to the request property `components/items/type`
  - removed the pattern `^mkt_.*` from the request property `marketplaceId`
  - the `item/createdByOrgMembershipId` response's property pattern `^om_.*` was removed for the status `201`
  - the `item/extension/anyOf[#/components/schemas/PluginArchExtensionProjection]/id` response's property pattern `^plg_.*` was removed for the status `201`
  - …3 more
- **2026-08-14** `6915dfb03e5d` — 1 info
  - added the new `app` enum value to the request property `components/items/type`
- **2026-08-10** `54cdbd4ecffa` — 1 info
  - added the new `script` enum value to the request property `components/items/type`

[Change history](https://skmtc.dev/openworklabs/apis/den-api/changes/v1/plugins/post.md)

---

[API](https://skmtc.dev/openworklabs/apis/den-api.md) · [All operations](https://skmtc.dev/openworklabs/apis/den-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openworklabs/den-api/revisions/571dc4a74532/schema)
