Ashby Webhook Payloads API
The Webhook Payloads API from Ashby — 0 operation(s) for webhook payloads.
The Webhook Payloads API from Ashby — 0 operation(s) for webhook payloads.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/ashby-hq-webhook-payloads-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 1.0.0
title: Ashby Webhook Payloads API
description: Complete public API for accessing resources in your Ashby instance. Includes applications, candidates, jobs, interviews, offers, surveys, custom fields, organization metadata, files, reports, approvals, and webhooks.
contact:
name: Ashby Support
url: https://app.ashbyhq.com/support
email: support@ashbyhq.com
servers:
- url: https://api.ashbyhq.com
security:
- BasicAuth: []
tags:
- name: Webhook Payloads
paths: {}
webhooks:
applicationSubmit:
post:
summary: applicationSubmit
description: Triggered when a candidate submits an application or when a candidate is manually added to Ashby. This webhook is not triggered for bulk imports or integration syncs.
operationId: applicationSubmitWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- applicationSubmit
data:
type: object
properties:
application:
$ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
applicationUpdate:
post:
summary: applicationUpdate
description: 'Triggered when there''s an update to an application. This includes:
- Changes to application fields (source, custom fields, etc.)
- Job transfers (when an application is moved to a different job)
- Also triggered by [candidateHire](https://developers.ashbyhq.com/reference/candidatehirewebhook) and [candidateStageChange](https://developers.ashbyhq.com/reference/candidatestagechangewebhook)
'
operationId: applicationUpdateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- applicationUpdate
data:
type: object
properties:
application:
$ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
candidateHire:
post:
summary: candidateHire
description: 'Triggered when a candidate is hired (including candidates that are hired on confidential jobs).
Includes the application and most recent accepted offer (if one exists).
Also triggers [applicationUpdate](https://developers.ashbyhq.com/reference/applicationupdatewebhook) and [candidateStageChange](https://developers.ashbyhq.com/reference/candidatestagechangewebhook)
'
operationId: candidateHireWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- candidateHire
data:
type: object
properties:
application:
$ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application'
offer:
$ref: '#/webhooks/offerCreate/post/requestBody/content/application~1json/schema/properties/data/properties/offer'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
candidateStageChange:
post:
summary: candidateStageChange
description: Triggered when a candidate changes stages in an application. Also triggered by [candidateHire](https://developers.ashbyhq.com/reference/candidatehirewebhook)
operationId: candidateStageChangeWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- candidateStageChange
data:
type: object
properties:
application:
$ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
candidateDelete:
post:
summary: candidateDelete
description: "Triggered when a candidate is deleted. \nIncludes the deleted candidate id.\n"
operationId: candidateDeleteWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- candidateDelete
data:
type: object
properties:
candidate:
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
description: The unique id of the deleted candidate
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
candidateMerge:
post:
summary: candidateMerge
description: "Triggered when a candidate is merged. \nIncludes the deleted candidate's id and merged candidate data.\n"
operationId: candidateMergeWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- candidateMerge
data:
type: object
properties:
deletedCandidate:
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
description: The unique id of the deleted candidate
mergedCandidate:
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
description: The unique id of the final merged candidate
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
interviewPlanTransition:
post:
summary: interviewPlanTransition
description: Triggered when a job's interview plan is switched to a different plan. Sends interview plan data and ids for the interview stage mappings. Also triggers [jobUpdate](https://developers.ashbyhq.com/reference/jobupdatewebhook)
operationId: interviewPlanTransitionWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- interviewPlanTransition
data:
type: object
properties:
jobId:
description: The id of the job for which the interview plan has been switched
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
fromInterviewPlan:
description: The interview plan the job was previously referencing
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
title:
type: string
example: Custom Interview Plan
required:
- id
- title
toInterviewPlan:
description: The interview plan the job is now referencing
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
title:
type: string
example: Engineering Interview Plan
required:
- id
- title
interviewStageMappings:
description: The mapping of a stage from the previous interview plan to a stage on the new interview plan
type: array
items:
type: object
properties:
fromInterviewStageId:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
toInterviewStageId:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
required:
- fromInterviewStageId
- toInterviewStageId
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
interviewScheduleCreate:
post:
summary: interviewScheduleCreate
description: The webhook is called when an interview schedule is created. Also triggers [interviewScheduleUpdate](https://developers.ashbyhq.com/reference/interviewscheduleupdatewebhook)
operationId: interviewScheduleCreateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- interviewScheduleCreate
data:
type: object
properties:
interviewSchedule:
type: object
required:
- id
- status
- applicationId
- interviewStageId
properties:
id:
type: string
description: The id of the interview schedule
status:
type: string
enum:
- NeedsScheduling
- WaitingOnCandidateBooking
- WaitingOnCandidateAvailability
- CandidateAvailabilitySubmitted
- Scheduled
- WaitingOnFeedback
- Complete
- Cancelled
- OnHold
- Unknown
description: The status of the interview schedule
applicationId:
type: string
description: The id of the application associated with the interview schedule
interviewStageId:
type: string
description: The id of the interview stage associated with the interview schedule
scheduledBy:
description: The user who scheduled this interview schedule. Null if the schedule has not been scheduled.
$ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
createdAt:
type: string
format: date-time
description: The time the interview schedule was created
updatedAt:
type: string
format: date-time
description: The time the interview schedule was last updated
interviewEvents:
type: array
description: All scheduled interview events associated with the interview schedule
items:
$ref: '#/paths/~1interviewEvent.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/items'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
interviewScheduleUpdate:
post:
summary: interviewScheduleUpdate
description: The webhook is called when an interview schedule is updated, including when interviews that are part of the schedule are scheduled, updated, or cancelled. Also triggered by [interviewScheduleCreate](https://developers.ashbyhq.com/reference/interviewschedulecreatewebhook)
operationId: interviewScheduleUpdateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- interviewScheduleUpdate
data:
type: object
properties:
interviewSchedule:
allOf:
- $ref: '#/webhooks/interviewScheduleCreate/post/requestBody/content/application~1json/schema/properties/data/properties/interviewSchedule'
- type: object
properties:
candidateId:
type: string
description: The ID of the candidate associated with this interview schedule
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
jobCreate:
post:
summary: jobCreate
description: Triggered when a job is created
operationId: jobCreateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- jobCreate
data:
type: object
properties:
job:
type: object
properties:
id:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
title:
type: string
confidential:
type: boolean
status:
$ref: '#/paths/~1job.setStatus/post/requestBody/content/application~1json/schema/properties/status/allOf/1'
employmentType:
type: string
enum:
- FullTime
- PartTime
- Intern
- Contract
- Temporary
locationId:
allOf:
- description: The id of the location of the job
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
departmentId:
allOf:
- description: The id of the department or team associated with the job
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
defaultInterviewPlanId:
allOf:
- description: "The id of the default interview plan for this job posting. \nA job cannot be opened without a default interview plan.\n"
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
interviewPlanIds:
type: array
items:
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
- description: The ids of all interview plans associated with a job
customFields:
type: array
description: An array of custom fields associated with the job
items:
$ref: '#/paths/~1customField.setValue/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
jobPostingIds:
type: array
items:
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
- description: The ids of all job postings associated with the job
customRequisitionId:
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
- description: The custom requisition id for a job
brandId:
allOf:
- description: The id of the brand to use for this job
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
hiringTeam:
type: array
items:
$ref: '#/paths/~1hiringTeam.addMember/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
author:
$ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
createdAt:
$ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
updatedAt:
$ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
openedAt:
$ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
closedAt:
$ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
required:
- id
- title
- confidential
- status
- employmentType
- updatedAt
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
jobUpdate:
post:
summary: jobUpdate
description: Triggered when a job is updated. Also triggered by [interviewPlanTransition](https://developers.ashbyhq.com/reference/interviewplantransitionwebhook)
operationId: jobUpdateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- jobUpdate
data:
type: object
properties:
job:
$ref: '#/webhooks/jobCreate/post/requestBody/content/application~1json/schema/properties/data/properties/job'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
jobPostingUpdate:
post:
summary: jobPostingUpdate
description: Triggered when a job posting is updated. Also triggered by [jobPostingPublish](https://developers.ashbyhq.com/reference/jobpostingpublishwebhook) and [jobPostingUnpublish](https://developers.ashbyhq.com/reference/jobpostingunpublishwebhook)
operationId: jobPostingUpdateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- jobPostingUpdate
data:
type: object
properties:
jobPosting:
type: object
properties:
id:
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
- description: The job posting's id
title:
type: string
example: Posting Title
description: The job posting's title
jobId:
allOf:
- $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
- description: The id of the job associated with the job posting
departmentName:
type: string
example: Engineering department
description: The name of the department associated with the job posting
teamName:
type: string
example: Data engineering team
description: 'The name of the team associated with the job posting. `teamName` and `departmentName` will
be the same if the team does not have a parent team specified.
'
locationName:
type: string
example: Springfield
description: The name of the primary location associated with the job posting
locationIds:
type: object
description: An object containing the ids of all locations associated with the job posting
properties:
primaryLocationId:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
secondaryLocationIds:
type: array
items:
$ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
required:
- primaryLocationId
- secondaryLocationIds
workplaceType:
$ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/workplaceType/allOf/1'
employmentType:
$ref: '#/webhooks/jobCreate/post/requestBody/content/application~1json/schema/properties/data/properties/job/properties/employmentType'
isListed:
type: boolean
example: true
description: Whether or not the job posting is listed
publishedDate:
type: string
example: '2021-11-19'
description: The date the job posting was published
applicationDeadline:
type: string
example: '2024-08-12T20:00:00.000Z'
format: date-time
description: The date and time when applications will no longer be accepted
externalLink:
type: string
example: https://jobs.ashbyhq.com/6eec82ac-9713-512d-ac2e-405618935375/d5a6bc97-4259-4bc5-b3fe-6d3edfd538e3
description: The external link to the job posting. Will be null if the job posting is on an internal job board.
applyLink:
type: string
example: https://jobs.ashbyhq.com/6eec82ac-9713-512d-ac2e-405618935375/d5a6bc97-4259-4bc5-b3fe-6d3edfd538e3
description: The link to apply to the job posting. Will be to the public job board if the job posting is on an external job board, or to the internal job board if the job posting is on an internal job board.
compensationTierSummary:
type: string
example: $120K – $270K • 0% – 2.25% • Offers Bonus • Multiple Ranges
description: 'A summary of *all* the job posting''s valid compensation tiers in the same format shown on
Ashby-hosted Job Boards
'
shouldDisplayCompensationOnJobBoard:
type: boolean
example: true
description: 'Whether the job posting''s settings specify that compensation should be shown to applicants
when the posting is listed among other job postings
'
updatedAt:
$ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
required:
- id
- title
- jobId
- departmentName
- teamName
- locationName
- locationIds
- employmentType
- isListed
- publishedDate
- applyLink
- shouldDisplayCompensationOnJobBoard
- updatedAt
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
jobPostingPublish:
post:
summary: jobPostingPublish
description: Triggered when a job posting is published. Also triggers [jobPostingUpdate](https://developers.ashbyhq.com/reference/jobpostingupdatewebhook)
operationId: jobPostingPublishWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- jobPostingPublish
data:
type: object
properties:
jobPosting:
$ref: '#/webhooks/jobPostingUpdate/post/requestBody/content/application~1json/schema/properties/data/properties/jobPosting'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
jobPostingUnpublish:
post:
summary: jobPostingUnpublish
description: Triggered when a job posting is unpublished. Also triggers [jobPostingUpdate](https://developers.ashbyhq.com/reference/jobpostingupdatewebhook)
operationId: jobPostingUnpublishWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- jobPostingUnpublish
data:
type: object
properties:
jobPosting:
$ref: '#/webhooks/jobPostingUpdate/post/requestBody/content/application~1json/schema/properties/data/properties/jobPosting'
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
security:
- WebhookSignature: []
offerCreate:
post:
summary: offerCreate
description: Triggered when a new offer process is created for a candidate
operationId: offerCreateWebhook
tags:
- Webhook Payloads
requestBody:
content:
application/json:
schema:
type: object
required:
- action
- data
properties:
action:
type: string
enum:
- offerCreate
data:
type: object
properties:
offer:
allOf:
- $ref: '#/paths/~1offer.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/prope
# --- truncated at 32 KB (59 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ashby-hq/refs/heads/main/openapi/ashby-hq-webhook-payloads-api-openapi.yml