curl --request POST \
--url https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"instructions": "<string>",
"chat_id": "<string>",
"title": "<string>",
"file_ids": [
"<string>"
],
"mentioned_file_ids": [
"<string>"
]
}
'import requests
url = "https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications"
payload = {
"instructions": "<string>",
"chat_id": "<string>",
"title": "<string>",
"file_ids": ["<string>"],
"mentioned_file_ids": ["<string>"]
}
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({
instructions: '<string>',
chat_id: '<string>',
title: '<string>',
file_ids: ['<string>'],
mentioned_file_ids: ['<string>']
})
};
fetch('https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications', 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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications",
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([
'instructions' => '<string>',
'chat_id' => '<string>',
'title' => '<string>',
'file_ids' => [
'<string>'
],
'mentioned_file_ids' => [
'<string>'
]
]),
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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications"
payload := strings.NewReader("{\n \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications")
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 \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}Verify report and stream response
Run verification on a report — each claim is checked against its cited sources — streaming verdict events as Server-Sent Events. Use before sharing a report externally.
curl --request POST \
--url https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"instructions": "<string>",
"chat_id": "<string>",
"title": "<string>",
"file_ids": [
"<string>"
],
"mentioned_file_ids": [
"<string>"
]
}
'import requests
url = "https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications"
payload = {
"instructions": "<string>",
"chat_id": "<string>",
"title": "<string>",
"file_ids": ["<string>"],
"mentioned_file_ids": ["<string>"]
}
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({
instructions: '<string>',
chat_id: '<string>',
title: '<string>',
file_ids: ['<string>'],
mentioned_file_ids: ['<string>']
})
};
fetch('https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications', 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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications",
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([
'instructions' => '<string>',
'chat_id' => '<string>',
'title' => '<string>',
'file_ids' => [
'<string>'
],
'mentioned_file_ids' => [
'<string>'
]
]),
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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications"
payload := strings.NewReader("{\n \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\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.example.com/v1/projects/{project_id}/reports/{report_id}/verifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/projects/{project_id}/reports/{report_id}/verifications")
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 \"instructions\": \"<string>\",\n \"chat_id\": \"<string>\",\n \"title\": \"<string>\",\n \"file_ids\": [\n \"<string>\"\n ],\n \"mentioned_file_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"request_id": "<string>"
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
Optional extra verification instructions (e.g. which claims to scrutinize).
Existing conversation to run the verification in; a new one starts when omitted.
Optional title for the verification conversation.
Project file ids to include as verification context.
Project file ids referenced in the instructions.
Response
Server-Sent Events stream of agent activity.
Each event is a UTF-8 line prefixed with event:, id:, or data: per the SSE spec. The data: payload is a JSON object with the shape {"type": <event_type>, "sequence": <int>, "data": <object>}.
Event types emitted by the agent:
status— high-level progress;data.message(queued/running text) ordata.summary(short status line). When the conversation was busy and the message was queued (request fieldon_busy: "queue"), the first event isstatuswithdata.message: "queued"(or"held"if a Stop has already paused the queue),data.queuedMessageId,data.position,data.behindMessageId,data.held, anddata.revision; the reply then streams once the queued turn dispatches. A held queue does not run until it is resumed.queue.updated— the waiting message's queue state changed;data.position,data.held,data.revision,data.queuedMessageId.held: truemeans a Stop paused the queue: the message will not run until the queue is resumed (POST .../queue/resume).revisiononly moves forward; ignore any snapshot older than one you hold.tool.started— agent invoked a tool;data.id,data.nametool.input— tool input arguments;data.id,data.name,data.inputtool.completed— tool finished;data.idmessage.delta— incremental assistant text;data.text(append in order)done— terminal event;data.messageId,data.content(final assistant message),data.status(complete/error/cancelled)error— terminal error;data.code,data.message. A queued message may end withcode: "queue_wait_timeout"after 30 minutes of waiting — the message is still queued and can be observed again via the queue endpoints.
Resumability: when the connection drops before done, the same stream can be resumed via GET /v1/projects/{project_id}/conversations/{chat_id}/messages/{message_id}/events. Before a queued message has bound an assistant message id, reconnect by re-sending with the same idempotency_key, or poll GET /v1/projects/{project_id}/conversations/{chat_id}/queue/{queued_message_id}.