openapi: 3.1.0
info:
  title: Reverse Contact API
  version: 1.0.0
  description: "Public Reverse Contact API V2 for people and company enrichment, search, fetch, contact, Lists, and usage. Authenticate with Authorization: Bearer rc_... using an API key from the developer dashboard, or Bearer oat_... using an OAuth access token. Every successful response uses a consistent envelope: success, data, error, quotas, metadata. Search endpoints nest results under data.data with pagination in data.metadata. Enrich endpoints nest the primary entity under data.person or data.company. Async live endpoints acknowledge with data.webhookId; poll GET /v2/webhooks/{webhookId}."
  contact:
    name: Reverse Contact support
    email: support@reversecontact.com
    url: https://docs.reversecontact.com/
  license:
    name: Proprietary
    url: https://reversecontact.com
servers:
  - url: https://api.reversecontact.com
    description: Production
tags:
  - name: Enrich
    description: Synchronous people and company enrichment
  - name: Search
    description: Filter-based search over people and companies
  - name: Fetch
    description: Profile fetch, live refresh, and free profile status checks
  - name: Contact
    description: "Asynchronous email and phone number discovery: poll the job or receive a webhook"
  - name: Webhooks
    description: Polling for async job results
  - name: Usage
    description: Credit balance and rate limit status
  - name: Lists
    description: Workspace Lists and identity-backed members
  - name: Bulk
    description: Bulk enrich up to 25,000 people in one call, and the history of every background job of the workspace
