CONNECT APP
Build with Ashby
Human Resources
- API key
MCP
Give your agent Ashby tools
Every Ashby action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Ashby account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "ashby",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create Application:
const result = await mcp.callTool({
name: "ashby-create-application",
arguments: {
candidateId: "Candidate ID",
jobId: "Job ID",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "ashby",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create Application:
result = await session.call_tool("ashby-create-application", {
"candidateId": "Candidate ID",
"jobId": "Job ID",
})API PROXY
Call the Ashby API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Ashby API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.ashbyhq.com/user.list",
})
// Any allowed Ashby endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.ashbyhq.com/user.list
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuYXNoYnlocS5jb20vdXNlci5saXN0?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Ashby actions from your backend
Connect a user's Ashby account once, then run Create Application on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "ashby-create-application",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
ashby: { authProvisionId: "apn_xxxxxxx" },
candidateId: "Candidate ID",
jobId: "Job ID",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="ashby-create-application",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"ashby": {"authProvisionId": "apn_xxxxxxx"},
"candidateId": "Candidate ID",
"jobId": "Job ID",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "ashby-create-application",
"configured_props": {
"ashby": { "authProvisionId": "apn_xxxxxxx" },
"candidateId": "Candidate ID",
"jobId": "Job ID"
}
}'TOOLS
Ashby actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create Application
actionConsiders a candidate for a job (e.g., when sourcing a candidate for a job posting). See the documentationWritev0.0.4 -
Create Candidate
actionCreates a new candidate in Ashby. See the documentationWritev0.0.4 -
Create Interview Schedule
actionCreates a scheduled interview. See the documentationWritev0.0.4 -
Create Offer
actionCreates a new offer. See the documentationWritev0.0.4 -
Get Candidate
actionRetrieves the details of a specific candidate by ID. See the documentationRead-onlyv0.0.3 -
Get Candidate Resume File
actionRetrieves the URL of a candidate's resume file. Equivalent to calling the Get Candidate and Get File URL actions in succession. See the documentation here and hereRead-onlyv0.0.2 -
Get File URL
actionRetrieves the URL of a file associated with a candidate. See the documentationRead-onlyv0.0.2 -
List Applications
actionRetrieves a list of applications within an organization. See the documentationRead-onlyv1.0.1 -
Search Candidates
actionSearch candidates by email and/or name. Limited to 100 results. See the documentationRead-onlyv0.0.3 -
Start Offer
actionStarts an offer and returns an offer form instance that can be filled out and submitted. See the documentationWritev0.0.4 -
Start Offer Process
actionStarts an offer process for a candidate. See the documentationWritev0.0.4
No Ashby triggers are available yet.
MULTI-APP
Use Ashby with other popular apps
Most products don't stop at one integration. Pair Ashby with the other apps your users rely on, and ship use cases that span both.
- App slug
- ashby
- Authentication
- API key
- Categories
- Human Resources
- Actions
- 11
- Triggers
- 0
- API proxy
- Available