Willo Participants API

Candidates invited to an interview - no download, login, or authentication required.

OpenAPI Specification

willo-participants-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Willo Integration API V2 Child Organisations Participants API
  description: 'The Willo Integration API V2 exposes the actions that can be carried out in the Willo asynchronous ("one-way") video interviewing platform as a public REST API, so you can add video interviewing to a job board, ATS, CRM, or staffing platform. Resources include Departments (called "Companies" in the UI), Interviews (the set of pre-defined questions a participant answers - typically a "job" in an ATS), Participants (candidates - no login or app required), their video Responses and identity-verification media, Message Templates (invite/reminder/success email and SMS), Users, Webhooks, Interview Templates, and Child Organisations. Authentication is by API key ("integration key") passed in the Authorization header; each user has their own key from the Willo Integrations page. All requests must be made over HTTPS.

    Endpoint paths, HTTP methods, authentication, status codes, webhook triggers, and the two host environments below are confirmed from Willo''s published Postman API reference. Request and response body schemas are modeled from the documented resource glossary and are illustrative; confirm exact field names and shapes against the live Willo reference before production use.'
  version: '2.0'
  contact:
    name: Willo
    url: https://www.willo.video/api
  termsOfService: https://www.willo.video/terms
servers:
- url: https://api.willotalent.com/api/integrations/v2
  description: Production
- url: https://api.stage.willotalent.com/api/integrations/v2
  description: Staging
security:
- apiKeyAuth: []
tags:
- name: Participants
  description: Candidates invited to an interview - no download, login, or authentication required.
paths:
  /participants/:
    get:
      operationId: listParticipants
      tags:
      - Participants
      summary: List Participants
      description: Lists participants (candidates) accessible to the API key.
      responses:
        '200':
          description: A list of participants.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/Participant'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: inviteParticipant
      tags:
      - Participants
      summary: Invite Participant
      description: Invites a participant to an interview. An invite (and optional reminder) email/SMS is sent based on the interview's message templates.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParticipantInput'
      responses:
        '201':
          description: The invited participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /participants/{key}/:
    parameters:
    - $ref: '#/components/parameters/Key'
    get:
      operationId: getParticipant
      tags:
      - Participants
      summary: Participant Details
      description: Retrieves a single participant, including their video responses when the interview has been completed.
      responses:
        '200':
          description: The requested participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: replaceParticipant
      tags:
      - Participants
      summary: Update Participant (PUT)
      description: Fully replaces a participant.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParticipantInput'
      responses:
        '200':
          description: The updated participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateParticipant
      tags:
      - Participants
      summary: Update Participant (PATCH)
      description: Partially updates a participant (for example, to change their stage).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParticipantInput'
      responses:
        '200':
          description: The updated participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteParticipant
      tags:
      - Participants
      summary: Delete Participant
      description: Deletes a participant.
      responses:
        '204':
          description: The participant was deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /participants/{key}/idv-info/:
    parameters:
    - $ref: '#/components/parameters/Key'
    get:
      operationId: getParticipantIdvInfo
      tags:
      - Participants
      summary: Participant Identity Verification Details
      description: Retrieves the identity-verification (IDV) result and metadata for a participant.
      responses:
        '200':
          description: The participant's IDV details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdvInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /participants/{key}/idv-media/:
    parameters:
    - $ref: '#/components/parameters/Key'
    get:
      operationId: getParticipantIdvMedia
      tags:
      - Participants
      summary: Participant Identity Verification Media
      description: Retrieves the identity-verification media (for example, document and selfie images) for a participant.
      responses:
        '200':
          description: The participant's IDV media references.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdvMedia'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    ParticipantInput:
      type: object
      required:
      - interview
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        interview:
          type: string
        stage:
          type: string
    IdvInfo:
      type: object
      description: Identity-verification result and metadata for a participant.
      properties:
        status:
          type: string
        country:
          type: string
        checked_at:
          type: string
          format: date-time
    IdvMedia:
      type: object
      description: References to identity-verification media captured for a participant.
      properties:
        media:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              url:
                type: string
                format: uri
    Error:
      type: object
      properties:
        detail:
          type: string
    Response:
      type: object
      description: A participant's answer to a single interview question.
      properties:
        question:
          type: string
          description: Key or prompt of the answered question.
        media_url:
          type: string
          format: uri
          description: URL to the recorded video or audio answer.
        transcript:
          type: string
        score:
          type: number
    Participant:
      type: object
      description: A candidate invited to an interview.
      properties:
        key:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
          description: E.164-formatted phone number, used for SMS invites and reminders.
        interview:
          type: string
          description: Key of the interview the participant was invited to.
        stage:
          type: string
          description: The participant's current stage on the Willo Kanban board.
        responses:
          type: array
          items:
            $ref: '#/components/schemas/Response'
        created:
          type: string
          format: date-time
  responses:
    NotFound:
      description: The requested resource does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: No valid API key was provided.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request was unacceptable, often due to a missing required parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    Key:
      name: key
      in: path
      required: true
      description: The unique key of the resource.
      schema:
        type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: The integration key ("API key") available on the Willo Integrations page at https://app.willotalent.com/integrations, sent in the Authorization header. Each user has their own key carrying that user's permissions.