openapi: 3.0.3
info:
  title: ContactOut API
  description: >-
    ContactOut API provides access to contact data intelligence for 350M professionals and 40M companies. Includes
    LinkedIn enrichment, people search, company search, email verification, and more.
  version: 1.0.0
  contact:
    url: 'https://contactout.com/meeting?utm_source=api_docs'
servers:
  - url: 'https://api.contactout.com'
    description: Production
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: token
      description: Your ContactOut API token.
  responses:
    BadRequest:
      description: Bad request - invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: 400
            message: Bad Request
    Unauthorized:
      description: Unauthorized - invalid or missing API token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: 401
            message: Failed to authenticate because of bad credentials or an invalid header.
    Forbidden:
      description: Forbidden - feature not available on your plan or insufficient credits
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            no_access:
              summary: No access to endpoint
              value:
                status_code: 403
                message: No access to endpoint.
            insufficient_credits:
              summary: Insufficient credits
              value:
                status_code: 403
                message: You have insufficient credits to perform this action. Please email your sales manager.
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: 404
            message: Not Found
    UnprocessableEntity:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: 422
            message: The profiles field is required.
    TooManyRequests:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: 429
            message: Too Many Attempts.
  schemas:
    LocationObject:
      type: object
      description: Company location information
      properties:
        city:
          type: string
          example: San Francisco
        country:
          type: string
          example: United States
        is_hq:
          type: boolean
          example: true
        line1:
          type: string
          nullable: true
        line2:
          type: string
          nullable: true
        postal_code:
          type: string
          nullable: true
        state:
          type: string
          example: California
    FundingRound:
      type: object
      description: Funding round information
      properties:
        funding_type:
          type: string
          example: Series A
        announced_date:
          type: string
          example: '2020-01-15'
        investor_names:
          type: array
          items:
            type: string
        lead_investors:
          type: array
          items:
            type: string
        money_raised_usd:
          type: number
          example: 5000000
        number_of_investors:
          type: integer
          example: 3
    AltMatch:
      type: object
      description: Alternative profile match with lower confidence
      properties:
        linkedinUrl:
          type: string
          format: uri
        fullName:
          type: string
        confidenceLevel:
          type: string
    CompanyObject:
      type: object
      description: >-
        Full company object returned by enrichment endpoints. Fields may be empty strings when data is unavailable.
        Some fields may be omitted when falsy.
      properties:
        name:
          type: string
          example: ContactOut
        url:
          type: string
          format: uri
          example: 'https://www.linkedin.com/company/contactout'
        linkedin_company_id:
          oneOf:
            - type: integer
            - type: string
          description: LinkedIn company ID. May be an empty string when unavailable.
          example: 12345678
        domain:
          type: string
          example: contactout.com
        email_domain:
          type: string
          example: contactout.com
        overview:
          type: string
        type:
          type: string
          example: Privately Held
        size:
          oneOf:
            - type: integer
            - type: string
          description: Number of employees. May be an empty string when unavailable.
          example: 50
        country:
          type: string
          example: United States
        revenue:
          oneOf:
            - type: string
            - type: number
          description: Revenue value. May be a formatted string, number, or empty string.
          nullable: true
        founded_at:
          oneOf:
            - type: integer
            - type: string
          description: Year founded. May be an empty string when unavailable.
          example: 2015
        industry:
          type: string
          example: Technology
        headquarter:
          type: string
          example: 'San Francisco, California'
        website:
          type: string
          format: uri
          example: 'https://contactout.com'
        logo_url:
          type: string
          format: uri
        specialties:
          type: array
          items:
            type: string
        locations:
          type: array
          description: Array of location strings or LocationObjects depending on endpoint.
          items:
            oneOf:
              - type: string
              - $ref: '#/components/schemas/LocationObject'
        employees:
          type: integer
          nullable: true
          description: Actual employee count from LinkedIn
          example: 45
        followers:
          type: integer
          nullable: true
          description: LinkedIn followers count
          example: 1200
        funding:
          type: object
          nullable: true
          properties:
            total_funding_usd:
              type: number
              example: 10000000
            rounds:
              type: array
              items:
                $ref: '#/components/schemas/FundingRound'
            funding_status:
              type: string
              example: Series A
            latest_date:
              type: string
              example: '2021-06-15'
            number_of_funding_rounds:
              type: integer
              example: 2
    CompanyObjectBasic:
      type: object
      description: Reduced company object returned by email enrich endpoint (camelCase context).
      properties:
        name:
          type: string
        url:
          type: string
          format: uri
        headquarter:
          type: string
        website:
          type: string
          format: uri
        locations:
          type: array
          items:
            type: string
    ExperienceObject:
      type: object
      properties:
        title:
          type: string
          example: Software Engineer
        summary:
          type: string
          nullable: true
        locality:
          type: string
          example: San Francisco, California
        company_name:
          type: string
          example: ContactOut
        linkedin_url:
          type: string
          format: uri
          example: 'https://www.linkedin.com/company/contactout'
        domain:
          type: string
          example: contactout.com
        logo_url:
          type: string
          format: uri
          nullable: true
        start_date:
          type: string
          description: Formatted start date string
          example: Jan 2020
        end_date:
          type: string
          nullable: true
          description: Formatted end date string, null if current position
          example: Dec 2022
        start_date_year:
          type: integer
          example: 2020
        start_date_month:
          type: integer
          example: 1
        end_date_year:
          type: integer
          nullable: true
          example: 2022
        end_date_month:
          type: integer
          nullable: true
          example: 12
        is_current:
          type: boolean
          example: false
    EducationObject:
      type: object
      properties:
        field_of_study:
          type: string
          example: Computer Science
        description:
          type: string
          nullable: true
        start_date_year:
          type: integer
          nullable: true
          example: 2010
        end_date_year:
          type: integer
          nullable: true
          example: 2014
        degree:
          type: string
          example: Bachelor of Science
        school_name:
          type: string
          example: Stanford University
        url:
          type: string
          format: uri
    CertificationObject:
      type: object
      properties:
        name:
          type: string
        authority:
          type: string
        license:
          type: string
        start_date_year:
          type: integer
        start_date_month:
          type: integer
        end_date_year:
          type: integer
        end_date_month:
          type: integer
    PublicationObject:
      type: object
      properties:
        url:
          type: string
          format: uri
        title:
          type: string
        description:
          type: string
        publisher:
          type: string
        authors:
          type: array
          items:
            type: string
        published_on_year:
          type: integer
        published_on_month:
          type: integer
        published_on_day:
          type: integer
    ProjectObject:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
        start_date_year:
          type: integer
        start_date_month:
          type: integer
        end_date_year:
          type: integer
        end_date_month:
          type: integer
    VolunteeringObject:
      type: object
      properties:
        role:
          type: string
        company_name:
          type: string
        company_url:
          type: string
          format: uri
          nullable: true
        cause:
          type: string
          nullable: true
          description: Cause category in lowercase snake_case (e.g., social_services)
        company_id:
          type: integer
          nullable: true
        start_date_year:
          type: integer
          nullable: true
        start_date_month:
          type: integer
          nullable: true
        end_date_year:
          type: integer
          nullable: true
        end_date_month:
          type: integer
          nullable: true
    LanguageObject:
      type: object
      properties:
        name:
          type: string
        proficiency:
          type: string
    ContactAvailability:
      type: object
      properties:
        personal_email:
          type: boolean
        work_email:
          type: boolean
        phone:
          type: boolean
    ContactInfo:
      type: object
      properties:
        emails:
          type: array
          items:
            type: string
            format: email
        personal_emails:
          type: array
          items:
            type: string
            format: email
        work_emails:
          type: array
          items:
            type: string
            format: email
        work_email_status:
          type: object
          additionalProperties:
            type: string
        phones:
          type: array
          items:
            type: string
    FullProfile:
      type: object
      properties:
        url:
          type: string
          format: uri
          example: 'https://www.linkedin.com/in/john-doe'
        email:
          type: array
          items:
            type: string
            format: email
          description: All email addresses (personal and work combined)
        work_email:
          type: array
          items:
            type: string
            format: email
        personal_email:
          type: array
          items:
            type: string
            format: email
        phone:
          type: array
          items:
            type: string
        github:
          type: array
          items:
            type: string
        twitter:
          type: array
          items:
            type: string
        full_name:
          type: string
          example: John Doe
        headline:
          type: string
          example: Software Engineer at ContactOut
        industry:
          type: string
          nullable: true
        company:
          $ref: '#/components/schemas/CompanyObject'
        location:
          type: string
          example: San Francisco, California
        country:
          type: string
          example: United States
        languages:
          type: array
          items:
            $ref: '#/components/schemas/LanguageObject'
        summary:
          type: string
          nullable: true
        experience:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceObject'
        education:
          type: array
          items:
            $ref: '#/components/schemas/EducationObject'
        skills:
          type: array
          items:
            type: string
        certifications:
          type: array
          items:
            $ref: '#/components/schemas/CertificationObject'
        publications:
          type: array
          items:
            $ref: '#/components/schemas/PublicationObject'
        projects:
          type: array
          items:
            $ref: '#/components/schemas/ProjectObject'
        volunteering_experiences:
          type: array
          items:
            $ref: '#/components/schemas/VolunteeringObject'
        followers:
          type: integer
          example: 500
        job_function:
          type: string
          example: Engineering
        seniority:
          type: string
          example: Manager
        work_status:
          type: string
          nullable: true
          description: 'Work status indicator (e.g., open_to_work, hiring)'
          example: open_to_work
        profile_picture_url:
          type: string
          format: uri
          nullable: true
        updated_at:
          type: string
          format: date-time
          description: Last time the profile data was updated
    SearchProfileResult:
      type: object
      properties:
        li_vanity:
          type: string
          example: john-doe
        full_name:
          type: string
          example: John Doe
        title:
          type: string
          example: Software Engineer
        headline:
          type: string
        company:
          $ref: '#/components/schemas/CompanyObject'
        location:
          type: string
          example: San Francisco, California
        country:
          type: string
          example: United States
        industry:
          type: string
        experience:
          type: array
          description: Array of strings (default) or ExperienceObject if detailed_experience=true
          items:
            oneOf:
              - type: string
              - $ref: '#/components/schemas/ExperienceObject'
        education:
          type: array
          description: Array of strings (default) or EducationObject if detailed_education=true
          items:
            oneOf:
              - type: string
              - $ref: '#/components/schemas/EducationObject'
        skills:
          type: array
          items:
            type: string
        summary:
          type: string
        languages:
          type: array
          items:
            $ref: '#/components/schemas/LanguageObject'
        certifications:
          type: array
          items:
            $ref: '#/components/schemas/CertificationObject'
        publications:
          type: array
          items:
            $ref: '#/components/schemas/PublicationObject'
        projects:
          type: array
          items:
            $ref: '#/components/schemas/ProjectObject'
        volunteering_experiences:
          type: array
          items:
            $ref: '#/components/schemas/VolunteeringObject'
        followers:
          type: integer
        updated_at:
          type: string
        profile_picture_url:
          type: string
          format: uri
        job_function:
          type: string
        seniority:
          type: string
        work_status:
          type: string
          nullable: true
        contact_availability:
          $ref: '#/components/schemas/ContactAvailability'
        contact_info:
          $ref: '#/components/schemas/ContactInfo'
    SearchMetadata:
      type: object
      properties:
        page:
          type: integer
        page_size:
          type: integer
        total_results:
          type: integer
    CompanySearchResult:
      type: object
      properties:
        name:
          type: string
          example: ContactOut
        url:
          type: string
          format: uri
          example: 'https://www.linkedin.com/company/contactout'
        linkedin_company_id:
          oneOf:
            - type: integer
            - type: string
          description: LinkedIn company ID. May be an empty string when unavailable.
          example: 12345678
        domain:
          type: string
          example: contactout.com
        email_domain:
          type: string
          example: contactout.com
        overview:
          type: string
        type:
          type: string
          example: Privately Held
        size:
          oneOf:
            - type: integer
            - type: string
          description: Company size bucket. May be an empty string when unavailable.
          example: 50
        country:
          type: string
          example: United States
        revenue:
          oneOf:
            - type: string
            - type: number
          description: Revenue value. May be a formatted string, number, or empty string.
          nullable: true
        founded_at:
          oneOf:
            - type: integer
            - type: string
          description: Year founded. May be an empty string when unavailable.
          example: 2015
        industry:
          type: string
          example: Technology
        headquarter:
          type: string
          example: 'San Francisco, California'
        website:
          type: string
          format: uri
          example: 'https://contactout.com'
        logo_url:
          type: string
          format: uri
        specialties:
          type: array
          items:
            type: string
        locations:
          type: array
          items:
            $ref: '#/components/schemas/LocationObject'
        employees:
          type: integer
          description: Actual employee count
          example: 45
        followers:
          type: integer
          description: LinkedIn followers count
          example: 1200
        funding:
          type: object
          nullable: true
          properties:
            total_funding_usd:
              type: number
              example: 10000000
            rounds:
              type: array
              items:
                $ref: '#/components/schemas/FundingRound'
            funding_status:
              type: string
              example: Series A
            latest_date:
              type: string
              example: '2021-06-15'
            number_of_funding_rounds:
              type: integer
              example: 2
    ErrorResponse:
      type: object
      required:
        - status_code
        - message
      properties:
        status_code:
          type: integer
          example: 400
        message:
          type: string
          example: Invalid request
