Skip to content

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:

json
{
  "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:

json
{
  "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:

json
{
  "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:

json
{
  "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:

json
{
  "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:

json
{
  "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.

Sprint Mode LLC — Internal Platform Documentation