{"slug": "recruiting-agent-interview-scheduling-pipeline", "title": "Recruiting Agent: Interview Scheduling Pipeline", "summary": "Nylas has built an automated interview scheduling pipeline that eliminates human coordination delays by letting candidates pick their own slots, distributing interviews across a panel via round-robin, and automatically generating meeting links, recordings, and structured transcripts. The pipeline uses Nylas Scheduler, Calendar, and Notetaker APIs, with optional Agent Accounts for dedicated mailbox management. The system supports two distribution strategies—max-fairness and max-availability—and includes constraints such as a 10-interviewer limit per configuration and a 10-minute lobby timeout for the recording bot.", "body_md": "A candidate finishes your take-home on a Friday afternoon. By the time a recruiter has cross-referenced three interviewers' calendars and emailed back a slot, it's Wednesday — and the candidate already has another offer in hand. Interview scheduling loses good people not because anyone is careless, but because the coordination loop is human-speed.\n\nHere's a pipeline that takes the human out of that loop entirely: candidates pick their own slot from a booking page, the load spreads across your panel automatically, every call gets a conferencing link and a recording bot, and a structured transcript lands in your ATS after each interview. It's built on the Nylas Scheduler, Calendar, and Notetaker APIs, and it pairs naturally with [Agent Accounts](https://developer.nylas.com/docs/v3/agent-accounts/) (currently in beta) if you want the recruiting side to run from its own dedicated mailbox instead of a recruiter's inbox.\n\nCandidate visits a scheduling page → Scheduler assigns an interviewer via round-robin → an event lands on that interviewer's calendar with a meeting link → a `booking.created`\n\nwebhook creates the record in your ATS → Notetaker joins the call → a `notetaker.media`\n\nwebhook delivers transcript, summary, and action items → you attach them to the candidate's record.\n\nThe interesting part is that none of these steps need a person. The full recipe lives in the [interview scheduling pipeline tutorial](https://developer.nylas.com/docs/cookbook/use-cases/build/interview-scheduling-pipeline/).\n\nYou define the panel once, in a scheduling Configuration:\n\n```\ncurl --request POST \\\n  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"requires_session_auth\": false,\n    \"participants\": [\n      { \"name\": \"Sarah Kim\", \"email\": \"sarah.kim@yourcompany.com\", \"is_organizer\": true,\n        \"availability\": { \"calendar_ids\": [\"primary\"] }, \"booking\": { \"calendar_id\": \"primary\" } },\n      { \"name\": \"Marcus Johnson\", \"email\": \"marcus.johnson@yourcompany.com\",\n        \"availability\": { \"calendar_ids\": [\"primary\"] }, \"booking\": { \"calendar_id\": \"primary\" } }\n    ],\n    \"availability\": {\n      \"duration_minutes\": 45,\n      \"availability_rules\": { \"availability_method\": \"max-fairness\" }\n    },\n    \"event_booking\": { \"title\": \"Interview with {{invitee_name}}\" }\n  }'\n```\n\nTwo distribution strategies exist, and the choice matters more than it looks:\n\n`max-fairness`\n\n`max-availability`\n\nOne practical limit from the docs: keep a Configuration under 10 interviewers. Bigger panels should split by interview stage or role.\n\nAttach Notetaker to the Configuration and every booked call gets recorded, transcribed, and summarized. The detail that makes this useful for hiring specifically is `custom_instructions`\n\n— you tell the summarizer to focus on technical skills demonstrated, communication quality, and follow-up topics, so output maps to your scorecard instead of being a generic recap.\n\nTwo hard constraints to design around:\n\n`notetaker.media`\n\nwebhook fires. Download immediately.Also: the bot joins as a non-signed-in participant. If nobody admits it from the lobby within 10 minutes, it gives up with `failed_entry`\n\nand the recording is gone. For automated pipelines, configure Meet/Teams/Zoom to let anonymous participants in — \"Anyone with the link can join\" for Meet, \"Anonymous users can join\" for Teams, waiting room off for Zoom.\n\nThe Configuration alone doesn't give candidates anything to click. The fastest option is a Nylas-hosted page — add a `slug`\n\nand you're done:\n\n```\ncurl --request PUT \\\n  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<CONFIGURATION_ID>' \\\n  --header 'Authorization: Bearer <NYLAS_API_KEY>' \\\n  --header 'Content-Type: application/json' \\\n  --data '{ \"slug\": \"interview-engineering-team\" }'\n```\n\nThe booking page is now live at `book.nylas.com/interview-engineering-team`\n\n. Drop that URL into recruiter emails or your ATS's candidate templates and you have a working self-booking flow with zero frontend work.\n\nIf you'd rather keep candidates on your own careers site, embed the scheduling UI instead:\n\n```\n<script src=\"https://cdn.jsdelivr.net/npm/@nylas/react@latest/dist/cdn/nylas-scheduling/nylas-scheduling.es.js\"></script>\n\n<nylas-scheduling configuration-id=\"<CONFIGURATION_ID>\"></nylas-scheduling>\n```\n\nThe web component handles date selection, time slots, the booking form, and confirmation. Round-robin assignment and Notetaker consent apply automatically — the embedded version isn't a second-class citizen. (For production, pin the package to a specific version instead of `@latest`\n\nand add a Subresource Integrity hash so a CDN change can't alter what your careers page loads.)\n\nSubscribe to three triggers: `booking.created`\n\n, `booking.cancelled`\n\n, and `notetaker.media`\n\n. That covers the full interview lifecycle — scheduled, cancelled, and debriefed.\n\nWhen a candidate books, the `booking.created`\n\npayload hands you everything your ATS needs in one shot:\n\n```\n{\n  \"type\": \"booking.created\",\n  \"data\": {\n    \"grant_id\": \"<NYLAS_GRANT_ID>\",\n    \"object\": {\n      \"booking_id\": \"<BOOKING_ID>\",\n      \"booking_info\": {\n        \"event_id\": \"<EVENT_ID>\",\n        \"start_time\": 1719842400,\n        \"end_time\": 1719844500,\n        \"title\": \"Interview with Dana Chen\",\n        \"location\": \"https://meet.google.com/abc-defg-hij\"\n      }\n    }\n  }\n}\n```\n\nYour handler creates the interview record, stores the `booking_id`\n\nand `event_id`\n\nfor later correlation, and gets out. One operational rule worth following: **respond with a 200 immediately and process asynchronously.** Nylas retries failed deliveries, but an endpoint that's consistently slow or unreachable eventually gets its notifications dropped — and a silently missed booking is the worst possible failure mode in a hiring pipeline.\n\nWhen the `notetaker.media`\n\nwebhook arrives with `state: \"available\"`\n\n, download the transcript, summary, and action items right away (remember the 60-minute URL expiry), then look up the linked calendar event through the Notetaker API to attach everything to the right candidate record.\n\nOne local-dev note: Nylas blocks requests to ngrok URLs, so use VS Code port forwarding or Hookdeck to expose your webhook server while you build.\n\nEverything above runs on your interviewers' connected calendars. But the *communication* side — emailing candidates the booking link, confirming, nudging no-shows — doesn't have to come from a recruiter's personal address. An Agent Account is a real mailbox with its own grant ID that works with the same Messages and Events endpoints, so a `recruiting@yourcompany.com`\n\nidentity can own candidate correspondence end to end. The [recruiting overview](https://developer.nylas.com/docs/cookbook/use-cases/industries/recruiting/) lists the agent-driven variants, including a scheduling agent with its own calendar.\n\n`booking.cancelled`\n\nand removes the event; the candidate rebooks from scratch. Link ATS records by candidate email so the rebook ties back to the same person.Don't migrate the whole hiring funnel at once. Pick one role, build the Configuration for that panel, wire the two webhooks, and compare time-to-scheduled against your current process for a couple of weeks. The [full tutorial](https://developer.nylas.com/docs/cookbook/use-cases/build/interview-scheduling-pipeline/) has the complete webhook handlers in Node and Python. What's the slowest step in your hiring loop right now — scheduling, or the debrief?", "url": "https://wpnews.pro/news/recruiting-agent-interview-scheduling-pipeline", "canonical_source": "https://dev.to/qasim157/recruiting-agent-interview-scheduling-pipeline-5e4p", "published_at": "2026-06-13 11:21:37+00:00", "updated_at": "2026-06-13 11:48:00.100390+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-products"], "entities": ["Nylas", "Nylas Scheduler", "Nylas Calendar", "Nylas Notetaker", "Agent Accounts", "Google Meet", "Microsoft Teams", "Zoom"], "alternates": {"html": "https://wpnews.pro/news/recruiting-agent-interview-scheduling-pipeline", "markdown": "https://wpnews.pro/news/recruiting-agent-interview-scheduling-pipeline.md", "text": "https://wpnews.pro/news/recruiting-agent-interview-scheduling-pipeline.txt", "jsonld": "https://wpnews.pro/news/recruiting-agent-interview-scheduling-pipeline.jsonld"}}