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.