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

# LinkedIn to Personal Email (US-only)

> The LinkedIn to Personal Email API retrieves the valid personal email address, such as Gmail or iCloud, for any LinkedIn profile. It supports single lookups (`linkedin_url`) and batch lookups of up to 100 profiles at once (`linkedin_urls`). This endpoint is US-only data.

Use this to reach contacts outside their work inbox. It's well suited to recruitment outreach, consumer marketing, or re-engagement campaigns where a personal address improves deliverability.

**Use this endpoint to:**
- Reach candidates or prospects outside working hours
- Improve deliverability for consumer marketing sends
- Re-engage contacts who've left their previous employer

**Fair Use Policy:**
This API is subject to our <a href="https://moltsets.com/fair-use-policy-enrichment/" target="_blank" rel="noopener">Fair Use Policy for Enrichment</a>.

**Plan Availability:**
This endpoint is not available on every plan. Access is set by price tier — call `get_account` and read `personal_email_available`. Where it is `false`, use `linkedin_to_business_email` instead, or contact support@moltsets.com to request access.

**Outcomes:**
A lookup that finds nothing is not an error. It returns HTTP `200` with `status: "not_found"`, empty or null `results`, and the usual `metadata` — and costs no tokens, though it still counts as one request against your Fair Use requests limit. Read `status`, not the HTTP code, to tell a hit from a miss. The API's only `404` is an unknown or retired tool name.



## OpenAPI

````yaml /openapi.json post /linkedin_to_personal_email_usa
openapi: 3.1.0
info:
  title: MoltSets API
  version: 1.0.0
  description: >-
    MoltSets is an identity resolution API. Use it to resolve emails, LinkedIn
    profiles, and IP addresses into enriched contact and company data, including
    business and personal emails, mobile phone numbers, and firmographic
    details.
servers:
  - url: https://api.moltsets.com/api/v1/tools
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Search
    description: >-
      Search and filter company and business profiles by name, domain, industry,
      size, or revenue.
  - name: Get Valid Emails
    description: Resolve and enrich valid business and personal email addresses.
  - name: Get Carrier-Verified Mobile Phones
    description: Enrich carrier-verified mobile phone numbers.
  - name: Reverse Lookups
    description: Resolve an email address or LinkedIn URL to a full business profile.
  - name: Get Ad Audience
    description: >-
      Resolve identifiers to hashed email (HEM) and mobile advertising IDs
      (MAIDs) for audience matching.
  - name: Get LinkedIn
    description: Resolve an email address to its LinkedIn profile URL.
  - name: Get Company
    description: Resolve IP addresses to company data.
  - name: Account
    description: Account management tools. Free — do not consume credits.
paths:
  /linkedin_to_personal_email_usa:
    post:
      tags:
        - Get Valid Emails
      summary: LinkedIn to Personal Email (US-only)
      description: >-
        The LinkedIn to Personal Email API retrieves the valid personal email
        address, such as Gmail or iCloud, for any LinkedIn profile. It supports
        single lookups (`linkedin_url`) and batch lookups of up to 100 profiles
        at once (`linkedin_urls`). This endpoint is US-only data.


        Use this to reach contacts outside their work inbox. It's well suited to
        recruitment outreach, consumer marketing, or re-engagement campaigns
        where a personal address improves deliverability.


        **Use this endpoint to:**

        - Reach candidates or prospects outside working hours

        - Improve deliverability for consumer marketing sends

        - Re-engage contacts who've left their previous employer


        **Fair Use Policy:**

        This API is subject to our <a
        href="https://moltsets.com/fair-use-policy-enrichment/" target="_blank"
        rel="noopener">Fair Use Policy for Enrichment</a>.


        **Plan Availability:**

        This endpoint is not available on every plan. Access is set by price
        tier — call `get_account` and read `personal_email_available`. Where it
        is `false`, use `linkedin_to_business_email` instead, or contact
        support@moltsets.com to request access.


        **Outcomes:**

        A lookup that finds nothing is not an error. It returns HTTP `200` with
        `status: "not_found"`, empty or null `results`, and the usual `metadata`
        — and costs no tokens, though it still counts as one request against
        your Fair Use requests limit. Read `status`, not the HTTP code, to tell
        a hit from a miss. The API's only `404` is an unknown or retired tool
        name.
      operationId: enrichPersonalEmail
      parameters:
        - $ref: '#/components/parameters/UserAgentHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                linkedin_url:
                  type: string
                  description: Single LinkedIn profile URL or slug.
                linkedin_urls:
                  type: array
                  items:
                    type: string
                  maxItems: 100
                  description: Batch of LinkedIn profile URLs or slugs, up to 100.
            examples:
              single:
                summary: Single lookup
                value:
                  linkedin_url: https://linkedin.com/in/retentionadam
              batch:
                summary: Batch lookup
                value:
                  linkedin_urls:
                    - https://linkedin.com/in/retentionadam
                    - https://linkedin.com/in/jane-doe
      responses:
        '200':
          description: Success
          content:
            application/json:
              examples:
                found:
                  summary: Data found
                  value:
                    results:
                      email: john.smith@gmail.com
                      risk_score: A
                      last_validated_at: '2026-03-04'
                    status: ok
                    metadata:
                      fair_use:
                        records_remaining_5h: 179999
                        records_reset_5h: '2026-07-15T18:53:16Z'
                        records_remaining_1w: 899999
                        records_reset_1w: '2026-07-22T13:53:16Z'
                not_found:
                  summary: No data found — still HTTP 200
                  value:
                    results:
                      email: null
                      risk_score: null
                      last_validated_at: null
                    status: not_found
                    metadata:
                      fair_use:
                        records_remaining_5h: 179999
                        records_reset_5h: '2026-07-15T18:53:16Z'
                        records_remaining_1w: 899999
                        records_reset_1w: '2026-07-22T13:53:16Z'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBadRequest'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUnauthorized'
        '402':
          description: Payment Required — insufficient tokens
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInsufficientTokens'
        '403':
          description: Forbidden — tool not on the plan, or account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPlanRestricted'
        '422':
          description: Invalid Input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInvalidInput'
        '429':
          description: Too Many Requests — rate limit or Fair Use window exhausted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorRateLimit'
        '500':
          description: >-
            Internal Server Error — the endpoint is temporarily unavailable. Not
            caused by the request; the MoltSets team is alerted automatically.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInternal'
