{"openapi":"3.1.0","info":{"title":"intoola Recruit: Recruiting, Simplified","version":"1.0.0","description":"Intoola Recruit helps students and early-career candidates find relevant professionals, organize networking, draft outreach, prepare for interviews and get application feedback. Requires an Intoola account with an active Intoola Recruit subscription. Muse usage draws from the same allowance as the Intoola Recruit app."},"servers":[{"url":"https://intoola-recruit.intoola-recruit.workers.dev"}],"paths":{"/muse/v1/status":{"get":{"operationId":"get_account_status","summary":"Check whether the connected Intoola account has an active Intoola Recruit subscription and see remaining allowance.","security":[{"intoola":["account.status"]}],"responses":{"200":{"description":"Status"},"401":{"description":"Invalid or expired token"}}}},"/muse/v1/actions/search_people":{"post":{"operationId":"search_people","summary":"Find professionals with Intoola Recruit people search.","description":"Use when a student or early-career candidate wants to find professionals by school, company, job title or keywords, for example \"Find Tufts alumni working at Evercore\" or \"Find investment banking analysts at this company\". Uses Intoola Recruit's existing people search and counts against the user's own monthly people-search allowance. Returns names, roles and profile links, not email addresses. Requires an active Intoola Recruit subscription.","security":[{"intoola":["recruit.search"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"school":{"type":"string","description":"School or university to match (e.g. \"Tufts University\").","maxLength":160},"company":{"type":"string","description":"Current company to match.","maxLength":160},"position":{"type":"string","description":"Current job title to match.","maxLength":160},"keywords":{"type":"string","description":"Extra keywords, comma separated.","maxLength":300},"search_id":{"type":"string","description":"Value returned by a previous call; pass it together with pagination_token to load more of the same search.","minLength":8,"maxLength":64},"pagination_token":{"type":"string","description":"next_page.pagination_token from a previous call, to load the next batch.","maxLength":12000}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/find_professional_email":{"post":{"operationId":"find_professional_email","summary":"Look up the professional email for a person found with search_people.","description":"Use after search_people when the user wants a professional email for one of the people returned. Uses Intoola Recruit's existing email finder; a found email counts against the user's monthly email allowance (an already-credited person is never charged twice). Requires an active Intoola Recruit subscription.","security":[{"intoola":["recruit.search"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["person_ref"],"properties":{"person_ref":{"type":"string","description":"person_ref of a person returned by search_people.","minLength":3,"maxLength":600}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/add_contact_to_tracker":{"post":{"operationId":"add_contact_to_tracker","summary":"Add a person to the user's Intoola Recruit tracker.","description":"Use when the user wants to save someone to their Intoola Recruit tracker. Give either a person_ref from search_people, or full_name and company for someone the user names. Adding the same person twice is safe: the existing entry is returned. New contacts start as \"not_contacted\" unless a status is given.","security":[{"intoola":["recruit.track"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"person_ref":{"type":"string","description":"person_ref from search_people (preferred).","maxLength":600},"full_name":{"type":"string","description":"Person's full name (when no person_ref).","maxLength":200},"company":{"type":"string","description":"Company (required when no person_ref).","maxLength":200},"position":{"type":"string","description":"Job title.","maxLength":300},"profile_url":{"type":"string","description":"https:// profile link.","maxLength":1000},"status":{"type":"string","description":"Initial status.","enum":["not_contacted","connection_requested","contacted","followed_up","replied","meeting_scheduled","referral_received","no_response","not_interested"],"default":"not_contacted"}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/get_tracked_contacts":{"post":{"operationId":"get_tracked_contacts","summary":"List contacts in the user's Intoola Recruit tracker.","description":"Use to show, filter or review the people the user is tracking, for example \"who have I already contacted at Evercore?\". Only the user's own tracker is ever returned.","security":[{"intoola":["recruit.track"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"company":{"type":"string","description":"Only contacts at this company.","maxLength":200},"status":{"type":"string","description":"Only contacts with this status.","enum":["not_contacted","connection_requested","contacted","followed_up","replied","meeting_scheduled","referral_received","no_response","not_interested"]},"limit":{"type":"integer","description":"Maximum contacts to return.","minimum":1,"maximum":50,"default":25},"cursor":{"type":"integer","description":"Offset returned as next_cursor by a previous call.","minimum":0,"maximum":100000,"default":0}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/get_contact":{"post":{"operationId":"get_contact","summary":"Get one tracked contact.","description":"Use to read one contact from the user's tracker using the contact_id returned by get_tracked_contacts or add_contact_to_tracker.","security":[{"intoola":["recruit.track"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["contact_id"],"properties":{"contact_id":{"type":"string","description":"contact_id of a tracked contact.","minLength":3,"maxLength":200}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/update_contact_status":{"post":{"operationId":"update_contact_status","summary":"Change the status of a tracked contact.","description":"Use to update where a relationship stands, for example \"update this contact to referral received\". Statuses are the ones Intoola Recruit already uses.","security":[{"intoola":["recruit.track"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["contact_id","status"],"properties":{"contact_id":{"type":"string","description":"contact_id of a tracked contact.","minLength":3,"maxLength":200},"status":{"type":"string","description":"New status.","enum":["not_contacted","connection_requested","contacted","followed_up","replied","meeting_scheduled","referral_received","no_response","not_interested"]}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/draft_outreach":{"post":{"operationId":"draft_outreach","summary":"Draft a networking outreach email. Never sends it.","description":"Use when the user wants help writing a networking or informational-interview email to a specific person. Returns a subject and body for the user to review and send themselves; this action cannot send email. Uses only the facts provided; it will not invent shared connections or achievements. Uses the user's daily Intoola Recruit AI allowance.","security":[{"intoola":["recruit.outreach"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["recipient_name","role_or_goal"],"properties":{"recipient_name":{"type":"string","description":"Recipient's name.","maxLength":200},"role_or_goal":{"type":"string","description":"Role of interest or the reason for reaching out.","maxLength":500},"company":{"type":"string","description":"Recipient's company.","maxLength":200},"context":{"type":"string","description":"Personal connection or context to mention (only supplied facts are used).","maxLength":1500},"target_words":{"type":"integer","description":"Approximate body length in words.","minimum":60,"maximum":250,"default":120},"tone":{"type":"string","description":"Tone.","enum":["Relaxed & conversational","Friendly","Warm & professional","Polished","Formal & reserved"],"default":"Warm & professional"},"directness":{"type":"string","description":"How direct the ask is.","enum":["Relationship first","Soft ask","Balanced","Direct","Very direct"],"default":"Soft ask"}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/draft_follow_up":{"post":{"operationId":"draft_follow_up","summary":"Draft a follow-up email. Never sends it.","description":"Use when the user wants to follow up on an earlier networking message that has had no reply. Returns a draft for the user to review and send themselves; this action cannot send email. Uses the user's daily Intoola Recruit AI allowance.","security":[{"intoola":["recruit.outreach"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["recipient_name","previous_message_summary"],"properties":{"recipient_name":{"type":"string","description":"Recipient's name.","maxLength":200},"previous_message_summary":{"type":"string","description":"Brief summary of the earlier message and any reply.","maxLength":1500},"role_or_goal":{"type":"string","description":"Role of interest or the goal of the conversation.","maxLength":500},"company":{"type":"string","description":"Recipient's company.","maxLength":200},"target_words":{"type":"integer","description":"Approximate body length in words.","minimum":40,"maximum":200,"default":80},"tone":{"type":"string","description":"Tone.","enum":["Relaxed & conversational","Friendly","Warm & professional","Polished","Formal & reserved"],"default":"Warm & professional"},"directness":{"type":"string","description":"How direct the ask is.","enum":["Relationship first","Soft ask","Balanced","Direct","Very direct"],"default":"Soft ask"}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/prepare_for_interview":{"post":{"operationId":"prepare_for_interview","summary":"Create an interview preparation plan.","description":"Use when the user wants to prepare for an interview in an industry or role, for example \"prepare me for my finance internship interview\". Uses Intoola Recruit's interview coaching (complete prep, behavioral, role-specific, technical or case). It gives general industry guidance, not private information about a specific employer. Uses the user's daily Intoola Recruit AI allowance.","security":[{"intoola":["recruit.prep"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["industry"],"properties":{"industry":{"type":"string","description":"Industry, e.g. \"Finance\", \"Consulting\", \"Technology\".","maxLength":100},"role":{"type":"string","description":"Target role, e.g. \"Investment banking analyst\".","maxLength":100},"level":{"type":"string","description":"Experience level.","enum":["Student / internship","Entry level","Mid level","Senior level","Leadership / executive"],"default":"Student / internship"},"focus":{"type":"string","description":"Kind of preparation.","enum":["Complete prep","Behavioral","Role-specific","Technical","Case interview"],"default":"Complete prep"}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}},"/muse/v1/actions/analyze_resume":{"post":{"operationId":"analyze_resume","summary":"Get AI feedback on a resume and/or cover letter.","description":"Use when the user wants feedback on a resume or cover letter, optionally tailored to a job description, for example \"give me feedback on my resume for this role\". Send the document text. Uses the user's daily Intoola Recruit AI allowance and the same limits as the app.","security":[{"intoola":["recruit.feedback"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Optional. Retries with the same key replay the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"review_type":{"type":"string","description":"What to review.","enum":["resume","cover_letter","both"],"default":"resume"},"resume_text":{"type":"string","description":"Resume text.","maxLength":60000},"cover_letter_text":{"type":"string","description":"Cover letter text.","maxLength":60000},"job_description_text":{"type":"string","description":"Job description text (optional, enables tailored feedback).","maxLength":60000}}}}}},"responses":{"200":{"description":"Result"},"400":{"description":"Invalid parameters"},"401":{"description":"Missing, invalid or expired authorization"},"402":{"description":"An active Intoola Recruit subscription is required (see upgrade_url)"},"404":{"description":"Unknown reference"},"413":{"description":"Payload too large"},"429":{"description":"Rate or usage limit reached"},"502":{"description":"Upstream failure"},"503":{"description":"Temporarily unavailable"}}}}},"components":{"securitySchemes":{"intoola":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://intoola-recruit.intoola-recruit.workers.dev/oauth/authorize","tokenUrl":"https://intoola-recruit.intoola-recruit.workers.dev/oauth/token","refreshUrl":"https://intoola-recruit.intoola-recruit.workers.dev/oauth/token","scopes":{"recruit.search":"Search for professionals and look up a professional email, using your Intoola Recruit allowance.","recruit.track":"View and update the contacts in your Intoola Recruit tracker.","recruit.outreach":"Draft networking and follow-up emails. Drafts only: nothing is ever sent for you.","recruit.prep":"Create interview preparation plans.","recruit.feedback":"Get AI feedback on a resume or cover letter that you provide.","account.status":"See whether your Intoola Recruit subscription is active and how much of your allowance remains."}}}}}}}