POST /people
curl --request POST \
--url https://api.getbeta.io/api/v1/people \
--header 'Content-Type: application/json' \
--data '
{
"company": "<string>",
"filters": {}
}
'import requests
url = "https://api.getbeta.io/api/v1/people"
payload = {
"company": "<string>",
"filters": {}
}
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>', filters: {}})
};
fetch('https://api.getbeta.io/api/v1/people', 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/people",
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>',
'filters' => [
]
]),
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/people"
payload := strings.NewReader("{\n \"company\": \"<string>\",\n \"filters\": {}\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/people")
.header("Content-Type", "application/json")
.body("{\n \"company\": \"<string>\",\n \"filters\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbeta.io/api/v1/people")
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 \"filters\": {}\n}"
response = http.request(request)
puts response.read_body{
"entity": {},
"people": [
{
"person.name": "<string>",
"person.role": {},
"person.role_type": {},
"person.is_current": true,
"person.source_types": [
{}
],
"person.verified_count": 123,
"person.last_seen": {}
}
],
"meta": {
"meta.total_indexed": 123,
"meta.coverage_note": "<string>",
"meta.resolution": {}
}
}Endpoints
POST /people
Indexed executives, board, founders, investors.
POST
/
api
/
v1
/
people
POST /people
curl --request POST \
--url https://api.getbeta.io/api/v1/people \
--header 'Content-Type: application/json' \
--data '
{
"company": "<string>",
"filters": {}
}
'import requests
url = "https://api.getbeta.io/api/v1/people"
payload = {
"company": "<string>",
"filters": {}
}
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>', filters: {}})
};
fetch('https://api.getbeta.io/api/v1/people', 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/people",
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>',
'filters' => [
]
]),
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/people"
payload := strings.NewReader("{\n \"company\": \"<string>\",\n \"filters\": {}\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/people")
.header("Content-Type", "application/json")
.body("{\n \"company\": \"<string>\",\n \"filters\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbeta.io/api/v1/people")
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 \"filters\": {}\n}"
response = http.request(request)
puts response.read_body{
"entity": {},
"people": [
{
"person.name": "<string>",
"person.role": {},
"person.role_type": {},
"person.is_current": true,
"person.source_types": [
{}
],
"person.verified_count": 123,
"person.last_seen": {}
}
],
"meta": {
"meta.total_indexed": 123,
"meta.coverage_note": "<string>",
"meta.resolution": {}
}
}Use case
Get the indexed-people list for a company — executives, board members, founders, investors. The index covers SEC-filed individuals and news-mentioned individuals; mid-career and individual-contributor roles are not indexed by design. When you query a role type that isn’t covered, BETA returns sparse results with an explicitcoverage_note — see Citation Contract.
Request
string
required
Company name or entity key. 2–200 characters.
object
Response
object
Resolved entity (
key, name).array
Up to 25 person records, ordered by role priority (CEO → President → CFO → CTO → COO → others) then by
verified_count.Show person fields
Show person fields
string
Person’s name as it appears in sources.
string | null
Their role at the company.
string | null
Role category:
executive · board · founder · investment.boolean
Whether the role is current (based on latest source).
array
e.g.,
["news_mention"], ["news_extraction"], ["sec_filing"].integer
Times this person+role has been corroborated across sources. Higher = more confident.
string | null
Most recent source date,
YYYY-MM-DD.object
Show meta fields
Show meta fields
integer
Total distinct people indexed for this company.
string
Always present — describes what the index covers and what it doesn’t.
object
Provenance — see Citation Contract.
Code samples
curl -X POST https://api.getbeta.io/api/v1/people \
-H "Authorization: Bearer $BETA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"company": "Anthropic"}'
const res = await fetch('https://api.getbeta.io/api/v1/people', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.BETA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ company: 'Anthropic' })
});
import os, requests
res = requests.post(
'https://api.getbeta.io/api/v1/people',
headers={'Authorization': f'Bearer {os.environ["BETA_API_KEY"]}'},
json={'company': 'Anthropic'}
)
Live response (truncated)
{
"entity": { "key": "anthropic", "name": "Anthropic" },
"people": [
{
"name": "Dario Amodei",
"role": "CEO",
"role_type": "executive",
"is_current": true,
"source_types": ["news_mention"],
"verified_count": 17,
"last_seen": "2026-03-18"
},
{
"name": "Chris Liddell",
"role": "Board member (former Microsoft CFO)",
"role_type": "executive",
"is_current": true,
"source_types": ["news_mention"],
"verified_count": 1,
"last_seen": "2026-02-14"
},
{
"name": "Irina Ghose",
"role": "Managing Director of India",
"role_type": "executive",
"is_current": true,
"source_types": ["news_extraction"],
"verified_count": 18,
"last_seen": "2026-02-19"
}
],
"meta": {
"total_indexed": 15,
"coverage_note": "People index covers SEC-filed executives, board members, and news-mentioned individuals. Mid-level roles are not indexed.",
"resolution": { "source": "curated", "confidence": 1 }
}
}
Deduplication caveat: news-extraction sources occasionally produce multiple records for the same person with slightly different role text (e.g.,
"CEO" and "Chief (CEO)"). Treat them as one person; dedupe on name (or normalized name) + role_type in your consumer.Errors
| Status | Body | When |
|---|---|---|
404 | {"error": "Company not found", "code": "NOT_FOUND"} | No entity resolved |
| Other | See /validate for the standard set |
Citation pointer
Whenpeople: [] or sparse, read meta.coverage_note — that’s BETA’s explicit declaration of what the index doesn’t cover. See Citation Contract → What BETA refuses to assert.