Add a keyword to a page
curl --request POST \
--url https://api.example.com/v1/pages/{pageId}/keywords \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keyword": "<string>"
}
'import requests
url = "https://api.example.com/v1/pages/{pageId}/keywords"
payload = { "keyword": "<string>" }
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({keyword: '<string>'})
};
fetch('https://api.example.com/v1/pages/{pageId}/keywords', 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/v1/pages/{pageId}/keywords",
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([
'keyword' => '<string>'
]),
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.example.com/v1/pages/{pageId}/keywords"
payload := strings.NewReader("{\n \"keyword\": \"<string>\"\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.example.com/v1/pages/{pageId}/keywords")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keyword\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/pages/{pageId}/keywords")
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 \"keyword\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"analysisStatus": "queued",
"analyzed": true,
"clicks": 123,
"createdAt": "<string>",
"ctr": 123,
"focusPrompt": {
"id": "<string>",
"prompt": "<string>"
},
"id": "<string>",
"impressions": 123,
"isCannibalized": true,
"keyword": "<string>",
"keywordDifficulty": 123,
"position": 123,
"searchVolume": 123,
"source": "<string>",
"page": {
"id": "<string>",
"lastStatusCode": 123,
"url": "<string>"
}
}Keywords
Add a keyword to a page
Associates a keyword with a page. Creates the keyword if it does not exist.
POST
/
v1
/
pages
/
{pageId}
/
keywords
Add a keyword to a page
curl --request POST \
--url https://api.example.com/v1/pages/{pageId}/keywords \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keyword": "<string>"
}
'import requests
url = "https://api.example.com/v1/pages/{pageId}/keywords"
payload = { "keyword": "<string>" }
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({keyword: '<string>'})
};
fetch('https://api.example.com/v1/pages/{pageId}/keywords', 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/v1/pages/{pageId}/keywords",
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([
'keyword' => '<string>'
]),
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.example.com/v1/pages/{pageId}/keywords"
payload := strings.NewReader("{\n \"keyword\": \"<string>\"\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.example.com/v1/pages/{pageId}/keywords")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keyword\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/pages/{pageId}/keywords")
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 \"keyword\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"analysisStatus": "queued",
"analyzed": true,
"clicks": 123,
"createdAt": "<string>",
"ctr": 123,
"focusPrompt": {
"id": "<string>",
"prompt": "<string>"
},
"id": "<string>",
"impressions": 123,
"isCannibalized": true,
"keyword": "<string>",
"keywordDifficulty": 123,
"position": 123,
"searchVolume": 123,
"source": "<string>",
"page": {
"id": "<string>",
"lastStatusCode": 123,
"url": "<string>"
}
}Authorizations
API key starting with sk_. Generate one in Settings > API Keys.
Path Parameters
Page ID.
Body
application/json
The keyword text.
Required string length:
1 - 255Response
201 - application/json
Default Response
Status of the SEO analysis.
Available options:
queued, pending, success, failed Whether the keyword has been analyzed.
Search clicks.
ISO 8601 creation date.
Click-through rate.
Focus GEO prompt linked to this keyword.
Show child attributes
Show child attributes
Unique identifier of the keyword.
Search impressions.
Whether the keyword is cannibalized.
The keyword text.
SEO difficulty score (0-100).
Current SERP position.
Monthly search volume.
Source of the keyword.
Page this keyword is tracked on.
Show child attributes
Show child attributes
Was this page helpful?