curl --request POST \
--url https://api.parallellabs.app/api/v0/content \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"title": "<string>",
"type": "<string>",
"status": "<string>",
"category": "<string>",
"topicSummary": "<string>",
"hookOptions": [
"<string>"
],
"selectedHook": "<string>",
"funnelStage": "<string>",
"metaDescription": "<string>",
"focusKeyword": "<string>",
"seoTitle": "<string>",
"slug": "<string>",
"variants": {},
"body": "<string>",
"publishDate": "<string>",
"publishedDate": "<string>",
"publishedUrl": "<string>",
"externalId": "<string>",
"platformType": "<string>",
"campaignId": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/content"
payload = {
"companyId": "<string>",
"title": "<string>",
"type": "<string>",
"status": "<string>",
"category": "<string>",
"topicSummary": "<string>",
"hookOptions": ["<string>"],
"selectedHook": "<string>",
"funnelStage": "<string>",
"metaDescription": "<string>",
"focusKeyword": "<string>",
"seoTitle": "<string>",
"slug": "<string>",
"variants": {},
"body": "<string>",
"publishDate": "<string>",
"publishedDate": "<string>",
"publishedUrl": "<string>",
"externalId": "<string>",
"platformType": "<string>",
"campaignId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
companyId: '<string>',
title: '<string>',
type: '<string>',
status: '<string>',
category: '<string>',
topicSummary: '<string>',
hookOptions: ['<string>'],
selectedHook: '<string>',
funnelStage: '<string>',
metaDescription: '<string>',
focusKeyword: '<string>',
seoTitle: '<string>',
slug: '<string>',
variants: {},
body: JSON.stringify('<string>'),
publishDate: '<string>',
publishedDate: '<string>',
publishedUrl: '<string>',
externalId: '<string>',
platformType: '<string>',
campaignId: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/content', 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.parallellabs.app/api/v0/content",
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([
'companyId' => '<string>',
'title' => '<string>',
'type' => '<string>',
'status' => '<string>',
'category' => '<string>',
'topicSummary' => '<string>',
'hookOptions' => [
'<string>'
],
'selectedHook' => '<string>',
'funnelStage' => '<string>',
'metaDescription' => '<string>',
'focusKeyword' => '<string>',
'seoTitle' => '<string>',
'slug' => '<string>',
'variants' => [
],
'body' => '<string>',
'publishDate' => '<string>',
'publishedDate' => '<string>',
'publishedUrl' => '<string>',
'externalId' => '<string>',
'platformType' => '<string>',
'campaignId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/content"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/content")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"id": "<string>",
"content": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Manually create a new content engine record.
Use this to insert a content piece directly (skipping AI ideation/generation),
e.g. to import an existing post or log content authored elsewhere. The body
is set via either variants.default or the body convenience field.
curl --request POST \
--url https://api.parallellabs.app/api/v0/content \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"title": "<string>",
"type": "<string>",
"status": "<string>",
"category": "<string>",
"topicSummary": "<string>",
"hookOptions": [
"<string>"
],
"selectedHook": "<string>",
"funnelStage": "<string>",
"metaDescription": "<string>",
"focusKeyword": "<string>",
"seoTitle": "<string>",
"slug": "<string>",
"variants": {},
"body": "<string>",
"publishDate": "<string>",
"publishedDate": "<string>",
"publishedUrl": "<string>",
"externalId": "<string>",
"platformType": "<string>",
"campaignId": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/content"
payload = {
"companyId": "<string>",
"title": "<string>",
"type": "<string>",
"status": "<string>",
"category": "<string>",
"topicSummary": "<string>",
"hookOptions": ["<string>"],
"selectedHook": "<string>",
"funnelStage": "<string>",
"metaDescription": "<string>",
"focusKeyword": "<string>",
"seoTitle": "<string>",
"slug": "<string>",
"variants": {},
"body": "<string>",
"publishDate": "<string>",
"publishedDate": "<string>",
"publishedUrl": "<string>",
"externalId": "<string>",
"platformType": "<string>",
"campaignId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
companyId: '<string>',
title: '<string>',
type: '<string>',
status: '<string>',
category: '<string>',
topicSummary: '<string>',
hookOptions: ['<string>'],
selectedHook: '<string>',
funnelStage: '<string>',
metaDescription: '<string>',
focusKeyword: '<string>',
seoTitle: '<string>',
slug: '<string>',
variants: {},
body: JSON.stringify('<string>'),
publishDate: '<string>',
publishedDate: '<string>',
publishedUrl: '<string>',
externalId: '<string>',
platformType: '<string>',
campaignId: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/content', 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.parallellabs.app/api/v0/content",
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([
'companyId' => '<string>',
'title' => '<string>',
'type' => '<string>',
'status' => '<string>',
'category' => '<string>',
'topicSummary' => '<string>',
'hookOptions' => [
'<string>'
],
'selectedHook' => '<string>',
'funnelStage' => '<string>',
'metaDescription' => '<string>',
'focusKeyword' => '<string>',
'seoTitle' => '<string>',
'slug' => '<string>',
'variants' => [
],
'body' => '<string>',
'publishDate' => '<string>',
'publishedDate' => '<string>',
'publishedUrl' => '<string>',
'externalId' => '<string>',
'platformType' => '<string>',
'campaignId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/content"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/content")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"title\": \"<string>\",\n \"type\": \"<string>\",\n \"status\": \"<string>\",\n \"category\": \"<string>\",\n \"topicSummary\": \"<string>\",\n \"hookOptions\": [\n \"<string>\"\n ],\n \"selectedHook\": \"<string>\",\n \"funnelStage\": \"<string>\",\n \"metaDescription\": \"<string>\",\n \"focusKeyword\": \"<string>\",\n \"seoTitle\": \"<string>\",\n \"slug\": \"<string>\",\n \"variants\": {},\n \"body\": \"<string>\",\n \"publishDate\": \"<string>\",\n \"publishedDate\": \"<string>\",\n \"publishedUrl\": \"<string>\",\n \"externalId\": \"<string>\",\n \"platformType\": \"<string>\",\n \"campaignId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"id": "<string>",
"content": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Body
Content fields for the new record
Request body for manually creating a content engine record
Company ID
Content title
Content type. One of: blog_post, facebook_post, linkedin_post, instagram_post, x_post, youtube_video, tiktok_video, email_newsletter, podcast_episode, website_copy, marketing_email, ad_copy, press_release
Content status (default: draft). One of: ideated, generating, draft, scheduled, published, archived
Content category
Topic summary
List of hook options
Selected hook
Funnel stage: N/A, tofu, mofu, bofu
Meta description (used for SEO and social previews)
Search phrase the post targets (blog posts only; blank for idea-only posts)
SERP , distinct from the article title (<=60 chars; blog posts only)
Short URL slug for the published post (blog posts only)
Content variants. Use {default: ''} to set the main body.
Convenience field for the main body. Stored at variants.default. Ignored if variants is provided.
Planned publish date (ISO 8601 datetime)
Actual publish date when status is published (ISO 8601)
Public URL of the published content
External platform identifier
Platform the content was published to (e.g., wordpress, linkedin)
Campaign ID to associate this content with

