Ashby
Deeper Signals implements Ashby's assessment partner API. Recruiters choose a Deeper Signals assessment type on a candidate in Ashby; the candidate is invited by e-mail; when they finish, Ashby receives the status, a profile link and the scores.
How it works
- Ashby asks Deeper Signals for the available assessment types: one per hiring campaign flagged ATS-enabled.
- When a recruiter sends an assessment, Deeper Signals finds or creates the candidate by e-mail, adds them to the campaign and e-mails the invitation.
- When the candidate completes all assessments of the campaign, Deeper Signals calls Ashby's
assessment.updatewith the result.
Prerequisites
| Where | What |
|---|---|
| Ashby | An Ashby API key for Deeper Signals (Ashby admin → API keys). |
| Ashby | The Deeper Signals assessment partner enabled with the Deeper Signals API token as credential. |
| Deeper Signals | An account administrator; API access enabled on the account by Deeper Signals. |
Setup
- In the admin app open Settings → Integrations → Ashby and create the integration. Copy the generated API token. (API:
POST /admin/integrations/ashby/{account}/create.) - Enter your Ashby API key in the integration settings. (API:
POST /admin/integrations/ashby/{atsIntegration}with{"apiKey": "..."}.) - In Ashby, configure the Deeper Signals assessment partner with the Deeper Signals API token. Ashby calls the partner endpoints below.
- Flag the hiring campaigns that should appear as assessment types as ATS-enabled. If none is flagged, Deeper Signals creates Ashby - Default with the account's default hiring reports.
Runtime contract
Ashby calls these endpoints with the Deeper Signals API token (Authorization: Basic with the token as user name, or X-TOKEN):
| Endpoint | Purpose |
|---|---|
POST /integration/ashby/assessment.list | { "success": true, "results": [{ "assessment_type_id", "name", "description" }] }. assessment_type_id is a UUID derived from the campaign id. |
POST /integration/ashby/assessment.start | Body: assessment_type_id, candidate.{first_name,last_name,email}, sent_by. Returns { "success": true, "results": { "assessment_id" } }. |
POST /integration/ashby/assessment.cancel | Not supported: answers success: false with error code 405. Remove the candidate in Deeper Signals instead. |
assessment.start
{
"assessment_type_id": "00000000-0000-0000-0000-000000000007",
"candidate": { "first_name": "Ada", "last_name": "Lovelace", "email": "ada@example.com" },
"sent_by": "recruiter@example.com"
}
Outbound, Deeper Signals calls POST https://api.ashbyhq.com/assessment.update with your Ashby API key:
assessment.update
{
"assessment_id": "00000000-0000-0000-0000-00000000002a",
"timestamp": 1760000000,
"assessment_status": { "identifier": "status", "value": "completed", "type": "string", "label": "Status" },
"assessment_result": { "identifier": "campaign_completed", "value": true, "type": "boolean_success", "label": "Campaign completed" },
"assessment_profile_url": { "identifier": "profile_url", "value": "https://app.deepersignals.com/admin/users/user/1?account=examplecorp&tab=Reports", "type": "url", "label": "Profile Url" },
"metadata": [
{ "identifier": "core_drivers_drive", "value": 74.83, "type": "numeric_score", "label": "Core Drivers-> Drive" },
{ "identifier": "competency_collaboration", "value": 4, "type": "numeric_score", "label": "Competency Collaboration" },
{ "identifier": "campaign_job_match_score", "value": 81.5, "type": "numeric_score", "label": "Campaign Job Match Score" }
]
}
Limitations
- Only the final
completedupdate is sent; there is no in-progress status and no cancel. - PDF reports are not attached in Ashby. Use the profile URL or the report download endpoints.
- One Ashby integration per Deeper Signals account.