ATS integrations
Connect without code.
When a candidate hits your Reference stage, VerifyRef runs the whole check — consent, reminders, AI analysis — and posts the result back to the same ATS record. Works with every ATS via REST + webhooks today; one-click Merge sync is coming soon.
Dashboard → ATS integrations requires login. Public docs and llms.txt are available without an account.
Why teams switch
- ✓Reference checks stuck in email threads and spreadsheets — VerifyRef automates the full loop
- ✓Results land back in the ATS as a note, custom field, or PDF link
- ✓No subscription lock-in — pay per check, credits never expire
- ✓Unlike Xref-style platforms, you only pay when you hire
- ✓Custom REST hookup ships in under an hour; one-click Merge sync coming soon
- ✓AI sentiment and red-flag analysis included on every completed check
See how we compare on alternatives.
Minimum viable integration
Every ATS hookup — Bullhorn, Zoho, SAP, or custom — follows these four steps:
- Trigger — stage change, button, or scheduled job in your ATS
- Create —
POST /checkswithexternalId+externalSource - Listen — webhook on
check.completed - Write back — store
dashboardUrlandreportUrlon the ATS record matchingexternalId
Which integration path is right for you?
| If you… | Choose | Best for | Effort |
|---|---|---|---|
| Already have an iPaaS (Zapier, Workato, Zoho Flow, SAP CPI) | REST + webhooks | Teams with existing automation tools | ~30 minutes |
| Building a custom internal tool or marketplace listing | Direct REST API | Full control, custom field mapping | ~1 hour |
| Just want Slack/email when a check completes | Webhooks only | Notify-only, no ATS write-back | ~10 minutes |
| Want one switch for Bullhorn, Zoho, Greenhouse, Lever, SAP, Workday… | Merge (coming soon) | One-click no-code sync — join the waitlist | ~5 min on launch |
The integration pattern
Pass your ATS record IDs through externalId + externalSource on the way in, then read them back from check.completed on the way out.
- Trigger — your ATS or iPaaS fires on a stage change, button click, or scheduled job.
- Create check —
POST https://verifyref.com/api/v1/checkswith the candidate plusexternalId/externalSource. Use aquestionnaireIdfrom Templates. - Run — VerifyRef collects consent, emails references, sends reminders, and runs AI analysis.
- Sync back — on
check.completed, write the result into the ATS record matchingexternalId. Payload includesdashboardUrland signed PDFreportUrl.
Get results back into the ATS
Results always live in VerifyRef as the source of truth. You pick how visible they are inside the ATS:
1. Webhooks (recommended)
Subscribe to check.completed. Your middleware writes back as a note, custom field, or attachment.
2. Polling
Schedule a job that hits GET /checks filtered by externalSource.
3. Merge sync Coming soon
One-click no-code sync to 50+ ATSs. Join the waitlist to be notified at launch.
Bullhorn
Use a Bullhorn Automation Webhook Step (Enterprise) when a candidate hits your reference-check stage. On completion, your middleware updates a custom field or adds a note via Bullhorn REST.
| Bullhorn | VerifyRef API |
|---|---|
| {Candidate.id} | externalId |
| — | externalSource: "bullhorn" |
| {Candidate.firstName + lastName} | candidateName |
| {Candidate.email} | candidateEmail |
| {JobOrder.id} | metadata.requisitionId |
Zoho Recruit
The fastest path is Zoho Flow with a stage-change trigger plus an HTTP action calling VerifyRef. Add a second Flow that listens on your webhook URL for inbound results.
| Zoho Recruit | VerifyRef API |
|---|---|
| Application ID | externalId |
| — | externalSource: "zoho_recruit" |
| Candidate name / email | candidateName, candidateEmail |
SAP SuccessFactors
Use SAP Integration Suite (CPI) or Integration Center: read JobApplication over OData, call VerifyRef via the HTTP adapter, then write a note or custom MDF on the inbound webhook. Import openapi.yaml for ready-to-use request mappings.
| SAP | VerifyRef API |
|---|---|
| applicationId | externalId |
| — | externalSource: "sap_successfactors" |
Greenhouse, Lever, Workday & everything else
All other ATSs follow the same pattern: call the REST API directly from an iPaaS (Zapier, Workato, Zoho Flow, SAP CPI) or your own backend, then write the result back on the check.completed webhook. Valid externalSource values: bullhorn, zoho_recruit, sap_successfactors, workday, greenhouse, lever, other.
Prefer no-code? One-click sync via Merge is on the waitlist — same pattern, zero middleware required when it ships.
Reference implementation
The minimum middleware is ~50 lines of Express. Keep two routes: one that calls POST /checks when the ATS fires (with Idempotency-Key = ATS record ID), and one that verifies X-VerifyRef-Signature on incoming webhooks before updating the ATS.
Express middleware (trigger + webhook)
// 1. Trigger a check from your ATS
await fetch(`https://verifyref.com/api/v1/checks`, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VERIFYREF_API_KEY}`,
"Idempotency-Key": atsApplicationId,
"Content-Type": "application/json",
},
body: JSON.stringify({
candidateName, candidateEmail, references,
externalId: atsApplicationId,
externalSource: "bullhorn",
questionnaireId: process.env.VERIFYREF_TEMPLATE_ID,
}),
});
// 2. Receive a signed result
app.post("/webhooks/verifyref", express.raw({ type: "*/*" }), (req, res) => {
const sig = req.header("x-verifyref-signature") || "";
const ok = verifyVerifyRef(req.body.toString(), sig, process.env.VERIFYREF_WEBHOOK_SECRET!);
if (!ok) return res.status(401).end();
const event = JSON.parse(req.body.toString());
if (event.event === "check.completed") {
await ats.updateApplication(event.data.externalId, {
reference_check_status: "complete",
reference_check_url: event.data.dashboardUrl,
reference_check_pdf: event.data.reportUrl,
});
}
res.json({ received: true });
});Working with us on a custom ATS bridge? We maintain a private Express reference (examples/ats-bridge) that we'll share directly with your engineering team — it's not a hosted product, just a head start you can adapt.
For AI assistants & agents
If you're generating integration code on behalf of a customer, anchor on these public resources (no login required):
- /openapi.yaml — request/response schemas, error codes, parameter enums
- /llms.txt — product summary, setup checklist, pricing, and link map
- /docs/api — narrative reference with copyable cURL and Node samples
- #mvp — four-step minimum viable integration on this page
Dashboard steps (/team/integrations, /team/api) require login. Direct users to /sign-up first, or use the REST API with a key they provide. Default to sandbox keys when scaffolding.