components:
  parameters:
    UserAgentHeader:
      name: User-Agent
      in: header
      required: true
      description: >-
        Identifies the calling client. Any non-empty value is accepted —
        MoltSets does not validate its contents. Requests without this header
        are rejected with `403 Forbidden` (`error.code`: `forbidden`).
      schema:
        type: string
      example: YOUR_APP_NAME/1.0
  schemas:
    ErrorBadRequest:
      type: object
      description: Malformed request — the body could not be processed.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_input
            message:
              type: string
              example: The request could not be processed.
    ErrorUnauthorized:
      type: object
      description: The API key or OAuth token is missing, invalid, or revoked.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: unauthorized
            message:
              type: string
              example: Invalid API key.
    ErrorInsufficientTokens:
      type: object
      description: >-
        Out of credit. `insufficient_tokens` means the token balance cannot
        cover the call; `insufficient_phone_tokens` means the separate
        phone-token allowance cannot cover a mobile-phone result. On a batch,
        unaffordable items are dropped and the response returns partial results
        with this error block rather than failing the whole call.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: insufficient_tokens
            message:
              type: string
              example: You have 0 tokens remaining.
    ErrorPlanRestricted:
      type: object
      description: >-
        The account cannot call this tool. `plan_restricted` means the tool is
        not part of the account's plan — today, the dedicated personal-email
        tools on a plan without the personal-email surface. It is a plan
        condition, so there is no `Retry-After` and topping up tokens does not
        clear it. `account_inactive` means the account itself is not active.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: plan_restricted
            message:
              type: string
              example: >-
                Personal email lookups are not available on your plan. Contact
                support@moltsets.com to request access.
    ErrorInvalidInput:
      type: object
      description: A parameter is missing, malformed, or outside its allowed values.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_input
            message:
              type: string
              example: Message describing the nature of the invalid input.
    ErrorRateLimit:
      type: object
      description: >-
        Rate or Fair Use limit. `rate_limited` is the burst/IP guard;
        `fair_use_limit_exceeded` means a Fair Use **record** window is
        exhausted (or, on the free tier, the one-time search trial);
        `fair_use_requests_exceeded` means the 5-hour **request** window is
        exhausted. The Fair Use codes carry `metadata.retry_after` and a
        `Retry-After` header.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: fair_use_limit_exceeded
            message:
              type: string
              example: Fair use record limit reached. Retry after the window resets.
        metadata:
          type: object
          properties:
            retry_after:
              type: integer
              description: >-
                Seconds until the binding window unlocks. Also sent as a
                `Retry-After` header. Absent when the limit is a plan condition
                rather than a window (free-tier search trial exhausted).
    ErrorInternal:
      type: object
      description: >-
        Returned when the endpoint itself is unavailable. Not caused by anything
        in the request, and never charged.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: internal_error
            message:
              type: string
              example: Unexpected connection error.
        metadata:
          type: object
          example: {}
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Pass your API key as a Bearer token. Keys follow the format
        `ms_XXXXXXXXXXX`.

````