paths:
  /v2/enrich/persons:
    post:
      operationId: enrichPerson
      summary: Enrich person
      description: "Synchronously resolves a person from any combination of email, first name, last name, and company domain/name. Returns the full profile of the matched person nested under data.person, with the full profiles of the alternative candidates under data.alternativePersons and data.isFullProfile telling whether the full profile could be assembled. Credits: 2 when a person is found, full profile included. 404 is free."
      tags:
        - Enrich
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Person enriched successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/EnrichPersonData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EnrichPersonBody"
      externalDocs:
        description: Enrich profile
        url: https://docs.reversecontact.com/endpoints/enrich-person
      x-credits:
        amount: 2
        per: match
        summary: 2 credits when a person is found, full profile included. A 404 is free.
      x-mode: sync
      x-availability: available
  /v2/enrich/companies:
    post:
      operationId: enrichCompany
      summary: Enrich company
      description: "Synchronously resolves a company from a domain. Returns the full profile of the matched company nested under data.company, with data.isFullProfile telling whether the full profile could be assembled. Credits: 2 when a company is found, full profile included. 404 is free."
      tags:
        - Enrich
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Company enriched successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/EnrichCompanyData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EnrichCompanyBody"
      externalDocs:
        description: Enrich company
        url: https://docs.reversecontact.com/endpoints/enrich-company
      x-credits:
        amount: 2
        per: match
        summary: 2 credits when a company is found, full profile included. A 404 is free.
      x-mode: sync
      x-availability: available
  /v2/search/people:
    post:
      operationId: searchPeople
      summary: Search people
      description: "Search the Reverse Contact database for people matching filters (AND-combined) and return full profiles. Pass metadata.nextCursor back as cursor for the next page. perPage defaults to 25 and is capped at 100. Results are at data.data and cursor metadata at data.metadata. Filters are strictly validated: unknown fields, blank values and values outside a closed vocabulary return 422 with the offending field and suggestions, and cost 0 credits. Credits: 1 per profile delivered after privacy filtering. Zero results are free."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People search results
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchPeopleData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchPeopleBody"
      externalDocs:
        description: People search
        url: https://docs.reversecontact.com/endpoints/search-people
      x-credits:
        amount: 1
        per: profile
        summary: 1 credit per profile delivered. A page with no profile is free.
      x-mode: sync
      x-availability: available
  /v2/search/people/prompt:
    post:
      operationId: searchPeopleByPrompt
      summary: Agentic Search
      description: "Describe the people to find in plain language: the prompt is read into People Search filters, then the matching full profiles are returned as a People Search page. The filters applied and anything the prompt asked for that no filter covers are returned at data.interpretation. Pass metadata.nextCursor back as cursor with the same prompt for the next page: a prompt keeps the filters it was read into for 24 hours, so every page runs on the same filters. A cursor sent with filters other than the ones that produced it returns 400 and costs 0 credits. Send filters only through the prompt; to set them explicitly, use /v2/search/people. A prompt no filter can be read from returns 422 NO_FILTERS_INTERPRETED and costs 0 credits. Credits: 1 per page for the search itself, even when no profile matches, plus 1 per profile delivered. A prompt refused before the search costs 0."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People search results with the interpreted filters
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchPeoplePromptData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchPeoplePromptBody"
      externalDocs:
        description: Agentic Search
        url: https://docs.reversecontact.com/endpoints/search-people-prompt
      x-credits:
        amount: 1
        per: page
        plus:
          amount: 1
          per: profile
        summary: 1 credit per page for the search, plus 1 credit per profile delivered.
      x-mode: sync
      x-availability: available
  /v2/search/people/lookalike:
    post:
      operationId: searchPeopleLookalike
      summary: People lookalike
      description: "Find the people who look like one seed profile, given by Social profile URL or Reverse Contact person id. The search is built from the seed: its current function and sub-function, seniority and location. The seed is never among the results. Returns full profiles as a People Search page: results at data.data and cursor metadata at data.metadata. Pass metadata.nextCursor back as cursor with the same seed for the next page. Search filters are refused with 422 LOOKALIKE_FILTERS_NOT_SUPPORTED and cost 0 credits. A seed not yet in the search index returns 404 and costs 0 credits. Credits: 1 per profile delivered. A page with no profile costs 0."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People who look like the seed
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchPeopleData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchPeopleLookalikeBody"
      externalDocs:
        description: People lookalike
        url: https://docs.reversecontact.com/endpoints/search-people-lookalike
      x-credits:
        amount: 1
        per: profile
        summary: 1 credit per profile delivered. A page with no profile is free.
      x-mode: sync
      x-availability: available
  /v2/search/people/count:
    post:
      operationId: countPeople
      summary: Count people
      description: "Count profiles matching the same filters as People Search without returning profiles. Credits: 0 (free)."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People count
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchPeopleCountData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchPeopleCountBody"
      externalDocs:
        description: People search count
        url: https://docs.reversecontact.com/endpoints/search-people-count
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/search/people/auto-suggestion:
    post:
      operationId: searchPeopleAutoSuggestion
      summary: People auto-suggestion
      description: "Returns the skills that start with what someone has typed, most common first, to build a search box in your own product. Credits: 0 (free)."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People auto-suggestion
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchPeopleAutoSuggestionData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchPeopleAutoSuggestionBody"
      externalDocs:
        description: People auto-suggestion
        url: https://docs.reversecontact.com/endpoints/search-people-auto-suggestion
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/search/organizations:
    post:
      operationId: searchOrganizations
      summary: Search organizations
      description: "Search the Reverse Contact database for organizations matching filters (AND-combined) and return full organization profiles. Pass metadata.nextCursor back as cursor for the next page. perPage defaults to 25 and is capped at 100. Results are at data.data and cursor metadata at data.metadata. Filters are strictly validated: unknown fields, blank values and values outside a closed vocabulary return 422 with the offending field and suggestions, and cost 0 credits. Credits: 1 per organization delivered. A page with no organization costs 0."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Organization search results
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchOrganizationsData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchOrganizationsBody"
      externalDocs:
        description: Company search
        url: https://docs.reversecontact.com/endpoints/search-companies
      x-credits:
        amount: 1
        per: profile
        summary: 1 credit per company delivered. A page with no company is free.
      x-mode: sync
      x-availability: available
  /v2/search/organizations/prompt:
    post:
      operationId: searchOrganizationsByPrompt
      summary: Agentic Organization Search
      description: "Describe the organizations to find in plain language: the prompt is read into Organization Search filters, then the matching full organization profiles are returned as an Organization Search page. The filters applied and anything the prompt asked for that no filter covers are returned at data.interpretation. Pass metadata.nextCursor back as cursor with the same prompt for the next page: a prompt keeps the filters it was read into for 24 hours, so every page runs on the same filters. Send filters only through the prompt; to set them explicitly, use /v2/search/organizations. A prompt no filter can be read from returns 422 NO_FILTERS_INTERPRETED and costs 0 credits. Credits: 1 per page for the search itself, even when no organization matches, plus 1 per organization delivered. A prompt refused before the search costs 0."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Organization search results with the interpreted filters
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchOrganizationsPromptData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchOrganizationsPromptBody"
      externalDocs:
        description: Agentic Company Search
        url: https://docs.reversecontact.com/endpoints/search-companies-prompt
      x-credits:
        amount: 1
        per: page
        plus:
          amount: 1
          per: profile
        summary: 1 credit per page for the search, plus 1 credit per company delivered.
      x-mode: sync
      x-availability: available
  /v2/search/organizations/count:
    post:
      operationId: countOrganizations
      summary: Count organizations
      description: "Count organizations matching the same filters as Organization Search without returning profiles. Credits: 0 (free)."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Organization count
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchOrganizationsCountData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SearchOrganizationsCountBody"
      externalDocs:
        description: Company search count
        url: https://docs.reversecontact.com/endpoints/search-companies-count
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/search/people/available-fields:
    get:
      operationId: searchPeopleAvailableFields
      summary: People search available fields
      description: "Returns metadata for every filter accepted by people search. Credits: 0 (free)."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: People search field catalog
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchFieldsData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      externalDocs:
        description: People search available fields
        url: https://docs.reversecontact.com/endpoints/search-people-available-fields
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/search/organizations/available-fields:
    get:
      operationId: searchOrganizationsAvailableFields
      summary: Organization search available fields
      description: "Returns metadata for every filter accepted by organization search. Credits: 0 (free)."
      tags:
        - Search
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Organization search field catalog
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/SearchFieldsData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      externalDocs:
        description: Company search available fields
        url: https://docs.reversecontact.com/endpoints/search-companies-available-fields
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/fetch/persons:
    post:
      operationId: fetchPerson
      summary: Person profile
      description: "Retrieves a full person profile from cache using a Social URL or Reverse Contact person id. Credits: 1 on cache hit. 0 on 404 cache miss."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Person profile
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/PersonFull"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UrlOrIdPersonBody"
      externalDocs:
        description: Person profile
        url: https://docs.reversecontact.com/endpoints/fetch-profile
      x-credits:
        amount: 1
        per: match
        summary: 1 credit when the profile is found in the cache. A 404 is free.
      x-mode: sync
      x-availability: available
  /v2/fetch/persons/live:
    post:
      operationId: livePerson
      summary: Person profile live
      description: "Triggers a fresh scrape of a person profile from either a Social URL or Reverse Contact person id. Provide exactly one; replies immediately with a webhookId. Retrieve the result via GET /v2/webhooks/{webhookId} or an optional webhookUrl callback. Credits: 2 (live)."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Live person job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/JobAckData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LivePersonBody"
      externalDocs:
        description: Person profile live
        url: https://docs.reversecontact.com/endpoints/fetch-profile-live
      x-credits:
        amount: 2
        per: request
        summary: 2 credits per request, consumed when the job is created.
      x-mode: async
      x-availability: available
  /v2/fetch/persons/check:
    post:
      operationId: checkPerson
      summary: Person profile status
      description: "Checks whether a person profile exists and when it was last updated, without returning the full profile. Credits: 0. Still requires a non-empty credit balance (returns 402 NO_CREDITS when empty)."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Person availability and freshness
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/CheckPersonData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UrlOrIdPersonBody"
      externalDocs:
        description: Person profile status
        url: https://docs.reversecontact.com/endpoints/check-person
      x-credits:
        amount: 0
        per: request
        summary: "Free. Needs at least 2 credits in the workspace: below that, 402 NO_CREDITS."
      x-mode: sync
      x-availability: available
  /v2/fetch/companies:
    post:
      operationId: fetchCompany
      summary: Company profile
      description: "Retrieves a full company profile from cache using a Social URL or Reverse Contact company id. Credits: 1 on cache hit. 0 on 404 cache miss."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Company profile
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/CompanyFull"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UrlOrIdCompanyBody"
      externalDocs:
        description: Company profile
        url: https://docs.reversecontact.com/endpoints/fetch-company
      x-credits:
        amount: 1
        per: match
        summary: 1 credit when the company is found in the cache. A 404 is free.
      x-mode: sync
      x-availability: available
  /v2/fetch/companies/live:
    post:
      operationId: liveCompany
      summary: Company profile live
      description: "Triggers a fresh scrape of a company profile from either a Social URL or Reverse Contact company id. Provide exactly one; replies immediately with a webhookId. Retrieve the result via GET /v2/webhooks/{webhookId} or an optional webhookUrl callback. Credits: 2 (live)."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Live company job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/JobAckData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LiveCompanyBody"
      externalDocs:
        description: Company profile live
        url: https://docs.reversecontact.com/endpoints/fetch-company-live
      x-credits:
        amount: 2
        per: request
        summary: 2 credits per request, consumed when the job is created.
      x-mode: async
      x-availability: available
  /v2/fetch/companies/check:
    post:
      operationId: checkCompany
      summary: Company profile status
      description: "Checks whether a company profile exists and when it was last updated, without returning the full profile. Credits: 0. Still requires a non-empty credit balance (returns 402 NO_CREDITS when empty)."
      tags:
        - Fetch
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Company availability and freshness
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/CheckCompanyData"
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UrlOrIdCompanyBody"
      externalDocs:
        description: Company profile status
        url: https://docs.reversecontact.com/endpoints/check-company
      x-credits:
        amount: 0
        per: request
        summary: "Free. Needs at least 2 credits in the workspace: below that, 402 NO_CREDITS."
      x-mode: sync
      x-availability: available
  /v2/contact/email:
    post:
      operationId: findContactEmail
      summary: Find contact email
      description: "Asynchronously finds email addresses from a Social profile URL, a Reverse Contact person id (prs_...), or a person name with company domain. emailType chooses professional (default), personal, or either. The request is acknowledged with data.webhookId and data.pollUrl. Poll GET /v2/webhooks/{webhookId} for the email array in data.result, or receive it on the optional webhookUrl callback. Credits: billed on the emails found, not on emailType: 3 for a professional email, 5 for a personal one, so an any lookup costs 3, 5 or 8 (8 only when it finds both); 0 when no email is found. The request debits 3 (5 for personal and any) and the result settles the difference."
      tags:
        - Contact
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Contact email lookup job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/ContactEmailAckData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
            Idempotent-Replayed:
              description: true when the response is the stored answer of an earlier request with the same Idempotency-Key. Nothing was started or debited.
              schema:
                type: string
                const: "true"
        "400":
          description: Invalid JSON body or endpoint-specific business validation, or an Idempotency-Key that is not 1 to 255 printable ASCII characters (INVALID_IDEMPOTENCY_KEY)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "IDEMPOTENCY_KEY_IN_USE: a request with the same Idempotency-Key is still being processed. Retry after the Retry-After seconds to receive its response."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain, or an Idempotency-Key already used with a different body (IDEMPOTENCY_KEY_REUSED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactEmailBody"
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            description: "Optional. A key you choose (1 to 255 printable ASCII characters, a UUID for example) that makes the request safe to retry. For 24 hours, a request with the same key and the same body returns the first response with Idempotent-Replayed: true, without starting another lookup or debiting credits."
            minLength: 1
            maxLength: 255
      externalDocs:
        description: Find Email
        url: https://docs.reversecontact.com/endpoints/contact-email
      x-credits:
        amount: 3
        per: match
        summary: "3 credits when a professional email is found, 5 for a personal one, whatever the emailType: an any lookup costs 3, 5 or 8 (8 when it finds both). A lookup that finds none is free."
      x-mode: async
      x-availability: available
  /v2/contact/email/verify:
    post:
      operationId: verifyContactEmail
      summary: Verify an email address
      description: "Asynchronously checks whether an email address can receive mail and returns valid, risky, invalid or unknown. The request is acknowledged with data.webhookId and data.pollUrl. Poll GET /v2/webhooks/{webhookId} for the verdict in data.result (ContactEmailVerifyResult), or receive it on the optional webhookUrl callback. Credits: 1 per verdict, whatever it says. A check that fails is refunded."
      tags:
        - Contact
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Email verification job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/ContactEmailVerifyAckData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
            Idempotent-Replayed:
              description: true when the response is the stored answer of an earlier request with the same Idempotency-Key. Nothing was started or debited.
              schema:
                type: string
                const: "true"
        "400":
          description: Invalid JSON body or endpoint-specific business validation, or an Idempotency-Key that is not 1 to 255 printable ASCII characters (INVALID_IDEMPOTENCY_KEY)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "IDEMPOTENCY_KEY_IN_USE: a request with the same Idempotency-Key is still being processed. Retry after the Retry-After seconds to receive its response."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain, or an Idempotency-Key already used with a different body (IDEMPOTENCY_KEY_REUSED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactEmailVerifyBody"
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            description: "Optional. A key you choose (1 to 255 printable ASCII characters, a UUID for example) that makes the request safe to retry. For 24 hours, a request with the same key and the same body returns the first response with Idempotent-Replayed: true, without starting another lookup or debiting credits."
            minLength: 1
            maxLength: 255
      externalDocs:
        description: Verify Email
        url: https://docs.reversecontact.com/endpoints/contact-email-verify
      x-credits:
        amount: 1
        per: request
        summary: 1 credit per verdict, whatever it says. A check that fails is refunded.
      x-mode: async
      x-availability: available
  /v2/contact/phone:
    post:
      operationId: findContactPhone
      summary: Find contact phone
      description: "Asynchronously finds phone numbers from a Social profile URL, a Reverse Contact person id (prs_...), or a person name with company domain. The request is acknowledged with data.webhookId and data.pollUrl. Poll GET /v2/webhooks/{webhookId} for the phone array in data.result, or receive it on the optional webhookUrl callback. Credits: 20 when a phone number is found, 0 when no phone number is found. Enabled by default; the endpoint returns 410 for a workspace without phone finding access."
      tags:
        - Contact
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Contact phone lookup job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/ContactPhoneAckData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
            Idempotent-Replayed:
              description: true when the response is the stored answer of an earlier request with the same Idempotency-Key. Nothing was started or debited.
              schema:
                type: string
                const: "true"
        "400":
          description: Invalid JSON body or endpoint-specific business validation, or an Idempotency-Key that is not 1 to 255 printable ASCII characters (INVALID_IDEMPOTENCY_KEY)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "IDEMPOTENCY_KEY_IN_USE: a request with the same Idempotency-Key is still being processed. Retry after the Retry-After seconds to receive its response."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "410":
          description: Contact phone finding is not enabled for this workspace.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    const: endpoint_unavailable
                  message:
                    type: string
                    description: Reason the endpoint is unavailable
                  alternative:
                    type: object
                    properties:
                      endpoint:
                        type: string
                        description: Suggested alternative endpoint
                      docs:
                        type: string
                        description: Documentation path for the alternative
                    required:
                      - endpoint
                      - docs
                    additionalProperties: false
                required:
                  - error
                  - message
                  - alternative
                additionalProperties: false
              example:
                error: endpoint_unavailable
                message: Phone finding is not enabled for this workspace.
                alternative:
                  endpoint: /v2/contact/email
                  docs: /docs/endpoints/contact-email
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain, or an Idempotency-Key already used with a different body (IDEMPOTENCY_KEY_REUSED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactPhoneBody"
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            description: "Optional. A key you choose (1 to 255 printable ASCII characters, a UUID for example) that makes the request safe to retry. For 24 hours, a request with the same key and the same body returns the first response with Idempotent-Replayed: true, without starting another lookup or debiting credits."
            minLength: 1
            maxLength: 255
      externalDocs:
        description: Find Phone
        url: https://docs.reversecontact.com/endpoints/contact-phone
      x-credits:
        amount: 20
        per: match
        summary: 20 credits when a phone number is found. A lookup that finds none is free.
      x-mode: async
      x-availability: available
  /v2/webhooks/{webhookId}:
    get:
      operationId: pollWebhook
      summary: Poll async job
      description: "Returns the status and result of an async job created by the live or contact endpoints. When status is succeeded, data.result contains the job result. With wait=N (0 to 20), the request is held up to N seconds while the job is running and answers as soon as the result is ready; it may also answer earlier with the job still in progress. While the job is not finished, the response carries Retry-After: 2; poll again no sooner than that. Credits: 0 (free). Does not increment per-minute rate limit counters."
      tags:
        - Webhooks
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Job status and optional result
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/PollWebhookData"
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
            description: Job identifier returned as webhookId
            format: uuid
        - name: wait
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 20
            default: 0
            description: "Long-poll: seconds to hold the request while the job is still running (0 to 20). Absent or 0 answers immediately. Out of range or not an integer: 422 VALIDATION_ERROR."
      externalDocs:
        description: Polling
        url: https://docs.reversecontact.com/guides/polling
      x-credits:
        amount: 0
        per: request
        summary: Free, and not counted in the per-minute rate limit.
      x-mode: sync
      x-availability: available
  /v2/lists:
    get:
      operationId: listLists
      summary: List Lists
      description: "Returns the workspace Lists with their member and Pending Intake counts, newest first. A page holds 200 Lists by default, the most a workspace can have; pass nextCursor back as cursor for the next page. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Workspace Lists
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              type: object
                              properties:
                                id:
                                  type: string
                                  description: List id
                                  format: uuid
                                name:
                                  type: string
                                  description: List name
                                entity:
                                  type: string
                                  enum:
                                    - persons
                                    - companies
                                memberCount:
                                  type: integer
                                  description: List Members
                                pendingIntakeCount:
                                  type: integer
                                  description: Not found lines kept as Pending Intake
                                revision:
                                  type: integer
                                  description: Revision, raised by every member change
                                archivedAt:
                                  anyOf:
                                    - type: string
                                      description: Archive date
                                      format: date-time
                                    - type: "null"
                                createdAt:
                                  type: string
                                  description: Creation date
                                  format: date-time
                                updatedAt:
                                  type: string
                                  description: Last update date
                                  format: date-time
                                originQuery:
                                  anyOf:
                                    - type: object
                                      additionalProperties: true
                                    - type: "null"
                                originLastFind:
                                  anyOf:
                                    - type: object
                                      additionalProperties: true
                                    - type: "null"
                              required:
                                - id
                                - name
                                - entity
                                - memberCount
                                - pendingIntakeCount
                              additionalProperties: false
                          nextCursor:
                            anyOf:
                              - type: string
                                description: Cursor of the next page, null on the last one
                              - type: "null"
                        required:
                          - items
                          - nextCursor
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: perPage
          in: query
          required: false
          schema:
            type: integer
            description: Lists per page (1-200, default 200)
            minimum: 1
            maximum: 200
            default: 200
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: "Opaque cursor: the nextCursor of the previous page, sent with the same filters. A malformed cursor, or one sent with other filters, is refused with 400."
      externalDocs:
        description: All Lists
        url: https://docs.reversecontact.com/endpoints/lists
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
    post:
      operationId: createList
      summary: Create a List
      description: 'Creates a people or companies List (never mixed; 200 Lists per workspace, 1 on a trial). Send an Idempotency-Key header to retry safely: the same key returns the List the first request created instead of a second "Name (2)". Credits: 0.'
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "201":
          description: List created, or the List this Idempotency-Key created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                            description: List id
                            format: uuid
                          name:
                            type: string
                            description: List name
                          entity:
                            type: string
                            enum:
                              - persons
                              - companies
                          memberCount:
                            type: integer
                            description: List Members
                          pendingIntakeCount:
                            type: integer
                            description: Not found lines kept as Pending Intake
                          revision:
                            type: integer
                            description: Revision, raised by every member change
                          archivedAt:
                            anyOf:
                              - type: string
                                description: Archive date
                                format: date-time
                              - type: "null"
                          createdAt:
                            type: string
                            description: Creation date
                            format: date-time
                          updatedAt:
                            type: string
                            description: Last update date
                            format: date-time
                          originQuery:
                            anyOf:
                              - type: object
                                additionalProperties: true
                              - type: "null"
                          originLastFind:
                            anyOf:
                              - type: object
                                additionalProperties: true
                              - type: "null"
                        required:
                          - id
                          - name
                          - entity
                          - memberCount
                          - pendingIntakeCount
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: LIST_LIMIT_REACHED (200 Lists, 1 on a trial) or IDEMPOTENCY_KEY_REUSED
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: List name
                  minLength: 1
                  maxLength: 200
                entity:
                  type: string
                  enum:
                    - persons
                    - companies
              required:
                - name
                - entity
              additionalProperties: false
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            description: "Your key for this creation (1 to 200 printable ASCII characters, no spaces). Reused for the other entity: 409 IDEMPOTENCY_KEY_REUSED."
            minLength: 1
            maxLength: 200
      externalDocs:
        description: Create a List
        url: https://docs.reversecontact.com/endpoints/list-create
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/lists/{listId}:
    get:
      operationId: getList
      summary: Get a List
      description: "Returns the List and one page of its rows: List Members (kind member) and Not found lines kept as Pending Intake (kind pending), ordered by added date. Pass nextCursor back as cursor, with the same kind, for the next page; a malformed cursor, or one sent with other filters, is refused with 400. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: List and one page of rows
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          list:
                            type: object
                            properties:
                              id:
                                type: string
                                description: List id
                                format: uuid
                              name:
                                type: string
                                description: List name
                              entity:
                                type: string
                                enum:
                                  - persons
                                  - companies
                              memberCount:
                                type: integer
                                description: List Members
                              pendingIntakeCount:
                                type: integer
                                description: Not found lines kept as Pending Intake
                              revision:
                                type: integer
                                description: Revision, raised by every member change
                              archivedAt:
                                anyOf:
                                  - type: string
                                    description: Archive date
                                    format: date-time
                                  - type: "null"
                              createdAt:
                                type: string
                                description: Creation date
                                format: date-time
                              updatedAt:
                                type: string
                                description: Last update date
                                format: date-time
                              originQuery:
                                anyOf:
                                  - type: object
                                    additionalProperties: true
                                  - type: "null"
                              originLastFind:
                                anyOf:
                                  - type: object
                                    additionalProperties: true
                                  - type: "null"
                            required:
                              - id
                              - name
                              - entity
                              - memberCount
                              - pendingIntakeCount
                            additionalProperties: false
                          members:
                            type: array
                            items:
                              anyOf:
                                - type: object
                                  properties:
                                    kind:
                                      type: string
                                      enum:
                                        - member
                                    id:
                                      type: string
                                      description: Member id
                                      format: uuid
                                    entityId:
                                      type: string
                                      description: Person or company id
                                    linkedinUrl:
                                      anyOf:
                                        - type: string
                                          description: Social URL
                                        - type: "null"
                                    status:
                                      type: string
                                      description: identified, profiled or enriched
                                    fields:
                                      type: object
                                      additionalProperties: true
                                      description: "Stored fields, as the List shows them: a value typed over a cell in the dashboard replaces the enriched one"
                                    addedAt:
                                      type: string
                                      description: Date the member was added
                                      format: date-time
                                    families:
                                      type: object
                                      additionalProperties: true
                                      description: "Per data family state: profile, company, contactEmail, contactPhone. A contact typed in the dashboard reads found with source manual"
                                    externalId:
                                      anyOf:
                                        - type: string
                                          description: Your identifier for this member, null when none was sent
                                        - type: "null"
                                  required:
                                    - kind
                                    - id
                                    - entityId
                                    - externalId
                                  additionalProperties: false
                                - type: object
                                  properties:
                                    kind:
                                      type: string
                                      enum:
                                        - pending
                                    id:
                                      type: string
                                      description: Pending Intake id
                                      format: uuid
                                    signal:
                                      type: object
                                      additionalProperties: true
                                      description: The Signal as sent
                                    source:
                                      type: string
                                      enum:
                                        - file
                                        - paste
                                    addedAt:
                                      type: string
                                      description: Date the line was kept
                                      format: date-time
                                    fields:
                                      type: object
                                      additionalProperties:
                                        type: string
                                      description: Values typed over the row in the dashboard, by column (name, headline, company, url, contactEmail...)
                                  additionalProperties: false
                          nextCursor:
                            anyOf:
                              - type: string
                                description: Cursor of the next page
                              - type: "null"
                        required:
                          - list
                          - members
                          - nextCursor
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
        - name: perPage
          in: query
          required: false
          schema:
            type: integer
            description: Rows per page (1-1000, default 100)
            minimum: 1
            maximum: 1000
            default: 100
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: "Opaque cursor: the nextCursor of the previous page, sent with the same filters. A malformed cursor, or one sent with other filters, is refused with 400."
        - name: kind
          in: query
          required: false
          schema:
            type: string
            enum:
              - all
              - members
              - pending
            default: all
            description: Row query. all mixes List Members and Pending Intake by added_at; members or pending restricts the server read.
      externalDocs:
        description: Get a List
        url: https://docs.reversecontact.com/endpoints/list
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
    delete:
      operationId: deleteList
      summary: Delete a List
      description: "Deletes the List, its members, their stored data and its Pending Intake. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: List deleted
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          deleted:
                            type: boolean
                            description: Always true
                        required:
                          - deleted
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "LIST_BUSY: an operation is still running on the List"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
      externalDocs:
        description: Delete a List
        url: https://docs.reversecontact.com/endpoints/list-delete
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/lists/{listId}/members:
    get:
      operationId: listListMembers
      summary: List members
      description: "Returns one page of List rows. Each row has kind member or pending (a Not found line kept as Pending Intake). Use kind=members for List Members only, kind=pending for Pending Intake only, or kind=all to mix both by added date. Pass nextCursor back as cursor, with the same filters, for the next page. With externalId, returns the members carrying that identifier of yours, paged the same way. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: List rows
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              anyOf:
                                - type: object
                                  properties:
                                    kind:
                                      type: string
                                      enum:
                                        - member
                                    id:
                                      type: string
                                      description: Member id
                                      format: uuid
                                    entityId:
                                      type: string
                                      description: Person or company id
                                    linkedinUrl:
                                      anyOf:
                                        - type: string
                                          description: Social URL
                                        - type: "null"
                                    status:
                                      type: string
                                      description: identified, profiled or enriched
                                    fields:
                                      type: object
                                      additionalProperties: true
                                      description: "Stored fields, as the List shows them: a value typed over a cell in the dashboard replaces the enriched one"
                                    addedAt:
                                      type: string
                                      description: Date the member was added
                                      format: date-time
                                    families:
                                      type: object
                                      additionalProperties: true
                                      description: "Per data family state: profile, company, contactEmail, contactPhone. A contact typed in the dashboard reads found with source manual"
                                    externalId:
                                      anyOf:
                                        - type: string
                                          description: Your identifier for this member, null when none was sent
                                        - type: "null"
                                  required:
                                    - kind
                                    - id
                                    - entityId
                                    - externalId
                                  additionalProperties: false
                                - type: object
                                  properties:
                                    kind:
                                      type: string
                                      enum:
                                        - pending
                                    id:
                                      type: string
                                      description: Pending Intake id
                                      format: uuid
                                    signal:
                                      type: object
                                      additionalProperties: true
                                      description: The Signal as sent
                                    source:
                                      type: string
                                      enum:
                                        - file
                                        - paste
                                    addedAt:
                                      type: string
                                      description: Date the line was kept
                                      format: date-time
                                    fields:
                                      type: object
                                      additionalProperties:
                                        type: string
                                      description: Values typed over the row in the dashboard, by column (name, headline, company, url, contactEmail...)
                                  additionalProperties: false
                          memberCount:
                            type: integer
                            description: List Members
                          pendingIntakeCount:
                            type: integer
                            description: Pending Intake rows
                          nextCursor:
                            anyOf:
                              - type: string
                                description: Cursor of the next page
                              - type: "null"
                        required:
                          - items
                          - memberCount
                          - pendingIntakeCount
                          - nextCursor
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
        - name: perPage
          in: query
          required: false
          schema:
            type: integer
            description: Rows per page (1-1000, default 100)
            minimum: 1
            maximum: 1000
            default: 100
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: "Opaque cursor: the nextCursor of the previous page, sent with the same filters. A malformed cursor, or one sent with other filters, is refused with 400."
        - name: kind
          in: query
          required: false
          schema:
            type: string
            enum:
              - all
              - members
              - pending
            default: all
            description: Row query. all mixes List Members and Pending Intake by added_at; members or pending restricts the server read.
        - name: externalId
          in: query
          required: false
          schema:
            type: string
            description: Find the members carrying this identifier of yours
            minLength: 1
            maxLength: 200
      externalDocs:
        description: List members
        url: https://docs.reversecontact.com/endpoints/list-members
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
    post:
      operationId: addListMembers
      summary: Add members
      description: "Adds up to 1,000 Signals and answers when they are done, with one result per Signal in request order (results[]: added, already_present, not_found, refused, failed, not_reached). A person is found from a Social URL, an email, or a first and last name with a company. A new member is charged its identity price: 1 credit for a Social URL from saved data (2 with live: true), 2 for an email or a name. A member already on the List is free and left as it is; a Signal no one matches is kept as Pending Intake, free. One invalid Signal refuses the request with details.signalIndex. For more Signals, data families, a credit ceiling or a webhook, use the import (intake/signals)."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Add summary with per-Signal results
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          inserted:
                            type: integer
                            description: Members added
                          skipped:
                            type: integer
                            description: Signals naming a member already on the List
                          refused:
                            type: integer
                            description: Signals refused (member limit, ambiguous identity)
                          creditsConsumed:
                            type: number
                            description: Credits charged
                          unresolvedCount:
                            type: integer
                            description: Signals kept as Pending Intake
                          stoppedReason:
                            type: string
                            description: "Set when a stop left later Signals unread: quota, member_cap, pending_cap"
                          results:
                            type: array
                            description: One entry per Signal, in request order
                            items:
                              type: object
                              properties:
                                index:
                                  type: integer
                                  description: Position of the Signal in the request (0-based)
                                outcome:
                                  type: string
                                  enum:
                                    - added
                                    - already_present
                                    - not_found
                                    - refused
                                    - failed
                                    - not_reached
                                externalId:
                                  type: string
                                  description: Your identifier, as sent
                                memberId:
                                  type: string
                                  description: Member the line names
                                  format: uuid
                                entityId:
                                  type: string
                                  description: Person or company id
                                pendingId:
                                  type: string
                                  description: Pending Intake kept for a not_found line
                                  format: uuid
                                reason:
                                  type: string
                                  enum:
                                    - member_limit
                                    - pending_intake_limit
                                    - insufficient_credits
                                    - ambiguous_identity
                                    - data_subject_blocked
                                    - identity_unavailable
                                    - quota_unavailable
                                    - stopped
                              required:
                                - index
                                - outcome
                              additionalProperties: false
                        required:
                          - inserted
                          - skipped
                          - creditsConsumed
                          - results
                        additionalProperties: true
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: The List reached its 25,000 member or Pending Intake limit
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "504":
          description: The request ran out of time; Signals already added stay added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                signals:
                  type: array
                  items:
                    type: object
                    properties:
                      linkedinUrl:
                        type: string
                        description: Person or company Social URL
                      url:
                        type: string
                        description: Alias of linkedinUrl
                      email:
                        type: string
                        description: Person email
                      firstName:
                        type: string
                        description: Person first name (with lastName and a company)
                      lastName:
                        type: string
                        description: Person last name (with firstName and a company)
                      companyDomain:
                        type: string
                        description: "Company domain: a person hint, or a company"
                      companyName:
                        type: string
                        description: Company name hint for a person
                      domain:
                        type: string
                        description: Company domain
                      companyId:
                        type: string
                        description: Company id (com_...), company Lists
                      externalId:
                        type: string
                        description: Your own identifier for this line (1 to 200 characters, no control characters). Echoed in the line result and kept on the member it names; the first one a member receives is kept. Never used to find the person.
                        minLength: 1
                        maxLength: 200
                    additionalProperties: false
                  minItems: 1
                  maxItems: 1000
                source:
                  type: string
                  enum:
                    - file
                    - paste
                  default: paste
                live:
                  type: boolean
                  description: "For Social URL Signals: true fetches the profile live (2 credits); omitted or false uses saved data (1 credit)."
                  default: false
              required:
                - signals
              additionalProperties: false
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
      externalDocs:
        description: Add members
        url: https://docs.reversecontact.com/endpoints/list-members-add
      x-credits:
        amount: 0
        per: request
        summary: Free to call. Each new person costs 1 credit from a Social profile URL (2 with live), 2 from an email or a name. Each new company costs 1 credit from a company page URL or a company id (2 when the page is read live), 2 from a domain. A member already on the List, or a Signal no one matches, is free.
      x-mode: sync
      x-availability: available
    delete:
      operationId: removeListMembers
      summary: Remove List members
      description: "Removes List Members and their stored data, and/or dismisses Pending Intake rows. Removing members never dismisses Pending Intake unless pendingIds are given. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Members removed and/or Pending Intake dismissed
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          removed:
                            type: integer
                            description: Members removed
                          dismissed:
                            type: integer
                            description: Pending Intake rows dismissed
                        required:
                          - removed
                          - dismissed
                        additionalProperties: true
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Provide at least one id across memberIds and pendingIds.
              properties:
                memberIds:
                  type: array
                  items:
                    type: string
                    description: Member id
                    format: uuid
                pendingIds:
                  type: array
                  items:
                    type: string
                    description: Pending Intake id
                    format: uuid
              additionalProperties: false
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
      externalDocs:
        description: Remove members
        url: https://docs.reversecontact.com/endpoints/list-members-remove
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/lists/{listId}/intake/signals:
    post:
      operationId: importListSignals
      summary: Import members and data
      description: "Queues up to 25,000 Signals (or a public CSV / Google Sheet URL) as one operation and answers at once with operationId and pollUrl. Each line is identified like an add (saved data unless live: true); with families, the data you ask for (profile, company, contact_email, contact_phone) is then fetched for each member, new or already on the List. Data a member already holds is not bought again. Above 25 credits of worst-case estimate, a request with families needs maxCredits, the most it may spend: the operation stops at that ceiling (stopReason max_credits) and can be resumed with a higher one. With webhookUrl (public HTTPS), that URL receives one POST each time the operation stops moving (completed, stopped, cancelled); the event carries no member data, read the operation at its pollUrl. Lines naming the same identity with the same externalId are deduplicated. Replaying with the same operationId returns the same operation and never charges twice. To stop it, cancel it (operations/{operationId}/cancel): cancelling is final, a new run needs a new operationId."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "202":
          description: Operation queued
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          operationId:
                            type: string
                            description: "Operation id: read it at pollUrl"
                            format: uuid
                          pollUrl:
                            type: string
                            description: Path that reads the operation (GET, ?wait=N holds it)
                          totalRows:
                            type: integer
                            description: Lines queued after deduplication
                          duplicateCount:
                            type: integer
                            description: Lines dropped as duplicates of an earlier line
                          job:
                            type: object
                            additionalProperties: true
                            description: The job record
                        required:
                          - operationId
                          - pollUrl
                          - totalRows
                          - duplicateCount
                        additionalProperties: true
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before the first read at pollUrl
              schema:
                type: integer
        "400":
          description: LIST_INVALID_INPUT (for example maxCredits missing above 25 credits, or an operationId replayed with other Signals) or WEBHOOK_URL_UNREACHABLE
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "503":
          description: "BULK_QUEUE_UNAVAILABLE: retry shortly"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                signals:
                  type: array
                  items:
                    type: object
                    properties:
                      linkedinUrl:
                        type: string
                        description: Person or company Social URL
                      url:
                        type: string
                        description: Alias of linkedinUrl
                      email:
                        type: string
                        description: Person email
                      firstName:
                        type: string
                        description: Person first name (with lastName and a company)
                      lastName:
                        type: string
                        description: Person last name (with firstName and a company)
                      companyDomain:
                        type: string
                        description: "Company domain: a person hint, or a company"
                      companyName:
                        type: string
                        description: Company name hint for a person
                      domain:
                        type: string
                        description: Company domain
                      companyId:
                        type: string
                        description: Company id (com_...), company Lists
                      externalId:
                        type: string
                        description: Your own identifier for this line (1 to 200 characters, no control characters). Echoed in the line result and kept on the member it names; the first one a member receives is kept. Never used to find the person.
                        minLength: 1
                        maxLength: 200
                    additionalProperties: false
                  minItems: 1
                  maxItems: 25000
                sourceUrl:
                  type: string
                  description: Public CSV or Google Sheet URL (instead of signals)
                  format: uri
                live:
                  type: boolean
                  description: true fetches Social URL profiles live; omitted or false uses saved data
                  default: false
                families:
                  type: array
                  items:
                    type: string
                    enum:
                      - profile
                      - company
                      - contact_email
                      - contact_phone
                  minItems: 1
                  maxItems: 4
                maxCredits:
                  type: integer
                  description: The most this operation may spend
                  minimum: 0
                operationId:
                  type: string
                  description: "Your operation id: replaying it returns the same operation"
                  format: uuid
                webhookUrl:
                  type: string
                  description: Public HTTPS URL told when the operation stops moving
                  format: uri
                  maxLength: 2048
              additionalProperties: false
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
      externalDocs:
        description: Import members and data
        url: https://docs.reversecontact.com/endpoints/list-intake-signals
      x-credits:
        amount: 0
        per: request
        summary: Free to queue. Each new member costs its identity price, and each data family you ask for costs what its endpoint costs, up to your maxCredits.
      x-mode: async
      x-availability: available
  /v2/lists/{listId}/operations/{operationId}/progress:
    get:
      operationId: getListOperation
      summary: Read a List operation
      description: "Reads an operation started by an import (its pollUrl). While clientAction is poll, read again no sooner than pollAfterSeconds; with wait=N (0 to 20) the request is held and answers as soon as the operation settles, pauses or stops, or still running when the wait ends. completed means the data can be read. When it stops (clientAction resume), stopReason and nextStep say what to do. With rows=true, also returns one page of per-line results (index in the request, externalId, outcome, memberId); pass rows.nextCursor back as cursor for the next page, with perPage from 1 to 1000 (default 200). Free, also at a zero balance, and never counted against rate limits. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: The operation
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          operationId:
                            type: string
                            description: Operation id
                          listId:
                            type: string
                            description: List id
                            format: uuid
                          kind:
                            type: string
                            description: Operation kind
                          status:
                            type: string
                            enum:
                              - queued
                              - running
                              - paused
                              - completed
                              - partial
                              - stopped_budget
                              - failed
                              - cancelled
                              - refused
                              - unknown
                          clientAction:
                            type: string
                            enum:
                              - poll
                              - resume
                              - done
                              - reconcile
                            description: "poll: read again after pollAfterSeconds. resume: read stopReason and nextStep, then resume. done: finished, the data can be read. reconcile: the outcome is ambiguous, never replay it."
                          progress:
                            type: object
                            properties:
                              processed:
                                type: integer
                                description: Lines processed
                              total:
                                type: integer
                                description: Lines in the operation
                              succeeded:
                                type: integer
                                description: Lines that resolved a member
                              failed:
                                type: integer
                                description: Lines that failed or were not found
                              skipped:
                                type: integer
                                description: Lines skipped
                              remaining:
                                type: integer
                                description: Lines left
                              unknownCount:
                                type: integer
                                description: Lines with an ambiguous outcome
                            additionalProperties: false
                          creditsConsumed:
                            type: number
                            description: Credits charged so far
                          creditsPending:
                            type: number
                            description: Credits reserved by steps in flight
                          creditsEstimated:
                            type: number
                            description: "Credits reserved when the operation was created: an import reserves nothing (0) and spends up to maxCredits"
                          maxCredits:
                            anyOf:
                              - type: number
                                description: Credit ceiling of the operation
                              - type: "null"
                          estimatedSeconds:
                            anyOf:
                              - type: integer
                                description: Advisory time left while it runs
                              - type: "null"
                          estimateBlockedUntil:
                            anyOf:
                              - type: string
                                description: "When the daily extraction limit holds it: the next 00:00 UTC"
                                format: date-time
                              - type: "null"
                          pollAfterSeconds:
                            type: integer
                            description: Seconds to wait before reading again (0 once polling stops)
                          pollUrl:
                            anyOf:
                              - type: string
                                description: Path that reads this operation
                              - type: "null"
                          stopReason:
                            anyOf:
                              - type: string
                                description: "Why it stopped: balance, max_credits, paused_by_user, a limit, cancelled"
                              - type: "null"
                          nextStep:
                            description: What to do after a stop
                          errorMessage:
                            anyOf:
                              - type: string
                                description: Failure message
                              - type: "null"
                          startedAt:
                            anyOf:
                              - type: string
                                description: Start date
                                format: date-time
                              - type: "null"
                          completedAt:
                            anyOf:
                              - type: string
                                description: End date, once the data can be read
                                format: date-time
                              - type: "null"
                          rows:
                            anyOf:
                              - type: object
                                description: "With rows=true on an intake operation: one page of per-line results"
                                properties:
                                  items:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        index:
                                          anyOf:
                                            - type: integer
                                              description: Position of the line in the request (0-based)
                                            - type: "null"
                                        rowNumber:
                                          type: integer
                                          description: Line number in the operation (1-based)
                                        outcome:
                                          type: string
                                          enum:
                                            - pending
                                            - added
                                            - already_present
                                            - resolved
                                            - not_found
                                            - refused
                                            - failed
                                            - not_reached
                                            - unknown
                                        externalId:
                                          anyOf:
                                            - type: string
                                              description: Your identifier, as sent
                                            - type: "null"
                                        memberId:
                                          anyOf:
                                            - type: string
                                              description: Member the line names
                                              format: uuid
                                            - type: "null"
                                        errorCode:
                                          anyOf:
                                            - type: string
                                              description: Why a line was refused or failed, or a requested family missed
                                            - type: "null"
                                        reason:
                                          anyOf:
                                            - type: string
                                              description: Short reason
                                            - type: "null"
                                        signal:
                                          type: object
                                          additionalProperties: true
                                          description: The identifiers sent
                                      required:
                                        - index
                                        - rowNumber
                                        - outcome
                                        - externalId
                                        - memberId
                                      additionalProperties: false
                                  nextCursor:
                                    anyOf:
                                      - type: string
                                        description: Cursor of the next page of lines, null on the last one
                                      - type: "null"
                                additionalProperties: false
                              - type: "null"
                        required:
                          - operationId
                          - listId
                          - status
                          - clientAction
                          - pollAfterSeconds
                          - pollUrl
                        additionalProperties: true
                    additionalProperties: false
          headers:
            Retry-After:
              description: "Present while the operation runs: seconds before reading again"
              schema:
                type: integer
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: LIST_OPERATION_NOT_FOUND
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
        - name: operationId
          in: path
          required: true
          schema:
            type: string
            description: Operation id (operationId of the acknowledgement)
        - name: wait
          in: query
          required: false
          schema:
            type: integer
            description: Hold the request up to this many seconds while it runs
            minimum: 0
            maximum: 20
            default: 0
        - name: rows
          in: query
          required: false
          schema:
            type: string
            enum:
              - "true"
              - "false"
            description: Add per-line results
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: "With rows=true: rows.nextCursor of the previous page of lines"
        - name: perPage
          in: query
          required: false
          schema:
            type: integer
            description: "With rows=true: lines per page"
            minimum: 1
            maximum: 1000
            default: 200
      externalDocs:
        description: Read a List operation
        url: https://docs.reversecontact.com/endpoints/list-operation
      x-credits:
        amount: 0
        per: request
        summary: Free, also at a zero balance, and never counted against the rate limits.
      x-mode: sync
      x-availability: available
  /v2/lists/{listId}/operations/{operationId}/cancel:
    post:
      operationId: cancelListOperation
      summary: Cancel a List operation
      description: "Stops an import of this workspace, whichever key started it. Lines already in flight finish and are charged as usual; lines not started are never charged and read not_reached in the per-line results. Cancelling is final: replaying the import with the same operationId returns the cancelled operation, and a new run needs a new operationId. Cancelling a cancelled operation answers it again. The import webhookUrl receives the cancelled state. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: The cancelled operation
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          operationId:
                            type: string
                            description: Operation id
                          listId:
                            type: string
                            description: List id
                            format: uuid
                          kind:
                            type: string
                            description: Operation kind
                          status:
                            type: string
                            enum:
                              - queued
                              - running
                              - paused
                              - completed
                              - partial
                              - stopped_budget
                              - failed
                              - cancelled
                              - refused
                              - unknown
                          clientAction:
                            type: string
                            enum:
                              - poll
                              - resume
                              - done
                              - reconcile
                            description: "poll: read again after pollAfterSeconds. resume: read stopReason and nextStep, then resume. done: finished, the data can be read. reconcile: the outcome is ambiguous, never replay it."
                          progress:
                            type: object
                            properties:
                              processed:
                                type: integer
                                description: Lines processed
                              total:
                                type: integer
                                description: Lines in the operation
                              succeeded:
                                type: integer
                                description: Lines that resolved a member
                              failed:
                                type: integer
                                description: Lines that failed or were not found
                              skipped:
                                type: integer
                                description: Lines skipped
                              remaining:
                                type: integer
                                description: Lines left
                              unknownCount:
                                type: integer
                                description: Lines with an ambiguous outcome
                            additionalProperties: false
                          creditsConsumed:
                            type: number
                            description: Credits charged so far
                          creditsPending:
                            type: number
                            description: Credits reserved by steps in flight
                          creditsEstimated:
                            type: number
                            description: "Credits reserved when the operation was created: an import reserves nothing (0) and spends up to maxCredits"
                          maxCredits:
                            anyOf:
                              - type: number
                                description: Credit ceiling of the operation
                              - type: "null"
                          estimatedSeconds:
                            anyOf:
                              - type: integer
                                description: Advisory time left while it runs
                              - type: "null"
                          estimateBlockedUntil:
                            anyOf:
                              - type: string
                                description: "When the daily extraction limit holds it: the next 00:00 UTC"
                                format: date-time
                              - type: "null"
                          pollAfterSeconds:
                            type: integer
                            description: Seconds to wait before reading again (0 once polling stops)
                          pollUrl:
                            anyOf:
                              - type: string
                                description: Path that reads this operation
                              - type: "null"
                          stopReason:
                            anyOf:
                              - type: string
                                description: "Why it stopped: balance, max_credits, paused_by_user, a limit, cancelled"
                              - type: "null"
                          nextStep:
                            description: What to do after a stop
                          errorMessage:
                            anyOf:
                              - type: string
                                description: Failure message
                              - type: "null"
                          startedAt:
                            anyOf:
                              - type: string
                                description: Start date
                                format: date-time
                              - type: "null"
                          completedAt:
                            anyOf:
                              - type: string
                                description: End date, once the data can be read
                                format: date-time
                              - type: "null"
                          rows:
                            anyOf:
                              - type: object
                                description: "With rows=true on an intake operation: one page of per-line results"
                                properties:
                                  items:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        index:
                                          anyOf:
                                            - type: integer
                                              description: Position of the line in the request (0-based)
                                            - type: "null"
                                        rowNumber:
                                          type: integer
                                          description: Line number in the operation (1-based)
                                        outcome:
                                          type: string
                                          enum:
                                            - pending
                                            - added
                                            - already_present
                                            - resolved
                                            - not_found
                                            - refused
                                            - failed
                                            - not_reached
                                            - unknown
                                        externalId:
                                          anyOf:
                                            - type: string
                                              description: Your identifier, as sent
                                            - type: "null"
                                        memberId:
                                          anyOf:
                                            - type: string
                                              description: Member the line names
                                              format: uuid
                                            - type: "null"
                                        errorCode:
                                          anyOf:
                                            - type: string
                                              description: Why a line was refused or failed, or a requested family missed
                                            - type: "null"
                                        reason:
                                          anyOf:
                                            - type: string
                                              description: Short reason
                                            - type: "null"
                                        signal:
                                          type: object
                                          additionalProperties: true
                                          description: The identifiers sent
                                      required:
                                        - index
                                        - rowNumber
                                        - outcome
                                        - externalId
                                        - memberId
                                      additionalProperties: false
                                  nextCursor:
                                    anyOf:
                                      - type: string
                                        description: Cursor of the next page of lines, null on the last one
                                      - type: "null"
                                additionalProperties: false
                              - type: "null"
                        required:
                          - operationId
                          - listId
                          - status
                          - clientAction
                          - pollAfterSeconds
                          - pollUrl
                        additionalProperties: true
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: LIST_OPERATION_NOT_FOUND
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "LIST_OPERATION_NOT_CANCELLABLE: the operation already ended"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
        - name: operationId
          in: path
          required: true
          schema:
            type: string
            description: Operation id (operationId of the acknowledgement)
      externalDocs:
        description: Cancel a List operation
        url: https://docs.reversecontact.com/endpoints/list-operation-cancel
      x-credits:
        amount: 0
        per: request
        summary: Free. Lines that had not started are never charged.
      x-mode: sync
      x-availability: available
  /v2/lists/{listId}/export:
    get:
      operationId: exportList
      summary: Export a List
      description: "Downloads the List as CSV, as the dashboard shows it: one row per line of the List, members and Pending Intake mixed in the order they were added: a member with its stored data, where a value typed over a cell replaces the enriched one, and a Pending Intake line with what was pasted or typed on it. A workspace exports one List at a time: while one runs, another answers 429 LIST_EXPORT_IN_PROGRESS; 429 LIST_EXPORT_BUSY means the server is serving another workspace, retry after Retry-After. Credits: 0."
      tags:
        - Lists
      security:
        - bearerAuth: []
      responses:
        "200":
          description: "List CSV: members, then Not found rows"
          content:
            text/csv:
              schema:
                type: string
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: listId
          in: path
          required: true
          schema:
            type: string
            description: List id
            format: uuid
      externalDocs:
        description: Export a List
        url: https://docs.reversecontact.com/endpoints/list-export
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/enrich/persons/bulk:
    post:
      operationId: bulkEnrichPersons
      summary: Bulk enrich people
      description: "Enriches up to 25,000 people in one call. Each item is what /v2/enrich/persons (email, or name with a company) or /v2/fetch/persons (LinkedIn URL) takes, priced like it. The credits of every item are reserved at once, up to the balance (items past it read insufficient_credits and cost nothing), and given back for what is not found. Duplicates of an earlier item are enriched once and cost nothing. Answers 202 at once with the job: follow it at links.self (wait=N holds the request until it settles), or pass webhookUrl to receive one POST when it settles; once it is completed or cancelled, links.results gives the results CSV, one row per item in the order sent. families adds the contact finders (contact_email, contact_phone) and needs their permission; emailType chooses the kind of email. A field the body or an item does not define is refused with 422 UNKNOWN_FIELD (the field, the one it most likely stands for, the accepted fields), never ignored: the job would otherwise run without it. An API key with credit limits must hold the whole reservation: a job that would take it over its daily, monthly or total limit is refused with KEY_CREDIT_LIMIT_REACHED before anything is reserved, and a started job counts against the key what it reserved, then only what it spent once it settles. Following a job, cancelling it and downloading its results stay open at a zero balance. Credits: the unit price of each item, as /v2/enrich/persons, /v2/fetch/persons and /v2/contact/*. The request itself is free."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "202":
          description: Bulk enrich job created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          job:
                            type: object
                            properties:
                              id:
                                type: string
                                description: Job id
                                format: uuid
                              type:
                                type: string
                                enum:
                                  - enrich_persons
                                  - list_import
                                  - list_enrich
                                  - list_search_import
                                  - search_export
                                description: "enrich_persons: a Bulk enrich job (POST /v2/enrich/persons/bulk, or a file from the dashboard). list_import: Signals or a file imported into a List. list_enrich: data fetched for List members. list_search_import: a Search added to a List. search_export: a Search exported as a file."
                              entity:
                                type: string
                                enum:
                                  - persons
                                  - companies
                              status:
                                type: string
                                enum:
                                  - queued
                                  - running
                                  - paused
                                  - completed
                                  - cancelled
                                  - failed
                                description: queued and running still move (read it again, or wait=N); paused waits for someone to resume it; completed, cancelled and failed are final.
                              source:
                                anyOf:
                                  - type: string
                                    enum:
                                      - api
                                      - mcp
                                      - ask
                                      - dashboard
                                    description: "Who started it: an API key, an AI assistant (MCP), Ask, or the dashboard. null for a job created before sources were recorded."
                                  - type: "null"
                              name:
                                type: string
                                description: The file name, or the name given at creation
                              listId:
                                anyOf:
                                  - type: string
                                    description: The List a List job works on
                                    format: uuid
                                  - type: "null"
                              progress:
                                type: object
                                properties:
                                  total:
                                    type: integer
                                    description: Items in the job
                                  processed:
                                    type: integer
                                    description: Items done
                                  succeeded:
                                    type: integer
                                    description: Items that delivered
                                  failed:
                                    type: integer
                                    description: Items that did not (not found, invalid, error)
                                  skipped:
                                    type: integer
                                    description: Items not run (duplicates, no usable input, out of credits, cancelled)
                                  remaining:
                                    type: integer
                                    description: Items left
                                required:
                                  - total
                                  - processed
                                  - succeeded
                                  - failed
                                  - skipped
                                  - remaining
                                additionalProperties: false
                              credits:
                                type: object
                                properties:
                                  estimated:
                                    type: integer
                                    description: Credits reserved when the job was created (0 when nothing is reserved up front)
                                  used:
                                    anyOf:
                                      - type: integer
                                        description: Credits spent, once the job has settled them
                                      - type: "null"
                                required:
                                  - estimated
                                  - used
                                additionalProperties: false
                              estimatedSecondsRemaining:
                                anyOf:
                                  - type: integer
                                    description: Seconds left from the job's recent pace, while it runs; null when unknown
                                  - type: "null"
                              error:
                                anyOf:
                                  - type: object
                                    properties:
                                      code:
                                        type: string
                                        description: Why the job failed
                                    required:
                                      - code
                                    additionalProperties: false
                                  - type: "null"
                              createdAt:
                                type: string
                                description: ISO 8601
                                format: date-time
                              startedAt:
                                anyOf:
                                  - type: string
                                    description: ISO 8601
                                    format: date-time
                                  - type: "null"
                              completedAt:
                                anyOf:
                                  - type: string
                                    description: ISO 8601
                                    format: date-time
                                  - type: "null"
                              links:
                                type: object
                                properties:
                                  self:
                                    type: string
                                    description: Reads this job (wait=N holds the request until it settles)
                                  results:
                                    anyOf:
                                      - type: string
                                        description: Its results CSV, set once the job is completed or cancelled (enrich_persons jobs)
                                      - type: "null"
                                  operation:
                                    anyOf:
                                      - type: string
                                        description: The List operation it runs as (List jobs)
                                      - type: "null"
                                required:
                                  - self
                                  - results
                                  - operation
                                additionalProperties: false
                            required:
                              - id
                              - type
                              - entity
                              - status
                              - source
                              - name
                              - listId
                              - progress
                              - credits
                              - estimatedSecondsRemaining
                              - error
                              - createdAt
                              - startedAt
                              - completedAt
                              - links
                            additionalProperties: false
                          duplicateCount:
                            type: integer
                            description: Items that repeat an earlier one
                          creditsEstimated:
                            type: integer
                            description: Credits reserved
                          notRunForCredits:
                            type: integer
                            description: Items the balance could not cover
                        required:
                          - job
                          - duplicateCount
                          - creditsEstimated
                          - notRunForCredits
                        additionalProperties: false
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
            Idempotent-Replayed:
              description: true when the response is the stored answer of an earlier request with the same Idempotency-Key. Nothing was started or debited.
              schema:
                type: string
                const: "true"
        "400":
          description: Invalid JSON body or endpoint-specific business validation, or an Idempotency-Key that is not 1 to 255 printable ASCII characters (INVALID_IDEMPOTENCY_KEY)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "IDEMPOTENCY_KEY_IN_USE: a request with the same Idempotency-Key is still being processed. Retry after the Retry-After seconds to receive its response."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain, or an Idempotency-Key already used with a different body (IDEMPOTENCY_KEY_REUSED)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    type: object
                    description: "One person to enrich: a LinkedIn URL, an email, or a name with a company. An item without any is kept and reads skipped, never charged."
                    properties:
                      linkedinUrl:
                        type: string
                        description: Person LinkedIn URL (read from saved data unless live is true)
                      email:
                        type: string
                        description: Email address
                      firstName:
                        type: string
                        description: First name
                      lastName:
                        type: string
                        description: Last name
                      companyDomain:
                        type: string
                        description: Company domain (e.g. acme.com)
                      companyName:
                        type: string
                        description: Company name (alternative to domain)
                      externalId:
                        type: string
                        description: Your own identifier, given back in its row of the results CSV
                        maxLength: 255
                    additionalProperties: false
                  minItems: 1
                  maxItems: 25000
                families:
                  type: array
                  items:
                    type: string
                    enum:
                      - profile
                      - contact_email
                      - contact_phone
                  minItems: 1
                  maxItems: 3
                  uniqueItems: true
                  description: "What to look up for each item (default: profile)"
                emailType:
                  type: string
                  enum:
                    - professional
                    - personal
                    - any
                  default: professional
                  description: "With contact_email: the kind of email to look for"
                live:
                  type: boolean
                  description: Scrape LinkedIn URL items live instead of reading saved data (default false)
                name:
                  type: string
                  description: "A name for the job history (default: Sent via API)"
                  minLength: 1
                  maxLength: 255
                webhookUrl:
                  type: string
                  description: "Public HTTPS URL that receives one POST when the job settles: { event: job.updated, jobId, type, status, pollUrl, resultsUrl, occurredAt }. It carries no results. A failed POST (timeout, network error, 408, 429, 5xx) is retried for about 3 hours, so the same event can arrive twice: key it on jobId and status."
                  format: uri
                  maxLength: 2048
              required:
                - items
              additionalProperties: false
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            description: "Optional. A key you choose (1 to 255 printable ASCII characters, a UUID for example) that makes the request safe to retry. For 24 hours, a request with the same key and the same body returns the first response with Idempotent-Replayed: true, without starting another lookup or debiting credits."
            minLength: 1
            maxLength: 255
      externalDocs:
        description: Bulk enrichment
        url: https://docs.reversecontact.com/endpoints/bulk-enrich-persons
      x-credits:
        amount: 0
        per: request
        summary: Free to send. Each item costs what its unit call costs, reserved when the job is created and refunded for what is not found.
      x-mode: async
      x-availability: available
  /v2/jobs:
    get:
      operationId: listJobs
      summary: List jobs
      description: "Every background job of the workspace the key may read, newest first, whoever started it: Bulk enrich jobs, List imports and enrichments, Search exports. Pass nextCursor back as cursor for the next page. Credits: 0."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Jobs
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              type: object
                              properties:
                                id:
                                  type: string
                                  description: Job id
                                  format: uuid
                                type:
                                  type: string
                                  enum:
                                    - enrich_persons
                                    - list_import
                                    - list_enrich
                                    - list_search_import
                                    - search_export
                                  description: "enrich_persons: a Bulk enrich job (POST /v2/enrich/persons/bulk, or a file from the dashboard). list_import: Signals or a file imported into a List. list_enrich: data fetched for List members. list_search_import: a Search added to a List. search_export: a Search exported as a file."
                                entity:
                                  type: string
                                  enum:
                                    - persons
                                    - companies
                                status:
                                  type: string
                                  enum:
                                    - queued
                                    - running
                                    - paused
                                    - completed
                                    - cancelled
                                    - failed
                                  description: queued and running still move (read it again, or wait=N); paused waits for someone to resume it; completed, cancelled and failed are final.
                                source:
                                  anyOf:
                                    - type: string
                                      enum:
                                        - api
                                        - mcp
                                        - ask
                                        - dashboard
                                      description: "Who started it: an API key, an AI assistant (MCP), Ask, or the dashboard. null for a job created before sources were recorded."
                                    - type: "null"
                                name:
                                  type: string
                                  description: The file name, or the name given at creation
                                listId:
                                  anyOf:
                                    - type: string
                                      description: The List a List job works on
                                      format: uuid
                                    - type: "null"
                                progress:
                                  type: object
                                  properties:
                                    total:
                                      type: integer
                                      description: Items in the job
                                    processed:
                                      type: integer
                                      description: Items done
                                    succeeded:
                                      type: integer
                                      description: Items that delivered
                                    failed:
                                      type: integer
                                      description: Items that did not (not found, invalid, error)
                                    skipped:
                                      type: integer
                                      description: Items not run (duplicates, no usable input, out of credits, cancelled)
                                    remaining:
                                      type: integer
                                      description: Items left
                                  required:
                                    - total
                                    - processed
                                    - succeeded
                                    - failed
                                    - skipped
                                    - remaining
                                  additionalProperties: false
                                credits:
                                  type: object
                                  properties:
                                    estimated:
                                      type: integer
                                      description: Credits reserved when the job was created (0 when nothing is reserved up front)
                                    used:
                                      anyOf:
                                        - type: integer
                                          description: Credits spent, once the job has settled them
                                        - type: "null"
                                  required:
                                    - estimated
                                    - used
                                  additionalProperties: false
                                estimatedSecondsRemaining:
                                  anyOf:
                                    - type: integer
                                      description: Seconds left from the job's recent pace, while it runs; null when unknown
                                    - type: "null"
                                error:
                                  anyOf:
                                    - type: object
                                      properties:
                                        code:
                                          type: string
                                          description: Why the job failed
                                      required:
                                        - code
                                      additionalProperties: false
                                    - type: "null"
                                createdAt:
                                  type: string
                                  description: ISO 8601
                                  format: date-time
                                startedAt:
                                  anyOf:
                                    - type: string
                                      description: ISO 8601
                                      format: date-time
                                    - type: "null"
                                completedAt:
                                  anyOf:
                                    - type: string
                                      description: ISO 8601
                                      format: date-time
                                    - type: "null"
                                links:
                                  type: object
                                  properties:
                                    self:
                                      type: string
                                      description: Reads this job (wait=N holds the request until it settles)
                                    results:
                                      anyOf:
                                        - type: string
                                          description: Its results CSV, set once the job is completed or cancelled (enrich_persons jobs)
                                        - type: "null"
                                    operation:
                                      anyOf:
                                        - type: string
                                          description: The List operation it runs as (List jobs)
                                        - type: "null"
                                  required:
                                    - self
                                    - results
                                    - operation
                                  additionalProperties: false
                              required:
                                - id
                                - type
                                - entity
                                - status
                                - source
                                - name
                                - listId
                                - progress
                                - credits
                                - estimatedSecondsRemaining
                                - error
                                - createdAt
                                - startedAt
                                - completedAt
                                - links
                              additionalProperties: false
                          nextCursor:
                            anyOf:
                              - type: string
                                description: Cursor of the next page, null on the last one
                              - type: "null"
                        required:
                          - items
                          - nextCursor
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: type
          in: query
          required: false
          schema:
            type: string
            description: Only these types, comma-separated (enrich_persons, list_import, list_enrich, list_search_import, search_export)
        - name: status
          in: query
          required: false
          schema:
            type: string
            description: Only these statuses, comma-separated (queued, running, paused, completed, cancelled, failed)
        - name: listId
          in: query
          required: false
          schema:
            type: string
            description: Only the jobs of this List
            format: uuid
        - name: perPage
          in: query
          required: false
          schema:
            type: integer
            description: Jobs per page (1-100, default 50)
            minimum: 1
            maximum: 100
            default: 50
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: "Opaque cursor: the nextCursor of the previous page, sent with the same filters. A malformed cursor, or one sent with other filters, is refused with 400."
      externalDocs:
        description: Job history
        url: https://docs.reversecontact.com/endpoints/jobs
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
  /v2/jobs/{jobId}:
    get:
      operationId: getJob
      summary: Get a job
      description: "Reads one job. With wait=N (0 to 20), the request is held while the job is queued or running and answers as soon as it settles or pauses; it may also answer earlier with the job still running. While the job moves, the response carries Retry-After: 2; read it again no sooner than that. Credits: 0 (free). Does not increment per-minute rate limit counters."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "200":
          description: The job
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                            description: Job id
                            format: uuid
                          type:
                            type: string
                            enum:
                              - enrich_persons
                              - list_import
                              - list_enrich
                              - list_search_import
                              - search_export
                            description: "enrich_persons: a Bulk enrich job (POST /v2/enrich/persons/bulk, or a file from the dashboard). list_import: Signals or a file imported into a List. list_enrich: data fetched for List members. list_search_import: a Search added to a List. search_export: a Search exported as a file."
                          entity:
                            type: string
                            enum:
                              - persons
                              - companies
                          status:
                            type: string
                            enum:
                              - queued
                              - running
                              - paused
                              - completed
                              - cancelled
                              - failed
                            description: queued and running still move (read it again, or wait=N); paused waits for someone to resume it; completed, cancelled and failed are final.
                          source:
                            anyOf:
                              - type: string
                                enum:
                                  - api
                                  - mcp
                                  - ask
                                  - dashboard
                                description: "Who started it: an API key, an AI assistant (MCP), Ask, or the dashboard. null for a job created before sources were recorded."
                              - type: "null"
                          name:
                            type: string
                            description: The file name, or the name given at creation
                          listId:
                            anyOf:
                              - type: string
                                description: The List a List job works on
                                format: uuid
                              - type: "null"
                          progress:
                            type: object
                            properties:
                              total:
                                type: integer
                                description: Items in the job
                              processed:
                                type: integer
                                description: Items done
                              succeeded:
                                type: integer
                                description: Items that delivered
                              failed:
                                type: integer
                                description: Items that did not (not found, invalid, error)
                              skipped:
                                type: integer
                                description: Items not run (duplicates, no usable input, out of credits, cancelled)
                              remaining:
                                type: integer
                                description: Items left
                            required:
                              - total
                              - processed
                              - succeeded
                              - failed
                              - skipped
                              - remaining
                            additionalProperties: false
                          credits:
                            type: object
                            properties:
                              estimated:
                                type: integer
                                description: Credits reserved when the job was created (0 when nothing is reserved up front)
                              used:
                                anyOf:
                                  - type: integer
                                    description: Credits spent, once the job has settled them
                                  - type: "null"
                            required:
                              - estimated
                              - used
                            additionalProperties: false
                          estimatedSecondsRemaining:
                            anyOf:
                              - type: integer
                                description: Seconds left from the job's recent pace, while it runs; null when unknown
                              - type: "null"
                          error:
                            anyOf:
                              - type: object
                                properties:
                                  code:
                                    type: string
                                    description: Why the job failed
                                required:
                                  - code
                                additionalProperties: false
                              - type: "null"
                          createdAt:
                            type: string
                            description: ISO 8601
                            format: date-time
                          startedAt:
                            anyOf:
                              - type: string
                                description: ISO 8601
                                format: date-time
                              - type: "null"
                          completedAt:
                            anyOf:
                              - type: string
                                description: ISO 8601
                                format: date-time
                              - type: "null"
                          links:
                            type: object
                            properties:
                              self:
                                type: string
                                description: Reads this job (wait=N holds the request until it settles)
                              results:
                                anyOf:
                                  - type: string
                                    description: Its results CSV, set once the job is completed or cancelled (enrich_persons jobs)
                                  - type: "null"
                              operation:
                                anyOf:
                                  - type: string
                                    description: The List operation it runs as (List jobs)
                                  - type: "null"
                            required:
                              - self
                              - results
                              - operation
                            additionalProperties: false
                        required:
                          - id
                          - type
                          - entity
                          - status
                          - source
                          - name
                          - listId
                          - progress
                          - credits
                          - estimatedSecondsRemaining
                          - error
                          - createdAt
                          - startedAt
                          - completedAt
                          - links
                        additionalProperties: false
                    additionalProperties: false
          headers:
            Retry-After:
              description: Seconds to wait before polling GET /v2/webhooks/{webhookId} again (always 2). Present while the job is not finished; absent once it is.
              schema:
                type: integer
                const: 2
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
            description: Job id
            format: uuid
        - name: wait
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 20
            default: 0
            description: "Long-poll: seconds to hold the request while the job still moves (0 to 20). Absent or 0 answers immediately. Out of range or not an integer: 422 VALIDATION_ERROR."
      externalDocs:
        description: Get a job
        url: https://docs.reversecontact.com/endpoints/job
      x-credits:
        amount: 0
        per: request
        summary: Free, also at a zero balance, and never counted against the rate limits.
      x-mode: sync
      x-availability: available
  /v2/jobs/{jobId}/results:
    get:
      operationId: getJobResults
      summary: Get the results of a job
      description: "The results of an enrich_persons job, one per item, in the order sent, streamed. format=csv (default) is the file the dashboard downloads: your columns come first (linkedinUrl, email, firstName, lastName, companyDomain, companyName, externalId), then rc_status and rc_message (what happened, with the credits it cost), the finder columns the job asked for (rc_email, rc_phone and their status), and the rc_ person columns (only rc_linkedin_url when the job did not ask for the profile). format=ndjson (JSON Lines) gives one JobResultLine per line: the same outcome, typed, with the person in the /v2/enrich/persons shape. The file exists once the job is completed or cancelled, when links.results is set: before, 409 JOB_RESULTS_NOT_READY. A job stored before NDJSON existed has its CSV only: 409 JOB_RESULTS_FORMAT_UNAVAILABLE. A cancelled job still finishes the items it had started: each reads running until it ends, within the hour, and the file downloaded after that gives its outcome. Credits: 0 (free)."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "200":
          description: "The results, streamed: a CSV (UTF-8 with a byte order mark), or NDJSON (one JobResultLine per line)"
          content:
            text/csv:
              schema:
                type: string
            application/x-ndjson:
              schema:
                $ref: "#/components/schemas/JobResultLine"
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "JOB_RESULTS_NOT_READY: the job is queued, running or paused (the file is ready once it is completed or cancelled), or failed (no file). JOB_RESULTS_FORMAT_UNAVAILABLE: the job was stored before NDJSON existed, its CSV stays available"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
            description: Job id
            format: uuid
        - name: format
          in: query
          required: false
          schema:
            type: string
            enum:
              - csv
              - ndjson
            default: csv
            description: csv (default) or ndjson (one JSON object per line, JSON Lines)
      externalDocs:
        description: Download job results
        url: https://docs.reversecontact.com/endpoints/job-results
      x-credits:
        amount: 0
        per: request
        summary: Free, also at a zero balance.
      x-mode: sync
      x-availability: available
  /v2/jobs/{jobId}/rows:
    get:
      operationId: getJobRows
      summary: Read the results of a job, a page at a time
      description: "The results of an enrich_persons job in the order sent, one JobResultLine per item, as in the NDJSON file, readable from the start of the run. While the job runs, a page stops at the first item not finished: items is empty, with Retry-After, while the next one runs, and a cursor never skips an item. A cancelled job still finishes the items it had started, within the hour: a page waits for them the same way. Pass nextCursor back as cursor; it is null once nothing more will come. A page can hold fewer items than limit (at most 100, 2 MB of JSON). A cursor keeps working once the job settles. A job stored before reading by page existed: 409 JOB_RESULTS_FORMAT_UNAVAILABLE, its CSV stays available at /v2/jobs/{jobId}/results. Too many pages read at once: 429 JOB_ROWS_BUSY, retry after Retry-After. Credits: 0 (free)."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "200":
          description: One page of results
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              $ref: "#/components/schemas/JobResultLine"
                            description: The items of this page, in the order sent
                          nextCursor:
                            anyOf:
                              - type: string
                                description: Where to read next; null once nothing more will come
                              - type: "null"
                          status:
                            type: string
                            enum:
                              - queued
                              - running
                              - paused
                              - completed
                              - cancelled
                              - failed
                            description: The job status when the page was read
                        required:
                          - items
                          - nextCursor
                          - status
                        additionalProperties: false
                    additionalProperties: false
          headers:
            Retry-After:
              description: "Set when items is empty while nextCursor is not: the next item is still running, read again after this many seconds"
              schema:
                type: integer
                const: 2
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "JOB_RESULTS_FORMAT_UNAVAILABLE: the job was stored before reading by page existed, its CSV stays available"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: "JOB_ROWS_BUSY: too many pages read at once on the server. Or the rate limit, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait Retry-After (error.details.retryAfter) seconds, then retry."
          headers:
            Retry-After:
              description: Seconds to wait before reading again
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
            description: Job id
            format: uuid
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            maxLength: 512
            description: "nextCursor of the previous page. Absent: the first item. A cursor of another job: 400 JOB_INVALID_INPUT."
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 100
            description: Items per page, at most 100.
      externalDocs:
        description: Read job results by page
        url: https://docs.reversecontact.com/endpoints/job-rows
      x-credits:
        amount: 0
        per: request
        summary: Free, also at a zero balance. Each page counts toward the rate limits.
      x-mode: sync
      x-availability: available
  /v2/jobs/{jobId}/cancel:
    post:
      operationId: cancelJob
      summary: Cancel a job
      description: "Stops a job an API key or an AI assistant started; a job a person started is stopped in the dashboard (403 JOB_STARTED_BY_A_PERSON). Items already in flight may finish and settle; items not started are never charged and read skipped. Final: idempotent on a cancelled job; a job that already ended answers 409 JOB_NOT_CANCELLABLE. Credits: 0."
      tags:
        - Bulk
      security:
        - bearerAuth: []
      responses:
        "200":
          description: The cancelled job
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                            description: Job id
                            format: uuid
                          type:
                            type: string
                            enum:
                              - enrich_persons
                              - list_import
                              - list_enrich
                              - list_search_import
                              - search_export
                            description: "enrich_persons: a Bulk enrich job (POST /v2/enrich/persons/bulk, or a file from the dashboard). list_import: Signals or a file imported into a List. list_enrich: data fetched for List members. list_search_import: a Search added to a List. search_export: a Search exported as a file."
                          entity:
                            type: string
                            enum:
                              - persons
                              - companies
                          status:
                            type: string
                            enum:
                              - queued
                              - running
                              - paused
                              - completed
                              - cancelled
                              - failed
                            description: queued and running still move (read it again, or wait=N); paused waits for someone to resume it; completed, cancelled and failed are final.
                          source:
                            anyOf:
                              - type: string
                                enum:
                                  - api
                                  - mcp
                                  - ask
                                  - dashboard
                                description: "Who started it: an API key, an AI assistant (MCP), Ask, or the dashboard. null for a job created before sources were recorded."
                              - type: "null"
                          name:
                            type: string
                            description: The file name, or the name given at creation
                          listId:
                            anyOf:
                              - type: string
                                description: The List a List job works on
                                format: uuid
                              - type: "null"
                          progress:
                            type: object
                            properties:
                              total:
                                type: integer
                                description: Items in the job
                              processed:
                                type: integer
                                description: Items done
                              succeeded:
                                type: integer
                                description: Items that delivered
                              failed:
                                type: integer
                                description: Items that did not (not found, invalid, error)
                              skipped:
                                type: integer
                                description: Items not run (duplicates, no usable input, out of credits, cancelled)
                              remaining:
                                type: integer
                                description: Items left
                            required:
                              - total
                              - processed
                              - succeeded
                              - failed
                              - skipped
                              - remaining
                            additionalProperties: false
                          credits:
                            type: object
                            properties:
                              estimated:
                                type: integer
                                description: Credits reserved when the job was created (0 when nothing is reserved up front)
                              used:
                                anyOf:
                                  - type: integer
                                    description: Credits spent, once the job has settled them
                                  - type: "null"
                            required:
                              - estimated
                              - used
                            additionalProperties: false
                          estimatedSecondsRemaining:
                            anyOf:
                              - type: integer
                                description: Seconds left from the job's recent pace, while it runs; null when unknown
                              - type: "null"
                          error:
                            anyOf:
                              - type: object
                                properties:
                                  code:
                                    type: string
                                    description: Why the job failed
                                required:
                                  - code
                                additionalProperties: false
                              - type: "null"
                          createdAt:
                            type: string
                            description: ISO 8601
                            format: date-time
                          startedAt:
                            anyOf:
                              - type: string
                                description: ISO 8601
                                format: date-time
                              - type: "null"
                          completedAt:
                            anyOf:
                              - type: string
                                description: ISO 8601
                                format: date-time
                              - type: "null"
                          links:
                            type: object
                            properties:
                              self:
                                type: string
                                description: Reads this job (wait=N holds the request until it settles)
                              results:
                                anyOf:
                                  - type: string
                                    description: Its results CSV, set once the job is completed or cancelled (enrich_persons jobs)
                                  - type: "null"
                              operation:
                                anyOf:
                                  - type: string
                                    description: The List operation it runs as (List jobs)
                                  - type: "null"
                            required:
                              - self
                              - results
                              - operation
                            additionalProperties: false
                        required:
                          - id
                          - type
                          - entity
                          - status
                          - source
                          - name
                          - listId
                          - progress
                          - credits
                          - estimatedSecondsRemaining
                          - error
                          - createdAt
                          - startedAt
                          - completedAt
                          - links
                        additionalProperties: false
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "409":
          description: "JOB_NOT_CANCELLABLE: the job already ended"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
            description: Job id
            format: uuid
      externalDocs:
        description: Cancel a job
        url: https://docs.reversecontact.com/endpoints/job-cancel
      x-credits:
        amount: 0
        per: request
        summary: Free. Items that had not started are never charged.
      x-mode: sync
      x-availability: available
  /v2/usage:
    get:
      operationId: getUsage
      summary: Usage
      description: "Returns workspace credit balance and rate limit status. data is always null; all useful information is in the quotas block. Credits: 0 (free)."
      tags:
        - Usage
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Usage and quota snapshot
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/V2SuccessEnvelope"
                  - type: object
                    properties:
                      data:
                        type: "null"
                        description: Always null for this endpoint
                    additionalProperties: false
        "400":
          description: Invalid JSON body or endpoint-specific business validation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "401":
          description: Missing or invalid API key or OAuth access token
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "402":
          description: No credits left. Purchase more to continue.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "403":
          description: "Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "404":
          description: Data not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "422":
          description: Schema or validation error, unresolved internal id, or disposable email domain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "429":
          description: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
        "451":
          description: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/V2ErrorEnvelope"
      externalDocs:
        description: Usage
        url: https://docs.reversecontact.com/endpoints/usage
      x-credits:
        amount: 0
        per: request
        summary: Free.
      x-mode: sync
      x-availability: available
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: rc_* or oat_*
      description: "API key or OAuth access token from the Reverse Contact developer dashboard. Pass as Authorization: Bearer rc_... or Authorization: Bearer oat_..."
  schemas:
    Industry:
      type: string
      enum:
        - Abrasives and Nonmetallic Minerals Manufacturing
        - Accessible Architecture and Design
        - Accessible Hardware Manufacturing
        - Accommodation and Food Services
        - Accounting
        - Administration of Justice
        - Administrative and Support Services
        - Advertising Services
        - Agricultural Chemical Manufacturing
        - Agriculture, Construction, Mining Machinery Manufacturing
        - Airlines and Aviation
        - Air, Water, and Waste Program Management
        - Alternative Dispute Resolution
        - Alternative Fuel Vehicle Manufacturing
        - Alternative Medicine
        - Ambulance Services
        - Amusement Parks and Arcades
        - Animal Feed Manufacturing
        - Animation
        - Animation and Post-production
        - Apparel & Fashion
        - Apparel Manufacturing
        - Appliances, Electrical, and Electronics Manufacturing
        - Architectural and Structural Metal Manufacturing
        - Architecture and Planning
        - Armed Forces
        - Artificial Rubber and Synthetic Fiber Manufacturing
        - Artists and Writers
        - Arts & Crafts
        - Audio and Video Equipment Manufacturing
        - Automation Machinery Manufacturing
        - Automotive
        - Aviation & Aerospace
        - Aviation and Aerospace Component Manufacturing
        - Baked Goods Manufacturing
        - Banking
        - Bars, Taverns, and Nightclubs
        - Bed-and-Breakfasts, Hostels, Homestays
        - Beverage Manufacturing
        - Biomass Electric Power Generation
        - Biotechnology
        - Biotechnology Research
        - Blockchain Services
        - Blogs
        - Boilers, Tanks, and Shipping Container Manufacturing
        - Book and Periodical Publishing
        - Book Publishing
        - Breweries
        - Broadcast Media Production and Distribution
        - Building Construction
        - Building Equipment Contractors
        - Building Finishing Contractors
        - Building Materials
        - Building Structure and Exterior Contractors
        - Business Consulting and Services
        - Business Content
        - Business Intelligence Platforms
        - Business Supplies & Equipment
        - Cable and Satellite Programming
        - Capital Markets
        - Caterers
        - Chemical Manufacturing
        - Chemical Raw Materials Manufacturing
        - Child Day Care Services
        - Chiropractors
        - Circuses and Magic Shows
        - Civic and Social Organizations
        - Civil Engineering
        - Claims Adjusting, Actuarial Services
        - Clay and Refractory Products Manufacturing
        - Climate Data and Analytics
        - Climate Technology Product Manufacturing
        - Coal Mining
        - Collection Agencies
        - Commercial and Industrial Equipment Rental
        - Commercial and Industrial Machinery Maintenance
        - Commercial and Service Industry Machinery Manufacturing
        - Commercial Real Estate
        - Communications Equipment Manufacturing
        - Community Development and Urban Planning
        - Community Services
        - Computer and Network Security
        - Computer Games
        - Computer Hardware
        - Computer Hardware Manufacturing
        - Computer Networking
        - Computer Networking Products
        - Computers and Electronics Manufacturing
        - Conservation Programs
        - Construction
        - Construction Hardware Manufacturing
        - Consumer Electronics
        - Consumer Goods
        - Consumer Goods Rental
        - Consumer Services
        - Correctional Institutions
        - Cosmetics
        - Cosmetology and Barber Schools
        - Courts of Law
        - Credit Intermediation
        - Cutlery and Handtool Manufacturing
        - Dairy
        - Dairy Product Manufacturing
        - Dance Companies
        - Data Infrastructure and Analytics
        - Data Security Software Products
        - Death Care Services
        - Defense and Space Manufacturing
        - Defense & Space
        - Dentists
        - Design
        - Design Services
        - Desktop Computing Software Products
        - Digital Accessibility Services
        - Distilleries
        - Economic Programs
        - Education
        - Education Administration Programs
        - Education Management
        - E-learning
        - E-Learning Providers
        - Electrical Equipment Manufacturing
        - Electric Lighting Equipment Manufacturing
        - Electric Power Generation
        - Electric Power Transmission, Control, and Distribution
        - Electronic and Precision Equipment Maintenance
        - Embedded Software Products
        - Emergency and Relief Services
        - Energy Technology
        - Engineering Services
        - Engines and Power Transmission Equipment Manufacturing
        - Entertainment
        - Entertainment Providers
        - Environmental Quality Programs
        - Environmental Services
        - Equipment Rental Services
        - Events Services
        - Executive Offices
        - Executive Search Services
        - Fabricated Metal Products
        - Facilities Services
        - Family Planning Centers
        - Farming
        - Farming, Ranching, Forestry
        - Fashion Accessories Manufacturing
        - Financial Services
        - Fine Art
        - Fine Arts Schools
        - Fire Protection
        - Fisheries
        - Flight Training
        - Food and Beverage Manufacturing
        - Food and Beverage Retail
        - Food and Beverage Services
        - Food & Beverages
        - Food Production
        - Footwear and Leather Goods Repair
        - Footwear Manufacturing
        - Forestry and Logging
        - Fossil Fuel Electric Power Generation
        - Freight and Package Transportation
        - Fruit and Vegetable Preserves Manufacturing
        - Fuel Cell Manufacturing
        - Fundraising
        - Funds and Trusts
        - Funeral Services
        - Furniture
        - Furniture and Home Furnishings Manufacturing
        - Gambling Facilities and Casinos
        - Geothermal Electric Power Generation
        - Glass, Ceramics and Concrete Manufacturing
        - Glass Product Manufacturing
        - Golf Courses and Country Clubs
        - Government Administration
        - Government Relations
        - Government Relations Services
        - Graphic Design
        - Ground Passenger Transportation
        - Health and Human Services
        - Health Wellness & Fitness
        - Higher Education
        - Highway, Street, and Bridge Construction
        - Historical Sites
        - Holding Companies
        - Home Health Care Services
        - Horticulture
        - Hospitality
        - Hospitals
        - Hospitals and Health Care
        - Hotels and Motels
        - Household and Institutional Furniture Manufacturing
        - Household Appliance Manufacturing
        - Household Services
        - Housing and Community Development
        - Housing Programs
        - Human Resources
        - Human Resources Services
        - HVAC and Refrigeration Equipment Manufacturing
        - Hydroelectric Power Generation
        - Import & Export
        - Individual and Family Services
        - Industrial Automation
        - Industrial Machinery Manufacturing
        - Industry Associations
        - Information Services
        - Information Technology & Services
        - Insurance
        - Insurance Agencies and Brokerages
        - Insurance and Employee Benefit Funds
        - Insurance Carriers
        - Interior Design
        - International Affairs
        - International Trade and Development
        - Internet Marketplace Platforms
        - Internet News
        - Internet Publishing
        - Interurban and Rural Bus Services
        - Investment Advice
        - Investment Banking
        - Investment Management
        - IT Services and IT Consulting
        - IT System Custom Software Development
        - IT System Data Services
        - IT System Design Services
        - IT System Installation and Disposal
        - IT System Operations and Maintenance
        - IT System Testing and Evaluation
        - IT System Training and Support
        - Janitorial Services
        - Landscaping Services
        - Language Schools
        - Laundry and Drycleaning Services
        - Law Enforcement
        - Law Practice
        - Leasing Non-residential Real Estate
        - Leasing Residential Real Estate
        - Leather Product Manufacturing
        - Legal Services
        - Legislative Offices
        - Leisure, Travel & Tourism
        - Libraries
        - Lime and Gypsum Products Manufacturing
        - Loan Brokers
        - Luxury Goods & Jewelry
        - Machinery Manufacturing
        - Magnetic and Optical Media Manufacturing
        - Manufacturing
        - Maritime
        - Maritime Transportation
        - Marketing Services
        - Market Research
        - Mattress and Blinds Manufacturing
        - Measuring and Control Instrument Manufacturing
        - Meat Products Manufacturing
        - Mechanical Or Industrial Engineering
        - Media and Telecommunications
        - Media Production
        - Medical and Diagnostic Laboratories
        - Medical Device
        - Medical Equipment Manufacturing
        - Medical Practices
        - Mental Health Care
        - Metal Ore Mining
        - Metal Treatments
        - Metal Valve, Ball, and Roller Manufacturing
        - Metalworking Machinery Manufacturing
        - Military and International Affairs
        - Mining
        - Mobile Computing Software Products
        - Mobile Food Services
        - Mobile Gaming Apps
        - Motor Vehicle Manufacturing
        - Motor Vehicle Parts Manufacturing
        - Movies and Sound Recording
        - Movies, Videos and Sound
        - Museums
        - Museums, Historical Sites, and Zoos
        - Music
        - Musicians
        - Nanotechnology Research
        - Natural Gas Distribution
        - Natural Gas Extraction
        - Newspaper Publishing
        - Nonmetallic Mineral Mining
        - Non-profit Organization Management
        - Non-profit Organizations
        - Nonresidential Building Construction
        - Nuclear Electric Power Generation
        - Nursing Homes and Residential Care Facilities
        - Office Administration
        - Office Furniture and Fixtures Manufacturing
        - Oil and Coal Product Manufacturing
        - Oil and Gas
        - Oil Extraction
        - Oil, Gas, and Mining
        - Online and Mail Order Retail
        - Online Audio and Video Media
        - Online Media
        - Operations Consulting
        - Optometrists
        - Outpatient Care Centers
        - Outsourcing and Offshoring Consulting
        - Outsourcing/Offshoring
        - Packaging and Containers Manufacturing
        - Packaging & Containers
        - Paint, Coating, and Adhesive Manufacturing
        - Paper and Forest Product Manufacturing
        - Paper & Forest Products
        - Pension Funds
        - Performing Arts
        - Performing Arts and Spectator Sports
        - Periodical Publishing
        - Personal and Laundry Services
        - Personal Care Product Manufacturing
        - Personal Care Services
        - Pet Services
        - Pharmaceutical Manufacturing
        - Philanthropic Fundraising Services
        - Philanthropy
        - Photography
        - Physical, Occupational and Speech Therapists
        - Physicians
        - Pipeline Transportation
        - Plastics and Rubber Product Manufacturing
        - Plastics Manufacturing
        - Political Organizations
        - Postal Services
        - Primary and Secondary Education
        - Primary Metal Manufacturing
        - Printing Services
        - Professional Organizations
        - Professional Services
        - Professional Training and Coaching
        - Program Development
        - Public Assistance Programs
        - Public Health
        - Public Policy
        - Public Policy Offices
        - Public Relations and Communications Services
        - Public Safety
        - Racetracks
        - Radio and Television Broadcasting
        - Railroad Equipment Manufacturing
        - Rail Transportation
        - Ranching
        - Ranching and Fisheries
        - Real Estate
        - Real Estate Agents and Brokers
        - Real Estate and Equipment Rental Services
        - Recreational Facilities
        - Regenerative Design
        - Religious Institutions
        - Renewable Energy Equipment Manufacturing
        - Renewable Energy Power Generation
        - Renewable Energy Semiconductor Manufacturing
        - Renewables & Environment
        - Repair and Maintenance
        - Research
        - Research Services
        - Residential Building Construction
        - Restaurants
        - Retail
        - Retail Apparel and Fashion
        - Retail Appliances, Electrical, and Electronic Equipment
        - Retail Art Dealers
        - Retail Art Supplies
        - Retail Books and Printed News
        - Retail Building Materials and Garden Equipment
        - Retail Florists
        - Retail Furniture and Home Furnishings
        - Retail Gasoline
        - Retail Groceries
        - Retail Health and Personal Care Products
        - Retail Luxury Goods and Jewelry
        - Retail Motor Vehicles
        - Retail Musical Instruments
        - Retail Office Equipment
        - Retail Office Supplies and Gifts
        - Retail Pharmacies
        - Retail Recyclable Materials & Used Merchandise
        - Reupholstery and Furniture Repair
        - Robotics Engineering
        - Robot Manufacturing
        - Rubber Products Manufacturing
        - Satellite Telecommunications
        - Savings Institutions
        - School and Employee Bus Services
        - Seafood Product Manufacturing
        - Secretarial Schools
        - Securities and Commodity Exchanges
        - Security and Investigations
        - Security Guards and Patrol Services
        - Security Systems Services
        - Semiconductor Manufacturing
        - Semiconductors
        - Services for Renewable Energy
        - Services for the Elderly and Disabled
        - Sheet Music Publishing
        - Shipbuilding
        - Shuttles and Special Needs Transportation Services
        - Sightseeing Transportation
        - Skiing Facilities
        - Smart Meter Manufacturing
        - Soap and Cleaning Product Manufacturing
        - Social Networking Platforms
        - Software Development
        - Solar Electric Power Generation
        - Sound Recording
        - Space Research and Technology
        - Specialty Trade Contractors
        - Spectator Sports
        - Sporting Goods
        - Sporting Goods Manufacturing
        - Sports and Recreation Instruction
        - Sports Teams and Clubs
        - Spring and Wire Product Manufacturing
        - Staffing and Recruiting
        - Steam and Air-Conditioning Supply
        - Strategic Management Services
        - Subdivision of Land
        - Sugar and Confectionery Product Manufacturing
        - Surveying and Mapping Services
        - Taxi and Limousine Services
        - Technical and Vocational Training
        - Technology, Information and Internet
        - Technology, Information and Media
        - Telecommunications
        - Telecommunications Carriers
        - Telephone Call Centers
        - Temporary Help Services
        - Textile Manufacturing
        - Theater Companies
        - Think Tanks
        - Tobacco
        - Tobacco Manufacturing
        - Translation and Localization
        - Transportation Equipment Manufacturing
        - Transportation, Logistics, Supply Chain and Storage
        - Transportation Programs
        - Transportation/Trucking/Railroad
        - Travel Arrangements
        - Truck Transportation
        - Trusts and Estates
        - Turned Products and Fastener Manufacturing
        - Urban Transit Services
        - Utilities
        - Utilities Administration
        - Utility System Construction
        - Vehicle Repair and Maintenance
        - Venture Capital and Private Equity Principals
        - Veterinary
        - Veterinary Services
        - Vocational Rehabilitation Services
        - Warehousing
        - Warehousing and Storage
        - Waste Collection
        - Waste Treatment and Disposal
        - Water Supply and Irrigation Systems
        - Water, Waste, Steam, and Air Conditioning Services
        - Wellness and Fitness Services
        - Wholesale
        - Wholesale Alcoholic Beverages
        - Wholesale Apparel and Sewing Supplies
        - Wholesale Appliances, Electrical, and Electronics
        - Wholesale Building Materials
        - Wholesale Chemical and Allied Products
        - Wholesale Computer Equipment
        - Wholesale Drugs and Sundries
        - Wholesale Food and Beverage
        - Wholesale Footwear
        - Wholesale Furniture and Home Furnishings
        - Wholesale Hardware, Plumbing, Heating Equipment
        - Wholesale Import and Export
        - Wholesale Luxury Goods and Jewelry
        - Wholesale Machinery
        - Wholesale Metals and Minerals
        - Wholesale Motor Vehicles and Parts
        - Wholesale Paper Products
        - Wholesale Petroleum and Petroleum Products
        - Wholesale Photography Equipment and Supplies
        - Wholesale Raw Farm Products
        - Wholesale Recyclable Materials
        - Wind Electric Power Generation
        - Wineries
        - Wine & Spirits
        - Wireless Services
        - Women's Handbag Manufacturing
        - Wood Product Manufacturing
        - Writing and Editing
        - Zoos and Botanical Gardens
      description: Industry from the published taxonomy (see docs.reversecontact.com/guides/industries)
    CountryCode:
      type: string
      enum:
        - AF
        - AL
        - DZ
        - AS
        - AD
        - AO
        - AI
        - AQ
        - AG
        - AR
        - AM
        - AW
        - AU
        - AT
        - AZ
        - BS
        - BH
        - BD
        - BB
        - BY
        - BE
        - BZ
        - BJ
        - BM
        - BT
        - BO
        - BQ
        - BA
        - BW
        - BV
        - BR
        - IO
        - BN
        - BG
        - BF
        - BI
        - CV
        - KH
        - CM
        - CA
        - KY
        - CF
        - TD
        - CL
        - CN
        - CX
        - CC
        - CO
        - KM
        - CG
        - CD
        - CK
        - CR
        - HR
        - CU
        - CW
        - CY
        - CZ
        - CI
        - DK
        - DJ
        - DM
        - DO
        - EC
        - EG
        - SV
        - GQ
        - ER
        - EE
        - SZ
        - ET
        - FK
        - FO
        - FJ
        - FI
        - FR
        - GF
        - PF
        - TF
        - GA
        - GM
        - GE
        - DE
        - GH
        - GI
        - GR
        - GL
        - GD
        - GP
        - GU
        - GT
        - GG
        - GN
        - GW
        - GY
        - HT
        - HM
        - VA
        - HN
        - HK
        - HU
        - IS
        - IN
        - ID
        - IR
        - IQ
        - IE
        - IM
        - IL
        - IT
        - JM
        - JP
        - JE
        - JO
        - KZ
        - KE
        - KI
        - KP
        - KR
        - XK
        - KW
        - KG
        - LA
        - LV
        - LB
        - LS
        - LR
        - LY
        - LI
        - LT
        - LU
        - MO
        - MG
        - MW
        - MY
        - MV
        - ML
        - MT
        - MH
        - MQ
        - MR
        - MU
        - YT
        - MX
        - FM
        - MD
        - MC
        - MN
        - ME
        - MS
        - MA
        - MZ
        - MM
        - NA
        - NR
        - NP
        - NL
        - NC
        - NZ
        - NI
        - NE
        - NG
        - NU
        - NF
        - MK
        - MP
        - NO
        - OM
        - PK
        - PW
        - PS
        - PA
        - PG
        - PY
        - PE
        - PH
        - PN
        - PL
        - PT
        - PR
        - QA
        - RO
        - RU
        - RW
        - RE
        - BL
        - SH
        - KN
        - LC
        - MF
        - PM
        - VC
        - WS
        - SM
        - ST
        - SA
        - SN
        - RS
        - SC
        - SL
        - SG
        - SX
        - SK
        - SI
        - SB
        - SO
        - ZA
        - GS
        - SS
        - ES
        - LK
        - SD
        - SR
        - SJ
        - SE
        - CH
        - SY
        - TW
        - TJ
        - TZ
        - TH
        - TL
        - TG
        - TK
        - TO
        - TT
        - TN
        - TM
        - TC
        - TV
        - TR
        - UG
        - UA
        - AE
        - GB
        - UM
        - US
        - UY
        - UZ
        - VU
        - VE
        - VN
        - VG
        - VI
        - WF
        - EH
        - YE
        - ZM
        - ZW
        - AX
      description: ISO 3166-1 alpha-2 country code, plus XK for Kosovo
    JobFunction:
      type: string
      enum:
        - Administrative
        - Agriculture and Environment
        - Construction and Trades
        - Consulting and Advisory
        - Customer Service
        - Design
        - Education
        - Energy and Utilities
        - Entertainment and Gaming
        - Executive and Leadership
        - Finance
        - Hospitality and Tourism
        - Human Resources
        - Legal
        - Marketing
        - Media and Communications
        - Medical and Health
        - Nonprofit and Government
        - Not Employed
        - Operations
        - Other
        - Personal and Home Services
        - Product
        - Project and Program Management
        - Public Safety and Security
        - Real Estate
        - Research and Science
        - Retail and Consumer
        - Sales
        - Software
        - Traditional Engineering
        - Transportation and Logistics
      description: Function of a position, from the position taxonomy
    JobSubFunction:
      type: string
      enum:
        - Academia
        - Academic and Scholarly Research
        - Account Executive
        - Account Management
        - Accounting
        - Advertising
        - Advocacy
        - Aerospace Engineering
        - Agile and Scrum
        - Agriculture and Landscaping
        - Allied Healthcare
        - Anesthesiology
        - Animal and Livestock Operations
        - Architectural Design
        - Architectural Engineering
        - Audio and Sound
        - Audit
        - Automotive Engineering
        - Backend and API Engineering
        - Banking and Finance
        - Bartender
        - Beauty and Hair Services
        - Billing and Collections
        - Biomedical Engineering
        - Branch and Regional Operations
        - Brand Design
        - Brand Marketing
        - Broadcasting
        - Business Analysis
        - Business Applications ERP and CRM
        - Business Continuity and Risk Operations
        - Business Development
        - Business Operations
        - Call Center
        - Cardiology
        - Career Break
        - Carpenter
        - Cashier
        - Certification and Regulatory Engineering
        - Channel Sales
        - Chef and Culinary
        - Chemical Engineering
        - Chief of Staff
        - Childcare
        - Civil Engineering
        - Claims and Actuarial
        - Cleaning and Janitorial
        - Client Services
        - Clinical Operations and Trials
        - Clinical Research
        - Clinical and Research Project Management
        - Cloud and Platform Engineering
        - Coaching
        - Commercial Real Estate
        - Community Outreach
        - Compensation and Benefits
        - Compliance
        - Construction Project Management
        - Construction Safety and HSE
        - Content Creator
        - Content Marketing
        - Contracts
        - Controllers
        - Controls Automation and Instrumentation
        - Copywriting
        - Corporate Communications
        - Corporate Development and Mergers and Acquisitions
        - Corporate Finance
        - Corporate Law
        - Corporate and Business Strategy
        - Corrections
        - Creative Design
        - Credit Analysis
        - Cultural Institutions and Programs
        - Curriculum Development
        - Customer Experience
        - Customer Onboarding and Implementation
        - Customer Operations
        - Customer Service Leadership
        - Customer Success
        - Customer Support
        - Customs and Import Export
        - Cybersecurity and Security Engineering
        - Data Engineering and Analytics
        - Data Entry
        - Data Science and AI
        - Data and AI Product Management
        - Database Engineering and Administration
        - Delivery Driver
        - Demand Generation and ABM
        - Dental
        - DevOps and Site Reliability
        - Digital and Performance Marketing
        - Dispatcher
        - Diversity and Inclusion
        - Domestic Care
        - E-commerce Operations
        - EMT and Paramedic
        - Early Childhood Education
        - Editing
        - Education - Teaching
        - Educational Administration
        - Eldercare
        - Electrical Engineering
        - Electrician
        - Email Lifecycle and CRM Marketing
        - Embedded Systems Firmware and Hardware
        - Emergency Management and Disaster Relief
        - Emergency Medicine
        - Employee Relations
        - Employment Law
        - Energy Power and Nuclear Engineering
        - Engineering Technician
        - Enterprise Sales
        - Enterprise and Solutions Architecture
        - Entertainment Production
        - Environmental Engineering
        - Environmental Science
        - Environmental Sustainability
        - Event and Field Marketing
        - Events and Hospitality Planning
        - Executive Assistant
        - Facilities Management
        - Fashion Design
        - Field Sales
        - Field and Service Operations
        - Film and Media Entertainment
        - Finance Leadership
        - Financial Consulting
        - Financial Planning and Analysis
        - Financial Reporting
        - Firefighter
        - Fitness and Wellness
        - Fleet Management
        - Food Service
        - Forestry Fisheries and Aquaculture
        - Freelancer
        - Freight Forwarding
        - Front Desk
        - Frontend Engineering
        - Full Stack and Application Engineering
        - Fundraising
        - Funeral and Personal Services
        - Game Development
        - General Administrative
        - General Advisory
        - General Clinical Care
        - General Contractor
        - General Customer Service
        - General HR
        - General Legal
        - General Management
        - General Marketing
        - General Sales
        - Global Mobility and Immigration
        - Governance and Board Operations
        - Government Administration
        - Grant Writing
        - Graphic Design
        - Growth Marketing
        - Growth Product Management
        - HR Business Partner
        - HR Compliance
        - HR Consulting
        - HR Leadership
        - HR Operations
        - HRIS and People Systems
        - HVAC
        - Hardware Product Management
        - Healthcare Consulting
        - Healthcare Quality and Patient Safety
        - Heavy Equipment Operators
        - Help Desk and IT Support
        - Higher Education
        - Home Health and Caregiving
        - Home Repair
        - Hotels and Hospitality Management
        - Housekeeping
        - IT Infrastructure Systems and Networks
        - IT Management and Service Operations
        - IT Procurement
        - IT Project Management
        - Illustration
        - Implementation Consulting
        - Implementation and Delivery Management
        - Industrial Design
        - Inside Sales and Telesales
        - Insurance and Financial Sales
        - Insurance and Underwriting
        - Intellectual Property
        - Intelligence Homeland and Border Security
        - Interaction Design
        - Interior Design
        - International Development
        - Investment Banking
        - Investment Management
        - Investor Relations
        - Job Seeker
        - Journalism
        - K-12 Teaching
        - Laboratory and Experimental Research
        - Land and Site Development
        - Last Mile and Reverse Logistics
        - Learning and Development
        - Leasing
        - Library Services
        - Life Sciences
        - Litigation
        - Logistics and Distribution
        - Loss Prevention
        - Management Consulting
        - Manufacturing Engineering
        - Marine and Naval Engineering
        - Maritime
        - Market Research and Consumer Insights
        - Marketing Automation
        - Marketing Leadership
        - Marketing Operations
        - Marketing and Sales Consulting
        - Mason
        - Massage Therapy
        - Materials Engineering
        - Mechanical Engineering
        - Medical Administration
        - Medical Affairs and Pharmacovigilance
        - Medical Research
        - Military
        - Mining and Extraction
        - Mobile Engineering
        - Mortgage and Real Estate Finance
        - Motion 3D and Animation Design
        - Museums and Cultural Institutions
        - Nonprofit and Volunteer Program Management
        - Nuclear
        - Nursing
        - Office Management
        - Oil and Gas
        - Oncology
        - Operations Consulting
        - Operations Leadership
        - Organizational Development
        - Other
        - Painter
        - Paralegal
        - Partner and Community Marketing
        - Partnership Sales
        - Payments and Fintech
        - Payroll
        - Pediatrics
        - People Analytics
        - Performing Arts
        - Personal Assistant
        - Personal Training
        - Pet Services
        - Petroleum and Mining Engineering
        - Pharmacy
        - Photography
        - Physical Occupational and Speech Therapy
        - Physical Security
        - Physicians and Doctors
        - Pilot and Flight Operations
        - Plumber
        - Police and Law Enforcement
        - Policy and Economic Research
        - Portfolio and PMO
        - Power Generation
        - Privacy and Data Protection
        - Private Equity and Venture Capital
        - Private Investigation
        - Private Tutoring
        - Process Improvement and Operational Excellence
        - Product Analytics
        - Product Discovery and Research
        - Product Leadership
        - Product Management and Ownership
        - Product Marketing
        - Product Operations
        - Product Portfolio and Lifecycle
        - Product Strategy
        - Program Management
        - Project Controls and Planning
        - Project Management
        - Property Appraisal and Valuation
        - Property and Tenant Management
        - Psychiatry Psychology and Mental Health
        - Public Affairs
        - Public Health and Preventive Care
        - Public Policy
        - Public Relations
        - Public Safety Inspection
        - Quality Management
        - Quantitative and Survey Research
        - Radiology
        - Real Estate Acquisitions and Investment
        - Real Estate Advisory and Research
        - Real Estate Brokerage and Sales
        - Real Estate Development
        - Receptionist
        - Records Management
        - Recruiting and Talent Acquisition
        - Regulatory Affairs
        - Regulatory Inspection
        - Religious and Community Ministry
        - Renewable Energy
        - Renewals and Retention
        - Research Operations and Administration
        - Residential Real Estate
        - Restaurant Management
        - Retail Buying and Merchandising
        - Retail Sales
        - Retail and Store Operations
        - Retired
        - Revenue Operations
        - Risk Management
        - Robotics and Mechatronics Engineering
        - Roofer
        - SDR and BDR
        - SEO and SEM
        - Safety and HSE Operations
        - Sales Enablement
        - Sales Engineering and Pre-Sales
        - Sales Leadership
        - Sales Operations
        - Scheduling
        - Scientific Research and Development
        - Security Guard
        - Server and Waitstaff
        - Site Supervisor
        - Social Media Management
        - Social Media and Influencer Marketing
        - Social Work and Services
        - Social and Behavioral Science
        - Software Engineering
        - Software QA Testing and Automation
        - Special Education
        - Sports and Esports
        - Store Management
        - Strategic Planning
        - Strategy Consulting
        - Structural Engineering
        - Student
        - Supply Chain Consulting
        - Supply Chain Planning
        - Supply Chain and Procurement
        - Surgery
        - Surveyor
        - Sustainability Operations
        - Sustainability and ESG Consulting
        - Sustainability and ESG Leadership
        - Sustainable Finance
        - Talent Management
        - Tax
        - Tax Law
        - Technical Product Management
        - Technical Support
        - Technical Writing
        - Technology and Engineering Leadership
        - Technology and IT Consulting
        - Title and Escrow
        - Tour Guide
        - Traditional Crafts
        - Train Operator
        - Training and Facilitation
        - Transformation and Change Management
        - Transformation and Innovation
        - Translation and Localization
        - Transportation Operations
        - Travel and Tourism Services
        - Treasury
        - Truck Driver
        - Trust and Safety
        - UI and UX Design
        - UX Research
        - Utilities Operations
        - Vendor Management
        - Veterinary Medicine
        - Video Games and Gaming
        - Video Production
        - Virtual Assistant
        - Visual Design
        - Visual Merchandising
        - Warehousing and Inventory
        - Welder
        - Wholesale and Distribution
        - Workforce Planning
        - Workplace and Real Estate Strategy
      description: Sub-function of a position, from the position taxonomy
    Seniority:
      type: string
      enum:
        - CXO
        - VP
        - Director
        - Head
        - Manager
        - Partner
        - Owner / Founder
        - Individual Contributor
        - Intern
        - Other
      description: Seniority of a position, from the position taxonomy
    ContractType:
      type: string
      enum:
        - full-time
        - part-time
        - permanent
        - contract
        - internship
        - self-employed
        - freelance
        - apprenticeship
      description: Contract type declared on a position
    Area:
      type: string
      enum:
        - MR:APAC
        - MR:EMEA
        - MR:AMER
        - MR:NAMER
        - MR:LATAM
        - GR:AFR
        - GR:ASI
        - GR:EUR
        - GR:OCE
        - GR:AMR
        - GSR:ANZ
        - GSR:CAM
        - GSR:CAR
        - GSR:CAS
        - GSR:EAF
        - GSR:EAS
        - GSR:EEU
        - GSR:MAF
        - GSR:MEL
        - GSR:MIC
        - GSR:NAF
        - GSR:NEU
        - GSR:POLY
        - GSR:SAF
        - GSR:SAM
        - GSR:SEA
        - GSR:SEU
        - GSR:SSA
        - GSR:WAF
        - GSR:WAS
        - GSR:WEU
        - GSR:NOAM
        - GSR:LAC
        - GSR:SAS
        - MC:BALT
        - MC:BENELUX
        - MC:CEE
        - MC:DACH
        - MC:ENAFR
        - MC:FRAFR
        - MC:GCR
        - MC:IBER
        - MC:INSC
        - MC:JPKR
        - MC:LUSAFR
        - MC:MAGH
        - MC:ME
        - MC:MENA
        - MC:NORD
        - MC:PACI
        - MC:SCAN
        - MC:SEE
        - MC:UKI
        - IG:APEC
        - IG:EEA
        - IG:EFTA
        - IG:EU
        - IG:EZ
        - IG:GCC
        - IG:RCEP
        - IG:SCH
        - IG:USMCA
      description: "Zone id: main region (MR), UN region (GR) or subregion (GSR), market cluster (MC), institutional or economic group (IG). See docs.reversecontact.com/reference/areas"
    EmailType:
      type: string
      enum:
        - professional
        - personal
        - any
      description: "Kind of email to find: 'professional', 'personal', or 'any' to accept either"
    EmailVerificationStatus:
      type: string
      enum:
        - valid
        - risky
        - invalid
        - unknown
      description: "valid: the address can receive mail. risky: it may receive mail, for example on a catch-all domain. invalid: it cannot receive mail. unknown: the check was inconclusive."
    V2LimitInfo:
      type: object
      properties:
        limit:
          type: integer
          description: Maximum allowed in the window
        used:
          type: integer
          description: Amount used in the window
        left:
          type: integer
          description: Remaining in the window
        nextReset:
          type: string
          description: When the window resets (ISO 8601)
      required:
        - limit
        - used
        - left
        - nextReset
      additionalProperties: false
    V2KeyCreditLimit:
      type: object
      properties:
        limit:
          type: number
          description: Credits this key may spend in the period
        used:
          type: number
          description: Credits this key spent in the period, this request included
        left:
          type: number
          description: Credits this key may still spend in the period
        nextReset:
          anyOf:
            - type: string
              description: "When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit"
            - type: "null"
      required:
        - limit
        - used
        - left
        - nextReset
      additionalProperties: false
    V2Credits:
      type: object
      properties:
        total:
          type: number
          description: Total credits in your plan
        used:
          type: number
          description: Credits consumed so far
        left:
          type: number
          description: Remaining credits
      required:
        - total
        - used
        - left
      additionalProperties: false
    V2Quotas:
      type: object
      properties:
        creditsConsumed:
          type: number
          description: Credits used for this request after pricing resolution
        workspace:
          type: object
          properties:
            id:
              type: string
              description: Workspace identifier
            credits:
              $ref: "#/components/schemas/V2Credits"
            hasUnlimitedCredits:
              type: boolean
              description: Whether workspace credits are unlimited
            allowDailyOvercost:
              type: boolean
              description: Whether the workspace may exceed its daily cap (Enterprise only)
            dailyLimit:
              anyOf:
                - $ref: "#/components/schemas/V2LimitInfo"
                - type: "null"
            minuteRateLimit:
              $ref: "#/components/schemas/V2LimitInfo"
          required:
            - id
            - credits
            - hasUnlimitedCredits
            - allowDailyOvercost
            - minuteRateLimit
          additionalProperties: false
        key:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                  description: API key identifier
                dailyLimit:
                  anyOf:
                    - $ref: "#/components/schemas/V2LimitInfo"
                    - type: "null"
                minuteRateLimit:
                  $ref: "#/components/schemas/V2LimitInfo"
                creditLimits:
                  type: object
                  description: Credit limits set on this API key. Each is null when the key has no such limit.
                  properties:
                    daily:
                      anyOf:
                        - $ref: "#/components/schemas/V2KeyCreditLimit"
                        - type: "null"
                    monthly:
                      anyOf:
                        - $ref: "#/components/schemas/V2KeyCreditLimit"
                        - type: "null"
                    total:
                      anyOf:
                        - $ref: "#/components/schemas/V2KeyCreditLimit"
                        - type: "null"
                  required:
                    - daily
                    - monthly
                    - total
                  additionalProperties: false
              required:
                - id
                - minuteRateLimit
                - creditLimits
              additionalProperties: false
            - type: "null"
      required:
        - creditsConsumed
        - workspace
        - key
      additionalProperties: false
    V2Metadata:
      type: object
      properties:
        requestId:
          type: string
          description: Unique identifier for this request
        executionTimeMs:
          type: integer
          description: Total execution time in milliseconds
        updatedAt:
          type: string
          description: Last upstream update timestamp (ISO 8601). Present only when available.
      required:
        - requestId
        - executionTimeMs
      additionalProperties: false
    V2Error:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
        message:
          type: string
          description: Human-readable error description
        details:
          type: object
          description: Optional context
          properties: {}
          additionalProperties: true
      required:
        - code
        - message
      additionalProperties: false
    V2SuccessEnvelope:
      type: object
      properties:
        success:
          type: boolean
          const: true
        data: {}
        error:
          type: "null"
        quotas:
          $ref: "#/components/schemas/V2Quotas"
        metadata:
          $ref: "#/components/schemas/V2Metadata"
      required:
        - success
        - data
        - error
        - quotas
        - metadata
      additionalProperties: false
    V2ErrorEnvelope:
      type: object
      properties:
        success:
          type: boolean
          const: false
        data:
          type: "null"
        error:
          $ref: "#/components/schemas/V2Error"
        quotas:
          $ref: "#/components/schemas/V2Quotas"
        metadata:
          $ref: "#/components/schemas/V2Metadata"
      required:
        - success
        - data
        - error
      additionalProperties: false
    PersonLocation:
      type: object
      properties:
        city:
          anyOf:
            - type: string
            - type: "null"
        state:
          anyOf:
            - type: string
            - type: "null"
        country:
          anyOf:
            - type: string
            - type: "null"
        countryCode:
          anyOf:
            - type: string
            - type: "null"
        rawLocation:
          anyOf:
            - type: string
            - type: "null"
      additionalProperties: false
    EnrichedPersonLight:
      type: object
      description: "Light enrich shape: identity and current role. Used for data.person when the full profile could not be assembled (data.isFullProfile is false), and for an alternative candidate whose full profile could not be retrieved in time."
      properties:
        id:
          type: string
          description: Reverse Contact person id (prs_...)
        publicId:
          type: string
          description: Social public slug
        linkedinUrl:
          type: string
          description: Public Social profile URL
        firstName:
          anyOf:
            - type: string
            - type: "null"
        lastName:
          anyOf:
            - type: string
            - type: "null"
        headline:
          anyOf:
            - type: string
            - type: "null"
        currentPositionTitle:
          anyOf:
            - type: string
            - type: "null"
        currentCompanyId:
          anyOf:
            - type: string
            - type: "null"
        currentCompanyName:
          anyOf:
            - type: string
            - type: "null"
        currentCompanyLinkedinId:
          anyOf:
            - type: string
            - type: "null"
        updateDate:
          anyOf:
            - type: string
              description: Last update timestamp (ISO 8601)
            - type: "null"
        location:
          anyOf:
            - $ref: "#/components/schemas/PersonLocation"
            - type: "null"
      required:
        - id
        - publicId
        - linkedinUrl
      additionalProperties: false
    PersonFull:
      type: object
      description: Full person profile shape returned by fetch.
      properties:
        id:
          type: string
          description: Reverse Contact person id (prs_...)
        publicId:
          type: string
          description: Social public slug
        memberId:
          type: string
          description: Upstream member identifier when available
        linkedinUrl:
          type: string
          description: Public Social profile URL
        firstName:
          anyOf:
            - type: string
            - type: "null"
        lastName:
          anyOf:
            - type: string
            - type: "null"
        headline:
          anyOf:
            - type: string
            - type: "null"
        summary:
          anyOf:
            - type: string
            - type: "null"
        pronoun:
          anyOf:
            - type: string
            - type: "null"
        isOpenToWork:
          type: boolean
          description: Whether the profile is flagged open to work
        hasPremium:
          type: boolean
          description: Whether the profile has Social Premium
        hasVerificationBadge:
          type: boolean
          description: Whether the profile has a verification badge
        isInRemembrance:
          type: boolean
          description: Whether the profile is in remembrance
        photoUrl:
          anyOf:
            - type: string
            - type: "null"
        backgroundUrl:
          anyOf:
            - type: string
            - type: "null"
        creationDate:
          anyOf:
            - type: string
            - type: "null"
        followersCount:
          anyOf:
            - type: integer
            - type: "null"
        connectionsCount:
          anyOf:
            - type: integer
            - type: "null"
        location:
          anyOf:
            - $ref: "#/components/schemas/PersonLocation"
            - type: "null"
        currentPosition:
          anyOf:
            - type: object
              properties:
                title:
                  anyOf:
                    - type: string
                    - type: "null"
                description:
                  anyOf:
                    - type: string
                    - type: "null"
                contractType:
                  anyOf:
                    - type: string
                    - type: "null"
                companyId:
                  anyOf:
                    - type: string
                      description: Reverse Contact company id (com_...)
                    - type: "null"
                companyName:
                  anyOf:
                    - type: string
                    - type: "null"
                companyLinkedinId:
                  anyOf:
                    - type: string
                    - type: "null"
                companyUrl:
                  anyOf:
                    - type: string
                    - type: "null"
                companyLocation:
                  anyOf:
                    - type: string
                    - type: "null"
                companyLogoUrl:
                  anyOf:
                    - type: string
                    - type: "null"
                startEndDate:
                  anyOf:
                    - type: object
                      properties:
                        start:
                          anyOf:
                            - type: string
                              description: Start date (ISO 8601)
                            - type: "null"
                        end:
                          anyOf:
                            - type: string
                              description: End date (ISO 8601), null if current
                            - type: "null"
                      additionalProperties: false
                    - type: "null"
              additionalProperties: false
            - type: "null"
        experience:
          type: array
          items:
            type: object
            properties:
              title:
                anyOf:
                  - type: string
                  - type: "null"
              description:
                anyOf:
                  - type: string
                  - type: "null"
              contractType:
                anyOf:
                  - type: string
                  - type: "null"
              companyId:
                anyOf:
                  - type: string
                    description: Reverse Contact company id (com_...)
                  - type: "null"
              companyName:
                anyOf:
                  - type: string
                  - type: "null"
              companyLinkedinId:
                anyOf:
                  - type: string
                  - type: "null"
              companyUrl:
                anyOf:
                  - type: string
                  - type: "null"
              companyLocation:
                anyOf:
                  - type: string
                  - type: "null"
              companyLogoUrl:
                anyOf:
                  - type: string
                  - type: "null"
              startEndDate:
                anyOf:
                  - type: object
                    properties:
                      start:
                        anyOf:
                          - type: string
                            description: Start date (ISO 8601)
                          - type: "null"
                      end:
                        anyOf:
                          - type: string
                            description: End date (ISO 8601), null if current
                          - type: "null"
                    additionalProperties: false
                  - type: "null"
            additionalProperties: false
        education:
          type: array
          items:
            type: object
            properties:
              degreeName:
                anyOf:
                  - type: string
                  - type: "null"
              fieldOfStudy:
                anyOf:
                  - type: string
                  - type: "null"
              description:
                anyOf:
                  - type: string
                  - type: "null"
              grade:
                anyOf:
                  - type: string
                  - type: "null"
              schoolName:
                anyOf:
                  - type: string
                  - type: "null"
              schoolUrl:
                anyOf:
                  - type: string
                  - type: "null"
              schoolLogoUrl:
                anyOf:
                  - type: string
                  - type: "null"
              startEndDate:
                anyOf:
                  - type: object
                    properties:
                      start:
                        anyOf:
                          - type: string
                            description: Start date (ISO 8601)
                          - type: "null"
                      end:
                        anyOf:
                          - type: string
                            description: End date (ISO 8601), null if current
                          - type: "null"
                    additionalProperties: false
                  - type: "null"
            additionalProperties: false
        skills:
          type: array
          items:
            type: string
        languages:
          type: array
          items:
            type: object
            properties:
              language:
                anyOf:
                  - type: string
                  - type: "null"
              proficiency:
                anyOf:
                  - type: string
                  - type: "null"
            additionalProperties: false
        certifications:
          type: array
          items:
            type: object
            properties:
              name:
                anyOf:
                  - type: string
                  - type: "null"
              organizationName:
                anyOf:
                  - type: string
                  - type: "null"
              organizationUrl:
                anyOf:
                  - type: string
                  - type: "null"
              issuedDate:
                anyOf:
                  - type: string
                  - type: "null"
            additionalProperties: false
        recommendations:
          type: array
          items:
            type: object
            properties:
              caption:
                anyOf:
                  - type: string
                  - type: "null"
              description:
                anyOf:
                  - type: string
                  - type: "null"
              authorFullname:
                anyOf:
                  - type: string
                  - type: "null"
              authorUrl:
                anyOf:
                  - type: string
                  - type: "null"
            additionalProperties: false
        testScores:
          type: array
          items:
            type: object
            properties:
              testTitle:
                anyOf:
                  - type: string
                  - type: "null"
              score:
                anyOf:
                  - type: string
                  - type: "null"
              date:
                anyOf:
                  - type: string
                  - type: "null"
            additionalProperties: false
      required:
        - id
        - publicId
        - linkedinUrl
      additionalProperties: false
    EnrichedCompanyLight:
      type: object
      description: Light company enrich shape (identity and headline metrics).
      properties:
        id:
          type: string
          description: Reverse Contact company id (com_...)
        name:
          type: string
          description: Company display name
        publicId:
          type: string
          description: Social public slug / universal name
        linkedinId:
          anyOf:
            - type: string
            - type: "null"
        linkedinUrl:
          anyOf:
            - type: string
            - type: "null"
        employeesCount:
          anyOf:
            - type: integer
            - type: "null"
        followersCount:
          anyOf:
            - type: integer
            - type: "null"
        employeeCountRange:
          anyOf:
            - type: object
              properties:
                start:
                  anyOf:
                    - type: integer
                    - type: "null"
                end:
                  anyOf:
                    - type: integer
                    - type: "null"
              additionalProperties: false
            - type: "null"
        websiteUrl:
          anyOf:
            - type: string
            - type: "null"
        tagline:
          anyOf:
            - type: string
            - type: "null"
        industry:
          anyOf:
            - type: string
            - type: "null"
        companyUpdateDate:
          anyOf:
            - type: string
            - type: "null"
        location:
          anyOf:
            - type: object
              properties:
                city:
                  anyOf:
                    - type: string
                    - type: "null"
                country:
                  anyOf:
                    - type: string
                    - type: "null"
              additionalProperties: false
            - type: "null"
      required:
        - id
        - name
        - publicId
      additionalProperties: false
    CompanyFull:
      type: object
      description: Full company profile shape returned by fetch.
      properties:
        id:
          type: string
          description: Reverse Contact company id (com_...)
        companyName:
          type: string
          description: Company display name
        linkedinId:
          anyOf:
            - type: string
              description: Upstream Social company id
            - type: "null"
        publicId:
          type: string
          description: Social public slug / universal name
        linkedinUrl:
          anyOf:
            - type: string
            - type: "null"
        employeesCount:
          type: integer
          description: Employee count
        followersCount:
          type: integer
          description: Follower count
        employeeCountRange:
          anyOf:
            - type: object
              properties:
                start:
                  type: integer
                end:
                  type: integer
              additionalProperties: false
            - type: "null"
        websiteUrl:
          anyOf:
            - type: string
            - type: "null"
        tagline:
          anyOf:
            - type: string
            - type: "null"
        description:
          anyOf:
            - type: string
            - type: "null"
        industry:
          anyOf:
            - type: string
            - type: "null"
        phone:
          anyOf:
            - type: string
            - type: "null"
        specialities:
          type: array
          items:
            type: string
        headquarter:
          anyOf:
            - type: object
              properties:
                street1:
                  anyOf:
                    - type: string
                    - type: "null"
                street2:
                  anyOf:
                    - type: string
                    - type: "null"
                postalCode:
                  anyOf:
                    - type: string
                    - type: "null"
                city:
                  anyOf:
                    - type: string
                    - type: "null"
                geographicArea:
                  anyOf:
                    - type: string
                    - type: "null"
                country:
                  anyOf:
                    - type: string
                      description: ISO country code
                    - type: "null"
              additionalProperties: false
            - type: "null"
        logoUrl:
          anyOf:
            - type: string
            - type: "null"
        foundedOn:
          anyOf:
            - type: object
              properties:
                year:
                  type: integer
              additionalProperties: false
            - type: "null"
        locations:
          type: array
          items:
            type: object
            properties:
              street1:
                anyOf:
                  - type: string
                  - type: "null"
              street2:
                anyOf:
                  - type: string
                  - type: "null"
              postalCode:
                anyOf:
                  - type: string
                  - type: "null"
              city:
                anyOf:
                  - type: string
                  - type: "null"
              state:
                anyOf:
                  - type: string
                  - type: "null"
              country:
                anyOf:
                  - type: string
                    description: ISO country code
                  - type: "null"
            additionalProperties: false
        backgroundUrl:
          anyOf:
            - type: string
            - type: "null"
      additionalProperties: false
    EnrichedPersonFull:
      description: "Full person returned by enrich: the fetch profile plus the identity and current-role fields of the light shape, so a client reading either shape finds its keys."
      allOf:
        - $ref: "#/components/schemas/PersonFull"
        - type: object
          properties:
            currentPositionTitle:
              anyOf:
                - type: string
                - type: "null"
            currentCompanyId:
              anyOf:
                - type: string
                - type: "null"
            currentCompanyName:
              anyOf:
                - type: string
                - type: "null"
            currentCompanyLinkedinId:
              anyOf:
                - type: string
                - type: "null"
            updateDate:
              anyOf:
                - type: string
                  description: Last update timestamp (ISO 8601)
                - type: "null"
          additionalProperties: false
    EnrichedCompanyFull:
      description: "Full company returned by enrich: the fetch profile plus the name, update date and location fields of the light shape, so a client reading either shape finds its keys."
      allOf:
        - $ref: "#/components/schemas/CompanyFull"
        - type: object
          properties:
            name:
              type: string
              description: Company display name
            companyUpdateDate:
              anyOf:
                - type: string
                - type: "null"
            location:
              anyOf:
                - type: object
                  properties:
                    city:
                      anyOf:
                        - type: string
                        - type: "null"
                    country:
                      anyOf:
                        - type: string
                        - type: "null"
                  additionalProperties: false
                - type: "null"
          additionalProperties: false
    EnrichPersonData:
      type: object
      description: "Nested under the top-level V2 data field: response.data.person and response.data.alternativePersons."
      properties:
        person:
          description: "Matched person: the full profile (data.isFullProfile true), or the light shape when the full profile could not be assembled (data.isFullProfile false)."
          oneOf:
            - $ref: "#/components/schemas/EnrichedPersonFull"
            - $ref: "#/components/schemas/EnrichedPersonLight"
        alternativePersons:
          type: array
          description: Other candidates ranked best first, each with its full profile (it carries experience), or the light shape when its full profile could not be retrieved in time. Always an array (empty when unique).
          items:
            oneOf:
              - $ref: "#/components/schemas/EnrichedPersonFull"
              - $ref: "#/components/schemas/EnrichedPersonLight"
        isFullProfile:
          type: boolean
          description: True when data.person is the full profile, false when only the light shape could be returned.
      required:
        - person
        - alternativePersons
        - isFullProfile
      additionalProperties: false
    JobResultLine:
      type: object
      description: One line of GET /v2/jobs/{jobId}/results?format=ndjson and one item of GET /v2/jobs/{jobId}/rows.
      properties:
        row:
          type: integer
          description: Position of the item in the job, from 1 (the order sent)
        input:
          type: object
          additionalProperties:
            type: string
          description: What was sent for this item, externalId included (empty fields left out)
        status:
          type: string
          description: "What happened, as the rc_status column: enriched, partial, not_found, invalid_input, duplicate, insufficient_credits, skipped, data_subject_blocked, rate_limited, error or unknown. running: an item a cancelled job had started and not finished yet, which ends within the hour"
        message:
          type: string
          description: The same text as the rc_message column, with the credits it cost
        creditsConsumed:
          type: number
          description: Credits this item cost
        person:
          description: "The person in the /v2/enrich/persons shape: the full profile (isFullProfile true) or the light shape. Null when none was found, or when the job did not ask for the profile."
          anyOf:
            - $ref: "#/components/schemas/EnrichedPersonFull"
            - $ref: "#/components/schemas/EnrichedPersonLight"
            - type: "null"
        isFullProfile:
          type: boolean
          description: True when person is the full profile
        linkedinUrl:
          type: string
          description: The matched profile URL, present when the job did not ask for the profile
        contactEmail:
          type: object
          description: Present when the job asked for contact_email
          properties:
            status:
              anyOf:
                - type: string
                  description: found, not_found, error or skipped
                - type: "null"
            value:
              anyOf:
                - type: string
                  description: The email found
                - type: "null"
            personalValue:
              anyOf:
                - type: string
                  description: "With emailType any: the personal email, next to the professional one"
                - type: "null"
          required:
            - status
            - value
            - personalValue
          additionalProperties: false
        contactPhone:
          type: object
          description: Present when the job asked for contact_phone
          properties:
            status:
              anyOf:
                - type: string
                  description: found, not_found, error or skipped
                - type: "null"
            value:
              anyOf:
                - type: string
                  description: The phone number found
                - type: "null"
            type:
              anyOf:
                - type: string
                  description: The kind of phone number
                - type: "null"
          required:
            - status
            - value
            - type
          additionalProperties: false
      required:
        - row
        - input
        - status
        - message
        - creditsConsumed
        - person
        - isFullProfile
      additionalProperties: false
    EnrichCompanyData:
      type: object
      description: "Nested under the top-level V2 data field: response.data.company."
      properties:
        company:
          description: "Matched company: the full company (data.isFullProfile true), or the light shape when the full company could not be assembled (data.isFullProfile false)."
          oneOf:
            - $ref: "#/components/schemas/EnrichedCompanyFull"
            - $ref: "#/components/schemas/EnrichedCompanyLight"
        isFullProfile:
          type: boolean
          description: True when data.company is the full company, false when only the light shape could be returned.
      required:
        - company
        - isFullProfile
      additionalProperties: false
    SearchPeopleData:
      type: object
      description: "Nested envelope: results are at data.data and pagination at data.metadata (top-level data is this object)."
      properties:
        data:
          type: array
          description: Full profiles returned for this page
          items:
            $ref: "#/components/schemas/PersonFull"
        metadata:
          type: object
          properties:
            perPage:
              type: integer
              description: Profiles requested per page
            count:
              type: integer
              description: Profiles returned in this page
            nextCursor:
              anyOf:
                - type: string
                  description: Opaque cursor for the next page
                - type: "null"
          required:
            - perPage
            - count
            - nextCursor
          additionalProperties: false
      required:
        - data
        - metadata
      additionalProperties: false
    SearchPeoplePromptData:
      type: object
      description: People Search page (results at data.data, pagination at data.metadata) plus the interpretation of the prompt at data.interpretation.
      properties:
        data:
          type: array
          description: Full profiles returned for this page
          items:
            $ref: "#/components/schemas/PersonFull"
        metadata:
          type: object
          properties:
            perPage:
              type: integer
              description: Profiles requested per page
            count:
              type: integer
              description: Profiles returned in this page
            nextCursor:
              anyOf:
                - type: string
                  description: Opaque cursor for the next page
                - type: "null"
          required:
            - perPage
            - count
            - nextCursor
          additionalProperties: false
        interpretation:
          type: object
          properties:
            filters:
              $ref: "#/components/schemas/SearchPeopleFilters"
              description: People Search filters read from the prompt; the page was searched with exactly these.
            warnings:
              type: array
              description: Parts of the prompt left out of the filters, and why. Empty when everything mapped.
              items:
                type: string
          required:
            - filters
            - warnings
          additionalProperties: false
      required:
        - data
        - metadata
        - interpretation
      additionalProperties: false
    SearchOrganizationsData:
      type: object
      description: "Nested envelope: results are at data.data and pagination at data.metadata (top-level data is this object)."
      properties:
        data:
          type: array
          description: Full organization profiles returned for this page
          items:
            $ref: "#/components/schemas/CompanyFull"
        metadata:
          type: object
          properties:
            perPage:
              type: integer
              description: Organizations requested per page
            count:
              type: integer
              description: Organizations returned in this page
            nextCursor:
              anyOf:
                - type: string
                  description: Opaque cursor for the next page
                - type: "null"
          required:
            - perPage
            - count
            - nextCursor
          additionalProperties: false
      required:
        - data
        - metadata
      additionalProperties: false
    SearchOrganizationsPromptData:
      type: object
      description: Organization Search page (results at data.data, pagination at data.metadata) plus the interpretation of the prompt at data.interpretation.
      properties:
        data:
          type: array
          description: Full organization profiles returned for this page
          items:
            $ref: "#/components/schemas/CompanyFull"
        metadata:
          type: object
          properties:
            perPage:
              type: integer
              description: Organizations requested per page
            count:
              type: integer
              description: Organizations returned in this page
            nextCursor:
              anyOf:
                - type: string
                  description: Opaque cursor for the next page
                - type: "null"
          required:
            - perPage
            - count
            - nextCursor
          additionalProperties: false
        interpretation:
          type: object
          properties:
            filters:
              $ref: "#/components/schemas/SearchOrganizationsFilters"
              description: Organization Search filters read from the prompt; the page was searched with exactly these.
            warnings:
              type: array
              description: Parts of the prompt left out of the filters, and why. Empty when everything mapped.
              items:
                type: string
          required:
            - filters
            - warnings
          additionalProperties: false
      required:
        - data
        - metadata
        - interpretation
      additionalProperties: false
    SearchOrganizationsCountData:
      type: object
      properties:
        count:
          type: integer
          description: Total organizations matching the supplied filters
      required:
        - count
      additionalProperties: false
    SearchPeopleCountData:
      type: object
      properties:
        count:
          type: integer
          description: Total profiles matching the supplied filters
      required:
        - count
      additionalProperties: false
    SearchPeopleAutoSuggestionData:
      type: object
      properties:
        object:
          type: string
          const: search_auto_suggestions
        entity:
          type: string
          const: person
        field:
          type: string
          description: The filter completed
          enum:
            - skills
        suggestions:
          type: array
          description: Values starting with the query, most common first
          items:
            type: object
            properties:
              value:
                type: string
                description: A value to show, and to send as it is in the filter
            required:
              - value
            additionalProperties: false
      required:
        - object
        - entity
        - field
        - suggestions
      additionalProperties: false
    CheckPersonData:
      type: object
      properties:
        exists:
          type: boolean
          description: true if the profile exists in the database
        lastUpdate:
          anyOf:
            - type: string
              description: When Reverse Contact last fetched this profile (ISO 8601)
            - type: "null"
        experienceCount:
          type: integer
          description: Number of experience entries when exists is true
        skillCount:
          type: integer
          description: Number of skills when exists is true
        schoolCount:
          type: integer
          description: Number of education entries when exists is true
      additionalProperties: false
    CheckCompanyData:
      type: object
      properties:
        exists:
          type: boolean
          description: true if the company exists in the database
        lastUpdate:
          anyOf:
            - type: string
              description: When Reverse Contact last fetched this company (ISO 8601)
            - type: "null"
        specialityCount:
          type: integer
          description: Number of company specialties when exists is true
      additionalProperties: false
    JobAckData:
      type: object
      description: Immediate acknowledgement for async live endpoints.
      properties:
        status:
          type: string
          description: Job acknowledgement status
          example: created
        webhookId:
          type: string
          description: Unique job id (UUID). Poll GET /v2/webhooks/{webhookId} for the result.
        pollUrl:
          type: string
          description: Convenience path to the polling endpoint for this job
      required:
        - webhookId
      additionalProperties: false
    ContactEmailAckData:
      type: object
      description: Immediate acknowledgement for the asynchronous Contact Email Finder.
      properties:
        status:
          type: string
          description: Job acknowledgement status
          example: created
        webhookId:
          type: string
          description: Unique job id (UUID). Poll GET /v2/webhooks/{webhookId} for the result, or use it to correlate the optional webhook callback.
        pollUrl:
          type: string
          description: Convenience path to the polling endpoint for this job
      required:
        - status
        - webhookId
        - pollUrl
      additionalProperties: false
    ContactEmailVerifyAckData:
      type: object
      description: Immediate acknowledgement for the asynchronous Email Verification.
      properties:
        status:
          type: string
          description: Job acknowledgement status
          example: created
        webhookId:
          type: string
          description: Unique job id (UUID). Poll GET /v2/webhooks/{webhookId} for the result, or use it to correlate the optional webhook callback.
        pollUrl:
          type: string
          description: Convenience path to the polling endpoint for this job
      required:
        - status
        - webhookId
        - pollUrl
      additionalProperties: false
    ContactEmailVerifyResult:
      type: object
      description: The verdict, in data.result of the poll response and in the webhook callback.
      properties:
        email:
          type: string
          description: The address that was checked
          format: email
          example: jane@acme.com
        status:
          $ref: "#/components/schemas/EmailVerificationStatus"
      required:
        - email
        - status
      additionalProperties: false
    ContactPhoneAckData:
      type: object
      description: Immediate acknowledgement for the asynchronous Contact Phone Finder.
      properties:
        status:
          type: string
          description: Job acknowledgement status
          example: created
        webhookId:
          type: string
          description: Unique job id (UUID). Poll GET /v2/webhooks/{webhookId} for the result, or use it to correlate the optional webhook callback.
        pollUrl:
          type: string
          description: Convenience path to the polling endpoint for this job
      required:
        - status
        - webhookId
        - pollUrl
      additionalProperties: false
    PollWebhookData:
      type: object
      properties:
        webhookId:
          type: string
          description: Job identifier
        status:
          type: string
          description: Job status. created and in_progress are not final; succeeded and errored are.
          enum:
            - created
            - in_progress
            - succeeded
            - errored
        eventType:
          type: string
          description: Kind of job
          enum:
            - FETCH_PERSON_DATA
            - FETCH_COMPANY_DATA
            - FETCH_ACTIVITY_DATA
            - FETCH_CONTACT_DATA
        errorCode:
          anyOf:
            - type: string
              description: Why the job failed (for example email-not-found); null unless status is errored
            - type: "null"
        deliveryStatus:
          anyOf:
            - type: string
              description: Set when the result was fetched but the push to your webhookUrl failed (webhook-url-invalid, webhook-url-errored, webhook-url-timeout or webhook-url-unreachable). status stays succeeded and result stays available.
            - type: "null"
        createdAt:
          type: string
          description: When the job was created (ISO 8601)
          format: date-time
        result:
          description: "Job result: a profile object for live fetches, an array for the contact finders. Set when status is succeeded; an errored job returns the payload it stored, if any; null otherwise."
        creditsConsumed:
          type: number
          description: "Credits charged for the job, net of refunds: 0 while the job runs, final once it succeeded or errored"
      required:
        - webhookId
        - status
        - eventType
        - errorCode
        - deliveryStatus
        - createdAt
        - result
        - creditsConsumed
      additionalProperties: false
    SearchFieldsData:
      type: object
      properties:
        object:
          type: string
          const: search_fields
        entity:
          type: string
          enum:
            - person
            - company
        fields:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: Filter field name
              type:
                type: string
                description: Field type
              description:
                type: string
                description: Human-readable description
              allowedValues:
                description: Optional constrained values
                anyOf:
                  - type: array
                    items: {}
                  - type: "null"
              properties:
                description: Nested property metadata for object filters
                anyOf:
                  - type: object
                    additionalProperties: true
                  - type: "null"
            required:
              - name
              - type
            additionalProperties: true
      additionalProperties: false
    UrlOrIdPersonBody:
      type: object
      description: Provide either url or id. If both are supplied, id takes precedence.
      properties:
        url:
          type: string
          description: Public Social profile URL
          example: https://social.com/in/janedoe
        id:
          type: string
          description: Reverse Contact person id
          example: prs_01jbd5vewyenebxgaz869ffe5t
      additionalProperties: false
    UrlOrIdCompanyBody:
      type: object
      description: Provide either url or id. If both are supplied, id takes precedence.
      properties:
        url:
          type: string
          description: Public Social company URL
          example: https://social.com/company/acme-corp
        id:
          type: string
          description: Reverse Contact company id
          example: com_01jbd5vewyenebxgaz869ffe5t
      additionalProperties: false
    LivePersonBody:
      type: object
      description: Provide exactly one of url or id.
      properties:
        url:
          type: string
          description: Public Social profile URL
          example: https://social.com/in/janedoe
        id:
          type: string
          description: Reverse Contact person id
          example: prs_01jbd5vewyenebxgaz869ffe5t
        webhookUrl:
          type: string
          description: Optional HTTPS push URL for webhook delivery
          format: uri
      additionalProperties: false
      oneOf:
        - required:
            - url
        - required:
            - id
      example:
        url: https://social.com/in/janedoe
    LiveCompanyBody:
      type: object
      description: Provide exactly one of url or id.
      properties:
        url:
          type: string
          description: Public Social company URL
          example: https://social.com/company/acme-corp
        id:
          type: string
          description: Reverse Contact company id
          example: com_01jbd5vewyenebxgaz869ffe5t
        webhookUrl:
          type: string
          description: Optional HTTPS push URL for webhook delivery
          format: uri
      additionalProperties: false
      oneOf:
        - required:
            - url
        - required:
            - id
      example:
        url: https://social.com/company/acme-corp
    EnrichPersonBody:
      type: object
      description: "Provide at least one of: email, firstName, lastName, companyDomain, or companyName."
      properties:
        email:
          type: string
          description: Email address to enrich
          format: email
        firstName:
          type: string
          description: Person first name
        lastName:
          type: string
          description: Person last name
        companyDomain:
          type: string
          description: Company domain (e.g. acme.com)
        companyName:
          type: string
          description: Company name (alternative to domain)
        fullProfile:
          type: boolean
          description: "Deprecated and ignored: enrich always returns the full profile. Still accepted so existing requests keep working."
          deprecated: true
      additionalProperties: false
    EnrichCompanyBody:
      type: object
      properties:
        domain:
          type: string
          description: Company domain to resolve (e.g. acme.com)
        fullProfile:
          type: boolean
          description: "Deprecated and ignored: enrich always returns the full profile. Still accepted so existing requests keep working."
          deprecated: true
      required:
        - domain
      additionalProperties: false
    ContactEmailBody:
      type: object
      description: "Provide exactly one of: url; id; fullName + companyDomain; or firstName + lastName + companyDomain."
      properties:
        url:
          type: string
          description: Public Social profile URL
          format: uri
          example: https://social.com/in/janedoe
        id:
          type: string
          description: Reverse Contact person id (prs_...), as returned in the id field of any person response. Alternative to url.
          pattern: ^prs_[A-Za-z0-9]+$
          example: prs_01jbd5vewyenebxgaz869ffe5t
        fullName:
          type: string
          description: Person full name
          example: Jane Doe
        firstName:
          type: string
          description: Person first name
          example: Jane
        lastName:
          type: string
          description: Person last name
          example: Doe
        companyDomain:
          type: string
          description: Company domain (e.g. acme.com)
          example: acme.com
        emailType:
          $ref: "#/components/schemas/EmailType"
          description: "Kind of email to find: 'professional', 'personal', or 'any' to accept either. Omit it to find professional emails."
          default: professional
        webhookUrl:
          type: string
          description: Optional HTTPS URL for the result callback
          format: uri
      additionalProperties: false
      oneOf:
        - required:
            - url
        - required:
            - id
        - required:
            - fullName
            - companyDomain
        - required:
            - firstName
            - lastName
            - companyDomain
    ContactEmailVerifyBody:
      type: object
      properties:
        email:
          type: string
          description: Email address to verify
          format: email
          example: jane@acme.com
        webhookUrl:
          type: string
          description: Optional HTTPS URL for the result callback
          format: uri
      required:
        - email
      additionalProperties: false
    ContactPhoneBody:
      type: object
      description: "Provide exactly one of: url; id; fullName + companyDomain; or firstName + lastName + companyDomain."
      properties:
        url:
          type: string
          description: Public Social profile URL
          format: uri
          example: https://social.com/in/janedoe
        id:
          type: string
          description: Reverse Contact person id (prs_...), as returned in the id field of any person response. Alternative to url.
          pattern: ^prs_[A-Za-z0-9]+$
          example: prs_01jbd5vewyenebxgaz869ffe5t
        fullName:
          type: string
          description: Person full name
          example: Jane Doe
        firstName:
          type: string
          description: Person first name
          example: Jane
        lastName:
          type: string
          description: Person last name
          example: Doe
        companyDomain:
          type: string
          description: Company domain (e.g. acme.com)
          example: acme.com
        webhookUrl:
          type: string
          description: Optional HTTPS URL for the result callback
          format: uri
      additionalProperties: false
      oneOf:
        - required:
            - url
        - required:
            - id
        - required:
            - fullName
            - companyDomain
        - required:
            - firstName
            - lastName
            - companyDomain
    SearchPeopleFilters:
      type: object
      properties:
        firstName:
          type: string
          description: Filter by first name
          minLength: 1
        lastName:
          type: string
          description: Filter by last name
          minLength: 1
        headline:
          type: string
          description: Match text in the profile headline
          minLength: 1
        isOpenToWork:
          type: boolean
          description: Restrict to profiles flagged open to work
        isCurrentlyEmployed:
          type: boolean
          description: Filter by whether a profile has a current employer
        isPremium:
          type: boolean
          description: Restrict to Social Premium members
        isVerified:
          type: boolean
          description: Restrict to profiles with a verification badge
        followersCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum followers, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum followers, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        connectionsCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum connections, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum connections, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
          description: 'Connection count range, bounds inclusive. One bound is enough: { "min": 501 } keeps profiles with more than 500 connections'
        positionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past position title
        excludePositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past position title to exclude
        companyName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company name
        excludeCompanyName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company name to exclude
        companyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current or past company industry from the published taxonomy
        excludeCompanyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current or past company industry to exclude
        companyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company com_ id
        excludeCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company com_ id to exclude
        companyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company Social identifier
        excludeCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company Social identifier to exclude
        companyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company public id or slug
        excludeCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company public id or slug to exclude
        currentPositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current position title only
        excludeCurrentPositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current position title to exclude
        currentCompanyName:
          type: string
          description: Current employer name
          minLength: 1
        excludeCurrentCompanyName:
          type: string
          description: Current employer name to exclude
          minLength: 1
        currentCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer com_ id
        excludeCurrentCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer com_ id to exclude
        currentCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer Social identifier
        excludeCurrentCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer Social identifier to exclude
        currentCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer public id or slug
        excludeCurrentCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer public id or slug to exclude
        currentCompanyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current employer industry from the published taxonomy
        currentCompanyEmployeeCountRange:
          type: object
          properties:
            min:
              type: integer
              description: Minimum current-employer size
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum current-employer size
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        currentFunction:
          oneOf:
            - $ref: "#/components/schemas/JobFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobFunction"
          description: Current function taxonomy value
        excludeCurrentFunction:
          oneOf:
            - $ref: "#/components/schemas/JobFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobFunction"
          description: Current function taxonomy value to exclude
        currentSubFunction:
          oneOf:
            - $ref: "#/components/schemas/JobSubFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobSubFunction"
          description: Current sub-function taxonomy value
        excludeCurrentSubFunction:
          oneOf:
            - $ref: "#/components/schemas/JobSubFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobSubFunction"
          description: Current sub-function taxonomy value to exclude
        currentSeniority:
          oneOf:
            - $ref: "#/components/schemas/Seniority"
            - type: array
              items:
                $ref: "#/components/schemas/Seniority"
          description: Current seniority taxonomy value
        excludeCurrentSeniority:
          oneOf:
            - $ref: "#/components/schemas/Seniority"
            - type: array
              items:
                $ref: "#/components/schemas/Seniority"
          description: Current seniority taxonomy value to exclude
        currentContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of the current position, or OR-matched types. A position that declares no contract type never matches
        excludeCurrentContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of the current position to exclude. Needs a positive filter next to it
        contractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of any position, current or past, or OR-matched types. A position that declares no contract type never matches
        excludeContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type held in any position, current or past, to exclude. Needs a positive filter next to it
        schoolName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: School name, or OR-matched names, matched against every education entry. Whole words; every word must appear in the same school
        schoolId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Reverse Contact school id (sch_ followed by 26 characters), or OR-matched ids, matched against every education entry
        schoolLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: School Social identifier, or OR-matched identifiers, matched against every education entry. Some education entries do not carry one
        totalExperienceMonths:
          type: object
          properties:
            min:
              type: integer
              description: Minimum total career length in months
              minimum: 0
              maximum: 1200
            max:
              type: integer
              description: Maximum total career length in months
              minimum: 0
              maximum: 1200
          additionalProperties: false
        experience:
          type: array
          maxItems: 10
          description: Past-experience requirements; all entries are AND-combined
          items:
            type: object
            properties:
              dimension:
                type: string
                description: Taxonomy dimension
                enum:
                  - function
                  - subFunction
                  - seniority
              value:
                type: string
                description: Value from the selected taxonomy
                minLength: 1
              minMonths:
                type: integer
                description: Minimum tenure in months
                minimum: 0
                maximum: 720
            required:
              - dimension
              - value
            additionalProperties: false
        skills:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: 'Skill name or OR-matched skill names. Whole-value, case-insensitive match: "Java" does not match "JavaScript"'
        languages:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: "Language name in English, or OR-matched names. These names also match their native spellings: Arabic, Bengali, Catalan, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Mandarin, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Spanish, Swedish, Tagalog, Thai, Turkish, Ukrainian, Urdu, Vietnamese"
        excludeLanguages:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Language name in English, or names, to exclude. Needs a positive filter next to it
        keywords:
          type: string
          description: Words searched across the whole profile. Every word must appear, in any field; whole words only
          minLength: 1
        changedJobsWithinDays:
          type: integer
          description: Current position started within the last N days
          enum:
            - 30
            - 60
            - 90
            - 120
        location:
          type: object
          properties:
            country:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: Country name (e.g. "France")
            countryCode:
              oneOf:
                - $ref: "#/components/schemas/CountryCode"
                - type: array
                  items:
                    $ref: "#/components/schemas/CountryCode"
              description: ISO 3166 country code (e.g. "FR")
            area:
              oneOf:
                - $ref: "#/components/schemas/Area"
                - type: array
                  items:
                    $ref: "#/components/schemas/Area"
              description: "Zone id, or a list (e.g. \"MR:EMEA\", [\"MC:DACH\", \"MC:NORD\"]): main regions, UN regions and subregions, market clusters, institutional groups. Each zone matches the person's country among its member countries; zones add up with each other and with countryCode, and combine with region and city. The members of each zone are listed by the available-fields endpoint (location.area.areaCatalog)."
            region:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: State or region
            city:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: City
          additionalProperties: false
        maxDataAgeDate:
          type: string
          description: Only return profiles refreshed after this date
          format: date-time
      additionalProperties: false
    SearchPeopleBody:
      type: object
      properties:
        firstName:
          type: string
          description: Filter by first name
          minLength: 1
        lastName:
          type: string
          description: Filter by last name
          minLength: 1
        headline:
          type: string
          description: Match text in the profile headline
          minLength: 1
        isOpenToWork:
          type: boolean
          description: Restrict to profiles flagged open to work
        isCurrentlyEmployed:
          type: boolean
          description: Filter by whether a profile has a current employer
        isPremium:
          type: boolean
          description: Restrict to Social Premium members
        isVerified:
          type: boolean
          description: Restrict to profiles with a verification badge
        followersCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum followers, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum followers, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        connectionsCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum connections, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum connections, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
          description: 'Connection count range, bounds inclusive. One bound is enough: { "min": 501 } keeps profiles with more than 500 connections'
        positionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past position title
        excludePositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past position title to exclude
        companyName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company name
        excludeCompanyName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company name to exclude
        companyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current or past company industry from the published taxonomy
        excludeCompanyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current or past company industry to exclude
        companyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company com_ id
        excludeCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company com_ id to exclude
        companyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company Social identifier
        excludeCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company Social identifier to exclude
        companyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company public id or slug
        excludeCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current or past company public id or slug to exclude
        currentPositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current position title only
        excludeCurrentPositionTitle:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current position title to exclude
        currentCompanyName:
          type: string
          description: Current employer name
          minLength: 1
        excludeCurrentCompanyName:
          type: string
          description: Current employer name to exclude
          minLength: 1
        currentCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer com_ id
        excludeCurrentCompanyId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer com_ id to exclude
        currentCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer Social identifier
        excludeCurrentCompanyLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer Social identifier to exclude
        currentCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer public id or slug
        excludeCurrentCompanyPublicId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Current employer public id or slug to exclude
        currentCompanyIndustry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Current employer industry from the published taxonomy
        currentCompanyEmployeeCountRange:
          type: object
          properties:
            min:
              type: integer
              description: Minimum current-employer size
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum current-employer size
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        currentFunction:
          oneOf:
            - $ref: "#/components/schemas/JobFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobFunction"
          description: Current function taxonomy value
        excludeCurrentFunction:
          oneOf:
            - $ref: "#/components/schemas/JobFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobFunction"
          description: Current function taxonomy value to exclude
        currentSubFunction:
          oneOf:
            - $ref: "#/components/schemas/JobSubFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobSubFunction"
          description: Current sub-function taxonomy value
        excludeCurrentSubFunction:
          oneOf:
            - $ref: "#/components/schemas/JobSubFunction"
            - type: array
              items:
                $ref: "#/components/schemas/JobSubFunction"
          description: Current sub-function taxonomy value to exclude
        currentSeniority:
          oneOf:
            - $ref: "#/components/schemas/Seniority"
            - type: array
              items:
                $ref: "#/components/schemas/Seniority"
          description: Current seniority taxonomy value
        excludeCurrentSeniority:
          oneOf:
            - $ref: "#/components/schemas/Seniority"
            - type: array
              items:
                $ref: "#/components/schemas/Seniority"
          description: Current seniority taxonomy value to exclude
        currentContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of the current position, or OR-matched types. A position that declares no contract type never matches
        excludeCurrentContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of the current position to exclude. Needs a positive filter next to it
        contractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type of any position, current or past, or OR-matched types. A position that declares no contract type never matches
        excludeContractType:
          oneOf:
            - $ref: "#/components/schemas/ContractType"
            - type: array
              items:
                $ref: "#/components/schemas/ContractType"
          description: Contract type held in any position, current or past, to exclude. Needs a positive filter next to it
        schoolName:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: School name, or OR-matched names, matched against every education entry. Whole words; every word must appear in the same school
        schoolId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Reverse Contact school id (sch_ followed by 26 characters), or OR-matched ids, matched against every education entry
        schoolLinkedinId:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: School Social identifier, or OR-matched identifiers, matched against every education entry. Some education entries do not carry one
        totalExperienceMonths:
          type: object
          properties:
            min:
              type: integer
              description: Minimum total career length in months
              minimum: 0
              maximum: 1200
            max:
              type: integer
              description: Maximum total career length in months
              minimum: 0
              maximum: 1200
          additionalProperties: false
        experience:
          type: array
          maxItems: 10
          description: Past-experience requirements; all entries are AND-combined
          items:
            type: object
            properties:
              dimension:
                type: string
                description: Taxonomy dimension
                enum:
                  - function
                  - subFunction
                  - seniority
              value:
                type: string
                description: Value from the selected taxonomy
                minLength: 1
              minMonths:
                type: integer
                description: Minimum tenure in months
                minimum: 0
                maximum: 720
            required:
              - dimension
              - value
            additionalProperties: false
        skills:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: 'Skill name or OR-matched skill names. Whole-value, case-insensitive match: "Java" does not match "JavaScript"'
        languages:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: "Language name in English, or OR-matched names. These names also match their native spellings: Arabic, Bengali, Catalan, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Mandarin, Norwegian, Polish, Portuguese, Punjabi, Romanian, Russian, Spanish, Swedish, Tagalog, Thai, Turkish, Ukrainian, Urdu, Vietnamese"
        excludeLanguages:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Language name in English, or names, to exclude. Needs a positive filter next to it
        keywords:
          type: string
          description: Words searched across the whole profile. Every word must appear, in any field; whole words only
          minLength: 1
        changedJobsWithinDays:
          type: integer
          description: Current position started within the last N days
          enum:
            - 30
            - 60
            - 90
            - 120
        location:
          type: object
          properties:
            country:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: Country name (e.g. "France")
            countryCode:
              oneOf:
                - $ref: "#/components/schemas/CountryCode"
                - type: array
                  items:
                    $ref: "#/components/schemas/CountryCode"
              description: ISO 3166 country code (e.g. "FR")
            area:
              oneOf:
                - $ref: "#/components/schemas/Area"
                - type: array
                  items:
                    $ref: "#/components/schemas/Area"
              description: "Zone id, or a list (e.g. \"MR:EMEA\", [\"MC:DACH\", \"MC:NORD\"]): main regions, UN regions and subregions, market clusters, institutional groups. Each zone matches the person's country among its member countries; zones add up with each other and with countryCode, and combine with region and city. The members of each zone are listed by the available-fields endpoint (location.area.areaCatalog)."
            region:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: State or region
            city:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
              description: City
          additionalProperties: false
        maxDataAgeDate:
          type: string
          description: Only return profiles refreshed after this date
          format: date-time
        cursor:
          type: string
          description: Opaque cursor returned in metadata.nextCursor
          minLength: 1
        perPage:
          type: integer
          description: Results per page (1-100, default 25)
          minimum: 1
          maximum: 100
          default: 25
      additionalProperties: false
      example:
        currentFunction: Sales
        currentSeniority:
          - Director
          - VP
        location:
          countryCode: FR
        perPage: 25
    SearchPeoplePromptBody:
      type: object
      properties:
        prompt:
          type: string
          description: "Plain-language description of the people to find, in any language: at least 3 characters and at most 1000 tokens (about 4000 characters of English text)"
          minLength: 3
        cursor:
          type: string
          description: "Opaque cursor returned in metadata.nextCursor. Send it with the same prompt: it only works with the filters that produced it."
          minLength: 1
        perPage:
          type: integer
          description: Results per page (1-100, default 25)
          minimum: 1
          maximum: 100
          default: 25
      required:
        - prompt
      additionalProperties: false
      example:
        prompt: VP Sales in Paris at software companies with 50 to 200 employees
        perPage: 25
    SearchPeopleLookalikeBody:
      type: object
      properties:
        url:
          type: string
          description: Public Social profile URL of the seed. Required unless id is given.
          example: https://social.com/in/janedoe
        id:
          type: string
          description: Reverse Contact person id of the seed (prs_...), as returned in the id field of any person response. Required unless url is given.
          pattern: ^prs_[A-Za-z0-9]+$
          example: prs_01jbd5vewyenebxgaz869ffe5t
        cursor:
          type: string
          description: Opaque cursor returned in metadata.nextCursor. Send it with the same seed.
          minLength: 1
        perPage:
          type: integer
          description: Results per page (1-100, default 25)
          minimum: 1
          maximum: 100
          default: 25
      additionalProperties: false
      description: "Provide exactly one seed, url or id. Search filters are refused: the criteria come from the seed."
      oneOf:
        - required:
            - url
        - required:
            - id
      example:
        url: https://social.com/in/janedoe
        perPage: 25
    SearchPeopleCountBody:
      $ref: "#/components/schemas/SearchPeopleFilters"
    SearchPeopleAutoSuggestionBody:
      type: object
      properties:
        field:
          type: string
          description: The filter to complete
          enum:
            - skills
        query:
          type: string
          description: What has been typed so far
          minLength: 1
          maxLength: 100
        limit:
          type: integer
          description: Maximum values returned, 10 by default
          minimum: 1
          maximum: 25
      required:
        - field
        - query
      additionalProperties: false
    SearchOrganizationsFilters:
      type: object
      properties:
        companyName:
          type: string
          description: Filter by organization name
          minLength: 1
        companyDomain:
          type: string
          description: Filter by website domain (e.g. acme.com)
          minLength: 1
        industry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Industry name or array of industries. Matched exactly against the published taxonomy (see docs.reversecontact.com/guides/industries); an unlisted value is rejected with 422 INVALID_FILTER_VALUE and suggestions.
        specialities:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Speciality listed on the organization profile, or an array of specialities (OR matching)
        employeeCountRange:
          type: object
          properties:
            min:
              type: integer
              description: Minimum employees, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum employees, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        foundedYear:
          type: object
          properties:
            min:
              type: integer
              description: Earliest founding year, inclusive
              minimum: 0
              maximum: 2100
            max:
              type: integer
              description: Latest founding year, inclusive
              minimum: 0
              maximum: 2100
          additionalProperties: false
        followersCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum followers, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum followers, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        location:
          type: object
          properties:
            country:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
            countryCode:
              oneOf:
                - $ref: "#/components/schemas/CountryCode"
                - type: array
                  items:
                    $ref: "#/components/schemas/CountryCode"
            area:
              oneOf:
                - $ref: "#/components/schemas/Area"
                - type: array
                  items:
                    $ref: "#/components/schemas/Area"
              description: "Zone id, or a list (e.g. \"MR:EMEA\", [\"MC:DACH\", \"MC:NORD\"]): main regions, UN regions and subregions, market clusters, institutional groups. Each zone matches the headquarters' country among its member countries; zones add up with each other and with countryCode, and combine with region and city. The members of each zone are listed by the available-fields endpoint (location.area.areaCatalog)."
            region:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
            city:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
          additionalProperties: false
          description: Headquarters location; each property accepts one value or an OR-matched list
        maxDataAgeDate:
          type: string
          description: ISO 8601 datetime. Only returns organizations refreshed after this date. Needs at least one other filter.
          format: date-time
      additionalProperties: false
    SearchOrganizationsBody:
      type: object
      properties:
        companyName:
          type: string
          description: Filter by organization name
          minLength: 1
        companyDomain:
          type: string
          description: Filter by website domain (e.g. acme.com)
          minLength: 1
        industry:
          oneOf:
            - $ref: "#/components/schemas/Industry"
            - type: array
              items:
                $ref: "#/components/schemas/Industry"
          description: Industry name or array of industries. Matched exactly against the published taxonomy (see docs.reversecontact.com/guides/industries); an unlisted value is rejected with 422 INVALID_FILTER_VALUE and suggestions.
        specialities:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          description: Speciality listed on the organization profile, or an array of specialities (OR matching)
        employeeCountRange:
          type: object
          properties:
            min:
              type: integer
              description: Minimum employees, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum employees, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        foundedYear:
          type: object
          properties:
            min:
              type: integer
              description: Earliest founding year, inclusive
              minimum: 0
              maximum: 2100
            max:
              type: integer
              description: Latest founding year, inclusive
              minimum: 0
              maximum: 2100
          additionalProperties: false
        followersCount:
          type: object
          properties:
            min:
              type: integer
              description: Minimum followers, inclusive
              minimum: 0
              maximum: 1000000000
            max:
              type: integer
              description: Maximum followers, inclusive
              minimum: 0
              maximum: 1000000000
          additionalProperties: false
        location:
          type: object
          properties:
            country:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
            countryCode:
              oneOf:
                - $ref: "#/components/schemas/CountryCode"
                - type: array
                  items:
                    $ref: "#/components/schemas/CountryCode"
            area:
              oneOf:
                - $ref: "#/components/schemas/Area"
                - type: array
                  items:
                    $ref: "#/components/schemas/Area"
              description: "Zone id, or a list (e.g. \"MR:EMEA\", [\"MC:DACH\", \"MC:NORD\"]): main regions, UN regions and subregions, market clusters, institutional groups. Each zone matches the headquarters' country among its member countries; zones add up with each other and with countryCode, and combine with region and city. The members of each zone are listed by the available-fields endpoint (location.area.areaCatalog)."
            region:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
            city:
              oneOf:
                - type: string
                - type: array
                  items:
                    type: string
          additionalProperties: false
          description: Headquarters location; each property accepts one value or an OR-matched list
        maxDataAgeDate:
          type: string
          description: ISO 8601 datetime. Only returns organizations refreshed after this date. Needs at least one other filter.
          format: date-time
        cursor:
          type: string
          description: Opaque cursor returned in metadata.nextCursor
          minLength: 1
        perPage:
          type: integer
          description: Results per page (1-100, default 25)
          minimum: 1
          maximum: 100
          default: 25
      additionalProperties: false
      example:
        industry: Software Development
        employeeCountRange:
          min: 51
          max: 200
        foundedYear:
          min: 2015
        location:
          countryCode: FR
        perPage: 25
    SearchOrganizationsCountBody:
      $ref: "#/components/schemas/SearchOrganizationsFilters"
    SearchOrganizationsPromptBody:
      type: object
      properties:
        prompt:
          type: string
          description: "Plain-language description of the organizations to find, in any language: at least 3 characters and at most 1000 tokens (about 4000 characters of English text)"
          minLength: 3
        cursor:
          type: string
          description: "Opaque cursor returned in metadata.nextCursor. Send it with the same prompt: it only works with the filters that produced it."
          minLength: 1
        perPage:
          type: integer
          description: Results per page (1-100, default 25)
          minimum: 1
          maximum: 100
          default: 25
      required:
        - prompt
      additionalProperties: false
      example:
        prompt: Software companies in Berlin with 200 to 500 employees, founded after 2015
        perPage: 25
security:
  - bearerAuth: []
externalDocs:
  description: Reverse Contact API documentation
  url: https://docs.reversecontact.com/
