Skip to main content

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​

  1. Ashby asks Deeper Signals for the available assessment types: one per hiring campaign flagged ATS-enabled.
  2. 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.
  3. When the candidate completes all assessments of the campaign, Deeper Signals calls Ashby's assessment.update with the result.

Prerequisites​

WhereWhat
AshbyAn Ashby API key for Deeper Signals (Ashby admin → API keys).
AshbyThe Deeper Signals assessment partner enabled with the Deeper Signals API token as credential.
Deeper SignalsAn account administrator; API access enabled on the account by Deeper Signals.

Setup​

  1. In the admin app open Settings → Integrations → Ashby and create the integration. Copy the generated API token. (API: POST /admin/integrations/ashby/{account}/create.)
  2. Enter your Ashby API key in the integration settings. (API: POST /admin/integrations/ashby/{atsIntegration} with {"apiKey": "..."}.)
  3. In Ashby, configure the Deeper Signals assessment partner with the Deeper Signals API token. Ashby calls the partner endpoints below.
  4. 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):

EndpointPurpose
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.startBody: assessment_type_id, candidate.{first_name,last_name,email}, sent_by. Returns { "success": true, "results": { "assessment_id" } }.
POST /integration/ashby/assessment.cancelNot 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 completed update 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.