Candidate threads
List and read conversations as threads, oldest message first, and find a candidate's history with full-text search over subjects, addresses and stored bodies.
Mail in the product overviewRecruiters email candidates from Gmail and Outlook and juggle interviewer calendars by hand. workwae brings those threads into your ATS and books interviews on real calendars, with the meeting link already on the invite.
// Find a slot every interviewer has free
const tz = "America/Chicago";
const { suggestions } = await workwae.availability.find({
accountId: recruiter.accountId,
attendees: ["maya@example.com", "devon@example.com"],
start: "2026-11-02T00:00:00Z",
end: "2026-11-07T00:00:00Z",
durationMinutes: 45,
timeZone: tz,
workingHours: { start: "09:00", end: "17:00" },
});
// Book the slot the candidate picked, with a Zoom link
await workwae.calendarEvents.create({
accountId: recruiter.accountId,
calendarId,
subject: "Interview: Sam Rivera",
start: { dateTime: "2026-11-03T10:00:00", timeZone: tz },
end: { dateTime: "2026-11-03T10:45:00", timeZone: tz },
attendees: [
{ address: "sam@example.com" },
{ address: "maya@example.com" },
],
onlineMeetingService: "zoom",
});
Mail and calendar from the recruiter's own Google, Microsoft 365 or IMAP account, behind one API.
List and read conversations as threads, oldest message first, and find a candidate's history with full-text search over subjects, addresses and stored bodies.
Mail in the product overviewOutreach and follow-ups go out from the recruiter's Gmail, Microsoft 365 or IMAP account, so replies land where they already work. Schedule sends for the candidate's morning.
Mail in the product overviewKeep outreach, scheduling and offer templates in Handlebars, shared by the team or bound to one recruiter. Content is rendered when a send is queued, so editing a template never changes scheduled mail.
Mail in the product overviewOne call returns each interviewer's busy times and the common free slots, within the working hours, slot length and time zone you choose.
Calendar in the product overviewCreate the interview with a Teams or Meet link, or a Zoom or Webex meeting workwae creates. Moving the event moves the meeting; cancelling it deletes the meeting.
Meetings in the product overviewAttendee responses and changes to the interview arrive as calendar_event webhooks that name the fields that changed, so the candidate's stage stays current.
Each recruiter connects their mailbox and calendar from your ATS, or an administrator connects the team through Google Workspace or Microsoft 365.
Candidate mail and calendars are synced and kept current with provider push, and every change reaches you as a webhook.
Attach threads to candidates by address, send from the recruiter's mailbox, and book interviews on the time everyone has free.
Every use case runs on the same accounts, events and SDK. See all use cases.
Log every rep's email and meetings, send from their own mailbox, and see opens, clicks, bounces and replies.
Find free time across attendees and write events, recurring series, RSVPs and meeting links back to the calendar.
Turn shared inboxes into tickets with filtered webhooks on new mail, and reply in the thread from the team address.
Give an agent new mail as it arrives, full messages and threads, and drafts a person approves before anything is sent.
We are onboarding a small number of teams. Tell us what you are building.