Skip to content
Docs
HR & recruiting

Ashby

Let hires follow jobs, applications, candidates and interview feedback in Ashby, add notes and move candidates between stages, with candidates' personal data kept to a minimum.

Explore 7 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.

With Ashby connected, a hire can do exactly what it does with Greenhouse:

  • list jobs and their interview stages,
  • list applications by job, status or recent changes,
  • read a candidate (through one of their applications) and their interview feedback,
  • add a note to a candidate's record, for the hiring team (nobody is notified),
  • move an application to another stage, asking a person first when it's an offer or hired stage,
  • be woken when applications to its jobs are new or change.

Hires never message candidates, and never reject or archive anyone: people do that in Ashby.

Candidates' personal data: the minimum, unless you widen it

  • By default a hire sees a candidate's name and their applications (job, stage, status).
  • More fields hires may see (ordinary): company, title, tags, source.
  • Sensitive fields hires may see (only if a hire's job needs them): emails, phones, links. A sensitive field typed in the ordinary list is refused, so it always takes a deliberate second step.
  • Feedback is shown with email addresses and phone numbers taken out.
  • Ashby's answers include candidates' contact details and the applicant's IP address and browser; Roster doesn't pass any of it on unless you allow the field.
  • Hires are told that personal data stays inside your team.

1. Make an API key in Ashby

Straight there: Ashby's API keys. Tick API Keys → read too if you'd like Roster to show the key's name.

  1. In Ashby, open Admin → Integrations → API Keys and create a key named Roster.
  2. Give it only what hires need: Jobs (read), Candidates (read, and write for hires that add notes or move candidates) and Interviews (read).
  3. Copy the key.

2. Connect it in Roster

  1. Open Integrations → Tools → Add a tool, search for Ashby and choose it.
  2. API key: paste the key.
  3. More fields hires may see and Sensitive fields hires may see: leave them empty unless a hire's job needs more.
  4. Click Connect.

Roster checks the key when you click Connect. Once it's accepted, the connection shows Connected as your Ashby account and the key's name. If it's refused, Roster says what to fix (a mistyped key, a missing permission) and saves nothing.

3. Give hires access

On the hire's Tools tab, click Give access on Ashby:

  • Read only: it can list jobs, stages and applications, and read candidates and feedback.
  • Read and write: it can also add notes and move applications between stages. Moving someone to an offer or hired stage always asks a person first: the hire asks in the thread, and when the approver says yes, Roster moves exactly that application, once.
  • Jobs: job titles or IDs whose candidates it may see and work on. Leave it empty for every job. Candidates for any other job are refused.

Watching applications

A hire's responsibility can watch Ashby: it's woken when applications to its jobs are new or change.

Tools and permissions reference

This reference is built from the same definitions Roster uses to connect Ashby and give hires access. It updates with each release.

Authentication and requested permissions

The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.

API key or access token

In Ashby: Admin → Integrations → API Keys → New. Give it only Jobs (read), Candidates (read; write for hires that write) and Interviews (read).

When making a key, use these permissions from the connection guide:

  • Jobs: read
  • Candidates: read (write for hires that write)
  • Interviews: read
  • API Keys: read

Connection fields

Ashby connection fields
FieldWhat to provide
API key
token
Required · sealed secret
In Ashby: Admin → Integrations → API Keys → New. Give it only Jobs (read), Candidates (read; write for hires that write) and Interviews (read).
More fields hires may see
moreFields
Optional
By default hires see only candidates' names and their applications (job, stage, status). Add ordinary fields here by their name, like company, title, tags, source. Sensitive ones go in the next list.
Sensitive fields hires may see
sensitiveFields
Optional
Only if a hire's job needs them: pay, identity numbers, birth dates, home addresses, private contact details, notes. Like emails, phones, links, privateNotes. Leave empty unless you mean it.

Per-hire limits

Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.

Ashby per-hire limits
FieldWhat to provide
Jobs
jobs
Optional
Job titles or IDs whose candidates it may see and work on. Leave empty for every job.

Actions

7 actions: 5 only read and 2 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.

7 of 7 actions. Open an action for its arguments and full input schema.

list_jobsRead only

Jobs in Ashby this hire may work on, open ones unless asked.

Approval: Uses your workspace and hire approval settings.

Arguments for list_jobs
ArgumentTypeDetails
allOptionalbooleaninclude closed and draft jobsDefault: false
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "all": {
      "default": false,
      "description": "include closed and draft jobs",
      "type": "boolean"
    }
  }
}
list_stagesRead only

