> ## 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 into an account

> Find the decision makers of a company and who in your network can introduce you to each of them.

Give it a company and the people you want to reach there. It returns those **decision makers** and, for each one, your 1st-degree connections who can **introduce** you, with the same paths, shared experiences and relationship strength as [Find connections](/api-reference/endpoints/signals/connections).

Use it when a deal opens from outbound or inbound: before the first meeting, you know who can vouch for you inside the account.

## How it works

1. A Sales Navigator search finds the people **working at the company today** who match your `persona_id`, or your `job_titles` / `excluded_job_titles`, and who are in your **2nd-degree network**: someone you know knows them.
2. For up to `limit` of them, Pipecorn looks up your warm paths, as [Find connections](/api-reference/endpoints/signals/connections) does, using the `spotlights` you pick (default `SHARED_CONNECTION`).
3. The result is posted to your `webhook_url`, decision makers with the strongest warm path first.

It runs in the background: the response only holds a `request_id`. Expect about a minute for 10 decision makers.

## Example request

```json theme={null}
{
  "company_linkedin_id": "1441",
  "job_titles": ["CFO", "VP Finance"],
  "spotlights": ["SHARED_CONNECTION", "SHARED_EXPERIENCE"],
  "limit": 10,
  "webhook_url": "https://hooks.example.com/pipecorn/warm-intros",
  "context": { "deal_id": "42" }
}
```

`company_linkedin_id` is the numeric LinkedIn company id. Get it from the `linkedin_id` of [Enrich account](/api-reference/endpoints/accounts/single) if you only have a domain or a URL.

## Example response

```json theme={null}
{
  "message": {
    "message": "Warm path search will begin shortly.",
    "request_id": "6f1c2a9e-4b7d-4c1e-9a2b-3d4e5f6a7b8c"
  }
}
```

## Webhook payload

```json theme={null}
{
  "request_id": "6f1c2a9e-4b7d-4c1e-9a2b-3d4e5f6a7b8c",
  "context": { "deal_id": "42" },
  "status": "completed",
  "company_linkedin_id": "1441",
  "total_count": 4,
  "decision_makers": [
    {
      "full_name": "Grace Hopper",
      "headline": "CFO at Acme",
      "current_title": "CFO",
      "current_company": "Acme",
      "degree": 2,
      "linkedin_id": "ACwAAAgrace",
      "sales_navigator_url": "https://www.linkedin.com/sales/lead/ACwAAAgrace,NAME_SEARCH,ab12/",
      "warm_paths": {
        "total": 2,
        "totals_by_spotlight": { "SHARED_CONNECTION": 1, "SHARED_EXPERIENCE": 1 },
        "connections": [
          {
            "full_name": "Jane Doe",
            "paths": [{ "type": "SHARED_CONNECTION", "reason": "You both know Ada Lovelace" }],
            "shared_experiences": [
              { "company_id": "1035", "company": "Sellsy", "overlap_months": 18, "approximate_dates": false, "same_location": true, "company_size": 45 }
            ],
            "relationship_strength": { "score": 7, "level": "strong" }
          }
        ]
      }
    }
  ]
}
```

* `request_id` matches the one returned when you started the search, and `context` is the object you sent, untouched.
* `total_count` is the number of matching decision makers on Sales Navigator; at most `limit` are looked up.
* `warm_paths` has the shape of the [Find connections](/api-reference/endpoints/signals/connections) response. When LinkedIn can't process one decision maker, it carries an `error` message instead.
* When the search fails as a whole, `status` is `failed` and `error` says why, e.g. an expired LinkedIn session or a LinkedIn rate limit.

## Requirements

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

## Notes

* Doesn't consume credits.
* `limit` defaults to 10 and goes up to 25. Each decision maker costs a few Sales Navigator lookups, so keep it small.

