List answers
curl --request GET \
--url https://platform-api.trychainshift.ai/api/v1/platform/answers \
--header 'API-Key: <api-key>'import requests
url = "https://platform-api.trychainshift.ai/api/v1/platform/answers"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('https://platform-api.trychainshift.ai/api/v1/platform/answers', 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://platform-api.trychainshift.ai/api/v1/platform/answers",
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 := "https://platform-api.trychainshift.ai/api/v1/platform/answers"
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("https://platform-api.trychainshift.ai/api/v1/platform/answers")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.trychainshift.ai/api/v1/platform/answers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"answers": [
{
"id": "pv9LpgpbQyXpCAv8l0Lf0w",
"model": "NAVER_AI_BRIEFING",
"promptID": "KNUETdAfRhDY9lQTgu9wuw",
"region": "KR",
"status": "SUCCESS",
"content": "To increase AI search visibility, first measure which questions your brand is cited in, then strengthen your content to match the source types that are cited most often.",
"createdAt": "2026-08-05T02:24:50Z",
"fanouts": [
"How to optimize AI search visibility"
],
"location": "US-NEW_YORK",
"markdownURL": "https://cdn.trychainshift.ai/78af3dd2-0b10-4dc5-8c53-83fc875a625e.md",
"query": "How can we get our service to appear in AI search?",
"runID": "S8cqDSjSot67bCK6YtmvHw",
"sources": [
{
"domain": "wikipedia.org",
"title": "Search engine optimization",
"url": "https://en.wikipedia.org/wiki/Search_engine_optimization"
}
]
}
],
"nextCursor": "eyJpZCI6NzIzMDF9"
}{
"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"
}Answers
List answers
Lists the answers obtained by running prompts. Each answer includes the body along with sources, fan-outs (fanouts), and the original markdown (markdownURL). PENDING and FAILED runs are also returned with their status.
markdownURL is always included for answers whose status is SUCCESS. It is omitted only for answers not yet collected (PENDING) or whose collection failed (FAILED), since they have no original content, so you do not need to handle a missing value when working with SUCCESS answers.
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | COMMON_VALIDATION | • limit out of range (1 to 100) • Unsupported status value |
| 400 | COMMON_INVALID_CURSOR | Invalid cursor format |
| 400 | COMMON_BINDING | Invalid runID, promptSetID, or promptID format (PLATFORM_INVALID_ID in details) |
| 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 for the number of seconds in the Retry-After header, then retry |
| 500 | — | Internal server error. Returns message and requestID without code |
GET
/
v1
/
platform
/
answers
List answers
curl --request GET \
--url https://platform-api.trychainshift.ai/api/v1/platform/answers \
--header 'API-Key: <api-key>'import requests
url = "https://platform-api.trychainshift.ai/api/v1/platform/answers"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('https://platform-api.trychainshift.ai/api/v1/platform/answers', 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://platform-api.trychainshift.ai/api/v1/platform/answers",
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 := "https://platform-api.trychainshift.ai/api/v1/platform/answers"
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("https://platform-api.trychainshift.ai/api/v1/platform/answers")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.trychainshift.ai/api/v1/platform/answers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"answers": [
{
"id": "pv9LpgpbQyXpCAv8l0Lf0w",
"model": "NAVER_AI_BRIEFING",
"promptID": "KNUETdAfRhDY9lQTgu9wuw",
"region": "KR",
"status": "SUCCESS",
"content": "To increase AI search visibility, first measure which questions your brand is cited in, then strengthen your content to match the source types that are cited most often.",
"createdAt": "2026-08-05T02:24:50Z",
"fanouts": [
"How to optimize AI search visibility"
],
"location": "US-NEW_YORK",
"markdownURL": "https://cdn.trychainshift.ai/78af3dd2-0b10-4dc5-8c53-83fc875a625e.md",
"query": "How can we get our service to appear in AI search?",
"runID": "S8cqDSjSot67bCK6YtmvHw",
"sources": [
{
"domain": "wikipedia.org",
"title": "Search engine optimization",
"url": "https://en.wikipedia.org/wiki/Search_engine_optimization"
}
]
}
],
"nextCursor": "eyJpZCI6NzIzMDF9"
}{
"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"
}For the meaning of the response fields and the empty-value rules (when
fanouts and sources are empty), see Answer object. For real response examples and interpretation, see the Retrieving answers guide.