Monitor Copilot Responses
curl --request POST \
--url https://api.cloro.dev/v1/monitor/copilot \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What are the best laptops for programming?",
"country": "US",
"include": {
"html": false,
"markdown": false,
"rawResponse": false
},
"state": "CA"
}
'import requests
url = "https://api.cloro.dev/v1/monitor/copilot"
payload = {
"prompt": "What are the best laptops for programming?",
"country": "US",
"include": {
"html": False,
"markdown": False,
"rawResponse": False
},
"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 are the best laptops for programming?',
country: 'US',
include: {html: false, markdown: false, rawResponse: false},
state: 'CA'
})
};
fetch('https://api.cloro.dev/v1/monitor/copilot', 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/copilot",
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',
'include' => [
'html' => false,
'markdown' => false,
'rawResponse' => false
],
'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/copilot"
payload := strings.NewReader("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\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/copilot")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\n },\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/copilot")
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 \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\n },\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "As an AI assistant, I can help you find great laptops for programming...",
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"sources": [
{
"position": 1,
"url": "https://docs.microsoft.com/",
"label": "Microsoft Docs",
"description": "Official development documentation"
}
],
"citationPills": [
{
"label": "Microsoft 365 Documentation",
"citationPillId": 1,
"url": "https://docs.microsoft.com/",
"domain": "docs.microsoft.com",
"description": "Official development documentation",
"position": 1
},
{
"label": "VS Code on GitHub",
"citationPillId": 1,
"url": "https://github.com/microsoft/vscode",
"domain": "github.com",
"description": "Visual Studio Code repository",
"position": 2
}
],
"shoppingCards": [
{
"type": "shoppingProducts",
"layout": "Carousel",
"products": [
{
"product": {
"id": "<string>",
"groupId": "<string>",
"brandGroupId": "<string>"
},
"position": 1,
"offerId": "<string>",
"url": "<string>",
"name": "<string>",
"description": "<string>",
"images": [
{
"title": "<string>",
"url": "<string>"
}
],
"specifications": [
{
"displayName": "<string>",
"values": [
"<string>"
]
}
],
"tags": [
"<string>"
],
"price": {
"amount": 123,
"currency": "<string>",
"currencySymbol": "<string>"
},
"seller": "<string>",
"sellerLogoUrl": "<string>",
"brandName": "<string>",
"rating": {
"value": 123,
"count": 123
},
"canTrackPrice": true
}
]
}
],
"map": [
{
"name": "WonderWorks Pigeon Forge",
"position": 1,
"placeId": "ChIJEYpTsk__W4gR2sQLGzOjE3o",
"location": {
"address": "100 Music Rd, Pigeon Forge, TN 37863",
"latitude": 35.823257,
"longitude": -83.5787498
},
"phoneNumber": "(865) 868-1800",
"url": "http://www.wonderworksonline.com/pigeon-forge/",
"reviews": [
{
"count": 10625,
"rating": 4.3,
"providerName": "Google",
"providerIconUrl": null,
"url": "https://maps.google.com/?cid=8796553937077126362"
}
],
"photos": [
{
"url": "https://lh3.googleusercontent.com/gps-cs-s/example",
"altText": null,
"providerName": null,
"providerUrl": "https://maps.google.com"
}
],
"openState": "Open · Closes 9 PM",
"category": "Amusement park",
"price": null,
"layerLabel": "Theme Parks"
}
],
"searchQueries": [
"best laptops for programming 2025",
"developer laptop reviews"
],
"markdown": "As an AI assistant, I can help you find great laptops for programming...",
"rawResponse": [
"<unknown>"
]
}
}{
"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"
}
}Copilot
Extract Microsoft Copilot
Extract structured data from Microsoft Copilot about your brand, products, or any topic across various regions
POST
/
v1
/
monitor
/
copilot
Monitor Copilot Responses
curl --request POST \
--url https://api.cloro.dev/v1/monitor/copilot \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What are the best laptops for programming?",
"country": "US",
"include": {
"html": false,
"markdown": false,
"rawResponse": false
},
"state": "CA"
}
'import requests
url = "https://api.cloro.dev/v1/monitor/copilot"
payload = {
"prompt": "What are the best laptops for programming?",
"country": "US",
"include": {
"html": False,
"markdown": False,
"rawResponse": False
},
"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 are the best laptops for programming?',
country: 'US',
include: {html: false, markdown: false, rawResponse: false},
state: 'CA'
})
};
fetch('https://api.cloro.dev/v1/monitor/copilot', 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/copilot",
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',
'include' => [
'html' => false,
'markdown' => false,
'rawResponse' => false
],
'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/copilot"
payload := strings.NewReader("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\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/copilot")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What are the best laptops for programming?\",\n \"country\": \"US\",\n \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\n },\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/copilot")
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 \"include\": {\n \"html\": false,\n \"markdown\": false,\n \"rawResponse\": false\n },\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"text": "As an AI assistant, I can help you find great laptops for programming...",
"html": "https://cdn.cloro.dev/results/c45a5081-808d-4ed3-9c86-e4baf16c8ab8/page-1.html",
"sources": [
{
"position": 1,
"url": "https://docs.microsoft.com/",
"label": "Microsoft Docs",
"description": "Official development documentation"
}
],
"citationPills": [
{
"label": "Microsoft 365 Documentation",
"citationPillId": 1,
"url": "https://docs.microsoft.com/",
"domain": "docs.microsoft.com",
"description": "Official development documentation",
"position": 1
},
{
"label": "VS Code on GitHub",
"citationPillId": 1,
"url": "https://github.com/microsoft/vscode",
"domain": "github.com",
"description": "Visual Studio Code repository",
"position": 2
}
],
"shoppingCards": [
{
"type": "shoppingProducts",
"layout": "Carousel",
"products": [
{
"product": {
"id": "<string>",
"groupId": "<string>",
"brandGroupId": "<string>"
},
"position": 1,
"offerId": "<string>",
"url": "<string>",
"name": "<string>",
"description": "<string>",
"images": [
{
"title": "<string>",
"url": "<string>"
}
],
"specifications": [
{
"displayName": "<string>",
"values": [
"<string>"
]
}
],
"tags": [
"<string>"
],
"price": {
"amount": 123,
"currency": "<string>",
"currencySymbol": "<string>"
},
"seller": "<string>",
"sellerLogoUrl": "<string>",
"brandName": "<string>",
"rating": {
"value": 123,
"count": 123
},
"canTrackPrice": true
}
]
}
],
"map": [
{
"name": "WonderWorks Pigeon Forge",
"position": 1,
"placeId": "ChIJEYpTsk__W4gR2sQLGzOjE3o",
"location": {
"address": "100 Music Rd, Pigeon Forge, TN 37863",
"latitude": 35.823257,
"longitude": -83.5787498
},
"phoneNumber": "(865) 868-1800",
"url": "http://www.wonderworksonline.com/pigeon-forge/",
"reviews": [
{
"count": 10625,
"rating": 4.3,
"providerName": "Google",
"providerIconUrl": null,
"url": "https://maps.google.com/?cid=8796553937077126362"
}
],
"photos": [
{
"url": "https://lh3.googleusercontent.com/gps-cs-s/example",
"altText": null,
"providerName": null,
"providerUrl": "https://maps.google.com"
}
],
"openState": "Open · Closes 9 PM",
"category": "Amusement park",
"price": null,
"layerLabel": "Theme Parks"
}
],
"searchQueries": [
"best laptops for programming 2025",
"developer laptop reviews"
],
"markdown": "As an AI assistant, I can help you find great laptops for programming...",
"rawResponse": [
"<unknown>"
]
}
}{
"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 Microsoft Copilot, including shopping cards for product tracking.
Web search enabledThis endpoint uses Copilot’s default interface, which always performs web searches for all requests to provide real-time information with source citations.
Request parameters
Uses common parameters. Endpoint-specific options:include.markdown(boolean): Include markdown-formatted response. Defaults tofalseinclude.rawResponse(boolean): Include raw streaming response events. Defaults tofalse
Response objects
The response includes the following sections. See each subpage for the full schema and examples.| Section | Description |
|---|---|
| Sources | Source citations referenced in the response |
| Shopping cards | Product cards with pricing, ratings, and seller info |
| Map entries | Business and place information with reviews and photos |
Response schema
Includes common response fields plus:| Field | Type | Description |
|---|---|---|
result.sources | array | Array of sources referenced in the response |
result.shoppingCards | array | Array of shopping card objects with product information (automatically included when available) |
result.map | array | Array of map entry objects with business/place information (automatically included when available) |
result.searchQueries | array | Array of query fan-out — the web search queries Copilot ran while generating the response (automatically included when at least one is available, no surcharge) |
result.markdown | string | Response formatted in Markdown (included when include.markdown is true) |
result.rawResponse | array | Array of Copilot’s streamed response events (included when include.rawResponse is true) |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Request parameters for monitoring Copilot responses
The prompt to send to Copilot
Required string length:
1 - 10000Example:
"What are the best laptops for programming?"
Country/region code for localized response
Example:
"US"
Optional flags for including additional response formats
Show child attributes
Show child attributes
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