POST /corroborate
curl --request POST \
--url https://api.getbeta.io/api/v1/corroborate \
--header 'Content-Type: application/json' \
--data '
{
"company": "<string>",
"claims": [
{}
]
}
'import requests
url = "https://api.getbeta.io/api/v1/corroborate"
payload = {
"company": "<string>",
"claims": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({company: '<string>', claims: [{}]})
};
fetch('https://api.getbeta.io/api/v1/corroborate', 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.getbeta.io/api/v1/corroborate",
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([
'company' => '<string>',
'claims' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"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.getbeta.io/api/v1/corroborate"
payload := strings.NewReader("{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.getbeta.io/api/v1/corroborate")
.header("Content-Type", "application/json")
.body("{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbeta.io/api/v1/corroborate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"entity": {},
"results": [
{
"result.claim_index": 123,
"result.corroborated": true,
"result.confidence": 123,
"result.reason": "<string>",
"result.detail": "<string>",
"result.evidence": [
{}
],
"result.sources_checked": [
{}
]
}
],
"meta": {}
}Endpoints
POST /corroborate
Verify a factual claim against SEC + news + people index.
POST
/
api
/
v1
/
corroborate
POST /corroborate
curl --request POST \
--url https://api.getbeta.io/api/v1/corroborate \
--header 'Content-Type: application/json' \
--data '
{
"company": "<string>",
"claims": [
{}
]
}
'import requests
url = "https://api.getbeta.io/api/v1/corroborate"
payload = {
"company": "<string>",
"claims": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({company: '<string>', claims: [{}]})
};
fetch('https://api.getbeta.io/api/v1/corroborate', 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.getbeta.io/api/v1/corroborate",
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([
'company' => '<string>',
'claims' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"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.getbeta.io/api/v1/corroborate"
payload := strings.NewReader("{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.getbeta.io/api/v1/corroborate")
.header("Content-Type", "application/json")
.body("{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbeta.io/api/v1/corroborate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"company\": \"<string>\",\n \"claims\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"entity": {},
"results": [
{
"result.claim_index": 123,
"result.corroborated": true,
"result.confidence": 123,
"result.reason": "<string>",
"result.detail": "<string>",
"result.evidence": [
{}
],
"result.sources_checked": [
{}
]
}
],
"meta": {}
}Use case
Verify a factual claim about a company against BETA’s structured sources (SEC filings, M&A transactions, material events, news, people index) before your agent acts on it. Returnscorroborated: true with evidence + confidence, or corroborated: false with reason: "no_match" when sources don’t support the claim. This is the citation-discipline primitive — treat corroborated: false as informational, not as failure.
For the standard integration pattern, see Recipes → Corroborate before write.
Request
string
required
Company name or entity key. 2–200 characters.
array
required
Array of 1–10 claim objects. Each claim:
Show claim fields
Show claim fields
Response
object
Resolved entity (
key, name, verified).array
One result per submitted claim, indexed by
claim_index.Show result fields
Show result fields
integer
Index into the input claims array.
boolean
true if sources support the claim.number
Confidence (0–1) based on evidence strength + source count.
string
multi_source_match · sec_filing_match · people_index_match · news_match · no_match · error · missing_input · unsupported_claim_typestring
Human-readable explanation.
array
Each evidence item has
type, date, text, and confidence.array
Which datasets BETA looked in — populated even on
no_match so you can audit what was tried.object
sources_available, entity_coverage (public_company | private_company), corroborated_at (ISO timestamp), resolution (per Citation Contract).Code samples
curl -X POST https://api.getbeta.io/api/v1/corroborate \
-H "Authorization: Bearer $BETA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"company": "NVIDIA",
"claims": [
{"type": "role", "person_name": "Jensen Huang", "role": "CEO"}
]
}'
const res = await fetch('https://api.getbeta.io/api/v1/corroborate', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.BETA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
company: 'NVIDIA',
claims: [
{ type: 'role', person_name: 'Jensen Huang', role: 'CEO' }
]
})
});
import os, requests
res = requests.post(
'https://api.getbeta.io/api/v1/corroborate',
headers={'Authorization': f'Bearer {os.environ["BETA_API_KEY"]}'},
json={
'company': 'NVIDIA',
'claims': [
{'type': 'role', 'person_name': 'Jensen Huang', 'role': 'CEO'}
]
}
)
Live response
{
"entity": {
"key": "nvidia",
"name": "NVIDIA Corporation",
"verified": true
},
"results": [
{
"claim_index": 0,
"corroborated": true,
"confidence": 0.8,
"reason": "people_index_match",
"detail": "Jensen Huang found in 1 record(s) at this company.",
"evidence": [
{
"type": "people_index",
"person": "Jensen Huang",
"role": "CEO",
"source_type": "news_extraction",
"is_current": true,
"verified_count": 8
}
],
"sources_checked": [
"sec_executive_changes",
"company_mentioned_people"
]
}
],
"meta": {
"sources_available": [
"entity_registry",
"sec_executive_changes",
"sec_ma_transactions",
"company_mentioned_people",
"source_articles"
],
"entity_coverage": "public_company",
"corroborated_at": "2026-05-20T03:49:30.925Z",
"resolution": { "source": "curated", "confidence": 1 }
}
}
Cost notes
/corroborate is BETA’s most expensive call (0.10/claimduringoverageversus0.05 for the others). Batch up to 10 claims per request to minimize round-trip cost and latency.
Errors
| Status | Body | When |
|---|---|---|
400 | {"error": "At least one claim required"} | Empty claims array |
400 | {"error": "Maximum 10 claims per request"} | claims.length > 10 |
404 | {"error": "Company not found", "code": "NOT_FOUND"} | No entity resolved |
Citation pointer
See Citation Contract for howcorroborated: false is the explicit refusal signal — the most important shape this endpoint produces.