Skip to main content

Lever

The Lever integration is stage-driven: when a recruiter moves an opportunity into the stage you choose, Deeper Signals invites the candidate; when they complete, the PDF reports are uploaded as files on the opportunity and a note is added.

How it works​

  1. Deeper Signals connects to Lever through OAuth and registers a candidateStageChange webhook itself.
  2. An administrator picks the trigger stage.
  3. On every stage change into that stage, Deeper Signals reads the opportunity (name, first e-mail, tags, owner), finds or creates the candidate by e-mail, adds them to the Lever - Default hiring campaign and e-mails the invitation. Lever tags become groups on the candidate.
  4. On completion, each mapped report is uploaded as a file named Deeper Signals - <Assessment>-<Report>-<date>.pdf (performed as the opportunity owner) and a note "<Assessment> assessment completed on <date>" is added; the summary note carries the candidate's profile URL.

Prerequisites​

WhereWhat
LeverAn admin who can approve the Deeper Signals OAuth app with the scopes offline_access, files:write:admin, notes:write:admin, opportunities:write:admin, stages:read:admin, tags:read:admin, webhooks:write:admin.
LeverOpportunities need an owner; files are uploaded on the owner's behalf.
Deeper SignalsAn account administrator; API access enabled on the account by Deeper Signals.

No manual webhook or custom field configuration is needed in Lever.

Setup​

  1. In the admin app open Settings → Integrations → Lever and choose Connect. You are redirected to Lever to approve the app; afterwards Deeper Signals stores the connection and registers the webhook. (API: GET /admin/integration/lever/{account}/redirect returns the authorize URL; Lever returns to GET /integration/callback/lever.)
  2. Pick the trigger stage from the list of your pipeline stages. (API: GET /admin/integration/lever/{account}/stages, then POST /admin/integration/lever/{account}/connect with {"stageId": "..."}.)
  3. Review the Lever - Default campaign that was created: it holds the assessments and the reports candidates receive. Edit its assessments and reports as needed.
  4. Under Report mapping choose which PDFs are uploaded per assessment (summary report included by default).

Runtime contract​

Inbound: POST /integration/webhook/lever/{account}, Lever's standard webhook format. Deeper Signals verifies the signature (HMAC-SHA256 of token + triggeredAt with the webhook's signature token) and rejects events older than 5 minutes. Only candidateStageChange events whose data.toStageId equals the configured stage are processed; every call is answered with 200.

Webhook event
{
"event": "candidateStageChange",
"triggeredAt": 1760000000000,
"token": "…",
"signature": "…",
"data": { "opportunityId": "opp-1", "toStageId": "stage-42" }
}

Outbound (Bearer token, refreshed automatically): GET opportunities/{id}, POST opportunities/{id}/files?perform_as={owner} (multipart), POST opportunities/{id}/notes, and GET|POST|DELETE webhooks during setup.

Limitations​

  • One trigger stage and one campaign (Lever - Default) per account; all candidates get the same assessments.
  • Lever has no status field for partner assessments: progress is visible only in Deeper Signals, completion through the files and notes.
  • Candidates must have an e-mail address on the opportunity; the first e-mail is used.
  • Opportunities without an owner receive no files (the note is still added).