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

# List all candidates

> Returns a paginated list of all visible candidates (CVtheque). By default, all candidates visible to the user are listed.



## OpenAPI

````yaml /api-reference/openapi.json get /candidate
openapi: 3.0.3
info:
  title: JobAffinity REST API
  version: '1.12'
  description: >
    JobAffinity REST API for managing jobs, candidates, applications, and
    recruitment processes.


    ## Authentication

    All endpoints require HTTP Basic Authentication.


    ## Versioning

    Current version: 1.12


    See `/restapi/changelog` for version history and changes.
  contact:
    name: JobAffinity API Support
servers:
  - url: https://jobaffinity.fr/restapi/v1
    description: REST API v1
  - url: https://jobaffinity.fr/restapi
    description: REST API root (for changelog)
security:
  - basicAuth: []
tags:
  - name: API Info
    description: API metadata and changelog
  - name: Jobs
    description: Job listings and details
  - name: Candidates
    description: Candidate information
  - name: Applications
    description: Job applications
  - name: Processes
    description: Recruitment processes and steps
  - name: Notes
    description: Candidate notes
  - name: Questionnaires
    description: Questionnaire answers
  - name: Webhooks
    description: Webhook tasks
  - name: Job Application Submission
    description: >-
      Submit candidate applications to a job posting via the apply URL provided
      in the job feed. The authentication token is embedded in the URL — no
      additional credentials are required.
paths:
  /candidate:
    get:
      tags:
        - Candidates
      summary: List all candidates
      description: >-
        Returns a paginated list of all visible candidates (CVtheque). By
        default, all candidates visible to the user are listed.
      operationId: listCandidates
      parameters:
        - $ref: '#/components/parameters/limitParam'
        - $ref: '#/components/parameters/sinceParam'
        - name: first_name
          in: query
          description: Search candidates by first name.
          schema:
            type: string
        - name: last_name
          in: query
          description: Search candidates by last name.
          schema:
            type: string
        - name: email
          in: query
          description: >-
            Search candidates by email address. Searches both primary email and
            secondary email.
          schema:
            type: string
            format: email
        - name: pool_name
          in: query
          description: >-
            Search candidates by pool (vivier) name. Can be specified multiple
            times for AND logic (candidate must be in all specified pools). Use
            the pipe character `|` within a single value for OR logic (e.g.
            `pool_name=ios|android`).
          schema:
            type: string
      responses:
        '200':
          description: Paginated list of candidates
          content:
            application/json:
              schema:
                type: object
                properties:
                  _self:
                    type: string
                    format: uri
                  _schema:
                    type: string
                    format: uri
                  _status:
                    type: string
                    enum:
                      - OK
                      - INVALID
                  _next:
                    type: string
                    format: uri
                    nullable: true
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Candidate'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
components:
  parameters:
    limitParam:
      name: limit
      in: query
      description: Maximum number of items to return per page
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    sinceParam:
      name: since
      in: query
      description: Return items created or modified since this ID
      schema:
        type: integer
        minimum: 0
  schemas:
    Candidate:
      type: object
      properties:
        _self:
          type: string
          format: uri
          description: URL of the candidate resource
        _schema:
          type: string
          format: uri
        _status:
          type: string
          enum:
            - OK
            - INVALID
        id:
          type: integer
          description: Candidate identifier
        title:
          type: string
          enum:
            - MR
            - MS
          description: Candidate title
        first_name:
          type: string
          description: First name
        last_name:
          type: string
          description: Last name
        email:
          type: string
          format: email
          description: Primary email address
        email_secondary:
          type: string
          format: email
          description: Secondary email address
        birthdate:
          type: string
          format: date
          description: Date of birth (YYYY-MM-DD)
        home_phone:
          type: string
          description: Home phone number
        mobile_phone:
          type: string
          description: Mobile phone number
        office_phone:
          type: string
          description: Office phone number
        location:
          $ref: '#/components/schemas/PostalAddress'
          description: Candidate postal address
        position:
          type: string
          description: Current position/job title
        position_company:
          type: string
          description: Current company
        experience_start:
          type: string
          format: date
          description: Start of professional experience (YYYY-MM-DD)
        linkedin:
          type: string
          format: uri
          description: LinkedIn profile URL
        instagram:
          type: string
          format: uri
          description: Instagram profile URL
        applications:
          type: object
          properties:
            _self:
              type: string
              format: uri
        notes:
          type: object
          properties:
            _self:
              type: string
              format: uri
        pools:
          type: object
          description: Candidate pools (viviers)
          properties:
            items:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: Pool name
                  candidates:
                    type: object
                    properties:
                      _self:
                        type: string
                        format: uri
                        description: URL to list candidates in this pool
    PostalAddress:
      type: object
      properties:
        address:
          type: string
          description: The street address
        postalcode:
          type: string
          description: The postal code
        town:
          type: string
          description: Town in which the street address is
        country:
          type: string
          description: Country (ISO 3166-1 alpha-2 country code)
  responses:
    UnauthorizedError:
      description: Authentication information is missing or invalid
      headers:
        WWW-Authenticate:
          schema:
            type: string
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic Authentication with API credentials

````