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

# Personal email

> Find a personal email address from a professional profile. Rate limit: 2,000 requests per minute per workspace.

Submit a LinkedIn person profile URL and return a personal email address when one is found.

> [!NOTE]
>
> The limit is 2,000 requests per minute per workspace. The minimum balance required to start is 3 credits. A successful result costs between 3 and 12 credits, depending on its source; `not_found` costs 0 credits.

> [!WARNING]
>
> A `502 Bad Gateway` response can occur after credits were charged. Check your balance before retrying that input to avoid paying again for the same result.

After checking your balance for a `502`, or for a temporary `503` response, use a limited number of retries with increasing delays. If errors persist, stop retrying and contact support. A client timeout does not confirm whether the request completed or was charged.

## Next step

Use [People URL finder](https://docs.airscale.io/api-reference/people-url-finder.md) when you have a name and company but no profile URL.


## OpenAPI

````yaml openapi.json POST /v1/personal-email
openapi: 3.1.0
info:
  title: Airscale Public API
  version: '2026-09-11'
  description: >-
    Search, enrich, resolve public business data, and monitor job changes with
    Airscale.
  x-airscale-source-repository: ViceScale/airscale-code
  x-airscale-source-sha: 1de19e1b70a052a4b8d9c2075021a7e5e7a94d51
servers:
  - url: https://api.airscale.io
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Search and discovery
    description: Search people, companies, and the web.
  - name: Contact data
    description: Find professional and personal contact data.
  - name: Profiles and reverse lookup
    description: Extract profiles or resolve a person from known contact data.
  - name: Post engagement
    description: Retrieve and enrich people who liked or commented on LinkedIn posts.
  - name: LinkedIn content
    description: >-
      Search LinkedIn posts, read profile and company feeds, and retrieve
      profile comments and comment reactions.
  - name: Job change monitoring
    description: Track LinkedIn profiles and receive job-change events.
  - name: New hire monitoring
    description: Watch companies or the market for people who start a matching role.
  - name: Post engagement monitoring
    description: >-
      Follow LinkedIn company pages and profiles and receive the people who
      engage with their posts.
  - name: Account
    description: Inspect workspace account state.
  - name: Miscellaneous
    description: >-
      Find website technologies and check WhatsApp availability, Meta ads, and
      email deliverability.
paths:
  /v1/personal-email:
    post:
      tags:
        - Contact data
      summary: Find a personal email
      description: >-
        Finds a personal email for a recognized person profile, with optional
        verification behavior.
      operationId: findPersonalEmail
      requestBody:
        required: true
        description: >-
          Provide the recognized person profile. Verification is enabled only
          for boolean true or the case-insensitive string "yes"; all other
          values leave verification disabled.
        content:
          application/json:
            schema:
              type: object
              required:
                - linkedin_profile_url
              additionalProperties: false
              properties:
                linkedin_profile_url:
                  description: >-
                    A LinkedIn person-profile input accepted and canonicalized
                    after trimming whitespace. Valid URL user info, numeric
                    ports, queries, and fragments are accepted but omitted from
                    the canonical profile URL.
                  allOf:
                    - $ref: '#/components/schemas/LinkedInPersonUrl'
                    - pattern: >-
                        ^\s*(?:[Hh][Tt][Tt][Pp][Ss]?:\/\/)?(?:[^\s\/@:]+(?::[^\s\/@]*)?@)?(?:[Ww]{3}\.)?[Ll][Ii][Nn][Kk][Ee][Dd][Ii][Nn]\.[Cc][Oo][Mm](?::(?:0*[0-9]{1,4}|0*(?:[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])))?\/in\/(?:[A-Za-z0-9_-]|%[0-9A-Fa-f]{2})+\/?(?:\?[^\s#]*)?(?:#[^\s]*)?\s*$
                verification:
                  description: >-
                    Verification is enabled only for boolean true or the
                    case-insensitive string "yes"; all other values leave
                    verification disabled.
                  oneOf:
                    - type: boolean
                    - type: string
            examples:
              profile:
                summary: Person profile with verification enabled
                value:
                  linkedin_profile_url: https://www.linkedin.com/in/example-person-000000
                  verification: true
      responses:
        '200':
          description: A personal email result or a not-found result.
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    required:
                      - status
                      - email
                    additionalProperties: true
                    properties:
                      status:
                        type: string
                        const: success
                      email:
                        type: string
                        format: email
                  - $ref: '#/components/schemas/NotFoundEmail'
              examples:
                success:
                  summary: Personal email found
                  value:
                    status: success
                    email: personal.example@example.org
                notFound:
                  summary: No personal email found
                  value:
                    status: not_found
                    email: null
        '400':
          description: >-
            The JSON body is invalid or required identification fields are
            missing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: >-
            The workspace cannot complete this request because access or
            available credits are insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: The JSON request body exceeds the 256 KiB limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            The workspace rate limit has been exceeded. Try again after the
            current window resets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: >-
            The request could not be completed because of an unexpected server
            error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: >-
            The request could not be completed because a required service
            returned an unsuccessful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: The request is temporarily unavailable. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    LinkedInPersonUrl:
      type: string
      minLength: 1
      description: >-
        A recognized LinkedIn person-profile URL or identifier. Airscale
        normalizes supported profile inputs.
      example: https://www.linkedin.com/in/example-person-000000
    NotFoundEmail:
      type: object
      required:
        - status
        - email
      additionalProperties: true
      properties:
        status:
          type: string
          const: not_found
        email:
          type: 'null'
    Error:
      type: object
      additionalProperties: true
      properties:
        error:
          type: string
        message:
          type: string
  responses:
    Unauthorized:
      description: The Bearer token is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Use an Airscale workspace API key. Never expose the key in client-side
        code.

````

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