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

# Start validation run

> Starts asynchronous email validation for the contacts the filters resolve to.

Before returning, submission resolves and persists exact lead IDs and emails after filters,
exclusions, sequence scope, deduplication, and the effective limit. The exact selected count
is checked against current credits; insufficient credits return 402 without creating a run.
Non-empty runs return pending. Empty selections return a terminal failed run with
failureCode validation_scope_empty. The deprecated strict field is accepted and ignored.



## OpenAPI

````yaml https://multichannel-api.salesforge.ai/public/multichannel/swagger/doc.json post /multichannel/workspaces/{workspaceID}/validations
openapi: 3.1.0
info:
  description: Multichannel public endpoints consumed through salesforge-api public docs.
  title: Multichannel Public API
  version: '1.0'
servers:
  - url: https://multichannel-api.salesforge.ai/public
security:
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
externalDocs:
  description: ''
  url: ''
paths:
  /multichannel/workspaces/{workspaceID}/validations:
    post:
      tags:
        - Validations
      summary: Start validation run
      description: >-
        Starts asynchronous email validation for the contacts the filters
        resolve to.


        Before returning, submission resolves and persists exact lead IDs and
        emails after filters,

        exclusions, sequence scope, deduplication, and the effective limit. The
        exact selected count

        is checked against current credits; insufficient credits return 402
        without creating a run.

        Non-empty runs return pending. Empty selections return a terminal failed
        run with

        failureCode validation_scope_empty. The deprecated strict field is
        accepted and ignored.
      parameters:
        - description: Workspace ID
          in: path
          name: workspaceID
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                - $ref: '#/components/schemas/requests.StartValidationRunRequest'
                  description: Start validation run request
                  summary: request
        description: Start validation run request
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.StartValidationRunResponse'
          description: Validation initiated
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Insufficient email-validation credits
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Forbidden
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Internal Server Error
      security:
        - ApiKeyAuth: []
components:
  schemas:
    requests.StartValidationRunRequest:
      properties:
        filters:
          $ref: '#/components/schemas/requests.ValidationFiltersRequest'
        limit:
          type: integer
        strict:
          description: >-
            Deprecated: Strict is accepted and ignored because empty scopes
            become terminal failed runs.
          type: boolean
          x-deprecated: true
      required:
        - filters
      type: object
    responses.StartValidationRunResponse:
      properties:
        failureCode:
          $ref: '#/components/schemas/models.ValidationRunFailureCode'
        matched:
          description: >-
            Matched counts contacts returned while resolving the submitted
            scope.

            Deprecated: use selected at submission and validation results after
            completion.
          type: integer
          x-deprecated: true
        message:
          description: >-
            Deprecated: inspect status and failureCode on validation results
            instead.
          type: string
          x-deprecated: true
        selected:
          description: Selected counts the exact candidates frozen for this run.
          type: integer
        skipped:
          $ref: '#/components/schemas/responses.ValidationSkipCountsResponse'
        started:
          description: >-
            Deprecated: Started is retained as true for accepted asynchronous
            submissions.
          type: boolean
          x-deprecated: true
        status:
          description: Status is the lifecycle status at submission completion.
          enum:
            - pending
            - failed
          example: pending
          type: string
        validationJobID:
          type: string
      type: object
    responses.ErrorResponse:
      properties:
        data:
          description: >-
            Optional error context. Its shape depends on the message and
            endpoint.
        message:
          description: >-
            Human-readable error text or, for documented cases, a stable
            machine-readable code that clients can branch on.
          example: Invalid request body
          type: string
      type: object
    requests.ValidationFiltersRequest:
      properties:
        customVarIds:
          items:
            type: string
          type: array
          uniqueItems: false
        customVars:
          items:
            type: string
          type: array
          uniqueItems: false
        deleted:
          type: boolean
        esps:
          items:
            type: string
          type: array
          uniqueItems: false
        excludeContacted:
          type: boolean
        hasEmail:
          type: boolean
        hasValidLinkedIn:
          type: boolean
        leadIds:
          items:
            type: string
          type: array
          uniqueItems: false
        notInCustomVarIds:
          items:
            type: string
          type: array
          uniqueItems: false
        notInCustomVars:
          items:
            type: string
          type: array
          uniqueItems: false
        notInESPs:
          items:
            type: string
          type: array
          uniqueItems: false
        notInLeadIds:
          items:
            type: string
          type: array
          uniqueItems: false
        notInTagIds:
          items:
            type: string
          type: array
          uniqueItems: false
        numberOfContactsToAdd:
          type: integer
        searchQuery:
          type: string
        selectionScope:
          type: string
        tagIds:
          items:
            type: string
          type: array
          uniqueItems: false
        validationStatuses:
          items:
            type: string
          type: array
          uniqueItems: false
        withEmailOnly:
          type: boolean
      type: object
    models.ValidationRunFailureCode:
      description: FailureCode identifies a stable terminal failure reason.
      enum:
        - validation_scope_empty
        - insufficient_credits
        - validation_execution_failed
        - validation_timed_out
        - validation_results_sync_failed
        - credit_reservation_failed
        - credit_reconciliation_failed
        - validation_processing_failed
      type: string
      x-enum-varnames:
        - ValidationRunFailureCodeValidationScopeEmpty
        - ValidationRunFailureCodeInsufficientCredits
        - ValidationRunFailureCodeValidationExecutionFailed
        - ValidationRunFailureCodeValidationTimedOut
        - ValidationRunFailureCodeValidationResultsSyncFailed
        - ValidationRunFailureCodeCreditReservationFailed
        - ValidationRunFailureCodeCreditReconciliationFailed
        - ValidationRunFailureCodeValidationProcessingFailed
    responses.ValidationSkipCountsResponse:
      description: Skipped reports exact request-time duplicate exclusions.
      properties:
        duplicate:
          type: integer
      type: object
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: Authorization
      type: apiKey

````

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