Optimize an article for SEO and save the result
curl --request POST \
--url https://api.octaviatech.app/cms/ai/optimizeArticle \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"articleId": "{{objectId}}",
"primaryKeyword": "intermittent fasting",
"languages": [
"en"
],
"fields": {
"title": true,
"content": true
}
}
'import requests
url = "https://api.octaviatech.app/cms/ai/optimizeArticle"
payload = {
"articleId": "{{objectId}}",
"primaryKeyword": "intermittent fasting",
"languages": ["en"],
"fields": {
"title": True,
"content": True
}
}
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({
articleId: '{{objectId}}',
primaryKeyword: 'intermittent fasting',
languages: ['en'],
fields: {title: true, content: true}
})
};
fetch('https://api.octaviatech.app/cms/ai/optimizeArticle', 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.octaviatech.app/cms/ai/optimizeArticle",
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([
'articleId' => '{{objectId}}',
'primaryKeyword' => 'intermittent fasting',
'languages' => [
'en'
],
'fields' => [
'title' => true,
'content' => true
]
]),
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.octaviatech.app/cms/ai/optimizeArticle"
payload := strings.NewReader("{\n \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\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.octaviatech.app/cms/ai/optimizeArticle")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.octaviatech.app/cms/ai/optimizeArticle")
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 \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"statusCode": 200,
"message": "AI SEO optimization generated and saved successfully",
"data": {
"articleId": "{{objectId}}",
"patched": {
"en": {
"title": "…",
"summary": "…",
"contentHtml": "<p>…</p>",
"tags": [
"fasting"
]
}
},
"seo": {
"before": {
"en": {
"score": 62
}
},
"after": {
"en": {
"score": 91
}
}
},
"saved": true
}
}AI Automation
Optimize an article for SEO and save the result
Optimizes each target language of the article and persists the patched fields plus the recomputed seo.perLanguage metrics. When languages is omitted, every language present on the article is optimized. title, summary and content default to true; tags defaults to false.
POST
/
ai
/
optimizeArticle
Optimize an article for SEO and save the result
curl --request POST \
--url https://api.octaviatech.app/cms/ai/optimizeArticle \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"articleId": "{{objectId}}",
"primaryKeyword": "intermittent fasting",
"languages": [
"en"
],
"fields": {
"title": true,
"content": true
}
}
'import requests
url = "https://api.octaviatech.app/cms/ai/optimizeArticle"
payload = {
"articleId": "{{objectId}}",
"primaryKeyword": "intermittent fasting",
"languages": ["en"],
"fields": {
"title": True,
"content": True
}
}
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({
articleId: '{{objectId}}',
primaryKeyword: 'intermittent fasting',
languages: ['en'],
fields: {title: true, content: true}
})
};
fetch('https://api.octaviatech.app/cms/ai/optimizeArticle', 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.octaviatech.app/cms/ai/optimizeArticle",
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([
'articleId' => '{{objectId}}',
'primaryKeyword' => 'intermittent fasting',
'languages' => [
'en'
],
'fields' => [
'title' => true,
'content' => true
]
]),
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.octaviatech.app/cms/ai/optimizeArticle"
payload := strings.NewReader("{\n \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\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.octaviatech.app/cms/ai/optimizeArticle")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.octaviatech.app/cms/ai/optimizeArticle")
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 \"articleId\": \"{{objectId}}\",\n \"primaryKeyword\": \"intermittent fasting\",\n \"languages\": [\n \"en\"\n ],\n \"fields\": {\n \"title\": true,\n \"content\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"statusCode": 200,
"message": "AI SEO optimization generated and saved successfully",
"data": {
"articleId": "{{objectId}}",
"patched": {
"en": {
"title": "…",
"summary": "…",
"contentHtml": "<p>…</p>",
"tags": [
"fasting"
]
}
},
"seo": {
"before": {
"en": {
"score": 62
}
},
"after": {
"en": {
"score": 91
}
}
},
"saved": true
}
}Authorizations
Body
application/json
Example:
"{{objectId}}"
Keyword to target; falls back to the article's stored per-language primary keyword
Example:
"intermittent fasting"
Language codes to optimize. Ignored codes that the article does not have. Defaults to all available languages.
Example:
["en", "es"]
Per-field opt-in. Unspecified fields keep their defaults.
Show child attributes
Show child attributes
Was this page helpful?

