Get Google keyword suggestions (autocomplete)
curl --request GET \
--url http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions \
--header 'API-Key: <api-key>'import requests
url = "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions', 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 => "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"countryCode": "US",
"keyword": "protein powder",
"languageCode": "en",
"suggestedKeywords": [
{
"keyword": "protein powder",
"metrics": {
"cpc": 1.66,
"keywordDifficulty": 32,
"monthlySearches": [
{
"month": 6,
"year": 2026,
"searchVolume": 450000
}
],
"searchIntent": "transactional",
"searchVolume": 301000,
"searchVolumeTrend": {
"monthly": -33,
"quarterly": 50,
"yearly": 50
}
}
}
],
"metrics": {
"cpc": 1.66,
"keywordDifficulty": 32,
"monthlySearches": [
{
"month": 6,
"year": 2026,
"searchVolume": 450000
}
],
"searchIntent": "transactional",
"searchVolume": 301000,
"searchVolumeTrend": {
"monthly": -33,
"quarterly": 50,
"yearly": 50
}
}
}{
"code": "COMMON_VALIDATION",
"details": [
"limit: must be 100 or less"
],
"message": "Data validation failed"
}{
"code": "COMMON_UNAUTHORIZED",
"message": "Unauthenticated user"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits."
}{
"code": "PLATFORM_RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later."
}{
"message": "Internal Server Error",
"requestID": "bkZqnHQepkgTOocTvyHWSlHcGzRqQbZk"
}{
"code": "KEYWORD_METRICS_PROVIDER_UNAVAILABLE",
"message": "Failed to retrieve keyword metrics. Try again shortly"
}{
"code": "KEYWORD_METRICS_NOT_CONFIGURED",
"message": "Keyword metrics feature is not enabled yet"
}Keywords (Beta)
Google autocomplete suggestions
[BETA] This is a beta API. The response spec may change without notice.
Retrieves detailed (long-tail) Google keywords that contain the seed keyword, sorted by search volume in descending order. The seed keyword is excluded from the list, and its metrics are provided in the metrics field of the response. If the seed keyword has no search data, metrics is null.
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | COMMON_VALIDATION | • keyword missing or longer than 80 characters • limit out of range (1 to 100) |
| 400 | KEYWORD_COUNTRY_NOT_SUPPORTED | Unsupported country code |
| 400 | KEYWORD_METRICS_PROVIDER_REJECTED | The provider rejected the request (language and country combination, keyword format) |
| 401 | COMMON_UNAUTHORIZED | API key or access token is missing or invalid |
| 402 | INSUFFICIENT_CREDITS | Organization credit balance is lower than the unit price of this request |
| 429 | PLATFORM_RATE_LIMIT_EXCEEDED | Rate limit exceeded. Wait the number of seconds in the Retry-After header, then retry |
| 500 | — | Internal server error. Returns message and requestID without code |
| 502 | KEYWORD_METRICS_PROVIDER_UNAVAILABLE | Failed to call the metrics provider. Retry after a moment |
| 503 | KEYWORD_METRICS_NOT_CONFIGURED | The keyword metrics feature is not enabled |
GET
/
v1beta
/
platform
/
keywords
/
google
/
suggestions
Get Google keyword suggestions (autocomplete)
curl --request GET \
--url http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions \
--header 'API-Key: <api-key>'import requests
url = "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions', 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 => "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://dev-platform-api.trychainshift.ai/api/v1beta/platform/keywords/google/suggestions")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"countryCode": "US",
"keyword": "protein powder",
"languageCode": "en",
"suggestedKeywords": [
{
"keyword": "protein powder",
"metrics": {
"cpc": 1.66,
"keywordDifficulty": 32,
"monthlySearches": [
{
"month": 6,
"year": 2026,
"searchVolume": 450000
}
],
"searchIntent": "transactional",
"searchVolume": 301000,
"searchVolumeTrend": {
"monthly": -33,
"quarterly": 50,
"yearly": 50
}
}
}
],
"metrics": {
"cpc": 1.66,
"keywordDifficulty": 32,
"monthlySearches": [
{
"month": 6,
"year": 2026,
"searchVolume": 450000
}
],
"searchIntent": "transactional",
"searchVolume": 301000,
"searchVolumeTrend": {
"monthly": -33,
"quarterly": 50,
"yearly": 50
}
}
}{
"code": "COMMON_VALIDATION",
"details": [
"limit: must be 100 or less"
],
"message": "Data validation failed"
}{
"code": "COMMON_UNAUTHORIZED",
"message": "Unauthenticated user"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits."
}{
"code": "PLATFORM_RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later."
}{
"message": "Internal Server Error",
"requestID": "bkZqnHQepkgTOocTvyHWSlHcGzRqQbZk"
}{
"code": "KEYWORD_METRICS_PROVIDER_UNAVAILABLE",
"message": "Failed to retrieve keyword metrics. Try again shortly"
}{
"code": "KEYWORD_METRICS_NOT_CONFIGURED",
"message": "Keyword metrics feature is not enabled yet"
}Query Parameters
Response
OK