Ashby · Arazzo Workflow

Ashby Create an Application on a Job

Version 1.0.0

Resolve the job's interview plan and first stage, create the application, then read it back.

1 workflow 1 source API 1 provider
View Spec View on GitHub ATSRecruitingTalent AcquisitionSourcingCRMSchedulingAnalyticsHiringHR TechArtificial IntelligenceArazzoWorkflows

Provider

ashby-hq

Workflows

application-create
Resolve a job's interview plan and stage, then create an application for a candidate.
Fetches the job's interview plan, lists its stages, creates the application for the candidate at the chosen stage, and returns the confirmed application.
4 steps inputs: candidateId, creditedToUserId, jobId, sourceId outputs: applicationId, currentStage, interviewPlanId, startingStageTitle, status
1
resolveInterviewPlan
jobInterviewPlanInfo
Fetch the job's interview plan so the application is placed in a real plan rather than relying on the default. A job cannot be opened without a default interview plan, so this also confirms the job is configured.
2
listStages
interviewStageList
List the stages on the resolved interview plan and take the first one as the application's starting stage. Stage ids are plan-specific, so they must be resolved per job rather than hard coded.
3
createApplication
applicationCreate
Create the application, placing the candidate in the resolved plan at the resolved starting stage and crediting the supplied source and user.
4
readApplication
applicationInfo
Read the application back with its openings expanded so the caller ends with a confirmed application and knows which opening it counts against.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Ashby Create an Application on a Job
  summary: Resolve the job's interview plan and first stage, create the application, then read it back.
  description: >-
    Putting an existing candidate onto a job is the core write of any sourcing or
    referral integration. application.create accepts an interview plan and a
    stage, but callers rarely know those ids up front, so this workflow resolves
    the job's default interview plan, lists that plan's stages to pick a real
    starting stage, creates the application, and reads it back with its openings
    expanded. Every step spells out its request inline so the flow can be read and
    executed without opening the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: ashbyApi
  url: ../openapi/ashby-openapi.yml
  type: openapi
workflows:
- workflowId: application-create
  summary: Resolve a job's interview plan and stage, then create an application for a candidate.
  description: >-
    Fetches the job's interview plan, lists its stages, creates the application
    for the candidate at the chosen stage, and returns the confirmed application.
  inputs:
    type: object
    required:
    - candidateId
    - jobId
    properties:
      candidateId:
        type: string
        description: The id of the candidate to consider for the job.
      jobId:
        type: string
        description: The id of the job to consider the candidate for.
      sourceId:
        type: string
        description: The id of the source to credit the application to (see source.list).
      creditedToUserId:
        type: string
        description: The id of the user the application is credited to.
  steps:
  - stepId: resolveInterviewPlan
    description: >-
      Fetch the job's interview plan so the application is placed in a real plan
      rather than relying on the default. A job cannot be opened without a
      default interview plan, so this also confirms the job is configured.
    operationId: jobInterviewPlanInfo
    requestBody:
      contentType: application/json
      payload:
        jobId: $inputs.jobId
    successCriteria:
    - condition: $statusCode == 200
    - condition: $response.body#/success == true
    outputs:
      interviewPlanId: $response.body#/results/interviewPlanId
      planStages: $response.body#/results/stages
  - stepId: listStages
    description: >-
      List the stages on the resolved interview plan and take the first one as
      the application's starting stage. Stage ids are plan-specific, so they must
      be resolved per job rather than hard coded.
    operationId: interviewStageList
    requestBody:
      contentType: application/json
      payload:
        interviewPlanId: $steps.resolveInterviewPlan.outputs.interviewPlanId
    successCriteria:
    - condition: $statusCode == 200
    - condition: $response.body#/success == true
    - context: $response.body
      condition: $.results.length > 0
      type: jsonpath
    outputs:
      firstStageId: $response.body#/results/0/id
      firstStageTitle: $response.body#/results/0/title
      stages: $response.body#/results
  - stepId: createApplication
    description: >-
      Create the application, placing the candidate in the resolved plan at the
      resolved starting stage and crediting the supplied source and user.
    operationId: applicationCreate
    requestBody:
      contentType: application/json
      payload:
        candidateId: $inputs.candidateId
        jobId: $inputs.jobId
        interviewPlanId: $steps.resolveInterviewPlan.outputs.interviewPlanId
        interviewStageId: $steps.listStages.outputs.firstStageId
        sourceId: $inputs.sourceId
        creditedToUserId: $inputs.creditedToUserId
    successCriteria:
    - condition: $statusCode == 200
    - condition: $response.body#/success == true
    outputs:
      applicationId: $response.body#/results/id
      applicationStatus: $response.body#/results/status
  - stepId: readApplication
    description: >-
      Read the application back with its openings expanded so the caller ends
      with a confirmed application and knows which opening it counts against.
    operationId: applicationInfo
    requestBody:
      contentType: application/json
      payload:
        applicationId: $steps.createApplication.outputs.applicationId
        expand:
        - openings
    successCriteria:
    - condition: $statusCode == 200
    - condition: $response.body#/success == true
    outputs:
      applicationId: $response.body#/results/id
      status: $response.body#/results/status
      currentStage: $response.body#/results/currentInterviewStage
      openings: $response.body#/results/openings
  outputs:
    applicationId: $steps.readApplication.outputs.applicationId
    status: $steps.readApplication.outputs.status
    currentStage: $steps.readApplication.outputs.currentStage
    interviewPlanId: $steps.resolveInterviewPlan.outputs.interviewPlanId
    startingStageTitle: $steps.listStages.outputs.firstStageTitle

Work with this as data

Every workflow 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 arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • 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 workflow
curl "https://apis.io/api/v1/arazzo/ashby-hq-application-create-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

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

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.