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 API
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, locations, 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. To see where a report stands, send GET /utility/report/{report_id} with a key from the same team. It returns the report with its current status, at no credit cost. An id that belongs to another team returns 404.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.
2000