Spark Hire Interviews API

One-way and live video interviews.

OpenAPI Specification

spark-hire-interviews-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Spark Hire Account Interviews API
  description: 'The Spark Hire API embeds video interviewing and talent assessment into an applicant tracking system or custom hiring application. It is a RESTful API with JSON responses served under https://api.sparkhire.com/v1.0. It manages jobs, one-way and live video interviews, interview questions and reusable question sets, company users (evaluators) and their integration API keys, candidate share links, and webhook subscriptions for interview and job lifecycle events.


    Authentication uses HTTP Basic: the username is your API key and the password is ignored. API keys are tied to an individual user and respect that user''s permission level. API access is not self-serve - it must be enabled on your account by Spark Hire - but the API reference is fully public. Timestamps are RFC3339. Rate limit is 400 requests per minute; exceeding it returns 429 with an X-Rate-Limit-Try-Again-Seconds header.


    Endpoint paths and behavior below are transcribed from the public Spark Hire API reference at https://docs.sparkhire.com/. Request and response schemas are honestly modeled from the documented resources; exercising them live requires API access enabled by Spark Hire.'
  version: '1.0'
  contact:
    name: Spark Hire
    url: https://www.sparkhire.com
servers:
- url: https://api.sparkhire.com/v1.0
  description: Spark Hire API
security:
- basicAuth: []
tags:
- name: Interviews
  description: One-way and live video interviews.
paths:
  /interviews:
    get:
      operationId: listInterviews
      tags:
      - Interviews
      summary: List interviews
      parameters:
      - $ref: '#/components/parameters/Range'
      - $ref: '#/components/parameters/OrderBy'
      - $ref: '#/components/parameters/StatusFilter'
      - $ref: '#/components/parameters/TypeFilter'
      responses:
        '200':
          description: A list of interviews.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Interview'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createInterview
      tags:
      - Interviews
      summary: Create an interview
      description: Creates a one-way or live interview for a candidate, tied to a job. Triggers the InterviewCreated webhook event.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InterviewInput'
      responses:
        '201':
          description: The created interview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Interview'
        '400':
          $ref: '#/components/responses/BadRequest'
  /interviews/{uuid}:
    parameters:
    - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getInterview
      tags:
      - Interviews
      summary: Get an interview
      responses:
        '200':
          description: An interview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Interview'
        '404':
          $ref: '#/components/responses/NotFound'
        '410':
          description: The interview has expired and is no longer available.
    put:
      operationId: updateInterview
      tags:
      - Interviews
      summary: Update an interview
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InterviewInput'
      responses:
        '200':
          description: The updated interview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Interview'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteInterview
      tags:
      - Interviews
      summary: Delete an interview
      responses:
        '204':
          description: The interview was deleted.
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Interview:
      allOf:
      - $ref: '#/components/schemas/InterviewInput'
      - type: object
        properties:
          uuid:
            type: string
            format: uuid
          status:
            type: string
            description: Lifecycle status - created, accepted, completed, expired, rescheduled, reset, or rated.
          rating:
            type: number
            nullable: true
            description: Reviewer rating captured when the interview is evaluated.
          created_at:
            type: string
            format: date-time
          updated_at:
            type: string
            format: date-time
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
    InterviewInput:
      type: object
      properties:
        job_uuid:
          type: string
          format: uuid
          description: The job this interview belongs to.
        type:
          type: string
          description: The interview type, e.g. one_way or live.
        candidate_first_name:
          type: string
        candidate_last_name:
          type: string
        candidate_email:
          type: string
          format: email
        question_set_uuid:
          type: string
          format: uuid
          nullable: true
          description: Optional question set to apply to the interview.
  parameters:
    Uuid:
      name: uuid
      in: path
      required: true
      description: The UUID of the resource.
      schema:
        type: string
        format: uuid
    OrderBy:
      name: orderby
      in: query
      required: false
      description: Sort order, e.g. title_asc or updated_desc.
      schema:
        type: string
        example: updated_desc
    TypeFilter:
      name: type[]
      in: query
      required: false
      description: Filter by one or more types.
      schema:
        type: array
        items:
          type: string
    Range:
      name: range
      in: query
      required: false
      description: Pagination range, e.g. 1-20 or 10-30.
      schema:
        type: string
        example: 1-20
    StatusFilter:
      name: status[]
      in: query
      required: false
      description: Filter by one or more statuses.
      schema:
        type: array
        items:
          type: string
  responses:
    BadRequest:
      description: The request was malformed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication. The username is your Spark Hire API key; the password is ignored. Keys are scoped to a user and respect that user's permission level.