Person Enrichment API

Person Enrichment Datalegion API

Enrich one person from an email, a phone number or a social profile URL into Data Legion's premium profile with contact data: emails, phone numbers, location, age and sex, plus current job and employer, seniority, job function, decision-maker flag, years of experience, work history, education, certifications, skills and social profiles.

POST/v1/run/person_enrichment.datalegion
Uptime
100.00%
30d · 1 call
Requests
1
30d
Response
2.3s
median · 30d

Pricing

Person Enrichment Datalegion API pricing

You pay
$960.60
$96.06/1k req, only for what you use. No monthly plan.
Your first 1 requests are free with the $0.10 starting balance.

Call it

Get Person Enrichment datalegion in one request

import os, requests

res = requests.post(
    "https://api.getanyapi.com/v1/run/person_enrichment.datalegion",
    headers={"Authorization": f"Bearer {os.environ['ANYAPI_KEY']}"},
    json={},
)
print(res.json())
Open in
Get a free key
Sample response
{
  "data": {
    "age": 29,
    "averageTenureMonths": 29,
    "birthDate": "2024-01-15T09:30:00Z",
    "birthDay": 42,
    "birthMonth": 42,
    "birthYear": 2024,
    "certifications": [
      {
        "credentialId": "a1b2c3d4",
        "expirationDate": "2024-01-15T09:30:00Z",
        "institution": "example",
        "issueDate": "2024-01-15T09:30:00Z",
        "name": "Example title"
      }
    ],
    "company": {
      "companyId": "Acme Inc",
      "industry": "general",
      "linkedinId": "https://example.com/page",
      "linkedinUrl": "https://example.com/page",
      "name": "Example title",
      "size": "example",
      "website": "https://example.com/page"
    },
    "datasetVersion": "example",
    "education": [
      {
        "degree": "example",
        "degreeLevel": "example",
        "endDate": "2024-01-15T09:30:00Z",
        "fieldOfStudy": "example",
        "isCurrent": true,
        "schoolLinkedinUrl": "https://example.com/page",
        "schoolName": "Example title",
        "schoolWebsite": "https://example.com/page",
        "startDate": "2024-01-15T09:30:00Z"
      }
    ],
    "emails": [
      {
        "address": "123 Main St",
        "confidence": "a1b2c3d4",
        "isCurrent": true,
        "lastSeenUtc": 42,
        "numSources": 42,
        "type": "general",
        "validated": true,
        "validationStatus": "active"
      }
    ],
    "expenseCategory": "general",
    "experience": [
      {
        "companyId": "Acme Inc",
        "companyIndustry": "Acme Inc",
        "companyLinkedinId": "https://example.com/page",
        "companyLinkedinUrl": "https://example.com/page",
        "companyName": "Acme Inc",
        "companySize": "Acme Inc",
        "companyWebsite": "https://example.com/page",
        "description": "A short example description of this item.",
        "endDate": "2024-01-15T09:30:00Z",
        "expenseCategory": "general",
        "isCurrent": true,
        "isDecisionMaker": true,
        "isPlatformWorker": true,
        "jobFunction": "example",
        "seniority": "example",
        "startDate": "2024-01-15T09:30:00Z",
        "tenureMonths": 12.5,
        "title": "Example title"
      }
    ],
    "firstName": "Alex",
    "fullName": "Alex Rivera",
    "headline": "Example title",
    "highestDegree": "example",
    "isDecisionMaker": true,
    "isPlatformWorker": true,
    "jobChangedUtc": 42,
    "jobFunction": "example",
    "jobTitle": "Example title",
    "jobVerifiedUtc": 42,
    "languages": [
      {
        "name": "Example title",
        "proficiency": "example"
      }
    ],
    "lastInitial": "example",
    "lastName": "Rivera",
    "lastSeenUtc": 42,
    "legionId": "a1b2c3d4",
    "linkedinConnections": 42,
    "linkedinFollowers": 12500,
    "linkedinId": "https://example.com/page",
    "linkedinUrl": "https://example.com/page",
    "location": {
      "country": "US",
      "countryCode": "US",
      "locality": "example",
      "region": "CA",
      "regionCode": "CA"
    },
    "locations": [
      {
        "addressLine2": "123 Main St",
        "confidence": "a1b2c3d4",
        "continent": "example",
        "country": "US",
        "countryCode": "US",
        "geo": "example",
        "isCurrent": true,
        "lastSeenUtc": 42,
        "locality": "example",
        "postalCode": "94107",
        "region": "CA",
        "regionCode": "CA",
        "streetAddress": "123 Main St"
      }
    ],
    "matchConfidence": "a1b2c3d4",
    "matchType": "general",
    "matchedOn": [
      "example"
    ],
    "middleInitial": "a1b2c3d4",
    "middleName": "Example title",
    "mobilePhone": "+1 555-0142",
    "numSources": 42,
    "phones": [
      {
        "confidence": "a1b2c3d4",
        "isCurrent": true,
        "lastSeenUtc": 42,
        "numSources": 42,
        "number": "example",
        "type": "general"
      }
    ],
    "prefix": "example",
    "profiles": [
      {
        "confidence": "a1b2c3d4",
        "isCurrent": true,
        "lastSeenUtc": 42,
        "network": "example",
        "profileId": "a1b2c3d4",
        "url": "https://example.com/page",
        "username": "alex_rivera"
      }
    ],
    "seniority": "example",
    "sex": "example",
    "skills": [
      "example"
    ],
    "suffix": "example",
    "summary": "A short example description of this item.",
    "workEmail": "alex@example.com",
    "yearsOfExperience": 2024
  },
  "found": true,
  "reason": "not_found"
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

One request, one response shape.

Every field you send and every field you get back, each with a real example.

Last verified 2026-10-25 · uptime and latency measured over 30d

Request body

JSON, posted to this endpoint.

  • emailstring

    Any email address the person uses, work or personal. Send exactly one of email, phone or socialUrl.

  • minConfidenceenum

    Lowest match confidence that still counts as found. Omit it for Data Legion's default.

  • phonestring

    Phone number with its country code, e.g. +1 415 555 0100.

  • requiredstring

    Fields a match must have, as a Data Legion expression over its snake_case field names combined with AND, OR and parentheses, e.g. work_email OR mobile_phone, or phones.type:mobile. A match without them counts as not found.

  • socialUrlstring

    https://www.linkedin.com/in/dharmesh

    Social profile URL: LinkedIn (linkedin.com/in/...), GitHub, X and similar networks. A LinkedIn URL matches most reliably.

You send. A small JSON body. The values shown are examples to replace with your own.

Response

JSON, one example value per field.

datadata

The enriched person, or null when nothing matched.

  • ageinteger

    Age in years.

  • averageTenureMonthsnumber

    Average months the person stays in a job.

  • birthDatestring

    Date of birth, as precise as Data Legion holds it.

  • birthDayinteger

    Day of the month of birth.

  • birthMonthinteger

    Month of birth, 1 to 12.

  • birthYearinteger

    Year of birth.

  • datasetVersionstring

    Data Legion dataset build the record came from.

  • expenseCategorystring

    Budget line of the current job, e.g. research_and_development, sales_and_marketing.

  • firstNamestring

    First name.

  • fullNamestring

    Full name, lowercase as Data Legion normalizes it.

  • headlinestring

    Profile headline, as the person writes it.

  • highestDegreestring

    Highest degree level, e.g. bachelors, masters, doctorate.

  • isDecisionMakerboolean

    True when the current job is a buying decision-maker role.

  • isPlatformWorkerboolean

    True when the current job is gig or platform work, such as ride-hailing or delivery.

  • jobChangedUtcinteger

    UTC epoch timestamp in seconds (Unix time) the current job last changed. Multiply by 1000 for a JS Date in milliseconds.

  • jobFunctionstring

    Function of the current job, e.g. engineering, sales, marketing.

  • jobTitlestring

    Current job title, lowercase.

  • jobVerifiedUtcinteger

    UTC epoch timestamp in seconds (Unix time) the current job was last confirmed. Multiply by 1000 for a JS Date in milliseconds.

  • lastInitialstring

    Last initial.

  • lastNamestring

    Last name.

  • lastSeenUtcinteger

    UTC epoch timestamp in seconds (Unix time) Data Legion last saw the person. Multiply by 1000 for a JS Date in milliseconds.

  • legionIdstring

    Data Legion persistent person id.

  • linkedinConnectionsinteger

    LinkedIn connection count; LinkedIn caps what it shows at 500.

  • linkedinFollowersinteger

    LinkedIn follower count.

  • linkedinIdstring

    LinkedIn numeric member id.

  • linkedinUrlstring

    LinkedIn profile URL.

  • matchConfidencestring

    How sure the match is: high, moderate or low.

  • matchTypestring

    How the identifier matched, e.g. exact.

  • matchedOnstring[]

    Identifiers the match was made on, e.g. linkedin_url or email.

  • middleInitialstring

    Middle initial.

  • middleNamestring

    Middle name.

  • mobilePhonestring

    Best mobile phone number, in E.164 form.

  • numSourcesinteger

    Number of sources Data Legion merged into this record.

  • prefixstring

    Name prefix, e.g. dr.

  • senioritystring

    Seniority of the current job, e.g. owner, c_level, director, manager, senior.

  • sexstring

    Sex, male or female.

  • skillsstring[]

    Skills listed on the profile, lowercase.

  • suffixstring

    Name suffix, e.g. jr.

  • summarystring

    Profile summary, as the person writes it.

  • workEmailstring

    Current work email address.

  • yearsOfExperiencenumber

    Years of work experience.

each certificationdata.certifications[]

Professional certifications.

  • credentialIdstring

    Credential id the issuer assigned.

  • expirationDatestring

    Expiry month as YYYY-MM or year as YYYY.

  • institutionstring

    Issuing institution, lowercase.

  • issueDatestring

    Issue month as YYYY-MM or year as YYYY.

  • namestring

    Certification name, lowercase.

companydata.company

Current employer.

  • companyIdstring

    Data Legion persistent company id, the legionId company_enrichment.datalegion returns.

  • industrystring

    Employer industry.

  • linkedinIdstring

    Employer LinkedIn numeric id.

  • linkedinUrlstring

    Employer LinkedIn page URL.

  • namestring

    Employer name, lowercase.

  • sizestring

    Employer headcount band, e.g. 5001-10000.

  • websitestring

    Employer website domain.

each educationdata.education[]

Schools attended.

  • degreestring

    Degree earned, lowercase, e.g. master of science.

  • degreeLevelstring

    Degree level, e.g. bachelors, masters.

  • endDatestring

    End as YYYY-MM or YYYY.

  • fieldOfStudystring

    Field of study, lowercase.

  • isCurrentboolean

    True while the person is still enrolled.

  • schoolLinkedinUrlstring

    School LinkedIn page URL.

  • schoolNamestring

    School name, lowercase.

  • schoolWebsitestring

    School website domain.

  • startDatestring

    Start as YYYY-MM or YYYY.

each emaildata.emails[]

Every email address Data Legion holds for the person, work and personal.

  • addressstring

    Email address.

  • confidencestring

    How sure Data Legion is the address belongs to the person: high, moderate or low.

  • isCurrentboolean

    True while the address is still in use.

  • lastSeenUtcinteger

    UTC epoch timestamp in seconds (Unix time) the address was last seen. Multiply by 1000 for a JS Date in milliseconds.

  • numSourcesinteger

    Number of sources the address was seen in.

  • typestring

    Kind of address, e.g. professional or personal.

  • validatedboolean

    True when Data Legion has checked the address with the mail server.

  • validationStatusstring

    Result of that check, e.g. valid.

each experiencedata.experience[]

Work history, current jobs marked isCurrent.

  • companyIdstring

    Data Legion persistent company id of the employer.

  • companyIndustrystring

    Employer industry.

  • companyLinkedinIdstring

    Employer LinkedIn numeric id.

  • companyLinkedinUrlstring

    Employer LinkedIn page URL.

  • companyNamestring

    Employer name, lowercase.

  • companySizestring

    Employer headcount band.

  • companyWebsitestring

    Employer website domain.

  • descriptionstring

    Job description, as the person writes it.

  • endDatestring

    End of the job as YYYY-MM or YYYY; absent for a current job.

  • expenseCategorystring

    Budget line of the job, e.g. research_and_development.

  • isCurrentboolean

    True for a job the person still holds.

  • isDecisionMakerboolean

    True when the job is a buying decision-maker role.

  • isPlatformWorkerboolean

    True when the job is gig or platform work.

  • jobFunctionstring

    Function of the job, e.g. engineering, sales.

  • senioritystring

    Seniority of the job, e.g. owner, director, manager.

  • startDatestring

    Start of the job as YYYY-MM or YYYY.

  • tenureMonthsnumber

    Months in the job.

  • titlestring

    Job title, lowercase.

each languagedata.languages[]

Languages the person speaks.

  • namestring

    Language, lowercase, e.g. english.

  • proficiencystring

    Proficiency, e.g. native, professional.

locationdata.location

Where the person lives now.

  • countrystring

    Country.

  • countryCodestring

    ISO 3166-1 alpha-2 country code, e.g. US.

  • localitystring

    City.

  • regionstring

    State or region.

  • regionCodestring

    ISO 3166-2 region code, e.g. US-MA.

each locationdata.locations[]

Every place Data Legion holds for the person, current and past.

  • addressLine2string

    Second line of the address.

  • confidencestring

    How sure Data Legion is of the place: high, moderate or low.

  • continentstring

    Continent.

  • countrystring

    Country.

  • countryCodestring

    ISO 3166-1 alpha-2 country code, e.g. US.

  • geostring

    Coordinates as "lat,lon".

  • isCurrentboolean

    True for where the person lives now.

  • lastSeenUtcinteger

    UTC epoch timestamp in seconds (Unix time) the place was last seen. Multiply by 1000 for a JS Date in milliseconds.

  • localitystring

    City.

  • postalCodestring

    Postal code.

  • regionstring

    State or region.

  • regionCodestring

    ISO 3166-2 region code, e.g. US-MA.

  • streetAddressstring

    Street address.

each phonedata.phones[]

Every phone number Data Legion holds for the person.

  • confidencestring

    How sure Data Legion is the number belongs to the person: high, moderate or low.

  • isCurrentboolean

    True while the number is still in use.

  • lastSeenUtcinteger

    UTC epoch timestamp in seconds (Unix time) the number was last seen. Multiply by 1000 for a JS Date in milliseconds.

  • numSourcesinteger

    Number of sources the number was seen in.

  • numberstring

    Phone number in E.164 form.

  • typestring

    Kind of line, e.g. mobile or landline.

each profiledata.profiles[]

Social profiles Data Legion links to the person.

  • confidencestring

    How sure Data Legion is the profile belongs to the person: high, moderate or low.

  • isCurrentboolean

    True while the profile is still active.

  • lastSeenUtcinteger

    UTC epoch timestamp in seconds (Unix time) the profile was last seen. Multiply by 1000 for a JS Date in milliseconds.

  • networkstring

    Network the profile is on, e.g. linkedin, github, x, facebook.

  • profileIdstring

    Numeric or opaque id on that network.

  • urlstring

    Profile URL.

  • usernamestring

    Handle on that network.

top level
  • foundboolean

    False when Data Legion matched no person, or none at the requested confidence or with the required fields.

  • reason"not_found"

    Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.

You get back. Named, typed fields in the same shape whichever source answers.

FAQ

About the Person Enrichment Datalegion API

The AnyAPI Person Enrichment Datalegion API returns Person Enrichment datalegion data as normalized JSON from one POST call to /v1/run/person_enrichment.datalegion. Enrich one person from an email, a phone number or a social profile URL into Data Legion's premium profile with contact data: emails, phone numbers, location, age and sex, plus current job and employer, seniority, job function, decision-maker flag, years of experience, work history, education, certifications, skills and social profiles. AnyAPI returns one normalized schema whichever source serves it. It costs from $96.06 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Person Enrichment datalegion calls through AnyAPI succeeded, with a median response time of 2.3 seconds across 1 measured calls.

It costs from $96.06 per 1,000 requests, in US dollars with no subscription and no monthly minimum. You fund one USD wallet and each call draws it down. Some failed wallet-funded requests incur processing charges that we pass through at cost, with no markup; the error response shows the amount charged.

Enrich one person from an email, a phone number or a social profile URL into Data Legion's premium profile with contact data: emails, phone numbers, location, age and sex, plus current job and employer, seniority, job function, decision-maker flag, years of experience, work history, education, certifications, skills and social profiles. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

Over the last 30 days, 100.0% of Person Enrichment datalegion calls through AnyAPI succeeded, with a median response time of 2.3 seconds across 1 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.

Yes. A new AnyAPI account starts with $0.10 of free balance and no card required, which covers 1 Person Enrichment Datalegion calls at $0.09606 each.

Send a POST request to https://api.getanyapi.com/v1/run/person_enrichment.datalegion with your AnyAPI key in an "Authorization: Bearer" header and the input as a JSON body. The same key and the same wallet work on every AnyAPI endpoint.

No. You add US dollars to one prepaid AnyAPI balance and each request draws it down. There is no monthly plan and no minimum, and the same balance pays for every AnyAPI endpoint.

Yes. Install @getanyapi/sdk from npm for TypeScript or getanyapi from pip for Python. Both call every AnyAPI endpoint with the same key, and any HTTP client works too.

Yes. An agent can connect to the AnyAPI MCP server at https://api.getanyapi.com/mcp, or create its own free-trial key with one unauthenticated POST to https://api.getanyapi.com/agent/signup and call this endpoint over HTTP.