A job's stages in Ashby, in order, for move_stage.

Approval: Uses your workspace and hire approval settings.

Arguments for list_stages
ArgumentTypeDetails
jobRequiredstringthe job's ID or title
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "job": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "the job's ID or title"
    }
  },
  "required": [
    "job"
  ]
}
list_applicationsRead only

Applications in Ashby, most recently active first: by job, status (active, hired, rejected…) or activity since a time.

Approval: Uses your workspace and hire approval settings.

Arguments for list_applications
ArgumentTypeDetails
jobOptionalstringthe job's ID or title
statusOptional"active" | "hired" | "rejected" | "archived"See input schema below.
changedSinceOptionalstringSee input schema below.
limitOptionalintegerSee input schema below.Default: 20
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "job": {
      "description": "the job's ID or title",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "hired",
        "rejected",
        "archived"
      ]
    },
    "changedSince": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  }
}
get_candidateRead only

A candidate in Ashby, through one of their applications: their name, the fields this connection allows, and their applications to jobs this hire may see. Only the fields this connection allows are shown; personal data stays inside your team, so don't repeat it outside.

Approval: Uses your workspace and hire approval settings.

Arguments for get_candidate
ArgumentTypeDetails
applicationRequiredstringthe application's ID, from list_applications
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "application": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "the application's ID, from list_applications"
    }
  },
  "required": [
    "application"
  ]
}
list_feedbackRead only

Interview feedback (scorecards) on an application in Ashby: who, when, their overall rating and their answers. Contact details in the text are taken out.

Approval: Uses your workspace and hire approval settings.

Arguments for list_feedback
ArgumentTypeDetails
applicationRequiredstringthe application's ID, from list_applications
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "application": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "the application's ID, from list_applications"
    }
  },
  "required": [
    "application"
  ]
}
add_noteRead and write

Add a note to a candidate's record in Ashby, for the hiring team. The candidate never sees it.

Approval: Uses your workspace and hire approval settings.

Arguments for add_note
ArgumentTypeDetails
applicationRequiredstringthe application's ID, from list_applications
textRequiredstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "application": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "the application's ID, from list_applications"
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    }
  },
  "required": [
    "application",
    "text"
  ]
}
move_stageRead and write

Move an application to another stage of its job in Ashby (list_stages names them). Moving to an offer or hired stage waits for a person's approval: Roster asks in the thread and moves it, once, when they approve. Rejecting or archiving isn't done here: people do that in Ashby.

Approval: when it moves someone to an offer or hired stage.

Arguments for move_stage
ArgumentTypeDetails
applicationRequiredstringthe application's ID, from list_applications
stageRequiredstringthe stage's name or ID
candidateRequiredstringthe candidate's name, as list_applications shows it; checked
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "application": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "the application's ID, from list_applications"
    },
    "stage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "the stage's name or ID"
    },
    "candidate": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "the candidate's name, as list_applications shows it; checked"
    }
  },
  "required": [
    "application",
    "stage",
    "candidate"
  ]
}

Watches and incoming events

  • This integration supports a responsibility that watches for changes. The guide above explains what it checks and how to limit it.
  • No incoming webhook handler is declared for this integration.

Limits and troubleshooting

  • Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
  • Expired or revoked access: reconnect or replace the key on the connection.
  • Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
  • The action schema describes accepted inputs. It does not grant additional access or bypass approvals.

Service documentation · Integration source reference

On this page