curl --request GET \
--url https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID} \
--header 'API-Key: <api-key>'import requests
url = "https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID}"
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/{answerID}', 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/{answerID}",
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/{answerID}"
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/{answerID}")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID}")
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{
"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"
}
]
}{
"code": "COMMON_BINDING",
"details": [
"PLATFORM_INVALID_ID: Invalid ID format."
],
"message": "Unable to process the request data"
}{
"code": "COMMON_UNAUTHORIZED",
"message": "Unauthenticated user"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits."
}{
"code": "ANSWER_NOT_FOUND",
"message": "Answer not found"
}{
"code": "PLATFORM_RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later."
}{
"message": "Internal Server Error",
"requestID": "bkZqnHQepkgTOocTvyHWSlHcGzRqQbZk"
}Get an answer
Retrieves a single answer. The response structure is the same as a list item and includes sources (citations), search queries (fanouts), and the original markdown (markdownURL).
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.
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | COMMON_BINDING | Invalid answerID 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 |
| 404 | ANSWER_NOT_FOUND | Answer does not exist or belongs to another organization |
| 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 |
curl --request GET \
--url https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID} \
--header 'API-Key: <api-key>'import requests
url = "https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID}"
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/{answerID}', 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/{answerID}",
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/{answerID}"
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/{answerID}")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.trychainshift.ai/api/v1/platform/answers/{answerID}")
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{
"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"
}
]
}{
"code": "COMMON_BINDING",
"details": [
"PLATFORM_INVALID_ID: Invalid ID format."
],
"message": "Unable to process the request data"
}{
"code": "COMMON_UNAUTHORIZED",
"message": "Unauthenticated user"
}{
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits."
}{
"code": "ANSWER_NOT_FOUND",
"message": "Answer not found"
}{
"code": "PLATFORM_RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later."
}{
"message": "Internal Server Error",
"requestID": "bkZqnHQepkgTOocTvyHWSlHcGzRqQbZk"
}Path Parameters
Response
OK
Collection and classification status of the answer. PENDING: the answer is not ready yet (collection or classification in progress, content is an empty string), SUCCESS: classification is finished and content is available, FAILED: failed or skipped (for example, the model did not produce an AI answer). Transitions only once from PENDING to SUCCESS or FAILED and does not change after it ends
PENDING, SUCCESS, FAILED "SUCCESS"