Lusha Signals API

Real-world activity data for contacts and companies — promotions and job changes on the contact side; headcount movement, hiring surges, web traffic, IT spend, news classes and LinkedIn activity intent on the company side — as raw dated events or as a single 0-1 momentum score per entity.

Operations 13

POST /v3/contacts/signals Contact Signals #
POST /v3/companies/signals Company Signals #
GET /v3/contacts/signals/types Get Contact Signal Types #
GET /v3/companies/signals/types Get Company Signal Types #
GET /v3/companies/signals/filters Get Company Signal Filters (Discovery) #
GET /v3/companies/signals/filters/{filterType} Get Company Signal Filter Values #
POST /v3/companies/signal-score Score Companies by Signal Activity #
POST /v3/contacts/signal-score Score Contacts by Signal Activity #
GET /api/signals/filters/{objectType} Get Signal Options #
POST /api/signals/contacts Get Contact Signals by IDs #
POST /api/signals/contacts/search Search Contact Signals #
POST /api/signals/companies Get Company Signals by IDs #
POST /api/signals/companies/search Search Company Signals #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lusha-signals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lusha-signals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Lusha Signals API
  version: ''
  contact:
    name: Lusha Support
    url: https://api.lusha.com
    email: support@lusha.com
  license:
    name: Proprietary
    url: https://lusha.com/legal/terms
  termsOfService: https://lusha.com/legal/terms
  x-logo:
    url: https://www.lusha.com/logo.png
  x-privacy-policy:
    name: Privacy Policy
    url: https://lusha.com/legal/privacy-notice/
  description: 'Operations tagged Signals across 2 of this provider''s published API definitions: lusha-openapi.yml, lusha-v2-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.lusha.com
  description: Production server
