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
- Deeper Signals connects to Lever through OAuth and registers a
candidateStageChangewebhook itself. - An administrator picks the trigger stage.
- 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.
- 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
| Where | What |
|---|---|
| Lever | An 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. |
| Lever | Opportunities need an owner; files are uploaded on the owner's behalf. |
| Deeper Signals | An account administrator; API access enabled on the account by Deeper Signals. |
No manual webhook or custom field configuration is needed in Lever.
Setup
- 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}/redirectreturns the authorize URL; Lever returns toGET /integration/callback/lever.) - Pick the trigger stage from the list of your pipeline stages. (API:
GET /admin/integration/lever/{account}/stages, thenPOST /admin/integration/lever/{account}/connectwith{"stageId": "..."}.) - Review the Lever - Default campaign that was created: it holds the assessments and the reports candidates receive. Edit its assessments and reports as needed.
- 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.
{
"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).