Paradox Candidates API

Manage candidates including creating, retrieving, updating, deleting, messaging, and unsubscribing

OpenAPI Specification

paradox-candidates-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Paradox Authentication Candidates API
  description: API for the Paradox conversational AI recruiting platform powered by Olivia. Provides endpoints for managing candidates, users, interview scheduling, locations, company data, reporting, and candidate attributes. Paradox automates candidate screening, interview scheduling, and hiring workflows through chat, SMS, and mobile-driven experiences.
  version: 1.0.0
  contact:
    name: Paradox Support
    url: https://www.paradox.ai/contact
    email: support@paradox.ai
  license:
    name: Proprietary
    url: https://www.paradox.ai/legal/service-terms
  termsOfService: https://www.paradox.ai/legal/service-terms
servers:
- url: https://api.paradox.ai/api/v1/public
  description: Production (US)
- url: https://api.eu1.paradox.ai/api/v1/public
  description: Production (EU)
- url: https://stgapi.paradox.ai/api/v1/public
  description: Staging (US)
- url: https://api.stg.eu1.paradox.ai/api/v1/public
  description: Staging (EU)
- url: https://testapi.paradox.ai/api/v1/public
  description: Test
- url: https://dev2api.paradox.ai/api/v1/public
  description: Development
security:
- oauth2: []
- bearerAuth: []
tags:
- name: Candidates
  description: Manage candidates including creating, retrieving, updating, deleting, messaging, and unsubscribing
