Ashby Webhook Payloads API

The Webhook Payloads API from Ashby — 0 operation(s) for webhook payloads.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ashby-hq-webhook-payloads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

ashby-hq-webhook-payloads-api-openapi.yml Raw ↑
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