Skip to main content
POST
/
utility
/
report
/
person
Report a data-quality issue with a person record
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>"
}
'
{
  "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>"
}

How It Works

Found something wrong in a record we returned? Report it against the record’s legion_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
The request body is identical for both — the path selects the entity. We capture the record’s current data version at submit time, so the reviewer sees exactly what you saw.

What to Report

Set issue_type to what is wrong and issue_level to how broad the problem is.

issue_type

ValueMeaning
incorrectA value is wrong
outdatedA value was right but is now stale
misattributedA value belongs to a different person or company
frankensteinThe record appears to merge multiple real people
not_a_real_personThe record is not a real individual (person reports only)
duplicateA duplicated value or record

issue_level

ValueMeaningfield
recordThe whole recordomit
groupA field group (e.g. work history)a group name
fieldA single fielda field name (e.g. job_title)
Not every combination is valid — for example, frankenstein and not_a_real_person are always record-level. The API returns 422 with an explanation when:
  • the issue_type / issue_level combination doesn’t apply
  • the legion_id doesn’t match an existing record of that type
  • the field isn’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"
  }'
A whole record that looks like two different people:
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."
  }'
Each report returns a report_id for your reference.

Authorizations

API-Key
string
header
required

Body

application/json

Request body for POST /utility/report/{person|company}.

The entity (person vs company) comes from the path, so it is not in the body.

legion_id
string
required

The legion_id of the record being reported.

Required string length: 1 - 128
issue_type
enum<string>
required

What 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.

Available options:
incorrect,
outdated,
misattributed,
frankenstein,
not_a_real_person,
duplicate
issue_level
enum<string>
required

Scope of the issue. 'record' = the whole record; 'group' = a field group (e.g. experience); 'field' = a single field (e.g. job_title).

Available options:
record,
group,
field
field
string | null

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').

Maximum string length: 128
observed_value
string | null

The value currently returned that is being disputed.

Maximum string length: 1000
correct_value
string | null

The value that would be correct, if known.

Maximum string length: 1000
comment
string | null

Free-text detail about the issue.

Maximum string length: 2000

Response

Report recorded

Confirmation returned after a report is recorded.

report_id
integer
required
status
string
required
subject_type
string
required
legion_id
string
required
issue_type
string
required
issue_level
string
required
created_at
string<date-time>
required
field
string | null