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

> ## Agent Instructions
> - Base URLs: models `https://api.aisa.one/v1` (Gemini GenerateContent: `https://api.aisa.one/v1beta`); data APIs `https://api.aisa.one/apis/v1`. The `servers` of each operation in https://aisa.one/openapi.yaml is authoritative.
> - Auth: `Authorization: Bearer $AISA_API_KEY`. Never print, log, or commit the key.
> - MCP (preferred for agents): `https://mcp.aisa.one/mcp`, signed in with OAuth, so there is no key to paste.
> - Agent Skill: `npx skills add AIsa-team/agent-skills --skill aisa`. Fallback with the AIsa CLI: `aisa skills install aisa`.
> - Spending: docs, https://aisa.one/models, https://aisa.one/api, `/v1/models`, and MCP `search`, `list_categories`, `get_details`, `batch_quote`, and the `account` operation are free. Quote the exact calls before running them (MCP `batch_quote`, CLI `aisa quote --json`). If the quote reports `auto_execute_eligible: true`, run it unless the user set a tighter limit or asked only for a quote. Otherwise, tell the user in one message the planned calls, the quoted price, and a total USD budget for the task, then wait for approval. Direct HTTP calls follow the stricter rule at https://aisa.one/docs/get-started/cli.md#direct-http-fallback. Do not make paid calls to test availability. Full rule: https://aisa.one/llms.txt

# People Search with Elasticsearch

> <!-- aisa-pricing:start -->
Usage-based billing; Default request estimate: $0.2803 USD (not a fixed price). Declared unit rate: $0.000001 USD per provider_credit. Account-specific pricing and final settlement may differ.
<!-- aisa-pricing:end -->

## Request contract

* **Method and path:** POST /apis/v1/people-data-labs/people-search-elastic
* **Availability:** enabled
* **Request URL template:** `https://api.aisa.one/apis/v1/people-data-labs/people-search-elastic`
* **Runtime facts:** d9aafd76ae02b9bcd98e168c52eb69aba6e12890a1eed8da421910f394e8200a