## 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/accounts/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/accounts/warm_intros:
    post:
      summary: Find warm intros into an account
      description: >-
        Finds the decision makers of a company in your 2nd-degree network, then
        who among your 1st-degree connections can introduce you to each of them,
        with the same paths, shared experiences and relationship strength as
        `POST /intents/leads/connections`. Runs in the background and posts the
        result to `webhook_url`. Requires a connected LinkedIn account with
        Sales Navigator access. Doesn't consume credits.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - company_linkedin_id
                - webhook_url
              properties:
                company_linkedin_id:
                  type: string
                  pattern: ^\d+$
                  description: >-
                    Numeric LinkedIn company id of the account (the
                    `linkedin_id` returned by `POST /accounts/single_enrich`). A
                    number is accepted too.
                  example: '1441'
                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
                    select the decision makers. 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 decision makers whose current title
                    matches one of these. Use it instead of `persona_id`.
                  example:
                    - CFO
                    - VP Finance
                excluded_job_titles:
                  type: array
                  items:
                    type: string
                  description: >-
                    Optional. Drop people whose current title matches one of
                    these. Requires `job_titles`.
                  example:
                    - Intern
                spotlights:
                  type: array
                  items:
                    type: string
                    enum:
                      - SHARED_CONNECTION
                      - SHARED_EXPERIENCE
                      - SHARED_EDUCATION
                      - SHARED_GROUP
                  minItems: 1
                  default:
                    - SHARED_CONNECTION
                  description: >-
                    Optional. Kinds of warm path to look for.
                    `SHARED_CONNECTION`: your connection is connected to the
                    target. `SHARED_EXPERIENCE`: they worked at the same
                    company. `SHARED_EDUCATION`: same school. `SHARED_GROUP`:
                    same LinkedIn group. Each kind runs one more Sales Navigator
                    lookup. TeamLink is not supported.
                  example:
                    - SHARED_CONNECTION
                    - SHARED_EXPERIENCE
                limit:
                  type: integer
                  minimum: 1
                  maximum: 25
                  default: 10
                  description: Maximum number of decision makers to look up.
                  example: 10
                webhook_url:
                  type: string
                  format: uri
                  description: >-
                    URL that receives the result as a `POST` once the search is
                    done.
                  example: https://hooks.example.com/pipecorn/warm-intros
                context:
                  type: object
                  additionalProperties: true
                  description: >-
                    Optional. Any JSON object, sent back untouched in the
                    webhook payload (e.g. your CRM deal id).
                  example:
                    deal_id: '42'
      responses:
        '201':
          description: Search started. The result is posted to `webhook_url`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: object
                    properties:
                      message:
                        type: string
                        example: Warm path search will begin shortly.
                      request_id:
                        type: string
                        format: uuid
                        description: Sent back as `request_id` in the webhook payload.
                        example: 6f1c2a9e-4b7d-4c1e-9a2b-3d4e5f6a7b8c
              example:
                message:
                  message: Warm path search will begin shortly.
                  request_id: 6f1c2a9e-4b7d-4c1e-9a2b-3d4e5f6a7b8c
        '400':
          description: Bad request — missing `company_linkedin_id` or `webhook_url`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_company:
                  value:
                    error: 'Missing required keys: company_linkedin_id'
                missing_webhook:
                  value:
                    error: webhook_url key is required in your payload
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Persona not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                persona_not_found:
                  value:
                    error: Persona not found
        '422':
          description: >-
            Invalid parameters, LinkedIn account not connected, or Sales
            Navigator not connected / expired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_company:
                  value:
                    error: company_linkedin_id must be a LinkedIn company id
                invalid_webhook:
                  value:
                    error: Invalid webhook_url format
                invalid_context:
                  value:
                    error: context must be a JSON object
                invalid_limit:
                  value:
                    error: limit must be an integer between 1 and 25
                invalid_spotlights:
                  value:
                    error: >-
                      spotlights must be a non-empty array of:
                      SHARED_CONNECTION, SHARED_EXPERIENCE, SHARED_EDUCATION,
                      SHARED_GROUP
                persona_and_titles:
                  value:
                    error: >-
                      persona_id cannot be combined with job_titles or
                      excluded_job_titles
                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.