curl --request POST \
--url https://api.datalegion.ai/utility/report/person \
--header 'API-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"legion_id": "<string>",
"field": "<string>",
"observed_value": "<string>",
"correct_value": "<string>",
"comment": "<string>"
}
'import requests
url = "https://api.datalegion.ai/utility/report/person"
payload = {
"legion_id": "<string>",
"field": "<string>",
"observed_value": "<string>",
"correct_value": "<string>",
"comment": "<string>"
}
headers = {
"API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legion_id: '<string>',
field: '<string>',
observed_value: '<string>',
correct_value: '<string>',
comment: '<string>'
})
};
fetch('https://api.datalegion.ai/utility/report/person', 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.datalegion.ai/utility/report/person",
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([
'legion_id' => '<string>',
'field' => '<string>',
'observed_value' => '<string>',
'correct_value' => '<string>',
'comment' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"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.datalegion.ai/utility/report/person"
payload := strings.NewReader("{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
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.datalegion.ai/utility/report/person")
.header("API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datalegion.ai/utility/report/person")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"report_id": 123,
"status": "<string>",
"subject_type": "<string>",
"legion_id": "<string>",
"issue_type": "<string>",
"issue_level": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"field": "<string>"
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}Report a Data Issue
Report an inaccuracy in a person or company record so the Data Legion team can review and correct it. No credit cost; available to any API key.
curl --request POST \
--url https://api.datalegion.ai/utility/report/person \
--header 'API-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"legion_id": "<string>",
"field": "<string>",
"observed_value": "<string>",
"correct_value": "<string>",
"comment": "<string>"
}
'import requests
url = "https://api.datalegion.ai/utility/report/person"
payload = {
"legion_id": "<string>",
"field": "<string>",
"observed_value": "<string>",
"correct_value": "<string>",
"comment": "<string>"
}
headers = {
"API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legion_id: '<string>',
field: '<string>',
observed_value: '<string>',
correct_value: '<string>',
comment: '<string>'
})
};
fetch('https://api.datalegion.ai/utility/report/person', 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.datalegion.ai/utility/report/person",
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([
'legion_id' => '<string>',
'field' => '<string>',
'observed_value' => '<string>',
'correct_value' => '<string>',
'comment' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"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.datalegion.ai/utility/report/person"
payload := strings.NewReader("{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
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.datalegion.ai/utility/report/person")
.header("API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datalegion.ai/utility/report/person")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legion_id\": \"<string>\",\n \"field\": \"<string>\",\n \"observed_value\": \"<string>\",\n \"correct_value\": \"<string>\",\n \"comment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"report_id": 123,
"status": "<string>",
"subject_type": "<string>",
"legion_id": "<string>",
"issue_type": "<string>",
"issue_level": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"field": "<string>"
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}How It Works
Found something wrong in a record we returned? Report it against the record’slegion_id and our team will review it. Reporting has no credit cost, is available to any valid API key, and is rate limited to 50 requests per minute.
- People:
POST /utility/report/person - Companies:
POST /utility/report/company
What to Report
Setissue_type to what is wrong and issue_level to how broad the problem is.
issue_type
| Value | Meaning |
|---|---|
incorrect | A value is wrong |
outdated | A value was right but is now stale |
misattributed | A value belongs to a different person or company |
frankenstein | The record appears to merge multiple real people |
not_a_real_person | The record is not a real individual (person reports only) |
duplicate | A duplicated value or record |
issue_level
| Value | Meaning | field |
|---|---|---|
record | The whole record | omit |
group | A field group (e.g. work history) | a group name |
field | A single field | a field name (e.g. job_title) |
frankenstein and not_a_real_person are always record-level. The API returns 422 with an explanation when:
- the
issue_type/issue_levelcombination doesn’t apply - the
legion_iddoesn’t match an existing record of that type - the
fieldisn’t a real group or response field - the target is a metadata or provenance field (e.g.
confidence,last_seen,build_version, hashes) — report the underlying data instead
Field Groups (for issue_level: group)
These are the keys you see in the response. The “current” flat fields fold into their collection — a wrong current job title is group: experience (or field: job_title), current city is group: locations, and so on.
Person: identity, experience, education, emails, phones, locations, socials, skills, languages, certifications
Company: firmographics, domains, socials, tickers, metrics
Each report must include at least one of correct_value or comment.
Examples
A single wrong field:curl -X POST https://api.datalegion.ai/utility/report/person \
-H "API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"legion_id": "abc123",
"issue_type": "incorrect",
"issue_level": "field",
"field": "job_title",
"observed_value": "CEO",
"correct_value": "CTO"
}'
curl -X POST https://api.datalegion.ai/utility/report/person \
-H "API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"legion_id": "abc123",
"issue_type": "frankenstein",
"issue_level": "record",
"comment": "Work history and education appear to belong to two different people."
}'
report_id for your reference.Authorizations
Body
Request body for POST /utility/report/{person|company}.
The entity (person vs company) comes from the path, so it is not in the body.
The legion_id of the record being reported.
1 - 128What is wrong. 'frankenstein' = the record appears to merge multiple real people; 'not_a_real_person' = not a real individual (person reports only); 'misattributed' = a value belongs to a different person; 'incorrect' = a value is wrong; 'outdated' = a value is stale; 'duplicate' = a duplicated value or record.
incorrect, outdated, misattributed, frankenstein, not_a_real_person, duplicate Scope of the issue. 'record' = the whole record; 'group' = a field group (e.g. experience); 'field' = a single field (e.g. job_title).
record, group, field Target of the issue. Omit for 'record'. For 'group', a field-group slug (e.g. 'experience'). For 'field', a response field name (e.g. 'job_title').
128The value currently returned that is being disputed.
1000The value that would be correct, if known.
1000Free-text detail about the issue.
2000Was this page helpful?