security:
- ApiKeyAuth: []
tags:
- name: Signals
  description: 'Real-world activity data for contacts and companies.


    Signals are available as standalone endpoints or as an optional `signals` filter on Search and Prospecting endpoints.



    **Contact signal types:** `promotion`, `companyChange`, `allSignals`


    ----


    **Company signal types:** `headcountIncrease1m/3m/6m/12m`, `headcountDecrease1m/3m/6m/12m`, `surgeInHiring`, `surgeInHiringByDepartment`, `surgeInHiringByLocation`, `websiteTrafficIncrease`, `websiteTrafficDecrease`, `itSpendIncrease`, `itSpendDecrease`, `riskNews`, `commercialActivityNews`, `corporateStrategyNews`, `financialEventsNews`, `peopleNews`, `marketIntelligenceNews`, `productActivityNews`, `allSignals`


    ----


    **Signal Score:** Use [Score Companies by Signal Activity](#operation/getCompanySignalScores) or [Score Contacts by Signal Activity](#operation/getContactSignalScores) to get a single aggregate momentum score ([0,1]) plus the active signal breakdown for a batch of entities, rather than a raw event list.


    ----


    Credits are charged per matched signal per result via `showSignalsContact` or `showSignalsCompany`.


    Pass `tableId` to also persist matching results into an existing table. See [Contacts Tables](#tag/Contacts-Tables) or [Companies Tables](#tag/Companies-Tables).

    '
  x-tag-expanded: true
paths:
  /v3/contacts/signals:
    post:
      tags:
      - Signals
      summary: Contact Signals
      operationId: getContactSignals
      description: 'Retrieve signal events for a list of contacts — job changes and promotions.


        Pass up to 100 contact `ids`. Use `signalTypes` to specify which events to return (`promotion`, `companyChange`, or `allSignals`). Optionally set a `startDate` to limit results to recent activity.


        > **Billing:** Charged per matched signal per result via the `showSignalsContact` action.


        > **Persisting to a table:** Pass `tableId` to also add these contacts to an existing table and populate the Signals column. See [Contacts Tables](#tag/Contacts-Tables).

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V3ContactSignalsRequest'
            example:
              ids:
              - '4389064624'
              - '4389064654'
              signalTypes:
              - allSignals
              startDate: '2025-01-01'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V3ContactSignalsResponse'
              example:
                results:
                - id: '115889'
                  companyChange:
                  - id: '115889'
                    signalDate: '2025-02-01'
                    previousCompany: ZoomInfo
                    newCompany: Lusha
                  promotion: []
                startDate: '2025-01-01'
                endDate: '2025-03-01'
                billing:
                  creditsCharged: 1
                  resultsReturned: 1
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/companies/signals:
    post:
      tags:
      - Signals
      summary: Company Signals
      operationId: getCompanySignals
      description: 'Retrieve signal events for a list of companies — hiring activity, headcount changes, web traffic, IT spend, and news.


        Pass up to 100 company `ids`. Use `signalTypes` to specify which signals to return (or use `allSignals`). Optionally set a `startDate` to limit results to recent activity.


        > **Billing:** Charged per matched signal per result via the `showSignalsCompany` action.


        > **Persisting to a table:** Pass `tableId` to also add these companies to an existing table and populate the Signals column. See [Companies Tables](#tag/Companies-Tables).

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V3CompanySignalsRequest'
            example:
              ids:
              - '16303253'
              signalTypes:
              - allSignals
              startDate: '2025-01-01'
              maxResultsPerSignal: 10
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V3CompanySignalsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/contacts/signals/types:
    get:
      tags:
      - Signals
      summary: Get Contact Signal Types
      operationId: getContactSignalTypes
      description: 'Returns the full list of supported signal types for contacts.

        '
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactSignalTypesResponse'
              example:
                signalTypes:
                - allSignals
                - promotion
                - companyChange
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/companies/signals/types:
    get:
      tags:
      - Signals
      summary: Get Company Signal Types
      operationId: getCompanySignalTypes
      description: 'Returns the full list of supported signal types for companies.

        '
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanySignalTypesResponse'
              example:
                signalTypes:
                - allSignals
                - linkedinActivityIntent
                - websiteTrafficDecrease
                - websiteTrafficIncrease
                - itSpendIncrease
                - itSpendDecrease
                - surgeInHiring
                - headcountIncrease1m
                - headcountIncrease3m
                - headcountIncrease6m
                - headcountIncrease12m
                - headcountDecrease1m
                - headcountDecrease3m
                - headcountDecrease6m
                - headcountDecrease12m
                - surgeInHiringByDepartment
                - surgeInHiringByLocation
                - riskNews
                - commercialActivityNews
                - corporateStrategyNews
                - financialEventsNews
                - peopleNews
                - marketIntelligenceNews
                - productActivityNews
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/companies/signals/filters:
    get:
      tags:
      - Signals
      summary: Get Company Signal Filters (Discovery)
      operationId: getCompanySignalFilters
      description: 'Returns all available filter types for company signals and whether each requires a search query.

        '
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilterTypesDiscoveryResponse'
              example:
                availableFilters:
                - filterType: newsEventTypes
                  requiresQuery: false
                - filterType: hiringByDepartments
                  requiresQuery: false
                - filterType: hiringByLocations
                  requiresQuery: true
                - filterType: intentCategories
                  requiresQuery: false
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/companies/signals/filters/{filterType}:
    get:
      tags:
      - Signals
      summary: Get Company Signal Filter Values
      operationId: getCompanySignalFilterValues
      description: 'Returns valid values for a single company signal filter type.


        | Filter type | Query required? |

        |---|---|

        | `newsEventTypes` | No |

        | `hiringByDepartments` | No |

        | `hiringByLocations` | Yes (2-256 chars) |

        | `intentCategories` | No — the `query` parameter is not supported for this filter type; passing one returns `400` |

        '
      parameters:
      - name: filterType
        in: path
        required: true
        schema:
          type: string
          enum:
          - newsEventTypes
          - hiringByDepartments
          - hiringByLocations
          - intentCategories
      - name: query
        in: query
        required: false
        schema:
          type: string
          minLength: 2
          maxLength: 256
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilterValuesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/companies/signal-score:
    post:
      tags:
      - Signals
      summary: Score Companies by Signal Activity
      operationId: getCompanySignalScores
      description: 'Score companies by their active buying signals. Returns the aggregate Signal Score - a `[0, 1]` value reflecting the fraction of the company''s active signals - plus the active signal breakdown.


        Accepts up to 100 companies, each identified by exactly one of `id`, `domain`, `name`, or `email`. All identifiers are resolved to Lusha company IDs server-side before scoring.


        Each result is one of:

        - A **scored entry** - `signalScore`, `signalTypes`, and `noActiveSignals`.

        - A **`NOT_FOUND`** entry - the company service could not resolve the supplied identifier.

        - A **`NO_SCORE`** entry - the company resolved, but the scoring engine returned nothing for it.


        > **Billing:** 1 credit is charged per scored row via `signal_score_company_reveal`. This action is currently limited-availability - while it isn''t yet seeded on an account''s pricebook, the endpoint stays free (`billing.creditsCharged` is `0`). Error rows (`NOT_FOUND` / `NO_SCORE`) are never charged.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V3SignalScoreCompaniesRequest'
            example:
              companies:
              - clientReferenceId: ref-1
                id: v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345
              - clientReferenceId: ref-2
                domain: www.microsoft.com
              - clientReferenceId: ref-3
                name: Apple
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V3SignalScoreCompaniesResponse'
              example:
                requestId: 5d6f13d2-f6b0-4e55-85d5-04e17f932c1a
                results:
                - clientReferenceId: ref-1
                  id: v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345
                  name: Acme Corp
                  domain: www.acmecorp.io
                  signalScore: 0.42
                  signalTypes:
                  - hiringSignalIncrease
                  - websiteVisit
                  noActiveSignals: false
                - clientReferenceId: ref-2
                  id: v1.6789ZyXwVuTsRqPoNmLkJiHgFeDcBa01
                  name: Microsoft
                  domain: www.microsoft.com
                  signalScore: 0
                  signalTypes: []
                  noActiveSignals: true
                - clientReferenceId: ref-3
                  domain: nope-xyz.com
                  error:
                    code: NOT_FOUND
                    message: Company not found
                billing:
                  creditsCharged: 2
                  resultsReturned: 2
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /v3/contacts/signal-score:
    post:
      tags:
      - Signals
      summary: Score Contacts by Signal Activity
      operationId: getContactSignalScores
      description: 'Score contacts by their active buying signals. Returns the aggregate Signal Score - a `[0, 1]` value - plus the active signal breakdown per contact.


        Accepts up to 100 contacts. Each contact is resolved to a Lusha person ID and company ID server-side (identity only - no PII is revealed) before scoring. Provide one of:

        - `id` (encrypted Lusha contact ID)

        - `linkedinUrl`

        - `email`

        - `firstName` + `lastName` + (`companyName` or `companyDomain`)


        Each result is one of:

        - A **scored entry** - `signalScore`, `signalTypes`, and `noActiveSignals`.

        - A **`NOT_FOUND`** entry - identity resolution failed for the supplied identifier.

        - A **`NO_SCORE`** entry - the contact resolved, but the scoring engine returned nothing for it.


        > **Note:** A full outage of the identity-resolution provider is never masked as `NOT_FOUND` - it returns a retryable `502` instead, so callers can retry rather than treating the batch as authoritatively unresolved.


        > **Billing:** 1 credit is charged per scored row via `signal_score_contact_reveal`. This action is currently limited-availability - while it isn''t yet seeded on an account''s pricebook, the endpoint stays free (`billing.creditsCharged` is `0`). Error rows (`NOT_FOUND` / `NO_SCORE`) are never charged.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V3SignalScoreContactsRequest'
            example:
              contacts:
              - clientReferenceId: ref-1
                id: v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345
              - clientReferenceId: ref-2
                linkedinUrl: https://linkedin.com/in/johndoe
              - clientReferenceId: ref-3
                firstName: Jane
                lastName: Doe
                companyDomain: acme.com
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V3SignalScoreContactsResponse'
              example:
                requestId: 5d6f13d2-f6b0-4e55-85d5-04e17f932c1a
                results:
                - clientReferenceId: ref-1
                  id: v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345
                  fullName: Jane Doe
                  company:
                    id: v1.6789ZyXwVuTsRqPoNmLkJiHgFeDcBa01
                    name: Acme Corp
                    domain: acme.com
                  signalScore: 0.3
                  signalTypes:
                  - promotion
                  noActiveSignals: false
                - clientReferenceId: ref-2
                  error:
                    code: NOT_FOUND
                    message: Contact not found
                billing:
                  creditsCharged: 1
                  resultsReturned: 1
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          $ref: '#/components/responses/BadGateway'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /api/signals/filters/{objectType}:
    get:
      tags:
      - Signals
      summary: Get Signal Options
      description: "Retrieve available signal options for a specific entity type (contact or company).\nThis endpoint returns the list of signal types you can filter by when enriching contacts or companies.\n\n\n  **Endpoints:**\n\n    * **Contacts:** `GET /api/signals/filters/contact`\n    * **Companies:** `GET /api/signals/filters/company`\n\n\n  #### Available Signal Types\n\n\n    #### For contacts:\n\n    * **`allSignals`** - All available contact signal types\n    * **`promotion`** - Job title promotions\n    * **`companyChange`** - Company changes\n\n    ---\n\n    #### For companies:\n\n      * **`allSignals`** - All available company signal types\n\n    <br />\n\n    **Hiring & Workforce:**\n\n    * **`surgeInHiring`** - Overall hiring activity increase\n    * **`surgeInHiringByDepartment`** - Department-specific hiring surges\n    * **`surgeInHiringByLocation`** - Location-specific hiring surges\n\n    <br />\n\n      **Headcount Trends:**\n\n    | Signal | Description |\n    |--------|-------------|\n    | `headcountIncrease1m` / `headcountDecrease1m` | 1-month employee count changes |\n    | `headcountIncrease3m` / `headcountDecrease3m` | 3-month employee count changes |\n    | `headcountIncrease6m` / `headcountDecrease6m` | 6-month employee count changes |\n    | `headcountIncrease12m` / `headcountDecrease12m` | 12-month employee count changes |\n\n    <br />\n\n      **Technology & Digital Presence:**\n\n    * **`websiteTrafficIncrease`** - Website traffic growth\n    * **`websiteTrafficDecrease`** - Website traffic decline\n    * **`itSpendIncrease`** - IT spending increase\n    * **`itSpendDecrease`** - IT spending decrease\n\n    **News Events:**\n\n    To retrieve company news, use one or more of the following category values:\n\n\n    | Signal | Included Events |\n    |--------|-----------------|\n    | `commercialActivityNews` | Partnership, New Customer, New Vendor |\n    | `corporateStrategyNews` | M&A, Facilities Expansion, New Location, Facility Closure, Asset Sale, Lawsuit Filed |\n    | `financialEventsNews` | Funding Round, Asset Investment, Strategic Investment, IPO |\n    | `marketIntelligenceNews` | Event Participation, Recognition, Competitor Activity |\n    | `peopleNews` | Executive Hire, Executive Departure, Executive Promotion, Headcount Increase, Headcount Decrease |\n    | `productActivityNews` | Product Launch, Product Development, Product Integration |\n    | `riskNews` | Security Issue, Lawsuit Faced |\n\n\n    > The response also includes available values for signal sub-filters:\n\n      * `newsEventTypes` — available event type values for news signal filtering\n      * `hiringByDepartments` — available department values for hiring surge filtering\n      * `hiringByLocations` — available location values for hiring surge filtering (array of `{ country, state }` objects)\n"
      operationId: getSignalOptions
      parameters:
      - name: objectType
        in: path
        required: true
        description: The type of object to get signal options for
        schema:
          type: string
          enum:
          - contact
          - company
        example: contact
      responses:
        '200':
          description: List of available signal types for the specified object type
          content:
            application/json:
              schema:
                type: object
                properties:
                  signals:
                    type: array
                    items:
                      type: string
                    example:
                    - promotion
                    - companyChange
                  objectType:
                    type: string
                    example: contact
                  filterOptions:
                    type: object
                    description: Available enum values for signal sub-filters. Only present in the `company` response.
                    properties:
                      newsEventTypes:
                        type: array
                        items:
                          type: string
                        description: Available values for the `newsEventTypes` filter
                      hiringByDepartments:
                        type: array
                        items:
                          type: string
                        description: Available values for the `hiringByDepartments` filter
              examples:
                contactSignals:
                  summary: Contact signal options
                  value:
                    signals:
                    - promotion
                    - companyChange
                    - allSignals
                    objectType: contact
                companySignals:
                  summary: Company signal options
                  value:
                    signals:
                    - allSignals
                    - websiteTrafficIncrease
                    - websiteTrafficDecrease
                    - itSpendIncrease
                    - itSpendDecrease
                    - headcountIncrease1m
                    - headcountDecrease1m
                    - headcountIncrease3m
                    - headcountDecrease3m
                    - headcountIncrease6m
                    - headcountDecrease6m
                    - headcountIncrease12m
                    - headcountDecrease12m
                    - surgeInHiring
                    - surgeInHiringByDepartment
                    - surgeInHiringByLocation
                    - riskNews
                    - commercialActivityNews
                    - corporateStrategyNews
                    - financialEventsNews
                    - peopleNews
                    - marketIntelligenceNews
                    - productActivityNews
                    objectType: company
                    filterOptions:
                      newsEventTypes:
                      - Asset Investment
                      - Asset Sale
                      - Competitor Activity
                      - Event Participation
                      - Executive Departure
                      - Executive Hire
                      - Executive Promotion
                      - Facilities Expansion
                      - Facility Closure
                      - Funding Round
                      - Headcount Decrease
                      - Headcount Increase
                      - IPO
                      - Lawsuit Faced
                      - Lawsuit Filed
                      - M&A
                      - New Customer
                      - New Location
                      - New Vendor
                      - Partnership
                      - Product Development
                      - Product Integration
                      - Product Launch
                      - Recognition
                      - Security Issue
                      - Strategic Investment
                      hiringByDepartments:
                      - Business Development
                      - Consulting
                      - Customer Service
                      - Engineering & Technical
                      - Finance
                      - General Management
                      - Health Care & Medical
                      - Human Resources
                      - Information Technology
                      - Legal
                      - Marketing
                      - Operations
                      - Other
                      - Product
                      - Research & Analytics
                      - Sales
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Signals API not supported on your plan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /api/signals/contacts:
    post:
      tags:
      - Signals
      summary: Get Contact Signals by IDs
      description: 'Retrieve signals data for a list of contact IDs.

        This endpoint allows you to get recent activities and signals for up to 100 contacts per request.


        *Endpoint*: **(POST) https://api.lusha.com/api/signals/contacts**


        **Default Behavior:**

        - Returns signals from the last 6 months by default

        - Use `startDate` to customize the timeframe

        - Each signal type requested counts towards credit usage

        '
      operationId: getContactSignalsById
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactSignalsByIdRequest'
            examples:
              basicExample:
                summary: Basic request
                value:
                  contactIds:
                  - 115889
                  signals:
                  - promotion
                  - companyChange
                  startDate: '2025-01-01'
                  maxResultsPerSignal: 5
              allSignals:
                summary: Request all signal types
                value:
                  contactIds:
                  - 115889
                  signals:
                  - allSignals
                  maxResultsPerSignal: 10
      responses:
        '200':
          description: Contact signals retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactSignalsByIdResponse'
              example:
                contacts:
                  '115889':
                    personId: '115889'
                    companyChange:
                    - personId: '115889'
                      currentCompanyId: 8217
                      currentCompanyName: Callaway Golf
                      currentDepartments: R&D
                      currentSeniorityLabel: c-suite
                      currentTitle: Senior Manager, IT Solutions
                      signalDate: '2025-05-01'
                      previousCompanyName: Previous Corp
                      previousDomain: nextgen.com
                      currentDomain: vendavo.com
                    promotion:
                    - personId: '115889'
                      currentCompanyId: 8217
                      currentCompanyName: Callaway Golf
                      currentDepartments: R&D
                      currentSeniorityLabel: c-suite
                      currentTitle: Senior Manager, IT Solutions
                      signalDate: '2025-05-01'
                      previousCompanyName: Previous Corp
                      previousDomain: nextgen.com
                      currentDomain: vendavo.com
                endDate: '2025-07-31'
                startDate: '2025-01-01'
                creditCharged: 2
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden_2'
        '429':
          $ref: '#/components/responses/TooManyRequests_2'
    servers:
    - url: https://api.lusha.com
      description: Production server
  /api/signals/contacts/search:
    post:
      tags:
      - Signals
      summary: Search Contact Signals
      description: 'Search for contact signals using identifiers like LinkedIn URL, email, or name + company.

        This endpoint combines search and signal enrichment in a single request.


        *Endpoint*: **(POST) https://api.lusha.com/api/signals/contacts/search**


        **Search Requirements:**

        Each contact can be identified by:

        - Contact ID

        - LinkedIn URL

        - Email address

        - Full name + Company (name or domain)


        **Default Behavior:**

        - Returns signals from the last 6 months by default

        - Contacts are matched based on provided identifiers

        - Returns both contact data and associated signals

        '
      operationId: searchContactSignals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactSignalsSearchRequest'
            examples:
              searchByLinkedIn:
                summary: Search by LinkedIn URL (id required)
                value:
                  contacts:
                  - id: '123321'
                    social_link: https://www.linkedin.com/in/ron-nabet
                  signals:
                  - promotion
                  - companyChange
                  startDate: '2025-01-01'
                  maxResultsPerSignal: 5
              searchByEmail:
                summary: Search by email (id required)
                value:
                  contacts:
                  - id: '456654'
                    email: dustin@lusha.com
                  signals:
                  - allSignals
                  maxResultsPerSignal: 10
              searchByNameAndCompany:
                summary: Search by name and company (id required)
                value:
                  contacts:
                  - id: '987789'
                    full_name: Ron Nabet
                    companies:
                    - name: Lusha
                    domain: lusha.com
                    is_current: true
                  signals:
                  - promotion
                  maxResultsPerSignal: 10
      responses:
        '200':
          description: Contact signals search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactSignalsSearchResponse'
              examples:
                success:
                  summary: Contact signals found via search
                  value:
                    contacts:
                      '123321':
                        personId: '115889'
                        companyChange:
                        - personId: '115889'
                          currentCompanyId: 8217
                          currentCompanyName: Callaway Golf
                          currentDepartments: R&D
                          currentSeniorityLabel: c-suite
                          currentTitle: Senior Manager, IT Solutions
                          signalDate: '2025-05-01'
                          previousCompanyName: Previous Corp
                          previousDomai

# --- truncated at 32 KB (87 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lusha/refs/heads/main/openapi/lusha-signals-api-openapi.yml