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
},
"legacy": true,
"disableWebSearch": 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
},
"legacy": True,
"disableWebSearch": 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
},
legacy: true,
disableWebSearch: 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
],
'legacy' => true,
'disableWebSearch' => 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 \"legacy\": true,\n \"disableWebSearch\": true,\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 \"legacy\": true,\n \"disableWebSearch\": true,\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 \"legacy\": true,\n \"disableWebSearch\": true,\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"
],
"mapSearchQueries": [
"coffee shops near Union Square San Francisco"
],
"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",
"subtitle": "Premium midrange · roughly $480–$650",
"attributes": [
{
"label": "Best for",
"value": "one or two monitors and daily work"
}
],
"citationPillIds": [
0,
2
],
"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>",
"marketplace_seller": "<string>",
"seller_name": "<string>",
"brand": "<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",
"productDetails": {
"rationale": {
"rationale": "<string>",
"citations": [
{
"title": "<string>",
"url": "<string>",
"snippet": "<string>",
"pubDate": "<string>"
}
]
},
"reviews": {
"summary": "<string>",
"reviews": [
{
"source": "RunRepeat",
"theme": "Stability",
"summary": "<string>",
"sentiment": "positive",
"citation": {
"title": "<string>",
"url": "<string>",
"snippet": "<string>",
"pubDate": "<string>"
},
"rating": 123,
"numReviews": 123,
"citeUrl": "<string>"
}
]
}
}
},
"render_as": "hero"
}
],
"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"
}
]
}
],
"followUpForm": {
"questions": [
{
"label": "What's your budget?",
"type": "radio",
"name": "budget",
"options": [
{
"label": "Under €80",
"value": "Under €80",
"selected": false
},
{
"label": "€80–150",
"value": "€80–150",
"selected": true
},
{
"label": "Over €150",
"value": "Over €150",
"selected": false
}
]
},
{
"label": "Brand you already like (optional)",
"type": "text",
"name": "brand",
"placeholder": "e.g. Babolat",
"options": []
}
],
"submitLabel": "Find my racket",
"followUpPrompt": "Recommend the best tennis racket for a beginner. Budget: {budget}. Preferred brand: {brand}."
}
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
],
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "CONCURRENCY_LIMIT_EXCEEDED",
"message": "Concurrency limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "REQUEST_CANCELED",
"message": "Request was canceled by client",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "Maximum retries exceeded",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}Extract ChatGPT
Extract structured data from ChatGPT — answer text, cited sources, shopping cards, brand entities, and ads — for any prompt across supported regions
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
},
"legacy": true,
"disableWebSearch": 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
},
"legacy": True,
"disableWebSearch": 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
},
legacy: true,
disableWebSearch: 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
],
'legacy' => true,
'disableWebSearch' => 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 \"legacy\": true,\n \"disableWebSearch\": true,\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 \"legacy\": true,\n \"disableWebSearch\": true,\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 \"legacy\": true,\n \"disableWebSearch\": true,\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"
],
"mapSearchQueries": [
"coffee shops near Union Square San Francisco"
],
"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",
"subtitle": "Premium midrange · roughly $480–$650",
"attributes": [
{
"label": "Best for",
"value": "one or two monitors and daily work"
}
],
"citationPillIds": [
0,
2
],
"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>",
"marketplace_seller": "<string>",
"seller_name": "<string>",
"brand": "<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",
"productDetails": {
"rationale": {
"rationale": "<string>",
"citations": [
{
"title": "<string>",
"url": "<string>",
"snippet": "<string>",
"pubDate": "<string>"
}
]
},
"reviews": {
"summary": "<string>",
"reviews": [
{
"source": "RunRepeat",
"theme": "Stability",
"summary": "<string>",
"sentiment": "positive",
"citation": {
"title": "<string>",
"url": "<string>",
"snippet": "<string>",
"pubDate": "<string>"
},
"rating": 123,
"numReviews": 123,
"citeUrl": "<string>"
}
]
}
}
},
"render_as": "hero"
}
],
"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"
}
]
}
],
"followUpForm": {
"questions": [
{
"label": "What's your budget?",
"type": "radio",
"name": "budget",
"options": [
{
"label": "Under €80",
"value": "Under €80",
"selected": false
},
{
"label": "€80–150",
"value": "€80–150",
"selected": true
},
{
"label": "Over €150",
"value": "Over €150",
"selected": false
}
]
},
{
"label": "Brand you already like (optional)",
"type": "text",
"name": "brand",
"placeholder": "e.g. Babolat",
"options": []
}
],
"submitLabel": "Find my racket",
"followUpPrompt": "Recommend the best tennis racket for a beginner. Budget: {budget}. Preferred brand: {brand}."
}
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
],
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Insufficient credits",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "CONCURRENCY_LIMIT_EXCEEDED",
"message": "Concurrency limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "REQUEST_CANCELED",
"message": "Request was canceled by client",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "Maximum retries exceeded",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}disableWebSearch: true to get the answer ChatGPT gives on its own instead.Request parameters
Uses common parameters. All ChatGPT-specificinclude.* flags are listed in the auto-generated request schema below.
legacy: true asks for ChatGPT’s legacy desktop interface instead of the default mobile-web one. It streams the answer as an event stream, so result.model, result.searchQueries, and result.mapSearchQueries come back populated.
disableWebSearch: true stops cloro from forcing web search. ChatGPT then searches only when it decides to, which for most prompts means no search: expect result.sources, result.citationPills, and result.searchQueries to be empty, and the answer text to differ from the search-forced one. Use it to see what ChatGPT says without search, and the default to measure citations. The base cost is the same.
legacy is a temporary workaroundOpenAI decides which interface it serves and is rolling out mobile-web as the default, so legacy: true is a best-effort request that can stop working without notice. Keep your client handling both shapes: even with the flag set, treat result.model as possibly null and result.searchQueries and result.mapSearchQueries as possibly empty, and rawResponse as either the event-stream or the HTML-fragment shape.include.rawResponse, include.searchQueries, include.ads and include.shopping are one paid add-on: +2 credits, however many you enable. With the +2 sync surcharge, a request here costs 7 credits, or 9 with any paid flag; state targeting and multi-turn conversations cost extra. Async requests skip the surcharge.include.productDetails adds +2 more credits on top of include.shopping.Multi-turn conversations
Sendprompt as an array of up to 5 prompts. ChatGPT answers them in order, in the same conversation, and result is an array with one response for each prompt:
{
"prompt": [
"What are the best running shoes for flat feet?",
"Which of these costs less than $100?"
],
"country": "US",
"legacy": true,
"include": { "ads": true }
}
{
"success": true,
"result": [
{ "text": "For flat feet, look for stability shoes...", "sources": [] },
{ "text": "Of those, two cost less than $100...", "sources": [] }
]
}
include fields, and with include.html they share one page. cloro forces web search on the first prompt only, so a follow-up can come back with no sources when ChatGPT answers from the conversation. ChatGPT currently shows ads only on follow-ups, and far more often on the legacy interface, so set legacy: true to get them; the first response has none. Each follow-up adds time to the request, so use async requests for long conversations.
Response schema
Alongside the common response fields,result can carry these fields. The generated response schema on this page lists every field, including markdown and rawResponse.
| Section | Field | Description |
|---|---|---|
| Sources | result.sources | Source citations with publication dates and footnote indicators |
| Citation pills | result.citationPills | Inline citations, one entry per cited source (when available) |
| Shopping cards | result.shoppingCards | Product carousels with pricing, ratings, and merchant offers (with include.shopping: true) |
| Inline products | result.inlineProducts | Single products embedded in the answer, with pricing and offers (with include.shopping: true) |
| Product details | productDetails on each product | Rationale and reviews from each product’s sheet (with include.shopping: true and include.productDetails: true) |
| Entities | result.entities | Products, brands, and concepts named in the answer (when available) |
| Map entries | result.map | Business and place information from Yelp and Google (when available) |
| Ads | result.ads | Advertiser branding and product carousel cards (with include.ads: true) |
| Query fan-out | result.searchQueries | Web-search queries ChatGPT ran to gather information (with include.searchQueries: true) |
| Map search queries | result.mapSearchQueries | Queries ChatGPT sent to its maps tool to build result.map (with include.searchQueries: true) |
| Model | result.model | The ChatGPT model that generated the answer |
Common questions
How does cloro retrieve ChatGPT responses?
cloro does not call the ChatGPT API: each request runs a real browser session against ChatGPT’s web interface, andinclude.rawResponse: true returns the raw response payload. See How does cloro retrieve data from AI providers? for the implications (model routing, auth walls, geo behavior).
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 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 behavior.Why aren’t shopping cards appearing in my responses?
On ChatGPT, cards are opt-in: setinclude.shopping: true. Even then they appear only on product-related prompts, and not on every one. See prompt examples.
Which providers support shopping cards?
For a complete comparison of shopping card support across all providers, see the Providers 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 sources and citationPills empty when web search is forced?
cloro forces web search by default, but ChatGPT still decides whether to search and whether to cite. A successful response can have empty result.sources, result.citationPills, and result.searchQueries without disableWebSearch:
- Searched without citing: ChatGPT ran a search but cited no pages. cloro returns the answer with empty
sourcesandcitationPills. - Did not search: cloro retries when ChatGPT shows no sign of search. If ChatGPT does not search on attempts 1 and 2, cloro keeps the answer from the third attempt on, searched or not.
sources array as a valid outcome: the prompt did not earn any citations.
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 comes back null, 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. 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.
legacy: true asks for the legacy desktop interface, which streams the event stream these fields are read from. It is best-effort and temporary — see Request parameters.Authorizations
cloro API key as a bearer token. One key grants every endpoint in this spec; per-key scopes are not available, so a client cannot request a narrower permission. Keys are created and revoked in the dashboard.
Body
Request parameters for monitoring ChatGPT responses
The prompt to send to ChatGPT, or an array of up to 5 prompts for a multi-turn conversation. With an array, ChatGPT answers the prompts in order, in the same conversation, and result is an array with one response for each prompt. Each prompt after the first costs +1 credit (pricing).
1 - 10000"What do you know about Acme Corp?"
Country/region code for localized response, using ISO 3166-1 alpha-2 country codes.
AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW "US"
Serve ChatGPT's legacy desktop interface instead of the default mobile-web one. The legacy interface streams the answer as an event stream, so result.model, result.searchQueries and result.mapSearchQueries are populated. ChatGPT shows ads far more often on this interface. Best-effort and temporary: OpenAI controls which interface it serves and can retire the legacy one at any time, so a request can still come back in the mobile-web shape. Handle both. Defaults to false.
true
Do not force ChatGPT's web search. cloro returns the answer ChatGPT gives on its own, which uses web search only when ChatGPT decides to, so result.sources, result.citationPills and result.searchQueries are often empty. Defaults to false: web search is forced on every request.
true
State code for sub-country geo-targeting (e.g., "CA"). Only valid with country "US". Paid add-on: +2 credits, on top of the base cost and any other add-on (pricing).
AL, AK, AZ, AR, CA, CO, CT, DE, DC, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY 2^[A-Z]{2}$"CA"
Was this page helpful?