Bulk Migrate Content
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate \
--header 'Content-Type: application/json' \
--data '
{
"contentIds": [
"<string>"
],
"targetTypeVersion": 123
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate"
payload = {
"contentIds": ["<string>"],
"targetTypeVersion": 123
}
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({contentIds: ['<string>'], targetTypeVersion: 123})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate', 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/bulk-migrate",
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([
'contentIds' => [
'<string>'
],
'targetTypeVersion' => 123
]),
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}/content/bulk-migrate"
payload := strings.NewReader("{\n \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\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}/content/bulk-migrate")
.header("Content-Type", "application/json")
.body("{\n \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate")
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 \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\n}"
response = http.request(request)
puts response.read_bodyContent
Bulk Migrate Content
Migrate multiple content items to a new ContentType version
POST
/
app
/
v1
/
organizations
/
{organizationId}
/
projects
/
{projectId}
/
content
/
bulk-migrate
Bulk Migrate Content
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate \
--header 'Content-Type: application/json' \
--data '
{
"contentIds": [
"<string>"
],
"targetTypeVersion": 123
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate"
payload = {
"contentIds": ["<string>"],
"targetTypeVersion": 123
}
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({contentIds: ['<string>'], targetTypeVersion: 123})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate', 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/bulk-migrate",
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([
'contentIds' => [
'<string>'
],
'targetTypeVersion' => 123
]),
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}/content/bulk-migrate"
payload := strings.NewReader("{\n \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\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}/content/bulk-migrate")
.header("Content-Type", "application/json")
.body("{\n \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/content/bulk-migrate")
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 \"contentIds\": [\n \"<string>\"\n ],\n \"targetTypeVersion\": 123\n}"
response = http.request(request)
puts response.read_bodyMigrates multiple content items to a new ContentType version in a single operation. Returns results for each item, including any failures.
Path Parameters
Organization ID
Project ID
Request Body
Array of content IDs to migrate
The ContentType version to migrate to
Example Request
{
"contentIds": ["cont123", "cont124", "cont125"],
"targetTypeVersion": 3
}
Response
Returns arrays of successfully migrated and failed content IDs.{
"succeeded": ["cont123", "cont124"],
"failed": [
{
"id": "cont125",
"reason": "Content does not match target schema"
}
]
}
Bulk migration is atomic per content item. Failures do not rollback successful migrations. Review the
failed array to identify and fix issues.Error Responses
ContentType Version Not Found
{
"error": {
"code": "TYPE_VERSION_NOT_FOUND",
"message": "ContentType version 3 not found"
}
}
Empty Content IDs
{
"error": {
"code": "VALIDATION_FAILED",
"message": "contentIds array cannot be empty"
}
}
Too Many Items
{
"error": {
"code": "LIMIT_EXCEEDED",
"message": "Cannot migrate more than 100 items at once",
"details": {
"provided": 150,
"limit": 100
}
}
}
Code Examples
curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/content/bulk-migrate" \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"contentIds": ["cont123", "cont124", "cont125"],
"targetTypeVersion": 3
}'
const response = await fetch(
'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/content/bulk-migrate',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_JWT',
'Content-Type': 'application/json'
},
body: JSON.stringify({
contentIds: ['cont123', 'cont124', 'cont125'],
targetTypeVersion: 3
})
}
);
const result = await response.json();
console.log(`Successfully migrated: ${result.succeeded.length}`);
console.log(`Failed: ${result.failed.length}`);
// Handle failures
if (result.failed.length > 0) {
for (const failure of result.failed) {
console.log(`Content ${failure.id} failed: ${failure.reason}`);
}
}
⌘I