paths:
  /candidates:
    get:
      operationId: getCandidates
      summary: Paradox Get candidates
      description: Retrieve a list of candidates with optional filtering by date range, status, group, location, source, and other criteria.
      tags:
      - Candidates
      parameters:
      - name: start_date
        in: query
        description: Filter candidates created after this date (ISO 8601)
        schema:
          type: string
          format: date-time
      - name: end_date
        in: query
        description: Filter candidates created before this date (ISO 8601)
        schema:
          type: string
          format: date-time
      - name: created_start_date
        in: query
        description: Filter by candidate creation start date
        schema:
          type: string
          format: date-time
      - name: start_keyword
        in: query
        description: Search keyword filter
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of results to return (max 50)
        schema:
          type: integer
          maximum: 50
          default: 50
      - name: offset
        in: query
        description: Number of results to skip for pagination
        schema:
          type: integer
          default: 0
      - name: page
        in: query
        description: Page number for pagination
        schema:
          type: integer
      - name: status
        in: query
        description: Filter by candidate status
        schema:
          type: string
      - name: group_name
        in: query
        description: Filter by group name
        schema:
          type: string
      - name: location_id
        in: query
        description: Filter by location identifier
        schema:
          type: string
      - name: source
        in: query
        description: Filter by candidate source
        schema:
          type: string
      - name: conversation
        in: query
        description: Include conversation data
        schema:
          type: boolean
      - name: interviews
        in: query
        description: Include interview data
        schema:
          type: boolean
      - name: note
        in: query
        description: Include candidate notes
        schema:
          type: boolean
      - name: profile_id
        in: query
        description: Filter by profile identifier
        schema:
          type: string
      - name: include_attributes
        in: query
        description: Include candidate attribute data in response
        schema:
          type: boolean
      - name: candidate_journey_status
        in: query
        description: Filter by candidate journey status
        schema:
          type: string
      - name: job_loc_code
        in: query
        description: Filter by job location code
        schema:
          type: string
      - name: job_req_id
        in: query
        description: Filter by job requisition ID
        schema:
          type: string
      - name: ex_id
        in: query
        description: Filter by external candidate identifier
        schema:
          type: string
      - name: email
        in: query
        description: Filter by candidate email
        schema:
          type: string
          format: email
      responses:
        '200':
          description: List of candidates returned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  candidates:
                    type: array
                    items:
                      $ref: '#/components/schemas/Candidate'
                  limit:
                    type: integer
                  count:
                    type: integer
                  offset:
                    type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCandidate
      summary: Paradox Create candidate
      description: Create a new candidate in the Paradox platform. Requires at minimum a name (or first_name and last_name), phone number, and email address.
      tags:
      - Candidates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CandidateCreate'
          multipart/form-data:
            schema:
              allOf:
              - $ref: '#/components/schemas/CandidateCreate'
              - type: object
                properties:
                  resume:
                    type: string
                    format: binary
                    description: Resume file (PDF, DOC, DOCX, PNG, JPG, TXT; max 10MB)
                  offer_letter:
                    type: string
                    format: binary
                    description: Offer letter file (DOC, DOCX, PDF, PNG, JPG, JPEG, TXT, Pages, HTML; max 10MB)
                  candidatedata:
                    type: string
                    format: binary
                    description: Bulk operation file for mass create/update
      responses:
        '200':
          description: Candidate created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  candidate:
                    $ref: '#/components/schemas/Candidate'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /candidates/{id}:
    get:
      operationId: getCandidate
      summary: Paradox Get single candidate
      description: Retrieve details for a specific candidate by OID or external OID.
      tags:
      - Candidates
      parameters:
      - $ref: '#/components/parameters/CandidateId'
      - name: conversation
        in: query
        description: Include conversation history
        schema:
          type: boolean
      - name: note
        in: query
        description: Include candidate notes
        schema:
          type: boolean
      responses:
        '200':
          description: Candidate details returned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  candidate:
                    $ref: '#/components/schemas/Candidate'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCandidate
      summary: Paradox Update candidate
      description: Update an existing candidate by OID, external OID, or external ID. Supports updating name, contact information, status, journey details, attributes, and attached documents.
      tags:
      - Candidates
      parameters:
      - $ref: '#/components/parameters/CandidateId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CandidateUpdate'
          multipart/form-data:
            schema:
              allOf:
              - $ref: '#/components/schemas/CandidateUpdate'
              - type: object
                properties:
                  resume:
                    type: string
                    format: binary
                    description: Resume file (max 10MB)
                  offer_letter:
                    type: string
                    format: binary
                    description: Offer letter file (max 10MB)
      responses:
        '200':
          description: Candidate updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  candidate:
                    $ref: '#/components/schemas/Candidate'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteCandidate
      summary: Paradox Delete candidate
      description: Delete a candidate by OID or external OID.
      tags:
      - Candidates
      parameters:
      - $ref: '#/components/parameters/CandidateId'
      responses:
        '200':
          description: Candidate deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /candidates/unsubscribe:
    put:
      operationId: unsubscribeCandidate
      summary: Paradox Unsubscribe candidate
      description: Unsubscribe or resubscribe a candidate from communications. Use action_id 1 to unsubscribe and 0 to resubscribe.
      tags:
      - Candidates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - OID
              - action_id
              properties:
                OID:
                  type: integer
                  description: Candidate internal identifier
                action_id:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: 1 to unsubscribe, 0 to resubscribe
      responses:
        '200':
          description: Subscription status updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  OID:
                    type: integer
                  unsubscribed:
                    type: boolean
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /candidates/send_message:
    post:
      operationId: sendCandidateMessage
      summary: Paradox Send candidate message
      description: Send a message to a candidate via their preferred contact method.
      tags:
      - Candidates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - OID
              - message
              properties:
                OID:
                  type: integer
                  description: Candidate internal identifier
                message:
                  type: string
                  description: Message content to send
                send_as:
                  type: string
                  description: Send message as a specific user
                contact_method:
                  type: string
                  description: Contact method to use for delivery
                email_subject:
                  type: string
                  description: Email subject line (when sending via email)
      responses:
        '200':
          description: Message sent successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /candidates/background_check/standard:
    post:
      operationId: sendBackgroundCheckStandard
      summary: Paradox Send standard background check
      description: Initiate a standard background check for a candidate.
      tags:
      - Candidates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                candidate_id:
                  type: string
                  description: Paradox candidate identifier
                ex_application_id:
                  type: string
                  description: External application identifier
                ex_candidate_id:
                  type: string
                  description: External candidate identifier
                background_check_url:
                  type: string
                  format: uri
                  description: URL for the background check
                status:
                  type: string
                  description: Background check status
      responses:
        '200':
          description: Background check initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /candidates/background_check/checkr:
    post:
      operationId: sendBackgroundCheckCheckr
      summary: Paradox Send Checkr background check
      description: Initiate a background check through Checkr integration.
      tags:
      - Candidates
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                candidate_id:
                  type: string
                  description: Paradox candidate identifier
                status:
                  type: string
                  description: Background check status
      responses:
        '200':
          description: Checkr background check initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /candidates/background_check/firstadvance:
    post:
      operationId: sendBackgroundCheckFirstAdvantage
      summary: Paradox Send First Advantage background check
      description: Initiate a background check through First Advantage integration.
      tags:
      - Candidates
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
                  format: uri
                  description: First Advantage check URL
                status:
                  type: string
                  description: Background check status
                sf_applicant_id:
                  type: string
                  description: Salesforce applicant identifier
      responses:
        '200':
          description: First Advantage background check initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    CandidateUpdate:
      type: object
      description: Request body for updating an existing candidate
      properties:
        name:
          type: string
          maxLength: 50
        first_name:
          type: string
        last_name:
          type: string
        phone:
          type: string
          maxLength: 20
        email:
          type: string
          format: email
          maxLength: 50
        ex_id:
          type: string
          maxLength: 255
        hirevue_link:
          type: string
          maxLength: 255
        pymetrics_link:
          type: string
          maxLength: 255
        ex_step:
          type: string
        ex_status:
          type: string
        ex_reason:
          type: string
        job_req_id:
          type: string
          maxLength: 255
        job_title:
          type: string
          maxLength: 255
        job_loc_code:
          type: string
          maxLength: 20
        primary_contact_method:
          type: string
        hired_date:
          type: string
          format: date-time
        adp_link:
          type: string
          maxLength: 255
        audience_type:
          type: string
          maxLength: 255
        recruiter_email:
          type: string
          format: email
        hiring_manager:
          type: string
        language_preference:
          type: string
        candidate_journey:
          type: string
        candidate_journey_status:
          type: string
        candidate_attribute_data:
          type: object
          additionalProperties:
            type: string
            maxLength: 255
        note:
          type: string
        use_paradox_status_map:
          type: boolean
        status_map_name:
          type: string
        status_map_ex_id:
          type: string
    Candidate:
      type: object
      description: A candidate in the Paradox recruiting platform
      properties:
        OID:
          type: integer
          description: Unique internal candidate identifier
        external_oid:
          type: string
          description: Encrypted external candidate identifier
        name:
          type: string
          maxLength: 50
          description: Full name of the candidate
        first_name:
          type: string
          description: First name of the candidate
        last_name:
          type: string
          description: Last name of the candidate
        email:
          type: string
          format: email
          maxLength: 50
          description: Email address
        phone:
          type: string
          maxLength: 20
          description: Phone number with country code
        ex_id:
          type: string
          maxLength: 255
          description: External candidate identifier
        ex_status:
          type: string
          description: External status designation
        ex_step:
          type: string
          description: External step designation
        ex_reason:
          type: string
          description: External reason designation
        job_req_id:
          type: string
          maxLength: 255
          description: Job requisition identifier
        job_title:
          type: string
          maxLength: 255
          description: Job position title
        job_loc_code:
          type: string
          maxLength: 20
          description: Job location code
        primary_contact_method:
          type: integer
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          description: 'Contact preference: 1=Email, 2=SMS, 3=Email & SMS, 4=WhatsApp & Email, 5=WhatsApp'
        hired_date:
          type:
          - string
          - 'null'
          format: date-time
          description: Employment start date
        hirevue_link:
          type: string
          maxLength: 255
          description: HireVue virtual interview link
        pymetrics_link:
          type: string
          maxLength: 255
          description: Pymetrics assessment link
        adp_link:
          type: string
          maxLength: 255
          description: ADP system link
        hirevue_instructions:
          type: string
          maxLength: 255
          description: Interview guidance text
        audience_type:
          type: string
          maxLength: 255
          description: Candidate tier classification
        hm_cid:
          type: string
          maxLength: 255
          description: Hirescore candidate identifier
        external_group_id:
          type: string
          description: Group classification identifier
        referrer_email:
          type: string
          format: email
          maxLength: 50
          description: Referral source email address
        referrer_name:
          type: string
          maxLength: 50
          description: Referral source name
        recruiter_email:
          type: string
          format: email
          description: Assigned recruiter email
        hiring_manager:
          type: string
          description: Assigned hiring manager contact
        external_referrer:
          type: string
          maxLength: 1000
          description: External referral source
        language_preference:
          type: string
          default: en
          description: Language code preference
        candidate_journey:
          type: string
          description: Journey workflow name
        candidate_journey_status:
          type: string
          description: Current journey stage designation
        candidate_attribute_data:
          type: object
          additionalProperties:
            type: string
            maxLength: 255
          description: Custom key-value attributes
        job_application_id:
          type: string
          maxLength: 255
          description: Application identifier
        candidate_location_info:
          type: string
          maxLength: 100
          description: Geographic location information
        external_source_id:
          type: string
          maxLength: 255
          description: Source system identifier
        talent_community:
          type: boolean
          default: false
          description: Whether candidate is in the talent pool
        community_of_interest:
          type: integer
          description: Community identifier when in talent pool
        consent_to_marketing:
          type: string
          description: Marketing consent status
        note:
          type: string
          description: Internal candidate notes
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
    CandidateCreate:
      type: object
      description: Request body for creating a new candidate
      required:
      - phone
      - email
      properties:
        name:
          type: string
          maxLength: 50
          description: Full name (required if first_name/last_name not provided)
        first_name:
          type: string
          description: First name (use with last_name instead of name)
        last_name:
          type: string
          description: Last name (use with first_name instead of name)
        phone:
          type: string
          maxLength: 20
          description: Phone number with country code
        email:
          type: string
          format: email
          maxLength: 50
          description: Email address
        ex_id:
          type: string
          maxLength: 255
          description: External candidate identifier
        hirevue_link:
          type: string
          maxLength: 255
        pymetrics_link:
          type: string
          maxLength: 255
        ex_step:
          type: string
        ex_status:
          type: string
        ex_reason:
          type: string
        job_req_id:
          type: string
          maxLength: 255
        job_title:
          type: string
          maxLength: 255
        job_loc_code:
          type: string
          maxLength: 20
        primary_contact_method:
          type: string
          description: 1=Email, 2=SMS, 3=Email & SMS, 4=WhatsApp & Email, 5=WhatsApp
        hired_date:
          type: string
          format: date-time
        adp_link:
          type: string
          maxLength: 255
        audience_type:
          type: string
          maxLength: 255
        hm_cid:
          type: string
          maxLength: 255
        external_group_id:
          type: string
        hirevue_instructions:
          type: string
          maxLength: 255
        referrer_email:
          type: string
          format: email
          maxLength: 50
        referrer_name:
          type: string
          maxLength: 50
        recruiter_email:
          type: string
          format: email
        hiring_manager:
          type: string
        external_referrer:
          type: string
          maxLength: 1000
        language_preference:
          type: string
          default: en
        candidate_journey:
          type: string
        candidate_journey_status:
          type: string
        candidate_attribute_data:
          type: object
          additionalProperties:
            type: string
            maxLength: 255
        note:
          type: string
        job_application_id:
          type: string
          maxLength: 255
        use_application_id_for_identity:
          type: boolean
          default: false
          description: Use application ID to identify returning candidates
        candidate_location_info:
          type: string
          maxLength: 100
        external_source_id:
          type: string
          maxLength: 255
        offer_file_name:
          type: string
          maxLength: 150
          description: Offer document filename
        use_paradox_status_map:
          type: boolean
          default: false
          description: Enable Paradox status mapping
        status_map_name:
          type: string
          description: Paradox journey status name for mapping
        status_map_ex_id:
          type: string
          description: External system status identifier for mapping
        talent_community:
          type: boolean
          default: false
        community_of_interest:
          type: integer
        skip_send_opt_in:
          type: boolean
          description: Bypass opt-in messaging
        consent_to_marketing:
          type: string
  responses:
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                const: false
              message:
                type: string
    BadRequest:
      description: Invalid request data
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                const: false
              message:
                type: string
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                const: false
              message:
                type: string
  parameters:
    CandidateId:
      name: id
      in: path
      required: true
      description: Candidate OID, external OID, or external ID
      schema:
        type: string
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 client credentials authentication
      flows:
        clientCredentials:
          tokenUrl: /auth/token
          scopes: {}
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Bearer token obtained from the OAuth 2.0 token endpoint
externalDocs:
  description: Paradox API Documentation
  url: https://readme.paradox.ai/docs