[Complete OpenAPI definition](https://aisa.one/docs/reference-contracts/people-data-labs.json)

Effective request and pricing declaration (including authentication and referenced schemas):

```json theme={null}
{
  "operationId": "people-data-labs.people-search-elastic",
  "method": "POST",
  "path": "/apis/v1/people-data-labs/people-search-elastic",
  "servers": [
    {
      "url": "https://api.aisa.one"
    }
  ],
  "parameters": [],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "size": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "description": "The number of matched person records to return. Must be an integer between 1 and 100, inclusive."
            },
            "query": {
              "type": "string",
              "examples": [
                "{\"bool\": {\"must\": [{\"term\": {\"job_company_industry\": \"computer software\"}}]}}",
                "{\"bool\": {\"must\": [{\"term\": {\"job_title_role\": \"engineer\"}}, {\"term\": {\"location_country\": \"united states\"}}]}}",
                "{\"bool\": {\"should\": [{\"match\": {\"full_name\": \"john\"}}, {\"match\": {\"first_name\": \"john\"}}]}}"
              ],
              "description": "Elasticsearch DSL query string (JSON object) for searching PDL person profiles. Provide just the DSL body (e.g., '{\"bool\": {...}}') without an outer 'query' wrapper.\n\nSupported query types: term, terms, match, match_phrase, prefix, wildcard, range, exists, bool (must/should/filter/must_not).\n\nALL field names MUST use snake_case, NOT camelCase.\n\nValid queryable fields include:\n- Name: full_name, first_name, last_name, middle_name\n- Job: job_title, job_title_role, job_title_class, job_company_name, job_company_industry, job_company_size, job_company_website, job_company_location_*\n- Location (NOT 'location' alone): location_country, location_region, location_locality, location_metro, location_geo\n- Social: linkedin_url, linkedin_username, linkedin_id, facebook_url, facebook_username, twitter_url, twitter_username, github_url, github_username\n- Nested profiles: profiles.network, profiles.url, profiles.username, profiles.id\n- Other: industry, skills, interests, countries, sex, work_email, personal_emails\n\nNOT queryable as fields (use 'dataset' parameter instead): email, phone.\n'experience_level' is not valid — use 'job_title_levels'. 'job_company_domain' is not valid — use 'job_company_website'. 'minimum_should_match' is not supported by PDL's API.\n\nFull field reference: https://docs.peopledatalabs.com/docs/fields-person"
            },
            "pretty": {
              "type": "boolean",
              "default": false,
              "examples": [
                true,
                false
              ],
              "description": "If true, formats the JSON response with human-readable indentation. Defaults to false."
            },
            "dataset": {
              "enum": [
                "resume"
              ],
              "type": "string",
              "description": "Specifies the dataset category to search against, filtering results to profiles that have the specified type of data available. Allowed values are: 'resume', 'email', 'phone', 'mobile_phone', 'street_address', 'consumer_social', 'developer', 'all'. Note: Use 'email' here to filter for profiles with email addresses available, rather than querying 'email' as a field in the query parameter."
            },
            "titlecase": {
              "type": "boolean",
              "default": false,
              "examples": [
                true,
                false
              ],
              "description": "If true, titlecases the person records in the response. Defaults to false."
            },
            "scroll_token": {
              "type": "string",
              "default": "",
              "examples": [
                "",
                "627445704a7f000001000000"
              ],
              "description": "A token returned in a previous search response. Provide this token to retrieve the next page of results. Omit or pass an empty string for the first request."
            }
          },
          "required": [
            "dataset",
            "query",
            "size"
          ]
        }
      }
    }
  },
  "x-aisa-status": "enabled",
  "x-aisa-pricing": {
    "cost_contract": "response_units",
    "customer_multiplier": 1.0,
    "customer_pricing": "provider_cost_multiplier",
    "default_request_estimate_usd": 0.2803,
    "estimate_source": "profile_seed",
    "evidence_source": "response_body",
    "maximum_units": 10000000,
    "unit": "provider_credit",
    "unit_rate_usd": 1e-06
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  }
}
```

## Cost and request rules

Usage-based billing; Default request estimate: \$0.2803 USD (not a fixed price). Declared unit rate: \$0.000001 USD per provider\_credit. Account-specific pricing and final settlement may differ.

Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.

* **Default request reference estimate (USD):** 0.2803
* **Declared unit rate (USD):** 1e-06
* **Billing unit:** provider\_credit
* **Cost contract:** response\_units
* **Published reference multiplier:** 1.0
* **Declared maximum count/units:** 10000000
* **Settlement evidence source:** response\_body


## OpenAPI

````yaml reference-contracts/people-data-labs.json POST /apis/v1/people-data-labs/people-search-elastic
openapi: 3.1.0
info:
  description: ''
  title: People Data Labs
  version: '1'
  x-aisa-capabilities:
    idempotency: Idempotency-Key
    max_price: X-AISA-Max-Price-USD
    quote:
      header: X-AISA-Cost-Mode
      value: quote
  x-aisa-configured-paths:
    - /apis/v1/people-data-labs/companies-enrich
    - /apis/v1/people-data-labs/companies-search
    - /apis/v1/people-data-labs/company/enrich
    - /apis/v1/people-data-labs/company/search
    - /apis/v1/people-data-labs/enrich-bulk-company-data
    - /apis/v1/people-data-labs/enrich-bulk-person-data
    - /apis/v1/people-data-labs/enrich-company-data
    - /apis/v1/people-data-labs/enrich-person-data
    - /apis/v1/people-data-labs/identify-person-data
    - /apis/v1/people-data-labs/people-enrich
    - /apis/v1/people-data-labs/people-search
    - /apis/v1/people-data-labs/people-search-elastic
    - /apis/v1/people-data-labs/search-company-elastic
    - /apis/v1/people-data-labs/search-company-post
  x-aisa-document:
    facts_hash: d9aafd76ae02b9bcd98e168c52eb69aba6e12890a1eed8da421910f394e8200a
    generator_version: '3'
    protocol_version: '1'
    schema_version: '1'
    composer_version: '28'
    response_pending:
      - operation_id: people-data-labs.companies-enrich
        path: /apis/v1/people-data-labs/companies-enrich
        method: GET
        statuses:
          - '200'
        reason: public success response has no authoritative payload declaration
      - operation_id: people-data-labs.companies-search
        path: /apis/v1/people-data-labs/companies-search
        method: GET
        statuses:
          - '200'
        reason: public success response has no authoritative payload declaration
      - operation_id: people-data-labs.people-enrich
        path: /apis/v1/people-data-labs/people-enrich
        method: GET
        statuses:
          - '200'
        reason: public success response has no authoritative payload declaration
      - operation_id: people-data-labs.people-search
        path: /apis/v1/people-data-labs/people-search
        method: GET
        statuses:
          - '200'
        reason: public success response has no authoritative payload declaration
    document_hash: sha256:fcc357eea49c3a145e5ed0f836a0034070b32bf97d92453e0a56ff91d1d4e687
  x-aisa-plans:
    builder: 1
    display_plan: payg
    payg: 1
    similarweb_payg: 1
    team: 1
    version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
  x-aisa-provider: people-data-labs
  x-aisa-catalogs:
    people-data-labs:
      title: People Data Labs
      description: ''
      x-aisa-document:
        facts_hash: d9aafd76ae02b9bcd98e168c52eb69aba6e12890a1eed8da421910f394e8200a
        generator_version: '3'
        protocol_version: '1'
        schema_version: '1'
      x-aisa-plans:
        builder: 1
        display_plan: payg
        payg: 1
        similarweb_payg: 1
        team: 1
        version: e70a0959cd1b93b84ae16dffd7a538273ddb9c1d46277b82823c37ff1b6bc0fb
      x-aisa-capabilities:
        idempotency: Idempotency-Key
        max_price: X-AISA-Max-Price-USD
        quote:
          header: X-AISA-Cost-Mode
          value: quote
servers:
  - url: https://api.aisa.one
security:
  - bearerAuth: []
paths:
  /apis/v1/people-data-labs/people-search-elastic:
    post:
      tags:
        - People Data Labs
      summary: People Search with Elasticsearch
      description: >-
        <!-- aisa-pricing:start -->

        Usage-based billing; Default request estimate: $0.2803 USD (not a fixed
        price). Declared unit rate: $0.000001 USD per provider_credit.
        Account-specific pricing and final settlement may differ.

        <!-- aisa-pricing:end -->
      operationId: people-data-labs.people-search-elastic
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                size:
                  maximum: 100
                  minimum: 1
                  type: integer
                  description: >-
                    The number of matched person records to return. Must be an
                    integer between 1 and 100, inclusive.
                query:
                  type: string
                  examples:
                    - >-
                      {"bool": {"must": [{"term": {"job_company_industry":
                      "computer software"}}]}}
                    - >-
                      {"bool": {"must": [{"term": {"job_title_role":
                      "engineer"}}, {"term": {"location_country": "united
                      states"}}]}}
                    - >-
                      {"bool": {"should": [{"match": {"full_name": "john"}},
                      {"match": {"first_name": "john"}}]}}
                  description: >-
                    Elasticsearch DSL query string (JSON object) for searching
                    PDL person profiles. Provide just the DSL body (e.g.,
                    '{"bool": {...}}') without an outer 'query' wrapper.


                    Supported query types: term, terms, match, match_phrase,
                    prefix, wildcard, range, exists, bool
                    (must/should/filter/must_not).


                    ALL field names MUST use snake_case, NOT camelCase.


                    Valid queryable fields include:

                    - Name: full_name, first_name, last_name, middle_name

                    - Job: job_title, job_title_role, job_title_class,
                    job_company_name, job_company_industry, job_company_size,
                    job_company_website, job_company_location_*

                    - Location (NOT 'location' alone): location_country,
                    location_region, location_locality, location_metro,
                    location_geo

                    - Social: linkedin_url, linkedin_username, linkedin_id,
                    facebook_url, facebook_username, twitter_url,
                    twitter_username, github_url, github_username

                    - Nested profiles: profiles.network, profiles.url,
                    profiles.username, profiles.id

                    - Other: industry, skills, interests, countries, sex,
                    work_email, personal_emails


                    NOT queryable as fields (use 'dataset' parameter instead):
                    email, phone.

                    'experience_level' is not valid — use 'job_title_levels'.
                    'job_company_domain' is not valid — use
                    'job_company_website'. 'minimum_should_match' is not
                    supported by PDL's API.


                    Full field reference:
                    https://docs.peopledatalabs.com/docs/fields-person
                pretty:
                  type: boolean
                  default: false
                  examples:
                    - true
                    - false
                  description: >-
                    If true, formats the JSON response with human-readable
                    indentation. Defaults to false.
                dataset:
                  enum:
                    - resume
                  type: string
                  description: >-
                    Specifies the dataset category to search against, filtering
                    results to profiles that have the specified type of data
                    available. Allowed values are: 'resume', 'email', 'phone',
                    'mobile_phone', 'street_address', 'consumer_social',
                    'developer', 'all'. Note: Use 'email' here to filter for
                    profiles with email addresses available, rather than
                    querying 'email' as a field in the query parameter.
                titlecase:
                  type: boolean
                  default: false
                  examples:
                    - true
                    - false
                  description: >-
                    If true, titlecases the person records in the response.
                    Defaults to false.
                scroll_token:
                  type: string
                  default: ''
                  examples:
                    - ''
                    - 627445704a7f000001000000
                  description: >-
                    A token returned in a previous search response. Provide this
                    token to retrieve the next page of results. Omit or pass an
                    empty string for the first request.
              required:
                - dataset
                - query
                - size
      responses:
        '200':
          description: Tool result data
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__public_data
        default:
          content:
            application/json:
              schema: {}
          description: >-
            Error response; upstream passthrough responses may use provider
            formats
components:
  schemas:
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__public_data:
      $ref: >-
        #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__cd854e5510d2480e
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__cd854e5510d2480e:
      type: object
      required:
        - query
        - records
        - scroll_token
        - total
      properties:
        query:
          type: string
        total:
          type: integer
        records:
          type: array
          items:
            $ref: >-
              #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__63b76bca786f0947
        scroll_token:
          type: string
        composio_execution_message:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__63b76bca786f0947:
      type: object
      properties:
        id:
          type: string
        sex:
          type: string
        emails:
          type: boolean
        skills:
          type: array
          items:
            type: string
        regions:
          anyOf:
            - type: boolean
            - type: array
              items:
                type: string
        industry:
          type: string
        profiles:
          type: array
          items:
            $ref: >-
              #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__770e8b2920163057
        countries:
          type: array
          items:
            type: string
        education:
          type: array
          items:
            $ref: >-
              #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__f45315775795c6e8
        full_name:
          type: string
        interests:
          type: array
          items:
            type: string
        job_title:
          type: string
        last_name:
          type: string
        birth_date:
          anyOf:
            - type: boolean
            - type: string
        birth_year:
          anyOf:
            - type: boolean
            - type: integer
        experience:
          type: array
          items:
            $ref: >-
              #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__bb6b7f1e33fa2850
        first_name:
          type: string
        github_url:
          type: string
        work_email:
          anyOf:
            - type: boolean
            - type: string
        facebook_id:
          type: string
        linkedin_id:
          type: string
        middle_name:
          type: string
        twitter_url:
          type: string
        facebook_url:
          type: string
        last_initial:
          type: string
        linkedin_url:
          type: string
        location_geo:
          anyOf:
            - type: boolean
            - type: string
        mobile_phone:
          anyOf:
            - type: boolean
            - type: string
        location_name:
          anyOf:
            - type: boolean
            - type: string
        phone_numbers:
          anyOf:
            - type: boolean
            - type: array
              items:
                type: string
        job_company_id:
          type: string
        job_start_date:
          type: string
        job_title_role:
          type: string
        location_metro:
          anyOf:
            - type: boolean
            - type: string
        location_names:
          anyOf:
            - type: boolean
            - type: array
              items:
                type: string
        middle_initial:
          type: string
        dataset_version:
          type: string
        github_username:
          type: string
        job_title_class:
          type: string
        location_region:
          anyOf:
            - type: boolean
            - type: string
        personal_emails:
          anyOf:
            - type: boolean
            - type: array
              items:
                type: string
        job_company_name:
          type: string
        job_company_size:
          type: string
        job_last_changed:
          type: string
        job_title_levels:
          type: array
          items:
            type: string
        location_country:
          type: string
        street_addresses:
          anyOf:
            - type: array
              items:
                type: object
                additionalProperties: true
            - type: boolean
        twitter_username:
          type: string
        facebook_username:
          type: string
        job_last_verified:
          type: string
        linkedin_username:
          type: string
        location_locality:
          anyOf:
            - type: boolean
            - type: string
        job_title_sub_role:
          type: string
        location_continent:
          type: string
        job_company_founded:
          type: integer
        job_company_website:
          type: string
        job_company_industry:
          type: string
        location_postal_code:
          anyOf:
            - type: boolean
            - type: string
        location_last_updated:
          type: string
        job_company_industry_v2:
          type: string
        job_company_linkedin_id:
          type: string
        job_company_twitter_url:
          type: string
        location_address_line_2:
          type: string
        location_street_address:
          anyOf:
            - type: boolean
            - type: string
        job_company_facebook_url:
          type: string
        job_company_linkedin_url:
          type: string
        job_company_location_geo:
          type: string
        job_company_location_name:
          type: string
        job_company_location_metro:
          type: string
        recommended_personal_email:
          anyOf:
            - type: boolean
            - type: string
        job_company_location_region:
          type: string
        job_company_location_country:
          type: string
        job_company_location_locality:
          type: string
        job_company_location_continent:
          type: string
        job_company_location_postal_code:
          type: string
        job_company_location_address_line_2:
          type: string
        job_company_location_street_address:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__770e8b2920163057:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
        network:
          type: string
        username:
          type: string
        last_seen:
          type: string
        first_seen:
          type: string
        num_sources:
          type: integer
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__f45315775795c6e8:
      type: object
      properties:
        gpa:
          anyOf:
            - type: string
            - type: number
        majors:
          type: array
          items:
            type: string
        minors:
          type: array
          items:
            type: string
        school:
          $ref: >-
            #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__d7c54dd2bc2fa4e5
        degrees:
          type: array
          items:
            type: string
        end_date:
          type: string
        start_date:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__bb6b7f1e33fa2850:
      type: object
      properties:
        title:
          $ref: >-
            #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__a45d521d910e34c8
        company:
          $ref: >-
            #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__eed0b1123d23cb0f
        end_date:
          type: string
        is_primary:
          type: boolean
        start_date:
          type: string
        location_names:
          type: array
          items:
            type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__d7c54dd2bc2fa4e5:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
        domain:
          type: string
        website:
          type: string
        location:
          $ref: >-
            #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__73694151657f12c6
        linkedin_id:
          type: string
        twitter_url:
          type: string
        facebook_url:
          type: string
        linkedin_url:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__a45d521d910e34c8:
      type: object
      properties:
        name:
          type: string
        role:
          type: string
        class:
          type: string
        levels:
          type: array
          items:
            type: string
        sub_role:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__eed0b1123d23cb0f:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        size:
          type: string
        type:
          type: string
        ticker:
          type: string
        founded:
          type: integer
        website:
          type: string
        industry:
          type: string
        location:
          $ref: >-
            #/components/schemas/Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__73694151657f12c6
        industry_v2:
          type: string
        linkedin_id:
          type: string
        twitter_url:
          type: string
        facebook_url:
          type: string
        linkedin_url:
          type: string
    Response576A0Ea506F3_connect_PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC__output__73694151657f12c6:
      type: object
      properties:
        geo:
          type: string
        name:
          type: string
        metro:
          type: string
        region:
          type: string
        country:
          type: string
        locality:
          type: string
        continent:
          type: string
        postal_code:
          type: string
        address_line_2:
          type: string
        street_address:
          type: string
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````

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