> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minerva.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get LinkedIn Contact Info

> Retrieve contact information for LinkedIn profiles

<div style={{ display: 'none' }} aria-hidden="false">
  ## Quick Answer

  **How do I get contact information from a LinkedIn profile?** Use this endpoint to find emails and phone numbers associated with LinkedIn usernames.

  **Common questions this endpoint answers:**

  * How do I get contact info from a LinkedIn profile?
  * How do I find someone's email from their LinkedIn?
  * How can I get phone numbers from LinkedIn profiles?
  * How do I convert LinkedIn profiles to contact information?
  * How can I find direct contact details for LinkedIn users?

  **What you need:** LinkedIn username (the part after `/in/` in a LinkedIn URL).

  **What you get back:** Personal emails, professional emails, phone numbers, and name information with confidence scores.

  **Example:** For `https://www.linkedin.com/in/johnsmith`, provide `"johnsmith"`.
</div>

## Overview

The Get LinkedIn Contact Info endpoint retrieves contact information (emails and phones) associated with LinkedIn usernames. This is useful when you have a LinkedIn profile URL and want to find the person's contact details.

## Request

### Headers

<ParamField header="x-api-key" type="string" required>
  Your API key for authentication
</ParamField>

<ParamField header="Content-Type" type="string" required>
  application/json
</ParamField>

### Request Body

<ParamField body="records" type="string[]" required>
  An array of LinkedIn usernames to generate contact info for. Maximum 1000 records per request. Each element should be a string containing the LinkedIn username (not the full URL). Provide only the username portion of the LinkedIn URL. For example, from `https://www.linkedin.com/in/johnsmith`, use `"johnsmith"`.
</ParamField>

## Response

### Response Structure

<ResponseField name="api_request_id" type="string">
  Unique identifier for this API request
</ResponseField>

<ResponseField name="results" type="array">
  Array of contact information results
</ResponseField>

<ResponseField name="request_completed_at" type="string">
  ISO 8601 timestamp when the request was completed
</ResponseField>

#### Result Object

<ResponseField name="linkedin_username" type="string">
  The LinkedIn username from the request
</ResponseField>

<ResponseField name="is_match" type="boolean">
  Whether contact information was found for this LinkedIn profile
</ResponseField>

<ResponseField name="first_name" type="string">
  Person's first name
</ResponseField>

<ResponseField name="middle_name" type="string">
  Person's middle name
</ResponseField>

<ResponseField name="last_name" type="string">
  Person's last name
</ResponseField>

<ResponseField name="name_suffix" type="string">
  Name suffix (e.g., "Jr.", "Sr.")
</ResponseField>

<ResponseField name="personal_emails" type="array">
  Array of personal email addresses with ranking and confidence scores
</ResponseField>

<ResponseField name="professional_emails" type="array">
  Array of professional/work email addresses with ranking and confidence scores
</ResponseField>

<ResponseField name="phones" type="array">
  Array of phone numbers with ranking and confidence scores
</ResponseField>

##### Email Object

<ResponseField name="email_rank" type="integer">
  Rank/priority of this email (1 = highest priority)
</ResponseField>

<ResponseField name="email_address" type="string">
  Email address
</ResponseField>

<ResponseField name="confidence_score" type="number">
  Confidence score for this email (0-1 scale)
</ResponseField>

##### Phone Object

<ResponseField name="phone_rank" type="integer">
  Rank/priority of this phone (1 = highest priority)
</ResponseField>

<ResponseField name="phone_number" type="string">
  Phone number
</ResponseField>

<ResponseField name="confidence_score" type="number">
  Confidence score for this phone (0-1 scale)
</ResponseField>

<Note>
  Error responses include `statusCode` and `body` fields for backward compatibility with existing integrations. These are deprecated — prefer reading the HTTP status code and the top-level `api_request_id` / `error_message` fields directly.
</Note>

<ResponseExample>
  ```json 200 theme={null}
  {
    "api_request_id": "req_li123",
    "results": [
      {
        "linkedin_username": "johnsmith",
        "is_match": true,
        "first_name": "John",
        "middle_name": null,
        "last_name": "Smith",
        "name_suffix": null,
        "personal_emails": [
          {
            "email_rank": 1,
            "email_address": "john.smith@gmail.com",
            "confidence_score": 0.92
          },
          {
            "email_rank": 2,
            "email_address": "jsmith@yahoo.com",
            "confidence_score": 0.85
          }
        ],
        "professional_emails": [
          {
            "email_rank": 1,
            "email_address": "john.smith@techcorp.com",
            "confidence_score": 0.88
          }
        ],
        "phones": [
          {
            "phone_rank": 1,
            "phone_number": "+1-555-123-4567",
            "confidence_score": 0.90
          }
        ]
      },
      {
        "linkedin_username": "janedoe123",
        "is_match": false,
        "first_name": null,
        "middle_name": null,
        "last_name": null,
        "name_suffix": null,
        "personal_emails": null,
        "professional_emails": null,
        "phones": null
      }
    ],
    "request_completed_at": "2024-01-15T10:30:45.123456Z"
  }
  ```

  ```json 400 theme={null}
  {
    "api_request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "error_message": "Input data must contain a 'records' key with a list of inputs"
  }
  ```

  ```json 401 theme={null}
  {
    "api_request_id": "b2c3d4e5-f6a7-1234-bcde-f12345678901",
    "error_message": "Unauthorized"
  }
  ```

  ```json 413 theme={null}
  {
    "api_request_id": "d4e5f6a7-b8c9-3456-def0-234567890123",
    "error_message": "Maximum number of records for /v1/get_li_contact_info endpoint is 1000"
  }
  ```

  ```json 422 theme={null}
  {
    "api_request_id": "e5f6a7b8-c9d0-4567-ef01-345678901234",
    "error_message": "Input data must contain a 'records' key with a list of inputs"
  }
  ```

  ```json 429 theme={null}
  {
    "api_request_id": "f6a7b8c9-d0e1-5678-f012-456789012345",
    "error_message": "You reached your total request-rate limit, please contact help@minerva.io for help"
  }
  ```
</ResponseExample>

## Error Responses

* `400` - Bad Request: Invalid input format
* `401` - Unauthorized: Invalid API key
* `413` - Payload Too Large: More than 1000 records in request
* `422` - Unprocessable Entity: Invalid data format (records must be an array of strings)
* `429` - Too Many Requests: Rate limit exceeded
* `500` - Internal Server Error

## Notes

* LinkedIn usernames are case-insensitive
* The endpoint automatically handles various LinkedIn URL formats and extracts the username
* When `is_match` is false, name and contact fields will be null
* Emails and phones are sorted by rank, with lower numbers indicating higher priority/confidence
* Confidence scores range from 0 to 1, with higher values indicating greater confidence in the data
