Create Package
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages \
--header 'Content-Type: application/json' \
--data '
{
"version": "<string>",
"metadata": {
"metadata.description": "<string>",
"metadata.tags": [
"<string>"
]
}
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages"
payload = {
"version": "<string>",
"metadata": {
"metadata.description": "<string>",
"metadata.tags": ["<string>"]
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
version: '<string>',
metadata: {'metadata.description': '<string>', 'metadata.tags': ['<string>']}
})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages', 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}/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'version' => '<string>',
'metadata' => [
'metadata.description' => '<string>',
'metadata.tags' => [
'<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages"
payload := strings.NewReader("{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
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}/packages")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_bodyPackages
Create Package
Create a new package, publishing all draft and modified components
POST
/
app
/
v1
/
organizations
/
{organizationId}
/
projects
/
{projectId}
/
packages
Create Package
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages \
--header 'Content-Type: application/json' \
--data '
{
"version": "<string>",
"metadata": {
"metadata.description": "<string>",
"metadata.tags": [
"<string>"
]
}
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages"
payload = {
"version": "<string>",
"metadata": {
"metadata.description": "<string>",
"metadata.tags": ["<string>"]
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
version: '<string>',
metadata: {'metadata.description': '<string>', 'metadata.tags': ['<string>']}
})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages', 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}/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'version' => '<string>',
'metadata' => [
'metadata.description' => '<string>',
'metadata.tags' => [
'<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages"
payload := strings.NewReader("{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
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}/packages")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/packages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"<string>\",\n \"metadata\": {\n \"metadata.description\": \"<string>\",\n \"metadata.tags\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_bodyRequest Body
Semantic version number (e.g.,
1.0.0, 2.1.0)Example Request
{
"version": "1.0.0",
"metadata": {
"description": "Initial release with core UI components",
"tags": ["ui", "core"]
}
}
Creating a package will automatically publish all draft and modified components, assigning them new version numbers. This action cannot be undone.
Response
Returns the created Package object along with validation results showing what changed.{
"package": {
"id": "pkg123",
"projectId": "proj123",
"version": "1.0.0",
"components": [
{
"id": "comp123",
"name": "ProductCard",
"type": "view",
"version": 1
},
{
"id": "comp124",
"name": "ArticleLayout",
"type": "layout",
"version": 1
}
],
"assets": [...],
"compiled": {...},
"dependencies": [...],
"metadata": {
"author": "user123",
"description": "Initial release with core UI components",
"tags": ["ui", "core"]
},
"createdAt": "2024-03-20T10:00:00Z",
"updatedAt": "2024-03-20T10:00:00Z"
},
"validation": {
"componentChanges": {
"added": ["comp123"],
"updated": ["comp124", "comp125"],
"deleted": []
},
"statusChanges": {
"draft": ["comp123"],
"modified": ["comp124"],
"published": ["comp125"]
},
"versionIncrements": {
"comp123": { "from": null, "to": 1 },
"comp124": { "from": 2, "to": 3 }
}
}
}
Error Responses
Version Already Exists
{
"error": {
"code": "PACKAGE_VERSION_EXISTS",
"message": "Package version 1.0.0 already exists"
}
}
No Components
{
"error": {
"code": "NO_COMPONENTS_TO_PACKAGE",
"message": "Cannot create package: project contains no components. Create at least one component before creating a package."
}
}
Code Examples
curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/packages" \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"version": "1.0.0",
"metadata": {
"description": "Initial release"
}
}'
const response = await fetch(
'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/packages',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_JWT',
'Content-Type': 'application/json'
},
body: JSON.stringify({
version: '1.0.0',
metadata: {
description: 'Initial release'
}
})
}
);
const { package: pkg, validation } = await response.json();
console.log(`Created package ${pkg.version} with ${pkg.components.length} components`);
⌘I