Build an ATS Integration with Willo in 30 Minutes
A practical guide for both technical teams and hiring leaders
Why this matters
Most teams assume integrating a candidate assessment tool like Willo into their ATS will take days or weeks.
In reality, you can get a working Willo integration live in ~30 minutes - then improve it over time.
This guide shows:
- Developers: Exactly what to build (endpoints, flow, data)
- Hiring teams / buyers: What the integration actually unlocks
What you’ll have at the end
A simple but complete loop:
- Candidate reaches a stage in your ATS (e.g. Screening)
- Willo interview is automatically sent
- Candidate completes it asynchronously
- Responses (video, audio, text, transcripts) are retrieved
- Results are attached back to the candidate record
The 30-minute plan
Note: We'll be referring to the OpenAPI documentation throughout this tutorial.
| Step | What you do | Who this impacts |
|---|---|---|
| 1 | Get API access | Dev |
| 2 | Select an interview template | Hiring |
| 3 | Trigger interview from ATS | Dev |
| 4 | Retrieve responses | Dev |
| 5 | Sync results back | Dev + Hiring |
Step 1: Get API access (2 mins)
For developers
- Go to Integration → API in Willo
- Copy your API key
You’ll use this in every request:
Authorization: Bearer YOUR_API_KEY
Step 2: Choose your interview (3 mins)
For hiring teams
- Create or select an interview in Willo
- This defines the questions and format (video, audio, text, etc.)
- Copy the Interview ID
💡 Think of this as your “screening template”
Step 3: Trigger interviews from your ATS (10 mins)
For developers
When a candidate reaches a stage like “Screening”, call the Willo API.
Example request
POST /v1/interviews/send
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"interview_id": "INTERVIEW_ID",
"candidate": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"metadata": {
"ats_candidate_id": "12345"
}
}
What this does
- Sends the interview automatically
- Stores a link between Willo and your ATS candidate
💡 Always include your ATS candidate ID in metadata —you’ll need it later.
What hiring teams should expect
- No manual sending of interview links
- Every candidate at that stage gets the same branded experience
- Immediate progression without coordination delays
Step 4: Retrieve completed interviews (10 mins)
For developers
Webhooks
Configure a webhook endpoint to receive events like:
interview.completedresponse.submitted- Real-time updates
- No need for polling
What hiring teams should expect
- Interviews appear as soon as they’re completed
- No chasing candidates or checking manually
- Faster turnaround on screening decisions
Step 5: Sync results back to your ATS (5 mins)
For developers
Take the completed interview data and attach it to your candidate record.
Typical data to store
- Response links (video/audio)
- Transcripts
- AI summaries
- Completion status
Example structure
{
"candidate_id": "12345",
"interview_status": "completed",
"responses": [
{
"question": "Tell us about yourself",
"video_url": "https://...",
"transcript": "..."
}
]
}
What hiring teams should expect
- Everything in one place (no switching tools)
- Structured, comparable candidate data
- Faster, more confident shortlisting
What you’ve just built
In ~30 minutes, you now have:
- Automated interview sending
- Asynchronous candidate screening
- Structured response capture
- ATS-linked candidate data
That’s enough to replace manual screening workflows.
Common integration patterns
Most teams evolve into one of these:
1. Stage-triggered screening (most common)
Send interviews automatically at a defined stage
2. Pre-application screening
Candidates complete a Willo interview before entering the ATS
3. Recruiter-triggered flow
Manual send from ATS when needed
How teams typically improve this
Once the basics are live:
Week 1–2
- Add scorecards and structured evaluation
Week 2–4
- Automate decisions (e.g. auto-progress candidates)
Month 2+
- Build dashboards or reporting
- Dynamic template selection
What “good” looks like
A well-implemented integration should:
- Require zero manual interview sending
- Sync results within minutes
- Attach structured data to candidate profiles
- Reduce time-to-shortlist significantly
Troubleshooting
Interview not sending
- Check API key permissions
- Confirm Interview ID is correct
- Check candidate phone number is formatted correctly as E.164
Responses not syncing
- Ensure metadata includes ATS candidate ID
- Verify webhook endpoint is live
Duplicate candidates
- Deduplicate using email or ATS ID
Final thought
The goal isn’t to build a perfect integration on day one.
It’s to get a working loop live quickly, then improve it.
Teams that start simple move faster—and get value sooner.
Need help?
If you want help reviewing or optimising your integration, our team can support you.
Reach out via support in the bottom right of any page and we’ll help you get this live quickly.