Update a keyword
curl --request PUT \
--url https://api.example.com/v1/keywords/{keywordId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"focusPromptId": "<string>"
}
'import requests
url = "https://api.example.com/v1/keywords/{keywordId}"
payload = { "focusPromptId": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({focusPromptId: '<string>'})
};
fetch('https://api.example.com/v1/keywords/{keywordId}', 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/keywords/{keywordId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'focusPromptId' => '<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/keywords/{keywordId}"
payload := strings.NewReader("{\n \"focusPromptId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.example.com/v1/keywords/{keywordId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"focusPromptId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/keywords/{keywordId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"focusPromptId\": \"<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
Update a keyword
Updates a keyword (e.g. set or remove the focus GEO prompt).
PUT
/
v1
/
keywords
/
{keywordId}
Update a keyword
curl --request PUT \
--url https://api.example.com/v1/keywords/{keywordId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"focusPromptId": "<string>"
}
'import requests
url = "https://api.example.com/v1/keywords/{keywordId}"
payload = { "focusPromptId": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({focusPromptId: '<string>'})
};
fetch('https://api.example.com/v1/keywords/{keywordId}', 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/keywords/{keywordId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'focusPromptId' => '<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/keywords/{keywordId}"
payload := strings.NewReader("{\n \"focusPromptId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.example.com/v1/keywords/{keywordId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"focusPromptId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/keywords/{keywordId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"focusPromptId\": \"<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
Keyword ID.
Body
application/json
ID of a GEO prompt linked to this keyword — becomes the focus prompt. Removing an existing focus prompt is not supported.
Response
200 - 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?