curl --request POST \
--url https://api.cloro.dev/v1/monitor/aimode \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What are the best laptops for programming?",
"country": "US",
"gl": "us",
"hl": "en",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"include": {
"html": false,
"markdown": false,
"expandProducts": false
}
}
'import requests
url = "https://api.cloro.dev/v1/monitor/aimode"
payload = {
"prompt": "What are the best laptops for programming?",
"country": "US",
"gl": "us",
"hl": "en",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"include": {
"html": False,
"markdown": False,
"expandProducts": False
}
}
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 are the best laptops for programming?',
country: 'US',
gl: 'us',
hl: 'en',
location: 'New York,New York,United States',
uule: 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
device: 'desktop',
include: {html: false, markdown: false, expandProducts: false}
})
};
fetch('https://api.cloro.dev/v1/monitor/aimode', 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/aimode",
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 are the best laptops for programming?',
'country' => 'US',
'gl' => 'us',
'hl' => 'en',
'location' => 'New York,New York,United States',
'uule' => 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
'device' => 'desktop',
'include' => [
'html' => false,
'markdown' => false,
'expandProducts' => false
]
]),
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/aimode"
payload := strings.NewReader("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\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/aimode")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/aimode")
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 are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "Here are some excellent laptop recommendations for programming...",
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"sources": [
{
"position": 1,
"url": "https://example.com/ai-recommendations",
"label": "AI Source",
"description": "AI-curated laptop recommendations"
}
],
"citationPills": [
{
"label": "Best Laptops 2026 — Reuters",
"citationPillId": 1,
"url": "https://example.com/best-laptops-2026",
"domain": "example.com",
"description": "A guide to the top laptops for software development this year.",
"position": 1
},
{
"label": "MacBook Pro M4 Hands-On Review",
"citationPillId": 1,
"url": "https://example.com/macbook-pro-review",
"domain": "example.com",
"position": 3
}
],
"markdown": "Here are some excellent laptop recommendations for programming...",
"places": [
{
"title": "Gion District",
"link": "https://www.google.com/viewer/place?mid=/g/11bw3yq9kp",
"placeId": "/g/11bw3yq9kp",
"index": 0,
"thumbnail": "https://lh5.googleusercontent.com/p/example",
"rating": 4.5,
"reviews": 2900,
"type": "Tourist attraction",
"priceLevel": "$$",
"address": "Gionmachi, Higashiyama Ward, Kyoto",
"status": "Open now"
}
],
"shoppingCards": [
{
"title": "Wireless Headphones",
"price": {
"value": 99.99,
"currency": "$",
"raw": "$129.99"
},
"store": "Amazon",
"rating": 4.2,
"reviews": "2.3k",
"thumbnail": "https://example.com/product.jpg",
"productLink": "https://www.google.com/example",
"oldPrice": {
"value": 129.99,
"currency": "$",
"raw": "$129.99"
},
"snippet": "Noise-canceling wireless headphones with 30-hour battery life",
"snippet_links": [
{
"text": "noise canceling",
"link": "https://www.google.com/search?q=noise+canceling"
}
],
"position": 0
}
],
"ads": {
"title": "Here are some 3D printers to consider",
"ads": [
{
"title": "Bambu Lab X2D",
"url": "https://www.google.com/aclk?sa=L&ai=abc",
"position": 1,
"price": {
"value": 899,
"currency": "$"
},
"store": "Bambu Lab US",
"rating": 4.7,
"reviews": "584"
}
]
},
"inlineProducts": [
{
"title": "Sony WH-1000XM5",
"position": 1,
"price": {
"value": 298,
"currency": "$"
},
"oldPrice": {
"value": 399.99,
"currency": "$"
},
"store": "Amazon",
"thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=example",
"productLink": "https://www.google.com/shopping/product/example"
}
],
"videos": [
{
"title": "The BEST 3D Printer for YOU - Don't Buy the Wrong One!",
"link": "https://www.youtube.com/watch?v=g0DZnQdI-xQ",
"platform": "YouTube",
"channel": "3D Print Dood",
"duration": "08:49",
"thumbnail": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS5Bntg3F0Y7P3YgTPgdyillyeCguV_YQJ99KFUmNYxmQtVt1f2"
}
],
"map": [
{
"title": "Central Park Cafe",
"link": "https://www.google.com/viewer/place?mid=/g/11bw3yq9kp",
"placeId": "/g/11bw3yq9kp",
"index": 0,
"gps_coordinates": {
"latitude": 40.7831,
"longitude": -73.9712
},
"thumbnail": "https://lh5.googleusercontent.com/p/example",
"rating": 4.5,
"reviews": 1234,
"type": "Coffee shop",
"address": "123 Broadway, New York",
"status": "Open now"
}
]
}
}{
"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 Google AI Mode
Extract structured data from AI Mode about your brand, products, or any topic across various regions
curl --request POST \
--url https://api.cloro.dev/v1/monitor/aimode \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What are the best laptops for programming?",
"country": "US",
"gl": "us",
"hl": "en",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"include": {
"html": false,
"markdown": false,
"expandProducts": false
}
}
'import requests
url = "https://api.cloro.dev/v1/monitor/aimode"
payload = {
"prompt": "What are the best laptops for programming?",
"country": "US",
"gl": "us",
"hl": "en",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"include": {
"html": False,
"markdown": False,
"expandProducts": False
}
}
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 are the best laptops for programming?',
country: 'US',
gl: 'us',
hl: 'en',
location: 'New York,New York,United States',
uule: 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
device: 'desktop',
include: {html: false, markdown: false, expandProducts: false}
})
};
fetch('https://api.cloro.dev/v1/monitor/aimode', 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/aimode",
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 are the best laptops for programming?',
'country' => 'US',
'gl' => 'us',
'hl' => 'en',
'location' => 'New York,New York,United States',
'uule' => 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
'device' => 'desktop',
'include' => [
'html' => false,
'markdown' => false,
'expandProducts' => false
]
]),
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/aimode"
payload := strings.NewReader("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\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/aimode")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/aimode")
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 are the best laptops for programming?\",\n \"country\": \"US\",\n \"gl\": \"us\",\n \"hl\": \"en\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"expandProducts\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "Here are some excellent laptop recommendations for programming...",
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"sources": [
{
"position": 1,
"url": "https://example.com/ai-recommendations",
"label": "AI Source",
"description": "AI-curated laptop recommendations"
}
],
"citationPills": [
{
"label": "Best Laptops 2026 — Reuters",
"citationPillId": 1,
"url": "https://example.com/best-laptops-2026",
"domain": "example.com",
"description": "A guide to the top laptops for software development this year.",
"position": 1
},
{
"label": "MacBook Pro M4 Hands-On Review",
"citationPillId": 1,
"url": "https://example.com/macbook-pro-review",
"domain": "example.com",
"position": 3
}
],
"markdown": "Here are some excellent laptop recommendations for programming...",
"places": [
{
"title": "Gion District",
"link": "https://www.google.com/viewer/place?mid=/g/11bw3yq9kp",
"placeId": "/g/11bw3yq9kp",
"index": 0,
"thumbnail": "https://lh5.googleusercontent.com/p/example",
"rating": 4.5,
"reviews": 2900,
"type": "Tourist attraction",
"priceLevel": "$$",
"address": "Gionmachi, Higashiyama Ward, Kyoto",
"status": "Open now"
}
],
"shoppingCards": [
{
"title": "Wireless Headphones",
"price": {
"value": 99.99,
"currency": "$",
"raw": "$129.99"
},
"store": "Amazon",
"rating": 4.2,
"reviews": "2.3k",
"thumbnail": "https://example.com/product.jpg",
"productLink": "https://www.google.com/example",
"oldPrice": {
"value": 129.99,
"currency": "$",
"raw": "$129.99"
},
"snippet": "Noise-canceling wireless headphones with 30-hour battery life",
"snippet_links": [
{
"text": "noise canceling",
"link": "https://www.google.com/search?q=noise+canceling"
}
],
"position": 0
}
],
"ads": {
"title": "Here are some 3D printers to consider",
"ads": [
{
"title": "Bambu Lab X2D",
"url": "https://www.google.com/aclk?sa=L&ai=abc",
"position": 1,
"price": {
"value": 899,
"currency": "$"
},
"store": "Bambu Lab US",
"rating": 4.7,
"reviews": "584"
}
]
},
"inlineProducts": [
{
"title": "Sony WH-1000XM5",
"position": 1,
"price": {
"value": 298,
"currency": "$"
},
"oldPrice": {
"value": 399.99,
"currency": "$"
},
"store": "Amazon",
"thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=example",
"productLink": "https://www.google.com/shopping/product/example"
}
],
"videos": [
{
"title": "The BEST 3D Printer for YOU - Don't Buy the Wrong One!",
"link": "https://www.youtube.com/watch?v=g0DZnQdI-xQ",
"platform": "YouTube",
"channel": "3D Print Dood",
"duration": "08:49",
"thumbnail": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS5Bntg3F0Y7P3YgTPgdyillyeCguV_YQJ99KFUmNYxmQtVt1f2"
}
],
"map": [
{
"title": "Central Park Cafe",
"link": "https://www.google.com/viewer/place?mid=/g/11bw3yq9kp",
"placeId": "/g/11bw3yq9kp",
"index": 0,
"gps_coordinates": {
"latitude": 40.7831,
"longitude": -73.9712
},
"thumbnail": "https://lh5.googleusercontent.com/p/example",
"rating": 4.5,
"reviews": 1234,
"type": "Coffee shop",
"address": "123 Broadway, New York",
"status": "Open now"
}
]
}
}{
"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"
}
}Request parameters
Required parameters:prompt(string): The query to send to AI Mode (1-10,000 characters)country(string): ISO 3166-1 alpha-2 country code (uppercase) for localized results. Required — there is no default
hl(string): Interface language, as Google’s ownhlparameter (en,de,pt-BR, …). Overrides the language cloro derives from the country, so the interface language and the result geography can differ. Free-form — Google owns the list of codesgl(string): Alternative tocountry, using Google’s own parameter name. Same country codes, accepted in either case. Providecountryorgl; sending both with different values is a400location(string): Google canonical location name for geo-targeted results (e.g.,New York,New York,United States). See Google’s geo target list for all ~100,000 supported locations. Mutually exclusive withuule. When bothlocationanduuleare omitted, cloro defaultslocationto the requested country’s canonical name (e.g.Portugalforcountry: "PT") so results pin to the country instead of the proxy’s exit IP. Passlocationoruuleexplicitly when you need city- or region-level precisionuule(string): Pre-encoded Google UULE string for precise geo-targeting. Use this when you have a pre-built UULE value instead of a location name. Mutually exclusive withlocationdevice(string): Device type for search results. Options:desktop(default),mobileinclude.markdown(boolean): Include markdown-formatted response. Defaults tofalseinclude.html(boolean): Include raw HTML response. Defaults tofalseinclude.expandProducts(boolean): Fetch merchant offers for the product clusters in the response (up to 6) and return them asresult.productResults. Opt-in, off by defaultinclude.googleGoto(boolean): Return Google’s encrypted redirect links instead of their destinations. See Google redirect links. Defaults tofalse
include.expandProducts charges +1 credit per product cluster returned in result.productResults, capped at +6. The surcharge is applied after the scrape, so it scales with what Google actually surfaces: clusters skipped by the cap, or dropped because their product viewer could not be fetched, are not charged. Requests without the flag are unaffected. See providers for pricing details.Response objects
| Section | Description |
|---|---|
| Sources | Source citations referenced in the response |
| Places | Inline place cards when location intent is detected |
| Shopping cards | Product carousel when shopping intent is detected |
| Ads | Sponsored ad section when commercial intent is detected |
| Inline products | Individual product references embedded in the response text |
| Videos | Inline video cards (currently YouTube) embedded in the response |
| Map | GPS-enriched location data when map-aware results are surfaced |
| Product results | Merchant offers behind each product cluster — direct URL, price, installments, stock, delivery, returns. Returned only when include.expandProducts is set |
Response schema
Includes common response fields plus:Core response fields
| Field | Type | Description |
|---|---|---|
result.text | string | AI Mode’s response text |
result.markdown | string | Response formatted in Markdown (included when include.markdown is true). Note: this field is generated by converting Google’s live DOM to markdown — order can shift as Google updates its DOM. |
result.sources | array | Array of sources referenced in the response |
result.places | array | Array of places (when location intent detected) |
result.shoppingCards | array | Array of shopping cards (when shopping intent detected) |
result.ads | object | Ad section wrapper with title and ads array (when commercial intent detected) |
result.inlineProducts | array | Array of inline products found within the response text |
result.videos | array | Array of videos embedded in the response (currently YouTube) |
result.map | array | Array of map entries with GPS coordinates (when map-aware results surfaced) |
result.productResults | array | Array of product results with merchant offers per product cluster. Returned only when include.expandProducts: true is set on the request |
Usage examples
Overriding the interface language
hl is independent of the country, so a German-language answer from a US-targeted request is one field:
{
"prompt": "beste laptops für programmierer",
"country": "US",
"hl": "de"
}
hl, cloro derives the language from the country — which picks one dominant language for multilingual countries such as CH, BE, and CA.
City-level geo-targeting
Pairlocation with country to target a city or region. It accepts Google canonical location names.
{
"prompt": "best restaurants nearby",
"country": "US",
"location": "New York,New York,United States"
}
Expanding merchant offers
{
"prompt": "best wireless headphones under $200",
"country": "US",
"include": {
"expandProducts": true
}
}
result.productResults. Clusters are deduplicated across shoppingCards and inlineProducts, and expansion is capped at 6 per scrape.
UULE geo-targeting
When you generate your own UULE values, passuule instead of location — the two are mutually exclusive:
{
"prompt": "best restaurants nearby",
"country": "US",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5"
}
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, rotated, and revoked at https://dashboard.cloro.dev/api-keys. Full details, including the versioning and deprecation policy, are at https://cloro.dev/auth.md.
Body
Request parameters for monitoring AI Mode responses
- Option 1
- Option 2
The prompt to send to AI Mode
1 - 10000"What are the best laptops for programming?"
Country/region code for localized response
"US"
Alternative to country, using Google's own parameter name for the result geography. Same ISO 3166-1 alpha-2 codes, accepted in either case (us or US), and must be a country the endpoint supports — see GET /v1/countries. Provide country or gl; sending both with different values is a 400.
"us"
Interface language, as Google's own hl parameter (e.g. en, de, pt-BR). Free-form and case-insensitive — Google owns the list of codes. Overrides the language cloro derives from the country, so the interface language and the result geography can differ.
"en"
Google canonical location name for geo-targeted results, in comma-separated format: 'City,Region,Country' (see https://developers.google.com/google-ads/api/reference/data/geotargets for all ~100,000 supported locations). Use alongside 'country' for city-level precision. Mutually exclusive with 'uule' — provide one or the other, not both.
"New York,New York,United States"
Pre-encoded Google UULE string for precise geo-targeting. Use this when you have a pre-built UULE value instead of a location name. Mutually exclusive with 'location' — provide one or the other, not both.
"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5"
Device type for search results
desktop, mobile "desktop"
Optional flags for including additional response formats
Show child attributes
Show child attributes
Was this page helpful?