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

# Publish Content Type

> Publish a content type, creating a new version

Publishing a content type creates a new immutable version. This version becomes the active definition for creating new content of this type.

## Path Parameters

<ParamField path="organizationId" type="string" required>
  Organization ID
</ParamField>

<ParamField path="projectId" type="string" required>
  Project ID
</ParamField>

<ParamField path="id" type="string" required>
  Content Type ID
</ParamField>

## Response

Returns the published ContentType object with the new version number.

```json theme={null}
{
  "id": "ct123",
  "name": "Article",
  "description": "Standard article content type...",
  "status": "published",
  "version": 4,
  "lastPublishedVersion": 4,
  "rootComponentId": "c123",
  "config": {
    "allowedComponents": ["c124", "c125", "c126"]
  },
  "packageVersion": "1.0.0",
  "schema": { ... },
  "templateContentIds": ["cont123"],
  "permissions": { ... },
  "metadata": {
    "author": "admin@metabind.ai",
    "tags": ["article"],
    "publishedAt": "2024-03-22T10:00:00Z",
    "publishedBy": "user123"
  },
  "createdAt": "2024-03-20T10:00:00Z",
  "updatedAt": "2024-03-22T10:00:00Z"
}
```

## Status Transitions

| Current Status | After Publish |
| - | - |
| `draft` | `published` (version 1) |
| `modified` | `published` (version incremented) |
| `unpublished` | `published` (version incremented) |

<Note>
  Cannot publish a content type with `deleted` status. Restore it first by updating the status.
</Note>

## Error Responses

### Invalid Status

```json theme={null}
{
  "error": {
    "code": "INVALID_STATUS_TRANSITION",
    "message": "Only draft, modified, unpublished, or published content types with draft/modified root component changes can be published"
  }
}
```

### Draft Package Version

```json theme={null}
{
  "error": {
    "code": "INVALID_CONTENT_TYPE_PACKAGE",
    "message": "Cannot publish a ContentType pinned to packageVersion=\"draft\" or with no package version set. Publish a package first, or update the package version to an existing one.",
    "details": {
      "field": "packageVersion",
      "currentValue": "draft",
      "next": [
        "Publish a package to mint a new version",
        "Update the package version to pin to an existing one"
      ]
    }
  }
}
```

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/types/ct123/publish" \
    -H "Authorization: Bearer YOUR_JWT"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/types/ct123/publish',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_JWT'
      }
    }
  );

  const contentType = await response.json();
  console.log(`Published version ${contentType.version}`);
  ```
</CodeGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.