security:
  - ApiKeyAuth: []
paths:
  /v1/linkedin/enrich:
    get:
      summary: LinkedIn Profile Enrichment
      description: >-
        Get full profile details for a LinkedIn profile URL, including contact info, work history, education, skills,
        and more. Does not support Sales Navigator or Recruiter URLs.
      operationId: enrichLinkedInProfile
      tags:
        - LinkedIn Profile API
      parameters:
        - name: profile
          in: query
          required: true
          description: >-
            Fully formed LinkedIn profile URL. Must begin with `http` and contain `linkedin.com/in/` or
            `linkedin.com/pub/`.
          schema:
            type: string
            format: uri
          example: 'https://www.linkedin.com/in/example-person'
        - name: profile_only
          in: query
          required: false
          description: >-
            If true, returns profile data without contact information. Consumes 1 search credit instead of email/phone
            credits.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Note: Fields with falsy values (null, empty string, empty array) may be omitted from the response.
                properties:
                  status_code:
                    type: integer
                    example: 200
                  profile:
                    oneOf:
                      - $ref: '#/components/schemas/FullProfile'
                      - type: array
                        maxItems: 0
                        description: Empty array when no profile found
                  errors:
                    type: object
                    description: Present when there are insufficient credits for some contact types.
                    properties:
                      email:
                        type: string
                        example: insufficient credits
                      phone:
                        type: string
                        example: insufficient credits
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/email/enrich:
    get:
      summary: Email Address Enrichment
      description: >-
        Get LinkedIn profile details and contact info for a given email address. Match rate is typically higher with
        personal emails.
      operationId: enrichEmail
      tags:
        - LinkedIn Profile API
      parameters:
        - name: email
          in: query
          required: true
          description: Email address to enrich.
          schema:
            type: string
            format: email
          example: jane@gmail.com
        - name: include
          in: query
          required: false
          description: >-
            Additional data to include. Currently supports `work_email`. Including work_email may increase response time
            due to real-time verification.
          schema:
            type: string
            enum:
              - work_email
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    description: >-
                      Note: This endpoint returns camelCase field names unlike other endpoints which use snake_case.
                    properties:
                      email:
                        type: string
                        format: email
                      workEmail:
                        type: string
                        format: email
                        nullable: true
                      workEmailStatus:
                        type: string
                        nullable: true
                        enum:
                          - Verified
                          - Unverified
                      fullName:
                        type: string
                      headline:
                        type: string
                        nullable: true
                      industry:
                        type: string
                        nullable: true
                      linkedinUrl:
                        type: string
                        format: uri
                      profilePictureUrl:
                        type: string
                        format: uri
                        nullable: true
                      confidenceLevel:
                        type: string
                        description: Confidence level of the match (e.g., high, medium, low)
                      altMatches:
                        type: array
                        description: Alternative profile matches with lower confidence
                        items:
                          $ref: '#/components/schemas/AltMatch'
                      phone:
                        type: string
                        nullable: true
                      twitter:
                        type: string
                        nullable: true
                      github:
                        type: string
                        nullable: true
                      company:
                        $ref: '#/components/schemas/CompanyObjectBasic'
                      location:
                        type: string
                      languages:
                        type: array
                        items:
                          $ref: '#/components/schemas/LanguageObject'
                      summary:
                        type: string
                      experience:
                        type: array
                        items:
                          $ref: '#/components/schemas/ExperienceObject'
                      education:
                        type: array
                        items:
                          $ref: '#/components/schemas/EducationObject'
                      skills:
                        type: array
                        items:
                          type: string
                      certifications:
                        type: array
                        items:
                          $ref: '#/components/schemas/CertificationObject'
                      publications:
                        type: array
                        items:
                          $ref: '#/components/schemas/PublicationObject'
                      projects:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProjectObject'
                      volunteeringExperiences:
                        type: array
                        items:
                          $ref: '#/components/schemas/VolunteeringObject'
                      followers:
                        type: integer
                      jobFunction:
                        type: string
                      seniority:
                        type: string
                      workStatus:
                        type: string
                        nullable: true
                      updatedAt:
                        type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/enrich:
    post:
      summary: People Enrichment
      description: >-
        Get profile details using a combination of data points (name, email, phone, LinkedIn URL, company, education,
        location). Requires one primary identifier OR a name plus at least one secondary parameter.
      operationId: enrichPeople
      tags:
        - LinkedIn Profile API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                linkedin_url:
                  type: string
                  format: uri
                  description: LinkedIn profile URL
                email:
                  type: string
                  format: email
                  description: Email address
                phone:
                  type: string
                  description: Phone number
                full_name:
                  type: string
                  description: Full name
                first_name:
                  type: string
                  description: First name (use with last_name)
                last_name:
                  type: string
                  description: Last name (use with first_name)
                company:
                  type: array
                  items:
                    type: string
                  maxItems: 10
                  description: Array of company names
                company_domain:
                  type: array
                  items:
                    type: string
                  maxItems: 10
                  description: Array of company domains
                education:
                  type: array
                  items:
                    type: string
                  maxItems: 10
                  description: Array of educational institutions
                location:
                  type: string
                  description: Location/city
                job_title:
                  type: string
                  description: Job title
                include:
                  type: array
                  items:
                    type: string
                    enum:
                      - work_email
                      - personal_email
                      - phone
                  description: Contact data types to include in response
            example:
              full_name: Jane Doe
              company:
                - stripe
              include:
                - work_email
                - personal_email
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    $ref: '#/components/schemas/FullProfile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/linkedin:
    get:
      summary: Contact Info from LinkedIn Profile
      description: 'Get contact details (emails, phone) for a single LinkedIn profile URL.'
      operationId: getContactInfoFromLinkedIn
      tags:
        - Contact Info API
      parameters:
        - name: profile
          in: query
          required: true
          description: >-
            Fully formed LinkedIn profile URL. Must begin with `http` and contain `linkedin.com/in/` or
            `linkedin.com/pub/`.
          schema:
            type: string
            format: uri
          example: 'https://www.linkedin.com/in/example-person'
        - name: include_phone
          in: query
          required: false
          description: 'If true, includes phone numbers in the response (consumes phone credits).'
          schema:
            type: boolean
            default: false
        - name: email_type
          in: query
          required: false
          description: >-
            Filter email type. `personal` returns only personal emails; `work` returns only work emails (triggers
            real-time verification); `personal,work` returns both; `none` returns no emails.
          schema:
            type: string
            enum:
              - personal
              - work
              - 'personal,work'
              - none
            example: work
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    properties:
                      url:
                        type: string
                        format: uri
                      email:
                        type: array
                        items:
                          type: string
                          format: email
                      work_email:
                        type: array
                        items:
                          type: string
                          format: email
                      work_email_status:
                        type: object
                        additionalProperties:
                          type: string
                      personal_email:
                        type: array
                        items:
                          type: string
                          format: email
                      phone:
                        type: array
                        items:
                          type: string
                      github:
                        type: array
                        items:
                          type: string
                  errors:
                    type: object
                    description: Present when there are insufficient credits for some contact types.
                    properties:
                      email:
                        type: string
                        example: insufficient credits
                      phone:
                        type: string
                        example: insufficient credits
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/linkedin/batch:
    post:
      summary: Bulk Contact Info V1
      description: >-
        Get contact info for up to 100 LinkedIn profiles in one synchronous request. By default returns a map of profile URL
        to email address list; with `include_phone: true`, each value is instead `{ emails, phones }`.
      operationId: bulkContactInfoV1
      tags:
        - Contact Info API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - profiles
              properties:
                profiles:
                  type: array
                  items:
                    type: string
                    format: uri
                  minItems: 1
                  maxItems: 100
                  description: Array of LinkedIn profile URLs (max 100).
                email_type:
                  type: string
                  description: >-
                    Filter email type. `personal` returns only personal emails; `work` returns only work emails (triggers
                    real-time verification); `personal,work` returns both.
                  enum:
                    - personal
                    - work
                    - 'personal,work'
                include_phone:
                  type: boolean
                  default: false
                  description: >-
                    When true, each profile maps to `{ emails[], phones[] }` instead of a plain email array. Phones require
                    phone-enabled non-legacy tokens and available phone credits; otherwise `phones` is empty.
            example:
              profiles:
                - 'https://linkedin.com/in/example-person-1'
                - 'https://linkedin.com/in/example-person-2'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profiles:
                    type: object
                    description: >-
                      Keys are LinkedIn profile URLs. If `include_phone` was false/omitted, values are email arrays. If
                      `include_phone` was true, values are objects with `emails` and `phones` arrays.
                    additionalProperties:
                      oneOf:
                        - type: array
                          items:
                            type: string
                            format: email
                        - type: object
                          required:
                            - emails
                            - phones
                          properties:
                            emails:
                              type: array
                              items:
                                type: string
                                format: email
                            phones:
                              type: array
                              items:
                                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/people/linkedin/batch:
    post:
      summary: Bulk Contact Info V2 (Async)
      description: >-
        Get contact details for up to 1000 LinkedIn profiles asynchronously. Includes real-time work email finder.
        Returns a job_id for tracking results.
      operationId: bulkContactInfoV2
      tags:
        - Contact Info API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - profiles
              properties:
                profiles:
                  type: array
                  items:
                    type: string
                    format: uri
                  minItems: 1
                  maxItems: 1000
                  description: Array of LinkedIn profile URLs (max 1000).
                callback_url:
                  type: string
                  format: uri
                  description: Optional URL to POST results to when the job completes.
                include_phone:
                  type: boolean
                  default: false
                  description: 'If true, includes phone numbers in results (requires phone credits).'
                email_type:
                  type: string
                  description: >-
                    Filter email type. `personal` returns only personal emails; `work` returns only work emails (triggers
                    real-time verification); `personal,work` returns both; `none` returns no emails and consumes no
                    email credits.
                  enum:
                    - personal
                    - work
                    - 'personal,work'
                    - none
      responses:
        '200':
          description: Job queued
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: QUEUED
                  job_id:
                    type: string
                    format: uuid
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  '/v2/people/linkedin/batch/{job_id}':
    get:
      summary: Get Bulk Contact Info V2 Results
      description: Retrieve results of an async bulk contact info job by its ID.
      operationId: getBulkContactInfoV2Results
      tags:
        - Contact Info API
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Job results
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        format: uuid
                      status:
                        type: string
                        example: SENT
                      result:
                        type: object
                        description: Keys are LinkedIn profile URLs.
                        additionalProperties:
                          type: object
                          properties:
                            emails:
                              type: array
                              items:
                                type: string
                                format: email
                            personal_emails:
                              type: array
                              items:
                                type: string
                                format: email
                            work_emails:
                              type: array
                              items:
                                type: string
                                format: email
                            phones:
                              type: array
                              items:
                                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/people/search:
    post:
      summary: People Search
      description: >-
        Search for profiles matching various criteria including name, job title, skills, education, location, company,
        and more.
      operationId: searchPeople
      tags:
        - People Search API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Page number (default: 1)'
                  minimum: 1
                  default: 1
                page_size:
                  type: integer
                  description: >-
                    Maximum number of profiles to return per page. When not provided, 25 profiles are returned. Search
                    credits are charged only for the number of profiles returned.
                  minimum: 1
                  maximum: 25
                  default: 25
                name:
                  type: string
                  description: Name of the profile
                job_title:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of job titles. Supports boolean operators (AND, OR, NOT). Operators must be capitalized.
                exclude_job_titles:
                  type: array
                  items:
                    type: string
                  description: Array of job titles to exclude.
                current_titles_only:
                  type: boolean
                  default: true
                  description: 'If false, matches current or past job titles.'
                include_related_job_titles:
                  type: boolean
                  default: false
                  description: Include related job titles in results.
                match_experience:
                  type: string
                  enum:
                    - current
                    - past
                    - both
                  default: current
                  description: Ensures job_title and company match in the same experience entry.
                job_function:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: 'Filter by job function (e.g., Engineering, Marketing, Sales).'
                seniority:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: 'Filter by seniority level (e.g., Manager, Vice President).'
                skills:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of skills. Supports boolean operators (AND, OR, NOT). Operators must be capitalized.
                languages:
                  type: array
                  maxItems: 50
                  items:
                    type: object
                    required:
                      - language
                    properties:
                      language:
                        type: string
                      proficiency:
                        type: array
                        items:
                          type: string
                education:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of schools/degrees. Supports boolean operators (AND, OR, NOT). Operators must be capitalized.
                educations:
                  type: array
                  maxItems: 50
                  items:
                    type: object
                    properties:
                      school_name:
                        type: string
                      field_of_study:
                        type: string
                      location:
                        type: string
                location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                location_radius:
                  type: integer
                  minimum: 1
                  maximum: 500
                  description: Search radius in miles. Only works when location is a city/area.
                current_work_location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Filter profiles currently working in these locations.
                past_work_location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Filter profiles who previously worked in these locations.
                company:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                exclude_companies:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of company names to exclude. Scoped by exclude_companies_filter; default scope is both (current and past) and does not inherit company_filter.
                exclude_companies_filter:
                  type: string
                  enum:
                    - current
                    - past
                    - both
                  default: both
                  description: When exclude_companies is set, controls whether exclusions apply to current employer, past roles only, or both. Independent of company_filter.
                company_filter:
                  type: string
                  enum:
                    - current
                    - past
                    - past_only
                    - both
                  default: current
                  description: past_only returns profiles with the company in past experience but not as their current employer.
                current_company_only:
                  type: boolean
                  default: true
                domain:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                industry:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of industries. Prefix a value with NOT to exclude it (e.g. "NOT Computer Software"). AND and OR are not supported for industry.
                keyword:
                  type: string
                  description: Keyword present anywhere in the profile. Supports boolean operators (AND, OR, NOT). Operators must be capitalized.
                company_size:
                  type: array
                  items:
                    type: string
                  maxItems: 8
                  description: 'Array of company size ranges (e.g., ''1_10'', ''11_50'', ''51_200'', ''201_500'', ''501_1000'', ''1001_5000'', ''5001_10000'', ''10001'').'
                years_of_experience:
                  type: array
                  items:
                    type: string
                  maxItems: 20
                  description: 'Array of experience ranges (e.g., ''1_2'', ''3_5'', ''6_10'', ''10'').'
                years_in_current_role:
                  type: array
                  items:
                    type: string
                  maxItems: 20
                  description: 'Array of years-in-role ranges (e.g., ''1_2'', ''3_5''). Cannot be used with recently_changed_jobs.'
                recently_changed_jobs:
                  type: boolean
                  default: false
                  description: 'If true, returns profiles whose current job started within the last 3 calendar months. Cannot be used with years_in_current_role.'
                data_types:
                  type: array
                  items:
                    type: string
                    enum:
                      - personal_email
                      - work_email
                      - phone
                  description: Only return profiles that have at least one of these contact data types.
                reveal_info:
                  type: boolean
                  default: false
                  description: 'If true, contact_info is populated with emails/phones and credits are charged.'
                detailed_experience:
                  type: boolean
                  default: false
                  description: 'If true, experience returns structured objects instead of strings.'
                detailed_education:
                  type: boolean
                  default: false
                  description: 'If true, education returns structured objects instead of strings.'
                output_fields:
                  type: array
                  items:
                    type: string
                    enum:
                      - li_vanity
                      - full_name
                      - title
                      - headline
                      - company
                      - company.name
                      - company.website
                      - company.headquarter
                      - company.domain
                      - company.size
                      - location
                      - industry
                      - experience
                      - education
                      - skills
                      - profile_picture_url
                  maxItems: 16
                  description: Limit response fields to specified list.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  metadata:
                    $ref: '#/components/schemas/SearchMetadata'
                  profiles:
                    oneOf:
                      - type: object
                        additionalProperties:
                          $ref: '#/components/schemas/SearchProfileResult'
                        description: Keys are LinkedIn profile URLs.
                      - type: array
                        maxItems: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/count:
    post:
      summary: People Count
      description: >-
        Get the total count of profiles matching the search criteria. Accepts the same filter parameters as People
        Search (e.g., job_title, company, location, skills, etc.). The page, data_types, and reveal_info parameters
        are accepted but ignored. Does not consume credits.
      operationId: countPeople
      tags:
        - People Search API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Accepts the same filter parameters as People Search API. See People Search for the full list of
                supported filter fields.
              properties:
                name:
                  type: string
                job_title:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                exclude_job_titles:
                  type: array
                  items:
                    type: string
                current_titles_only:
                  type: boolean
                include_related_job_titles:
                  type: boolean
                match_experience:
                  type: string
                  enum:
                    - current
                    - past
                    - both
                job_function:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                seniority:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                skills:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                languages:
                  type: array
                  maxItems: 50
                  items:
                    type: object
                    required:
                      - language
                    properties:
                      language:
                        type: string
                      proficiency:
                        type: array
                        items:
                          type: string
                education:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                educations:
                  type: array
                  maxItems: 50
                  items:
                    type: object
                    properties:
                      school_name:
                        type: string
                      field_of_study:
                        type: string
                      location:
                        type: string
                location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                location_radius:
                  type: integer
                  minimum: 1
                  maximum: 500
                current_work_location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                past_work_location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                company:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                exclude_companies:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of company names to exclude. Scoped by exclude_companies_filter; default scope is both (current and past) and does not inherit company_filter.
                exclude_companies_filter:
                  type: string
                  enum:
                    - current
                    - past
                    - both
                  default: both
                  description: When exclude_companies is set, controls whether exclusions apply to current employer, past roles only, or both. Independent of company_filter.
                company_filter:
                  type: string
                  enum:
                    - current
                    - past
                    - past_only
                    - both
                  default: current
                  description: past_only returns profiles with the company in past experience but not as their current employer.
                current_company_only:
                  type: boolean
                domain:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                industry:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                  description: Array of industries. Prefix a value with NOT to exclude it (e.g. "NOT Computer Software"). AND and OR are not supported for industry.
                keyword:
                  type: string
                company_size:
                  type: array
                  items:
                    type: string
                  maxItems: 8
                years_of_experience:
                  type: array
                  items:
                    type: string
                  maxItems: 20
                years_in_current_role:
                  type: array
                  items:
                    type: string
                  maxItems: 20
                  description: 'Array of years-in-role ranges (e.g., ''1_2'', ''3_5''). Cannot be used with recently_changed_jobs.'
                recently_changed_jobs:
                  type: boolean
                  default: false
                  description: 'If true, returns profiles whose current job started within the last 3 calendar months. Cannot be used with years_in_current_role.'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  total_results:
                    type: integer
                  estimated_personal_emails:
                    type: integer
                    description: Estimated number of profiles with a personal email.
                  estimated_work_emails:
                    type: integer
                    description: Estimated number of profiles with a work email.
                  estimated_phones:
                    type: integer
                    description: Estimated number of profiles with a phone number.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/decision-makers:
    get:
      summary: Decision Makers
      description: >-
        Get profiles of key decision makers within a specified company. At least one of linkedin_url, domain, or name is
        required.
      operationId: getDecisionMakers
      tags:
        - Decision Makers API
      parameters:
        - name: linkedin_url
          in: query
          required: false
          description: 'Company LinkedIn URL (e.g. https://linkedin.com/company/contactout).'
          schema:
            type: string
            format: uri
        - name: domain
          in: query
          required: false
          description: Company domain (e.g. example.com).
          schema:
            type: string
        - name: name
          in: query
          required: false
          description: Company name.
          schema:
            type: string
        - name: page
          in: query
          required: false
          description: 'Page number (default: 1)'
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: reveal_info
          in: query
          required: false
          description: 'If true, contact_info is populated with emails/phones and credits are charged.'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  metadata:
                    $ref: '#/components/schemas/SearchMetadata'
                  profiles:
                    type: object
                    additionalProperties:
                      $ref: '#/components/schemas/SearchProfileResult'
                    description: Keys are LinkedIn profile URLs.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /v1/company/search:
    post:
      summary: Company Search
      description: >-
        Search for company profiles matching various criteria including name, domain, size, location, industry, revenue,
        and year founded.
      operationId: searchCompanies
      tags:
        - Company Search API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Page number (default: 1)'
                  minimum: 1
                  default: 1
                linkedin_url:
                  type: array
                  items:
                    type: string
                  maxItems: 25
                  description: Array of company LinkedIn URLs. Cannot be combined with other filters.
                name:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                domain:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                size:
                  type: array
                  items:
                    type: string
                  description: 'Company size ranges (e.g., ''1_10'', ''11_50'').'
                hq_only:
                  type: boolean
                  description: Filter by headquarters location only.
                location:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                industry:
                  type: array
                  items:
                    type: string
                  maxItems: 50
                min_revenue:
                  type: integer
                max_revenue:
                  type: integer
                year_founded_from:
                  type: integer
                  minimum: 1985
                  description: Minimum year founded.
                year_founded_to:
                  type: integer
                  description: Maximum year founded. Must be >= year_founded_from.
            example:
              page: 1
              name:
                - ContactOut
              location:
                - United States
              size:
                - '1_10'
                - '11_50'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  metadata:
                    $ref: '#/components/schemas/SearchMetadata'
                  companies:
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanySearchResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/domain/enrich:
    post:
      summary: Company Information from Domains
      description: Get company information based on given domain names (up to 30 per request).
      operationId: enrichDomains
      tags:
        - Company Information API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - domains
              properties:
                domains:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 30
                  description: 'Array of domain names (e.g., ''example.com'').'
            example:
              domains:
                - contactout.com
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  companies:
                    type: object
                    description: 'Object keyed by domain name. Each value is the company data for that domain.'
                    additionalProperties:
                      type: object
                      properties:
                        li_vanity:
                          type: string
                        name:
                          type: string
                        domain:
                          type: string
                        description:
                          type: string
                        website:
                          type: string
                          format: uri
                        logo_url:
                          type: string
                          format: uri
                        type:
                          type: string
                        headquarter:
                          type: string
                        country:
                          type: string
                        size:
                          type: integer
                        founded_at:
                          type: integer
                        locations:
                          type: array
                          items:
                            $ref: '#/components/schemas/LocationObject'
                        industry:
                          type: string
                        specialties:
                          type: array
                          items:
                            type: string
                        revenue:
                          type: string
                          description: Revenue as a formatted string (e.g., "$10M - $50M")
                          nullable: true
                        employees:
                          type: integer
                        followers:
                          type: integer
                        funding:
                          type: object
                          nullable: true
                          properties:
                            total_funding_usd:
                              type: number
                            funding_status:
                              type: string
                            latest_date:
                              type: string
                            number_of_funding_rounds:
                              type: integer
                            rounds:
                              type: array
                              items:
                                $ref: '#/components/schemas/FundingRound'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/email/verify:
    get:
      summary: Single Email Verification
      description: >-
        Verify the deliverability of a single email address. Returns: valid, invalid, accept_all, disposable, or
        unknown.
      operationId: verifyEmail
      tags:
        - Email Verifier API
      parameters:
        - name: email
          in: query
          required: true
          schema:
            type: string
            format: email
          example: foo@bar.com
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  data:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - valid
                          - invalid
                          - accept_all
                          - disposable
                          - unknown
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/email/verify/batch:
    post:
      summary: Bulk Email Verification
      description: Verify deliverability for up to 100 email addresses asynchronously. Returns a job_id for tracking.
      operationId: bulkVerifyEmails
      tags:
        - Email Verifier API
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - emails
              properties:
                emails:
                  type: array
                  items:
                    type: string
                    format: email
                  minItems: 1
                  maxItems: 100
                  description: Array of email addresses to verify (max 100).
                callback_url:
                  type: string
                  format: uri
                  description: Optional URL to POST results to when the job completes.
      responses:
        '200':
          description: Job queued
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: QUEUED
                  job_id:
                    type: string
                    format: uuid
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  '/v1/email/verify/batch/{job_id}':
    get:
      summary: Get Bulk Email Verification Results
      description: Retrieve results of a bulk email verification job by its ID.
      operationId: getBulkEmailVerifyResults
      tags:
        - Email Verifier API
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Verification results
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        format: uuid
                      status:
                        type: string
                        example: DONE
                      result:
                        type: object
                        additionalProperties:
                          type: string
                          enum:
                            - valid
                            - invalid
                            - accept_all
                            - disposable
                            - unknown
                        description: 'Keys are email addresses, values are verification status.'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/people/person:
    get:
      summary: Email to LinkedIn Profile
      description: Get the LinkedIn profile URL for a given email address.
      operationId: emailToLinkedIn
      tags:
        - Email to LinkedIn API
      parameters:
        - name: email
          in: query
          required: true
          schema:
            type: string
            format: email
          example: terry@gmail.com
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    properties:
                      email:
                        type: string
                        format: email
                      linkedin:
                        type: string
                        format: uri
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/linkedin/personal_email_status:
    get:
      summary: Personal Email Checker
      description: >-
        Check if a personal email is available for a LinkedIn profile. Does not consume credits. Only available to paid
        users.
      operationId: checkPersonalEmail
      tags:
        - Contact Checker API
      parameters:
        - name: profile
          in: query
          required: true
          description: Fully formed LinkedIn profile URL.
          schema:
            type: string
            format: uri
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    properties:
                      email:
                        type: boolean
                        description: true if personal email is available
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/people/linkedin/work_email_status:
    get:
      summary: Work Email Checker
      description: >-
        Check if a work email is available for a LinkedIn profile. Does not consume credits. Only available to paid
        users.
      operationId: checkWorkEmail
      tags:
        - Contact Checker API
      parameters:
        - name: profile
          in: query
          required: true
          description: Fully formed LinkedIn profile URL.
          schema:
            type: string
            format: uri
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    properties:
                      email:
                        type: boolean
                        description: true if work email is available
                      email_status:
                        type: string
                        nullable: true
                        enum:
                          - Verified
                          - Unverified
                          - null
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/people/linkedin/phone_status:
    get:
      summary: Phone Number Checker
      description: >-
        Check if a phone number is available for a LinkedIn profile. Does not consume credits. Only available to paid
        users.
      operationId: checkPhone
      tags:
        - Contact Checker API
      parameters:
        - name: profile
          in: query
          required: true
          description: Fully formed LinkedIn profile URL.
          schema:
            type: string
            format: uri
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                  profile:
                    type: object
                    properties:
                      phone:
                        type: boolean
                        description: true if phone number is available
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/stats:
    get:
      summary: API Usage Statistics
      description: >-
        Get your API usage statistics for a given billing period. Returns email, phone, and search credit usage
        along with quotas and remaining credits.
      operationId: getStats
      tags:
        - Account API
      parameters:
        - name: period
          in: query
          required: false
          description: >-
            Billing period to retrieve stats for (YYYY-MM-DD format). Defaults to current month if not provided.
            Only the year and month are used; the day is ignored.
          schema:
            type: string
            format: date
          example: '2024-01-01'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: integer
                    example: 200
                  period:
                    type: object
                    description: The billing period for the returned stats
                    properties:
                      start:
                        type: string
                        format: date
                        description: Start of the billing period
                        example: '2024-01-01'
                      end:
                        type: string
                        format: date
                        description: End of the billing period (exclusive)
                        example: '2024-02-01'
                  usage:
                    type: object
                    description: >-
                      Credit usage statistics. Fields vary based on account type (prepaid vs postpaid)
                      and available features.
                    properties:
                      count:
                        type: integer
                        description: Number of email credits used this period
                        example: 150
                      quota:
                        type: integer
                        description: Total email credits available (monthly quota or prepaid balance)
                        example: 1000
                      remaining:
                        type: integer
                        description: Email credits remaining (postpaid accounts only)
                        example: 850
                      over_quota:
                        type: integer
                        description: Email credits used over quota (postpaid accounts only)
                        example: 0
                      phone_count:
                        type: integer
                        description: Number of phone credits used this period
                        example: 25
                      phone_quota:
                        type: integer
                        description: Total phone credits available
                        example: 100
                      phone_remaining:
                        type: integer
                        description: Phone credits remaining (postpaid accounts only)
                        example: 75
                      phone_over_quota:
                        type: integer
                        description: Phone credits used over quota (postpaid accounts only)
                        example: 0
                      search_count:
                        type: integer
                        description: Number of search credits used this period
                        example: 50
                      search_quota:
                        oneOf:
                          - type: integer
                          - type: string
                            enum:
                              - unlimited
                        description: Total search credits available, or "unlimited"
                        example: 500
                      search_remaining:
                        type: integer
                        description: Search credits remaining (postpaid accounts only, not present if unlimited)
                        example: 450
                      search_over_quota:
                        type: integer
                        description: Search credits used over quota (postpaid accounts only)
                        example: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
tags:
  - name: LinkedIn Profile API
    description: Enrich profiles from LinkedIn URL or email address
  - name: Contact Info API
    description: 'Retrieve contact details (emails, phone) for LinkedIn profiles'
  - name: People Search API
    description: Search for people profiles by various criteria
  - name: Decision Makers API
    description: Find key decision makers at a company
  - name: Company Search API
    description: Search for company profiles
  - name: Company Information API
    description: Enrich company data from domains
  - name: Email Verifier API
    description: Verify email deliverability
  - name: Email to LinkedIn API
    description: Convert email address to LinkedIn profile URL
  - name: Contact Checker API
    description: Check contact data availability without consuming credits
  - name: Account API
    description: Account information and usage statistics
