Hiring Workflows
Hiring workflow routes handle Chrome extension intake, email outreach, booking, placements, and referrals.
Routes
POST /api/hiring/intake
Submit a candidate profile captured via the SM Hire Chrome extension (from LinkedIn).
Auth: API key
Request body:
{
"name": "Jane Smith",
"email": "jane@example.com",
"linkedin_url": "https://linkedin.com/in/janesmith",
"current_title": "Senior Engineer",
"current_company": "Acme Corp",
"location": "San Francisco, CA",
"source": "linkedin_chrome",
"job_id": "job_a1b2c3d4"
}Response: 201 Created — returns candidate ID.
POST /api/hiring/chrome
Chrome extension candidate intake — same as /api/hiring/intake. Alternative endpoint for the extension.
Auth: API key
GET /api/job-candidates
Get all job-candidate assignments (pipeline view).
Auth: Required
Query params: job_id, stage, candidate_id, limit
POST /api/job-candidates
Assign a candidate to a job.
Auth: Required
Body:
{
"job_id": "job_a1b2",
"candidate_id": "cand_c3d4",
"stage": "screening",
"notes": "Strong fit"
}PATCH /api/job-candidates/:id
Move a candidate through stages or update assignment notes.
Auth: Required
Updatable: stage, notes, feedback, placement_date, start_date, salary
GET /api/hiring/analytics
Aggregate hiring metrics.
Auth: Required
Response:
{
"ok": true,
"data": {
"total_candidates": 4228,
"by_stage": { "applied": 1200, "screening": 300, "interview": 80, "offer": 12, "hired": 45 },
"by_source": { "linkedin": 1800, "referral": 400, "direct": 2028 },
"avg_time_to_hire_days": 23
}
}POST /api/hiring/email
Send a templated email to a candidate.
Auth: Required
Body:
{
"candidate_id": "cand_a1b2",
"template": "outreach_initial",
"subject": "Opportunity at Sprint Studios",
"body": "Hi Jane, ..."
}GET /api/hiring/placements
List all placed candidates.
Auth: Required
Query params: limit, product, date_from, date_to
Response:
{
"ok": true,
"data": [
{
"candidate_name": "Jane Smith",
"job_title": "Senior Engineer",
"company_name": "Acme Corp",
"start_date": "2026-06-01",
"salary": 120000,
"recruiter": "paula@sprintmode.co"
}
]
}GET /api/hiring/referrers
List all referrers.
Auth: Required
POST /api/hiring/referrers
Create a referrer.
Auth: Required
Body: { "name": "...", "email": "...", "phone": "...", "notes": "..." }
GET /api/hiring/referrers/:id/candidates
Get all candidates referred by a specific referrer.
Auth: Required
Booking
Self-scheduling for candidates via Paula's calendar.
GET /api/book/slots/:candidateId
Get available interview slots for a candidate.
Auth: Public (token-based)
Response:
{
"ok": true,
"data": {
"slots": [
{ "date": "2026-05-15", "time": "10:00", "tz": "America/New_York" }
]
}
}POST /api/book/:candidateId
Book an interview slot.
Auth: Public (token-based)
Body: { "slot": "2026-05-15T10:00:00", "token": "<booking_token>", "notes": "..." }
Response: Confirmation + calendar invite details.
