Publish Content Type
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-types/{id}/publishimport requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-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}/content-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}/content-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}/content-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}/content-types/{id}/publish")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-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}
/
content-types
/
{id}
/
publish
Publish Content Type
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-types/{id}/publishimport requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-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}/content-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}/content-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}/content-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}/content-types/{id}/publish")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content-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
Organization ID
Project ID
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,
"layoutComponentId": "c123",
"componentIdsAllowList": ["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",
"message": "Cannot publish content type with status: deleted"
}
}
Invalid Components
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Content type references components not in the specified package version",
"details": {
"invalidComponentIds": ["c999"]
}
}
}
Code Examples
curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/content-types/ct123/publish" \
-H "Authorization: Bearer YOUR_JWT"
const response = await fetch(
'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/content-types/ct123/publish',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_JWT'
}
}
);
const contentType = await response.json();
console.log(`Published version ${contentType.version}`);
⌘I