Monitor ChatGPT Responses
curl --request POST \
--url https://api.cloro.dev/v1/monitor/chatgpt \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What do you know about Acme Corp?",
"country": "US",
"include": {
"html": true,
"markdown": true,
"rawResponse": true,
"searchQueries": true,
"ads": true,
"shopping": true
},
"state": "CA"
}
'import requests
url = "https://api.cloro.dev/v1/monitor/chatgpt"
payload = {
"prompt": "What do you know about Acme Corp?",
"country": "US",
"include": {
"html": True,
"markdown": True,
"rawResponse": True,
"searchQueries": True,
"ads": True,
"shopping": True
},
"state": "CA"
}
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({
prompt: 'What do you know about Acme Corp?',
country: 'US',
include: {
html: true,
markdown: true,
rawResponse: true,
searchQueries: true,
ads: true,
shopping: true
},
state: 'CA'
})
};
fetch('https://api.cloro.dev/v1/monitor/chatgpt', 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.cloro.dev/v1/monitor/chatgpt",
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([
'prompt' => 'What do you know about Acme Corp?',
'country' => 'US',
'include' => [
'html' => true,
'markdown' => true,
'rawResponse' => true,
'searchQueries' => true,
'ads' => true,
'shopping' => true
],
'state' => 'CA'
]),
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.cloro.dev/v1/monitor/chatgpt"
payload := strings.NewReader("{\n \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\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.cloro.dev/v1/monitor/chatgpt")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/chatgpt")
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 \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "The name \"Acme Corporation\" is used in various contexts, both fictional and real. Here's an overview:\n\n🐾 Acme Corporation in Fiction\nThe Acme Corporation is a fictional company featured prominently in Warner Bros. cartoons, particularly the Road Runner/Wile E. Coyote series.",
"sources": [
{
"position": 1,
"url": "https://www.rippling.com/blog/ai-recruiting?utm_source=chatgpt.com",
"label": "12 Best AI Recruiting Tools For HR in 2025",
"description": "Discover the top AI recruiting tools that can help HR professionals streamline their hiring process...",
"footnote": false,
"datePublished": "May 22, 2025"
},
{
"position": 2,
"url": "https://www.index.dev/blog/ai-recruiting-software-hiring-managers?utm_source=chatgpt.com",
"label": "7 Best AI Recruiting Software for Hiring Managers in 2025",
"description": "A comprehensive guide to the best AI recruiting software options available for hiring managers...",
"footnote": false,
"datePublished": "April 10, 2025"
},
{
"position": 3,
"url": "https://www.selectsoftwarereviews.com/buyer-guide/ai-recruiting?utm_source=chatgpt.com",
"label": "10+ Best AI Recruiting Software for 2025: Expert Reviews + Pricing",
"description": "Expert reviews and pricing information for the best AI recruiting software solutions...",
"footnote": true
}
],
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"markdown": "The name \"Acme Corporation\" is used in various contexts, both fictional and real. Here's an overview:\n\n🐾 Acme Corporation in Fiction\nThe Acme Corporation is a fictional company featured prominently in Warner Bros. cartoons, particularly the Road Runner/Wile E. Coyote series.",
"rawResponse": [
{
"type": "resume_conversation_token",
"token": "eyJhbGciOiJFUzI1Ni...WaVoqQ",
"conversation_id": "68efc64b-2d74-8012-b87d-28e59f3b8a49"
},
{
"type": "message_start",
"message": {
"id": "msg_01JD6Q7H1ZKWM9GD34V5ZW1TYM",
"role": "assistant",
"model": "gpt-5"
}
},
{
"type": "message_delta",
"delta": {
"content": [
{
"type": "output_text_delta",
"text_delta": "The name \"Acme Corporation\" is used in various contexts..."
}
]
}
},
{
"type": "message_stop",
"reason": "end_turn"
}
],
"searchQueries": [
"What is Acme Corporation?",
"Acme Corp company overview",
"Acme Corporation products and services"
],
"model": "gpt-5-5",
"shoppingCards": [
{
"tags": [
"stylish casual leather sneaker",
"heritage retro leather sneaker"
],
"products": [
{
"title": "Adidas VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html?utm_source=chatgpt.com",
"price": "$57.00",
"featured_tag": "stylish casual leather sneaker",
"merchant": "adidas + others",
"image_urls": [
"https://images.openai.com/static-rsc-1/example.jpg"
],
"rating": 4.7,
"num_reviews": 10394,
"id": "3250714974047560249",
"offers": [
{
"merchant_name": "adidas",
"product_name": "Adidas Women's VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html?utm_source=chatgpt.com",
"price": "$57.00",
"details": "In stock online and nearby, Delivery between Sat - Mon $4.99",
"available": true,
"checkoutable": false,
"price_details": {
"base": "$57.00",
"total": "$57.00"
},
"tag": {
"text": "Best price"
}
}
],
"rating_grouped_citation": {
"title": "Adidas Women's VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html",
"supporting_websites": [
{
"title": "Adidas Women's VL Court 3.0",
"url": "https://www.macys.com/shop/product/adidas-womens-vl-court-3.0-casual-sneakers-from-finish-line?ID=21107988&pla_country=US&CAGPSPN=pla"
}
]
}
}
]
}
],
"inlineProducts": [
{
"product": {
"title": "Nike Court Vision Low Next Nature Shoes",
"position": 1,
"url": "https://www.amazon.in/Nike-Court-Vision-Shoes/dp/B098F6QPLK?utm_source=chatgpt.com",
"description": "Classic sneaker with modern comfort features",
"price": "$79.99",
"featured_tag": "stylish casual leather sneaker",
"rating": 4.5,
"num_reviews": 8703,
"image_urls": [
"<string>"
],
"id": "prod_12345",
"variants": "<unknown>",
"offers": [
{
"merchant_name": "Amazon.in",
"merchant_subtitle": "<string>",
"product_name": "Nike Men's Court Vision Low Next Nature Shoes",
"url": "https://www.amazon.in/dp/B098F6QPLK?utm_source=chatgpt.com",
"price": "$79.99",
"details": "In stock online, Free delivery",
"original_price": "<string>",
"available": true,
"checkoutable": false,
"is_digital": true,
"checkout_payload": "<string>",
"checkout_image_urls": [
"<string>"
],
"shop_id": "<string>",
"provider": "p2",
"price_details": {
"display_price": "<string>",
"base": "$79.99",
"shipping": "<string>",
"tax": "<string>",
"total": "$79.99"
},
"tag": {
"text": "Best price",
"tooltip": "<string>"
}
}
],
"rating_grouped_citation": {
"title": "Nike Men's Court Vision Low Next Nature Shoes",
"url": "https://www.amazon.in/dp/B098F6QPLK",
"supporting_websites": [
{}
]
},
"provider": "deprecated",
"providers": [
"product_info"
],
"product_lookup_key": {
"data": "<string>"
},
"product_lookup_data": {
"request_query": "<string>",
"all_ids": {},
"metadata_sources": [
"<string>"
]
},
"showcase_metadata": {
"image": {
"url": "<string>",
"width": 123,
"height": 123
},
"background": {
"type": "<string>",
"primary": "<string>",
"secondary": "<string>"
},
"slots": {},
"debug": {}
},
"show_price_disclosure": false,
"analytics_meta": {
"product_event_uuid": "<string>"
},
"metadata_sources": [
"p2"
],
"product_event_uuid": "<string>",
"generatedProductQuery": "best microwaves uk 2026 countertop inverter combi microwave"
},
"render_as": "hero",
"details": {
"rationale": {
"rationale": "<string>",
"citations": [
{}
]
},
"reviews": {
"summary": "<string>",
"reviews": [
{
"source": "Amazon",
"theme": "Ease of Use",
"summary": "<string>",
"cite": "<string>",
"rating": 123,
"num_reviews": 123,
"cite_url": "<string>"
}
]
}
}
}
],
"entities": [
{
"type": "product",
"name": "adidas Grand Court Lo"
},
{
"type": "product",
"name": "Reebok Club C 85 Vintage"
},
{
"type": "product",
"name": "Nike Dunk Low Retro SE"
}
],
"map": [
{
"id": "rVKID2OBQMyVpraqSjz9sg",
"provider": "yelp",
"name": "Blue Bottle Coffee",
"position": 1,
"address": "66 Mint St, San Francisco, CA 94103",
"latitude": 37.7811,
"longitude": -122.4076,
"categories": [
"Coffee shop"
],
"rating": 4.5,
"reviewCount": 1234,
"description": "Specialty coffee roaster known for their meticulous pour-over preparations",
"phone": "+1-415-555-0123",
"websiteUrl": "https://bluebottlecoffee.com"
}
],
"citationPills": [
{
"url": "https://example.com/article",
"label": "Example Article Title",
"description": "A detailed description of the cited content",
"domain": "example.com",
"datePublished": "2025-01-01",
"citationPillId": 0,
"type": "searchResult",
"position": 1
}
],
"ads": [
{
"brand": {
"name": "Acme Shoes",
"url": "https://www.acmeshoes.com?utm_source=chatgpt.com",
"favicon": "https://images.openai.com/favicon.ico"
},
"cards": [
{
"title": "Premium Running Shoes",
"body": "Lightweight performance running shoes with advanced cushioning technology",
"url": "https://www.acmeshoes.com/running?utm_source=chatgpt.com",
"image": "https://images.openai.com/product.jpg"
},
{
"title": "Trail Running Shoes",
"body": "Durable shoes designed for off-road running with superior grip",
"url": "https://www.acmeshoes.com/trail?utm_source=chatgpt.com",
"image": "https://images.openai.com/product2.jpg"
}
]
}
]
}
}{
"success": false,
"error": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
]
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Insufficient permissions",
"details": {
"requiredScopes": [
"read:monitor",
"write:monitor"
]
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Route not found",
"details": {
"id": "/v1/invalid-endpoint"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_CONFLICT",
"message": "Resource conflict",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "CONCURRENT_LIMIT_EXCEEDED",
"message": "Concurrent limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Request was canceled"
}{
"success": false,
"error": "Maximum retries exceeded"
}{
"error": {
"code": "EXTERNAL_SERVICE_ERROR",
"message": "External service error: OpenAI",
"details": {
"service": "OpenAI"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}ChatGPT
Extract ChatGPT
Extract structured data from ChatGPT — answer text, cited sources, shopping cards, brand entities, and ads — for any prompt across supported regions
POST
/
v1
/
monitor
/
chatgpt
Monitor ChatGPT Responses
curl --request POST \
--url https://api.cloro.dev/v1/monitor/chatgpt \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What do you know about Acme Corp?",
"country": "US",
"include": {
"html": true,
"markdown": true,
"rawResponse": true,
"searchQueries": true,
"ads": true,
"shopping": true
},
"state": "CA"
}
'import requests
url = "https://api.cloro.dev/v1/monitor/chatgpt"
payload = {
"prompt": "What do you know about Acme Corp?",
"country": "US",
"include": {
"html": True,
"markdown": True,
"rawResponse": True,
"searchQueries": True,
"ads": True,
"shopping": True
},
"state": "CA"
}
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({
prompt: 'What do you know about Acme Corp?',
country: 'US',
include: {
html: true,
markdown: true,
rawResponse: true,
searchQueries: true,
ads: true,
shopping: true
},
state: 'CA'
})
};
fetch('https://api.cloro.dev/v1/monitor/chatgpt', 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.cloro.dev/v1/monitor/chatgpt",
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([
'prompt' => 'What do you know about Acme Corp?',
'country' => 'US',
'include' => [
'html' => true,
'markdown' => true,
'rawResponse' => true,
'searchQueries' => true,
'ads' => true,
'shopping' => true
],
'state' => 'CA'
]),
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.cloro.dev/v1/monitor/chatgpt"
payload := strings.NewReader("{\n \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\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.cloro.dev/v1/monitor/chatgpt")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/chatgpt")
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 \"prompt\": \"What do you know about Acme Corp?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": true,\n \"markdown\": true,\n \"rawResponse\": true,\n \"searchQueries\": true,\n \"ads\": true,\n \"shopping\": true\n },\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "The name \"Acme Corporation\" is used in various contexts, both fictional and real. Here's an overview:\n\n🐾 Acme Corporation in Fiction\nThe Acme Corporation is a fictional company featured prominently in Warner Bros. cartoons, particularly the Road Runner/Wile E. Coyote series.",
"sources": [
{
"position": 1,
"url": "https://www.rippling.com/blog/ai-recruiting?utm_source=chatgpt.com",
"label": "12 Best AI Recruiting Tools For HR in 2025",
"description": "Discover the top AI recruiting tools that can help HR professionals streamline their hiring process...",
"footnote": false,
"datePublished": "May 22, 2025"
},
{
"position": 2,
"url": "https://www.index.dev/blog/ai-recruiting-software-hiring-managers?utm_source=chatgpt.com",
"label": "7 Best AI Recruiting Software for Hiring Managers in 2025",
"description": "A comprehensive guide to the best AI recruiting software options available for hiring managers...",
"footnote": false,
"datePublished": "April 10, 2025"
},
{
"position": 3,
"url": "https://www.selectsoftwarereviews.com/buyer-guide/ai-recruiting?utm_source=chatgpt.com",
"label": "10+ Best AI Recruiting Software for 2025: Expert Reviews + Pricing",
"description": "Expert reviews and pricing information for the best AI recruiting software solutions...",
"footnote": true
}
],
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"markdown": "The name \"Acme Corporation\" is used in various contexts, both fictional and real. Here's an overview:\n\n🐾 Acme Corporation in Fiction\nThe Acme Corporation is a fictional company featured prominently in Warner Bros. cartoons, particularly the Road Runner/Wile E. Coyote series.",
"rawResponse": [
{
"type": "resume_conversation_token",
"token": "eyJhbGciOiJFUzI1Ni...WaVoqQ",
"conversation_id": "68efc64b-2d74-8012-b87d-28e59f3b8a49"
},
{
"type": "message_start",
"message": {
"id": "msg_01JD6Q7H1ZKWM9GD34V5ZW1TYM",
"role": "assistant",
"model": "gpt-5"
}
},
{
"type": "message_delta",
"delta": {
"content": [
{
"type": "output_text_delta",
"text_delta": "The name \"Acme Corporation\" is used in various contexts..."
}
]
}
},
{
"type": "message_stop",
"reason": "end_turn"
}
],
"searchQueries": [
"What is Acme Corporation?",
"Acme Corp company overview",
"Acme Corporation products and services"
],
"model": "gpt-5-5",
"shoppingCards": [
{
"tags": [
"stylish casual leather sneaker",
"heritage retro leather sneaker"
],
"products": [
{
"title": "Adidas VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html?utm_source=chatgpt.com",
"price": "$57.00",
"featured_tag": "stylish casual leather sneaker",
"merchant": "adidas + others",
"image_urls": [
"https://images.openai.com/static-rsc-1/example.jpg"
],
"rating": 4.7,
"num_reviews": 10394,
"id": "3250714974047560249",
"offers": [
{
"merchant_name": "adidas",
"product_name": "Adidas Women's VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html?utm_source=chatgpt.com",
"price": "$57.00",
"details": "In stock online and nearby, Delivery between Sat - Mon $4.99",
"available": true,
"checkoutable": false,
"price_details": {
"base": "$57.00",
"total": "$57.00"
},
"tag": {
"text": "Best price"
}
}
],
"rating_grouped_citation": {
"title": "Adidas Women's VL Court 3.0",
"url": "https://www.adidas.com/us/vl-court-3.0-shoes/ID8797.html",
"supporting_websites": [
{
"title": "Adidas Women's VL Court 3.0",
"url": "https://www.macys.com/shop/product/adidas-womens-vl-court-3.0-casual-sneakers-from-finish-line?ID=21107988&pla_country=US&CAGPSPN=pla"
}
]
}
}
]
}
],
"inlineProducts": [
{
"product": {
"title": "Nike Court Vision Low Next Nature Shoes",
"position": 1,
"url": "https://www.amazon.in/Nike-Court-Vision-Shoes/dp/B098F6QPLK?utm_source=chatgpt.com",
"description": "Classic sneaker with modern comfort features",
"price": "$79.99",
"featured_tag": "stylish casual leather sneaker",
"rating": 4.5,
"num_reviews": 8703,
"image_urls": [
"<string>"
],
"id": "prod_12345",
"variants": "<unknown>",
"offers": [
{
"merchant_name": "Amazon.in",
"merchant_subtitle": "<string>",
"product_name": "Nike Men's Court Vision Low Next Nature Shoes",
"url": "https://www.amazon.in/dp/B098F6QPLK?utm_source=chatgpt.com",
"price": "$79.99",
"details": "In stock online, Free delivery",
"original_price": "<string>",
"available": true,
"checkoutable": false,
"is_digital": true,
"checkout_payload": "<string>",
"checkout_image_urls": [
"<string>"
],
"shop_id": "<string>",
"provider": "p2",
"price_details": {
"display_price": "<string>",
"base": "$79.99",
"shipping": "<string>",
"tax": "<string>",
"total": "$79.99"
},
"tag": {
"text": "Best price",
"tooltip": "<string>"
}
}
],
"rating_grouped_citation": {
"title": "Nike Men's Court Vision Low Next Nature Shoes",
"url": "https://www.amazon.in/dp/B098F6QPLK",
"supporting_websites": [
{}
]
},
"provider": "deprecated",
"providers": [
"product_info"
],
"product_lookup_key": {
"data": "<string>"
},
"product_lookup_data": {
"request_query": "<string>",
"all_ids": {},
"metadata_sources": [
"<string>"
]
},
"showcase_metadata": {
"image": {
"url": "<string>",
"width": 123,
"height": 123
},
"background": {
"type": "<string>",
"primary": "<string>",
"secondary": "<string>"
},
"slots": {},
"debug": {}
},
"show_price_disclosure": false,
"analytics_meta": {
"product_event_uuid": "<string>"
},
"metadata_sources": [
"p2"
],
"product_event_uuid": "<string>",
"generatedProductQuery": "best microwaves uk 2026 countertop inverter combi microwave"
},
"render_as": "hero",
"details": {
"rationale": {
"rationale": "<string>",
"citations": [
{}
]
},
"reviews": {
"summary": "<string>",
"reviews": [
{
"source": "Amazon",
"theme": "Ease of Use",
"summary": "<string>",
"cite": "<string>",
"rating": 123,
"num_reviews": 123,
"cite_url": "<string>"
}
]
}
}
}
],
"entities": [
{
"type": "product",
"name": "adidas Grand Court Lo"
},
{
"type": "product",
"name": "Reebok Club C 85 Vintage"
},
{
"type": "product",
"name": "Nike Dunk Low Retro SE"
}
],
"map": [
{
"id": "rVKID2OBQMyVpraqSjz9sg",
"provider": "yelp",
"name": "Blue Bottle Coffee",
"position": 1,
"address": "66 Mint St, San Francisco, CA 94103",
"latitude": 37.7811,
"longitude": -122.4076,
"categories": [
"Coffee shop"
],
"rating": 4.5,
"reviewCount": 1234,
"description": "Specialty coffee roaster known for their meticulous pour-over preparations",
"phone": "+1-415-555-0123",
"websiteUrl": "https://bluebottlecoffee.com"
}
],
"citationPills": [
{
"url": "https://example.com/article",
"label": "Example Article Title",
"description": "A detailed description of the cited content",
"domain": "example.com",
"datePublished": "2025-01-01",
"citationPillId": 0,
"type": "searchResult",
"position": 1
}
],
"ads": [
{
"brand": {
"name": "Acme Shoes",
"url": "https://www.acmeshoes.com?utm_source=chatgpt.com",
"favicon": "https://images.openai.com/favicon.ico"
},
"cards": [
{
"title": "Premium Running Shoes",
"body": "Lightweight performance running shoes with advanced cushioning technology",
"url": "https://www.acmeshoes.com/running?utm_source=chatgpt.com",
"image": "https://images.openai.com/product.jpg"
},
{
"title": "Trail Running Shoes",
"body": "Durable shoes designed for off-road running with superior grip",
"url": "https://www.acmeshoes.com/trail?utm_source=chatgpt.com",
"image": "https://images.openai.com/product2.jpg"
}
]
}
]
}
}{
"success": false,
"error": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
]
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Insufficient permissions",
"details": {
"requiredScopes": [
"read:monitor",
"write:monitor"
]
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Route not found",
"details": {
"id": "/v1/invalid-endpoint"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_CONFLICT",
"message": "Resource conflict",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "CONCURRENT_LIMIT_EXCEEDED",
"message": "Concurrent limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Request was canceled"
}{
"success": false,
"error": "Maximum retries exceeded"
}{
"error": {
"code": "EXTERNAL_SERVICE_ERROR",
"message": "External service error: OpenAI",
"details": {
"service": "OpenAI"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}Extract structured data from ChatGPT: shopping cards, brand entities, map entries, raw response data, and query fan-out.
Even shopping queries don’t always return cards — it depends on what ChatGPT finds and how it formats the response.
Why are
OpenAI serves a share of logged-out ChatGPT traffic through a mobile-web response format that streams the answer as HTML fragments instead of the usual event stream. Those responses carry no stream metadata, so
Web search enabledThis endpoint enables ChatGPT’s web search mode on every request, so responses include current information from the web with source citations.
Request parameters
Uses common parameters. All ChatGPT-specificinclude.* flags are listed in the auto-generated request schema below.
Additional credit costEnabling any of
include.rawResponse, include.searchQueries, include.ads, or include.shopping (or any combination) adds +2 credits to the base cost.Response objects
| Section | Description |
|---|---|
| Sources | Source citations with publication dates and footnote indicators |
| Shopping cards | Structured product information with pricing, ratings, and offers |
| Inline products | Individual product references with rationale and themed reviews |
| Entities | Named entities like products, brands, and concepts |
| Map entries | Business and place information from Yelp and Google |
| Citation pills | Inline citations with rich metadata |
| Ads | Advertiser branding and product carousel cards |
Response schema
Includes common response fields plus:| Field | Type | Description |
|---|---|---|
result.rawResponse | array | Array of ChatGPT’s streamed response events. When include.shopping is also true, this additionally includes the product_update SSE events fetched for each inline product / shopping-card product (included when include.rawResponse is true) |
result.searchQueries | array | Array of search model queries (fan-out queries) ChatGPT used internally to gather information (included when include.searchQueries is true) |
result.mapSearchQueries | array | Array of map search queries ChatGPT fired at the maps tool to build the map entries (included when include.searchQueries is true). Distinct from searchQueries, which are the web-search fan-out queries |
result.ads | array | Array of ads displayed in ChatGPT response (included when include.ads is true) |
result.shoppingCards | array | Array of shopping/product cards extracted from response (included when include.shopping is true) |
result.inlineProducts | array | Array of inline products with pricing and offers (included when include.shopping is true) |
result.entities | array | Array of entities extracted from response (when available) |
result.map | array | Array of business/place map entries extracted from response (when available) |
result.citationPills | array | Array of inline citation pills extracted from response (when available) |
result.sources | array | Array of sources referenced in the response. See Sources for ChatGPT-specific fields |
result.model | string | The ChatGPT model used to generate the response |
Common questions
How does cloro retrieve ChatGPT responses?
cloro does not call the ChatGPT API. Each request runs through a real browser session against ChatGPT’s web interface, routed through a proxy in the country (and, where supported, state) you specify. Theresult.* fields are extracted from that page; the raw SSE events are available via include.rawResponse: true. See How does cloro retrieve data from AI providers? for the implications (model routing, auth walls, geo behaviour).
Can I get the search queries that ChatGPT uses?
Yes. Setinclude.searchQueries: true to get the fan-out queries ChatGPT runs internally. The same flag also returns result.mapSearchQueries: the queries ChatGPT sends to the maps tool to build the map block, separate from the web-search fan-out in result.searchQueries.
Are query fan-outs available for all ChatGPT responses?
ChatGPT usesgpt-5-3 and gpt-5-3-mini that include fan-out queries; newer models may not include explicit fan-outs. ChatGPT automatically selects which model to use for each request, so we cannot control the presence of query fan-outs.
Are query fan-outs available for other providers?
For a complete comparison of query fan-out support across all providers, see the Providers & pricing guide.Why is a fan-out query a single long string instead of separated keywords?
That is expected. ChatGPT’s search model decides the shape of each fan-out query, and often emits a single long natural-language query rather than a keyword list. Length and structure vary between runs, even for the same prompt, and cloro returns the queries exactly as ChatGPT generates them. This LinkedIn post by Stefan Landwehr documents the same behaviour.Why aren’t shopping cards appearing in my responses?
Shopping cards only appear when the prompt is related to products or shopping:# ✅ Good - shopping related
"best laptops under $1000"
"compare iPhone vs Samsung"
"top rated headphones 2026"
# ❌ Bad - not shopping related
"what is the capital of France"
"how does photosynthesis work"
Which providers support shopping cards?
For a complete comparison of shopping card support across all providers, see the Providers & pricing guide.My non-English prompts are returning English fan-out queries. Is that expected?
Yes. ChatGPT may generate some or all of its internal search queries (result.searchQueries) in English regardless of prompt language — a roughly 50/50 English/local-language split has been observed. This is upstream behavior; cloro returns the queries as generated. For multilingual GEO monitoring, filter or group by query language.
Why are result.model, searchQueries, or mapSearchQueries sometimes empty?
OpenAI serves a share of logged-out ChatGPT traffic through a mobile-web response format that streams the answer as HTML fragments instead of the usual event stream. Those responses carry no stream metadata, so result.model, result.searchQueries, and result.mapSearchQueries come back empty and result.sources is shorter. The answer text / markdown and inline citationPills are unaffected.
“Mobile-web” is OpenAI’s response format, not the requesting device or any parameter you send. OpenAI decides the format per request, so identical requests can land in either — treat these fields as possibly empty. See the 21st July 2026 changelog entry for the full breakdown.
What’s the difference between shopping cards and inline products?
Shopping cards are grouped collections of products displayed together (like a carousel):- Contain multiple products
- Include category tags
- For browsing multiple options
- Single product per entry
- Include pricing, offers, images, and ratings
- Can be embedded inline in text, comparison tables, or featured displays
- Have rendering hints (inline, hero, block)
include.shopping: true is set in the request.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Request parameters for monitoring ChatGPT responses
The prompt to send to ChatGPT
Required string length:
1 - 10000Example:
"What do you know about Acme Corp?"
Country/region code for localized response
Example:
"US"
Optional flags for including additional response formats
Show child attributes
Show child attributes
Example:
{ "html": true, "markdown": true, "rawResponse": true, "searchQueries": true, "ads": true, "shopping": true }
State code for sub-country geo-targeting (e.g., "CA"). Only valid with country "US".
Required string length:
2Pattern:
^[A-Z]{2}$Example:
"CA"
Was this page helpful?
⌘I