Recruit · Muse connector

Intoola Recruit connector for Muse

API documentation · Version 1.0 · Last Updated: September 19, 2026

Overview

Intoola Recruit helps students and early-career job seekers find professionals, track recruiting and networking, and prepare. The Muse connector, intoola Recruit: Recruiting, Simplified, lets a Muse user do that from a conversation: search for people at a school or company, look up a professional email, keep a tracker up to date, get a draft outreach or follow-up email, prepare for an interview, and get feedback on a resume or cover letter.

Requirements. The user needs an Intoola account (sign in with Google) and an active paid Intoola Recruit subscription. The subscription is verified on Intoola's servers on every request. Without one, the API returns HTTP 402 with subscription_required and a link to subscribe. Muse does not add a separate subscription or extra allowance: search results, email lookups, and AI requests made through Muse count against the same monthly and daily limits as the Intoola Recruit website and Chrome extension.

Drafts only. Intoola never sends email or messages for the user. Outreach and follow-up actions return draft text that the user reviews and sends themselves. See the Recruit Privacy Policy (Section 15) for how data is handled.

Endpoints

PurposeURL
API base URLhttps://intoola-recruit.intoola-recruit.workers.dev
OpenAPI 3.1 description/muse/v1/openapi.json
OAuth server metadata (RFC 8414)/.well-known/oauth-authorization-server
AuthorizationGET /oauth/authorize
TokenPOST /oauth/token
Revocation (RFC 7009)POST /oauth/revoke
Account and allowance statusGET /muse/v1/status
ActionsPOST /muse/v1/actions/<action>

Authentication

OAuth 2.0 authorization code flow with PKCE (S256, required). Intoola never handles a password: the user signs in with Google on an Intoola-hosted page and then approves the connection.

  • Authorization request: response_type=code, client_id, redirect_uri (must exactly match a registered https URI), state, code_challenge, code_challenge_method=S256, optional scope.
  • Token request: grant_type=authorization_code with code, code_verifier, and redirect_uri; client authentication by HTTP Basic or client_secret in the body.
  • Tokens: opaque bearer access token (1 hour) and refresh token (30 days). Refresh tokens rotate on each use; replaying a rotated token revokes the grant. Send Authorization: Bearer <access_token> on API calls. Users can disconnect at any time, which revokes the tokens.
ScopeAllows
recruit.searchSearch for professionals and look up a professional email.
recruit.trackView and update contacts in the user's Recruit tracker.
recruit.outreachDraft networking and follow-up emails (never sent).
recruit.prepCreate interview preparation plans.
recruit.feedbackAI feedback on a resume or cover letter the user provides.
account.statusSee whether the subscription is active and the remaining allowance.

Actions

All actions take a JSON body and return JSON. Unknown fields are rejected. An optional Idempotency-Key header (8–128 characters) makes retries safe: a repeated request replays the first result instead of running (and counting) again. Contacts belong to the signed-in user only; a contact_id or person_ref from another account is never accepted.

Action (scope)ParametersReturns
search_people (search)school, company, position, keywords (at least one); search_id, pagination_token for the next pagepeople[] with person_ref, name, position, company, school, location, profile URL (no email); next_page; usage
find_professional_email (search)person_ref (required, from a search result)status: found, already_had, not_found, quota_reached, or provider_error; email; usage. Only a found email uses an email credit.
add_contact_to_tracker (track)person_ref, or full_name and company (with optional position, profile_url); optional statuscontact and already_tracked
get_tracked_contacts (track)optional company, status, limit 1–50, cursorcontacts[], total, next_cursor
get_contact (track)contact_id (required)contact
update_contact_status (track)contact_id, status (both required)contact, changed
draft_outreach (outreach)recipient_name, role_or_goal (required); company, context, target_words 60–250, tone, directnesssubject, body, sent: false
draft_follow_up (outreach)recipient_name, previous_message_summary (required); role_or_goal, company, target_words 40–200, tone, directnesssubject, body, sent: false
prepare_for_interview (prep)industry (required); role, level, focus (Complete prep, Behavioral, Role-specific, Technical, Case interview)preparation (Markdown), practice_question
analyze_resume (feedback)resume_text and/or cover_letter_text (up to 60,000 characters each); optional review_type, job_description_textfeedback (Markdown)

Tracker statuses are the same as in the Recruit app: not_contacted, connection_requested, contacted, followed_up, replied, meeting_scheduled, referral_received, no_response, not_interested.

Example request:

POST /muse/v1/actions/search_people
Authorization: Bearer <access_token>
Content-Type: application/json

{ "school": "Tufts University", "company": "Evercore" }

Errors

Errors use the shape { "error": { "code", "message" }, "request_id" }.

HTTPCodeMeaning
400invalid_parametersA parameter is missing, out of range, or unknown.
401missing_authorization, invalid_tokenNo token, or the token is invalid, expired, or revoked. Refresh or re-link.
402subscription_requiredNo active Intoola Recruit subscription (or no account). error.upgrade_url points to the subscribe page.
403insufficient_scopeThe authorization does not include the required scope.
404person_not_found, contact_not_foundUnknown or expired person_ref, or a contact that is not in the user's tracker.
409 / 422request_in_progress, tracker_full, idempotency_key_reuseDuplicate request in flight, the tracker is at its size limit, or an Idempotency-Key reused with different parameters.
413payload_too_largeThe request body is too large.
429rate_limited, usage_limit_reachedPer-minute rate limit, or the user's monthly or daily allowance is used up; see Retry-After.
502 / 503 / 504upstream_error, service_unavailable, upstream_timeoutTemporary problem; nothing was charged. Retry later.

Limits

  • People search and email lookups use the user's existing monthly Intoola Recruit allowances, and AI actions use the existing daily AI allowance. These are shared with the Recruit website and Chrome extension; using Muse does not add extra allowance.
  • The same per-minute limits that apply in the Recruit app also apply through Muse, plus a per-user request limit on the connector itself.