Publish Content Type
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publishimport requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyContent Types
Publish Content Type
Publish a content type, creating a new version
POST
/
app
/
v1
/
organizations
/
{organizationId}
/
projects
/
{projectId}
/
types
/
{id}
/
publish
Publish Content Type
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publishimport requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/types/{id}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyPublishing a content type creates a new immutable version. This version becomes the active definition for creating new content of this type.
Path Parameters
string
required
Organization ID
string
required
Project ID
string
required
Content Type ID
Response
Returns the published ContentType object with the new version number.{
"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) |
Cannot publish a content type with
deleted status. Restore it first by updating the status.Error Responses
Invalid Status
{
"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
{
"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
curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/types/ct123/publish" \
-H "Authorization: Bearer YOUR_JWT"
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}`);