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

# Find warm intros

> Find the people connected to a LinkedIn profile who worked at one of its past companies, optionally filtered by a persona or job titles.

Give it someone in your network, one of your 1st-degree connections. It returns the people **connected to them** who **worked at one of their past companies** — former colleagues, the people most likely to make a warm introduction.

## How it works

1. The target's profile is read from LinkedIn Sales Navigator. If they aren't one of your 1st-degree connections, the request stops there with `422`.
2. Their **past companies** are collected: every company of an ended position, except the company they work at today.
3. A Sales Navigator search runs for people who are connections of the target **and** list one of those past companies. Your own connection degree to them doesn't matter: 1st, 2nd and 3rd degree all match.
4. Optionally, narrow it down:

   * `persona_id`: the persona's job titles, locations, industries and company sizes are added to the search.
   * or `job_titles` / `excluded_job_titles`: filter on current titles without creating a persona.

   Use one or the other, not both.

The response lists the `past_companies` that were used, so you can see why each lead matched.

If the target has no past company, no search runs: `past_companies` and `leads` come back empty.

## Example

```json theme={null}
{
  "linkedin_url": "https://www.linkedin.com/in/john-doe",
  "job_titles": ["Head of Sales", "VP Sales"],
  "excluded_job_titles": ["Intern"],
  "limit": 50
}
```

## Requirements

* A connected **LinkedIn account with Sales Navigator**. Without it the endpoint returns `422`.
* The target must be one of your **1st-degree connections**. Otherwise the endpoint returns `422`.
* `persona_id`, when given, must be one of your personas (see [`GET /personas`](/api-reference/endpoints/personas/index)).

## Notes

* Synchronous: the leads are in the response. Up to `limit` leads are returned (default 25, max 100); `total_count` is the full number of matches on Sales Navigator.
* `linkedin_url` accepts public LinkedIn URLs, Sales Navigator URLs, or internal URNs. `linkedin_profile_url` is still accepted as an alias.
* Doesn't consume credits.

## Rate Limits

* **1 request per second** per user, on top of your plan's per-minute limit (see [Rate Limiting](/essentials/rate-limiting)).


## OpenAPI

````yaml POST /intents/leads/warm_intros
openapi: 3.0.1
info:
  title: Pipecorn Signals API
  description: Pipecorn Accounts API
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://app.pipecorn.com/api/v2/
security:
  - defaultApiKey: []
paths:
  /intents/leads/warm_intros:
    post:
      summary: Find warm intros to a LinkedIn profile
      description: >-
        Finds, for one of your 1st-degree LinkedIn connections, the people
        connected to them (1st, 2nd or 3rd degree from you) who worked at one of
        the target's past companies — the colleagues most likely to introduce
        you. Optionally narrowed to a persona or to job titles. Runs a live
        LinkedIn Sales Navigator search and returns the results synchronously.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - linkedin_url
              properties:
                linkedin_url:
                  type: string
                  format: uri
                  description: >-
                    LinkedIn profile URL of the person you want an intro to.
                    Must be one of your 1st-degree connections. Accepts public
                    profile URLs (`/in/...`), Sales Navigator URLs
                    (`/sales/lead/...`), or internal LinkedIn URNs.
                  example: https://www.linkedin.com/in/john-doe
                linkedin_profile_url:
                  type: string
                  format: uri
                  deprecated: true
                  description: >-
                    Alias of `linkedin_url`, still accepted. Use `linkedin_url`
                    in new integrations.
                persona_id:
                  type: string
                  format: uuid
                  description: >-
                    Optional. Id of one of your personas (see `GET /personas`).
                    Its job titles, locations, industries and company sizes are
                    added to the search. Cannot be combined with `job_titles` or
                    `excluded_job_titles`.
                  example: 8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b
                job_titles:
                  type: array
                  items:
                    type: string
                  description: >-
                    Optional. Keep only people whose current title matches one
                    of these. Use it instead of `persona_id`.
                  example:
                    - Head of Sales
                    - VP Sales
                excluded_job_titles:
                  type: array
                  items:
                    type: string
                  description: >-
                    Optional. Drop people whose current title matches one of
                    these. Requires `job_titles`.
                  example:
                    - Intern
                limit:
                  type: integer
                  minimum: 1
                  maximum: 100
                  default: 25
                  description: Maximum number of leads to return.
                  example: 25
      responses:
        '200':
          description: Warm intro search completed
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_count:
                    type: integer
                    description: >-
                      Total number of matching people on Sales Navigator. Can
                      exceed the number of `leads` returned.
                    example: 12
                  past_companies:
                    type: array
                    description: >-
                      The target's past companies used as the past-company
                      filter: every company of an ended position, except the
                      company the target works at today. Empty when the target
                      has none, in which case no search is run and `leads` is
                      empty.
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: LinkedIn company id
                          example: '1035'
                        name:
                          type: string
                          description: Company name as shown on the target's profile
                          example: BNP Paribas
                  leads:
                    type: array
                    description: >-
                      People connected to the target who previously worked at
                      one of `past_companies`
                    items:
                      type: object
                      properties:
                        first_name:
                          type: string
                          example: Jane
                        last_name:
                          type: string
                          example: Doe
                        full_name:
                          type: string
                          example: Jane Doe
                        headline:
                          type: string
                          nullable: true
                          example: VP Sales at Acme Corp
                        degree:
                          type: integer
                          description: >-
                            Connection degree between you and the lead (1, 2 or
                            3)
                          example: 2
                        current_title:
                          type: string
                          nullable: true
                          example: VP Sales
                        current_company:
                          type: string
                          nullable: true
                          example: Acme Corp
                        linkedin_id:
                          type: string
                          description: LinkedIn Sales Navigator member id
                          example: ACwAABD5FBQ
                        sales_navigator_url:
                          type: string
                          format: uri
                          example: >-
                            https://www.linkedin.com/sales/lead/ACwAABD5FBQ,NAME_SEARCH,vIqI/
        '400':
          description: Bad request — missing `linkedin_url`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_keys:
                  value:
                    error: 'Missing required keys: linkedin_url'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: The profile or the persona was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                profile_not_found:
                  value:
                    error: Profile doesn't exist
                persona_not_found:
                  value:
                    error: Persona not found
        '422':
          description: >-
            Invalid parameters, the profile is not one of your 1st-degree
            connections, LinkedIn account not connected, or Sales Navigator not
            connected / expired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_limit:
                  value:
                    error: limit must be an integer between 1 and 100
                persona_and_titles:
                  value:
                    error: >-
                      persona_id cannot be combined with job_titles or
                      excluded_job_titles
                excluded_without_titles:
                  value:
                    error: excluded_job_titles requires job_titles
                not_connected:
                  value:
                    error: >-
                      You are not connected to this profile on LinkedIn. Warm
                      intros only work for your 1st-degree connections.
                no_linkedin_credentials:
                  value:
                    error: >-
                      LinkedIn credentials not found. Please connect your
                      LinkedIn account.
                no_sales_nav:
                  value:
                    error: >-
                      Sales Navigator credentials expired. Refresh your
                      connection on Pipecorn interface, or set parameter 'live'
                      to false in your request body
        '429':
          description: >-
            Rate limit exceeded (1 request per second per user, or your plan's
            per-minute limit).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      required:
        - error
      type: object
      properties:
        error:
          description: >-
            Human-readable error message. A few validation errors return a list
            of messages, or an object with more detail, instead of a single
            string.
          oneOf:
            - type: string
            - type: array
              items:
                type: string
            - type: object
  securitySchemes:
    defaultApiKey:
      type: apiKey
      in: header
      name: X-API-KEY

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.