curl --request POST \
--url https://api.rankspot.ai/v1/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "write_article",
"title": "How to Start a Blog in 2024",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"slug": "how-to-start-a-blog",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keywordIds": [
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
],
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"fanoutQueryIds": [
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
]
}
'import requests
url = "https://api.rankspot.ai/v1/actions"
payload = {
"type": "write_article",
"title": "How to Start a Blog in 2024",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"slug": "how-to-start-a-blog",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keywordIds": ["6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"],
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"fanoutQueryIds": ["6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94", "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'write_article',
title: 'How to Start a Blog in 2024',
shortDescription: 'Cited in 6 ChatGPT answers — you are in none.',
description: 'A comprehensive guide for beginners.',
additionalInstructions: 'Focus on WordPress.',
slug: 'how-to-start-a-blog',
categoryId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
keywordIds: ['6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'],
articleId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
citationId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
backlinkId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
competitorId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
fanoutQueryIds: ['6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94', '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94']
})
};
fetch('https://api.rankspot.ai/v1/actions', 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.rankspot.ai/v1/actions",
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([
'type' => 'write_article',
'title' => 'How to Start a Blog in 2024',
'shortDescription' => 'Cited in 6 ChatGPT answers — you are in none.',
'description' => 'A comprehensive guide for beginners.',
'additionalInstructions' => 'Focus on WordPress.',
'slug' => 'how-to-start-a-blog',
'categoryId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'keywordIds' => [
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'
],
'articleId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'citationId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'backlinkId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'competitorId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'fanoutQueryIds' => [
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.rankspot.ai/v1/actions"
payload := strings.NewReader("{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.rankspot.ai/v1/actions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rankspot.ai/v1/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"type": "write_article",
"title": "How to Start a Blog in 2024",
"status": "new",
"fanoutQueries": [
{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"query": "best screen recording software for mac 2026"
}
],
"keywords": [
{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keyword": "start a blog"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"slug": "how-to-start-a-blog",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"completedAt": "<string>",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citation": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"url": "https://zapier.com/blog/best-screen-recorders/",
"domain": "zapier.com",
"isOwnDomain": false,
"title": "The 12 best screen recorders"
},
"backlink": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"domainFrom": "ahrefs.com",
"urlFrom": "https://ahrefs.com/blog/seo-tools/",
"dofollow": true,
"domainFromRank": 91
},
"competitor": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"name": "Ahrefs",
"domain": "ahrefs.com"
}
}Create an action
type is required and has no default, and it decides which other fields apply:
write_article— plan a piece of content, then call POST /v1/actions/:id/generate to write it. Requires no target.update_article— any edit to an existing article, with the instruction in additionalInstructions. RequiresarticleId.earn_link— go after a referring domain your competitors have. RequiresbacklinkId.get_cited— get onto a page AI engines already cite. RequirescitationId.reply_thread— reply on a cited Reddit or Quora thread. RequirescitationId.record_video— make a video of your own, since you cannot be added to someone else’s. RequirescitationId.track_competitor— start tracking a brand RankSpot discovered in AI answers. RequirescompetitorId.add_prompt— track a question buyers ask that no existing prompt covers. Requires no target.publish_article— push a finished article to the workspace integrations. RequiresarticleId.request_indexing— ask Google to index a published page it has missed. RequiresarticleId.other— anything you just want written down. Requires no target.
slug, categoryId and keywordIds apply to write_article only; fanoutQueryIds to write_article, update_article and add_prompt. They are dropped rather than rejected on the other types. A missing or out-of-workspace target is a 400. Actions are appended to the end of the internal ordering.
shortDescription is the line shown under the title in a list and is usually the only text anyone reads — lead with the evidence rather than restating the title. description is the fuller explanation shown when the action is opened, except on write_article where it is the generation brief.
curl --request POST \
--url https://api.rankspot.ai/v1/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "write_article",
"title": "How to Start a Blog in 2024",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"slug": "how-to-start-a-blog",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keywordIds": [
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
],
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"fanoutQueryIds": [
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
]
}
'import requests
url = "https://api.rankspot.ai/v1/actions"
payload = {
"type": "write_article",
"title": "How to Start a Blog in 2024",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"slug": "how-to-start-a-blog",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keywordIds": ["6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"],
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"fanoutQueryIds": ["6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94", "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'write_article',
title: 'How to Start a Blog in 2024',
shortDescription: 'Cited in 6 ChatGPT answers — you are in none.',
description: 'A comprehensive guide for beginners.',
additionalInstructions: 'Focus on WordPress.',
slug: 'how-to-start-a-blog',
categoryId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
keywordIds: ['6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'],
articleId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
citationId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
backlinkId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
competitorId: '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
fanoutQueryIds: ['6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94', '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94']
})
};
fetch('https://api.rankspot.ai/v1/actions', 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.rankspot.ai/v1/actions",
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([
'type' => 'write_article',
'title' => 'How to Start a Blog in 2024',
'shortDescription' => 'Cited in 6 ChatGPT answers — you are in none.',
'description' => 'A comprehensive guide for beginners.',
'additionalInstructions' => 'Focus on WordPress.',
'slug' => 'how-to-start-a-blog',
'categoryId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'keywordIds' => [
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'
],
'articleId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'citationId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'backlinkId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'competitorId' => '6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'fanoutQueryIds' => [
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94',
'6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.rankspot.ai/v1/actions"
payload := strings.NewReader("{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.rankspot.ai/v1/actions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rankspot.ai/v1/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"write_article\",\n \"title\": \"How to Start a Blog in 2024\",\n \"shortDescription\": \"Cited in 6 ChatGPT answers — you are in none.\",\n \"description\": \"A comprehensive guide for beginners.\",\n \"additionalInstructions\": \"Focus on WordPress.\",\n \"slug\": \"how-to-start-a-blog\",\n \"categoryId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"keywordIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ],\n \"articleId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"citationId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"backlinkId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"competitorId\": \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"fanoutQueryIds\": [\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\",\n \"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"type": "write_article",
"title": "How to Start a Blog in 2024",
"status": "new",
"fanoutQueries": [
{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"query": "best screen recording software for mac 2026"
}
],
"keywords": [
{
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"keyword": "start a blog"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"slug": "how-to-start-a-blog",
"shortDescription": "Cited in 6 ChatGPT answers — you are in none.",
"description": "A comprehensive guide for beginners.",
"additionalInstructions": "Focus on WordPress.",
"completedAt": "<string>",
"categoryId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"articleId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citationId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"backlinkId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"competitorId": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"citation": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"url": "https://zapier.com/blog/best-screen-recorders/",
"domain": "zapier.com",
"isOwnDomain": false,
"title": "The 12 best screen recorders"
},
"backlink": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"domainFrom": "ahrefs.com",
"urlFrom": "https://ahrefs.com/blog/seo-tools/",
"dofollow": true,
"domainFromRank": 91
},
"competitor": {
"id": "6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"name": "Ahrefs",
"domain": "ahrefs.com"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
What kind of work an action is, and what else the body needs:
write_article— plan a piece of content, then call POST /v1/actions/:id/generate to write it. Requires no target.update_article— any edit to an existing article, with the instruction in additionalInstructions. RequiresarticleId.earn_link— go after a referring domain your competitors have. RequiresbacklinkId.get_cited— get onto a page AI engines already cite. RequirescitationId.reply_thread— reply on a cited Reddit or Quora thread. RequirescitationId.record_video— make a video of your own, since you cannot be added to someone else's. RequirescitationId.track_competitor— start tracking a brand RankSpot discovered in AI answers. RequirescompetitorId.add_prompt— track a question buyers ask that no existing prompt covers. Requires no target.publish_article— push a finished article to the workspace integrations. RequiresarticleId.request_indexing— ask Google to index a published page it has missed. RequiresarticleId.other— anything you just want written down. Requires no target.
write_article, update_article, earn_link, get_cited, reply_thread, record_video, track_competitor, add_prompt, publish_article, request_indexing, other "write_article"
What to do. Shown as the card title. Required for every type.
"How to Start a Blog in 2024"
The one line shown under the title in a list, and for most actions the only text anyone reads. Lead with the evidence and the numbers behind it, do not restate the title. Keep it to a single short sentence.
"Cited in 6 ChatGPT answers — you are in none."
For write_article this is the brief handed to the generator. For every other type it is the fuller explanation shown when the action is opened, so it can run to a short paragraph.
"A comprehensive guide for beginners."
Extra guidance. For update_article this carries the actual instruction, which is why every kind of article edit is one type rather than several.
"Focus on WordPress."
write_article only; dropped on other types. Slug for the article generated from this action. If omitted or null the slug is derived from the title at generation time. Validated, not rewritten, and must be unique across actions and articles.
"how-to-start-a-blog"
write_article only; dropped on other types. Category to file the article under.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
write_article only; dropped on other types. Tracked keywords to link, which broadens the article's semantic coverage.
["6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"]
update_article, publish_article and request_indexing only, and required for them. The article this is about, from GET /v1/articles. This is the same articleId the response returns.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
get_cited, reply_thread and record_video only, and required for them. The cited page or thread this is about.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
earn_link only, and required for it. The referring domain to go after.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
track_competitor only, and required for it. The brand to start tracking.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
Optional. write_article, update_article and add_prompt only; dropped on other types. The fanout searches that justified this, from rankspot_list_ai_fanout_queries. Send the whole cluster, not one phrasing of it: engines ask the same thing a dozen ways and one article answers all of them. Unlike the fields above this is not a target and not exclusive with them, so send keywordIds too.
[
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94",
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
]
Response
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
What kind of work this is.
write_article, update_article, earn_link, get_cited, reply_thread, record_video, track_competitor, add_prompt, publish_article, request_indexing, other "write_article"
"How to Start a Blog in 2024"
new: not started · in_progress: an executor is running · processed: finished. Same vocabulary as backlinks, citations and people-also-ask, with the extra middle state only actions can have.
new, in_progress, processed "new"
The fanout searches themselves, on the article types. Provenance rather than a target: they are what justified the work, not where it happens. A set, because engines phrase one intent many ways.
"how-to-start-a-blog"
The one line shown under the title in a list. Null on actions created before this field existed.
"Cited in 6 ChatGPT answers — you are in none."
The fuller explanation, shown when the action is opened. On write_article this is the brief handed to the generator instead.
"A comprehensive guide for beginners."
"Focus on WordPress."
When the work finished.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
The article this action produced (write_article) or edits (update_article).
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
The cited page or thread, on get_cited and reply_thread. Null once the citation itself is gone, which does not remove the action.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
The referring domain to go after, on earn_link.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
The brand to start tracking, on track_competitor.
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
The cited page itself, on get_cited and reply_thread. Carries the url to open and the citation count the reason is built from.
Hide child attributes
Hide child attributes
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
"https://zapier.com/blog/best-screen-recorders/"
"zapier.com"
The page is on your own domain.
false
"The 12 best screen recorders"
The referring domain itself, on earn_link. urlFrom is the page carrying the competitor link.
Hide child attributes
Hide child attributes
"6b3c1f2e-9d4a-4a7e-b2c1-5f0e8a7d3c94"
"ahrefs.com"
The page carrying the competitor link.
"https://ahrefs.com/blog/seo-tools/"
true
91
