assign_pipeline_lead
ChatGPTAssign pipeline lead owner Set owner_user_id to a teammate public id, or null to unassign.
bulk_mark_leads_actioned
ChatGPTBulk mark actioned Up to 50 readable leads with one reason.
bulk_reject_leads
ChatGPTBulk reject leads Up to 50 readable leads with one reason (prefixed [API/MCP] on each rejected_leads.reason).
discover_contact_email
ChatGPTDiscover hiring manager email Enqueues or runs email enrichment for one assigned HM (same as in-app JIT discover). Background (202) or sync; poll get_lead until email appears or email_not_found. MCP defaults to background when mode is omitted. Costs lead credits when providers run. User asks for HM emails or outreach — get_lead first for hiring_manager_id and flags; call this when needs_email_discovery is true; poll get_lead (minutes possible). Check get_account credits before bulk discover.
discover_contact_phone
ChatGPTDiscover hiring manager phone Enqueues or runs phone enrichment for one assigned HM. Background (202) or sync; poll get_lead until phone appears or phone_not_found. Respects personal_phone_numbers policy. Same pattern as discover_contact_email for phone; only when needs_phone_discovery is true and user/team allows personal phone discovery.
get_account
ChatGPTAccount context Team membership, pipeline flags, and lead credits. On a team, both the shared pool (credits.team) and your personal allocation (credits.personal) must have room — see credits.can_receive_new_leads and credits.state (matches in-app banner: unallocated, team_exhausted, personal_exhausted). credits.remaining is personal allocation remaining, not the team pool. Warn before discover/write when credits.warning is true. Call at session start before discover or bulk triage. Teammates' lists: list_team_lists (not list_my_lists).
get_lead
ChatGPTLead detail Full vente_leads_v1 detail (job description, hiring managers, goal_match, stress_score). hiring_managers include needs_email_discovery / email_not_found (and phone analogs). Empty email with needs_email_discovery true = not enriched yet; call discover_contact_ then poll this endpoint. Single-lead depth and discovery poll target after discover_contact_. Browsing/filtering a list → list_leads. Before saying a HM has no email, check needs_email_discovery / email_not_found; if discovery is needed, discover_contact_email then poll get_lead. CRM cross-check: company_name, job_title, job_location, job_url, hiring_managers — search CRM from the host.
get_lead_usage_report
ChatGPTLead usage report Per-list delivery stats; scope=me (default) or scope=team for managers. Not sign-ins (get_team_activity) or pipeline task counts (get_pipeline_activity_report).
get_list
ChatGPTSingle list metadata List detail when readable (owner or team-visible published list). Response includes what_you_want (the list goal / niche rubric). Use what_you_want with goal_match_level on list_leads when prioritizing which leads fit the niche.
get_pipeline_activity_report
ChatGPTPipeline activity report Completed pipeline stage tasks by type for the pipeline team. Not sign-ins (get_team_activity) or list delivery stats (get_lead_usage_report).
get_team_activity
ChatGPTMy Team activity report Sign-in days and per-member actioned/rejected/discover stats for a date range. Defaults to today only when start_date/end_date omitted. How many leads did team members action / sign in on DATE → set start_date and end_date. Not list credit consumption (get_lead_usage_report) or pipeline task counts (get_pipeline_activity_report).
list_leads
ChatGPTPaginated leads on a list Pending tab by default; supports actioned/rejected/unactioned (archived) tabs and view=pipeline for board fields. When the user asks for today's or new leads, list the pending tab without posted_after/posted_before: that means leads currently available in Vente, not jobs posted today. Use posting-date filters only for an explicit POSTED ON [DATE] or POSTED BETWEEN [DATES] request; never infer them from today's or new leads. First page (no cursor) on pending tab includes date_semantics and may include inbox_query_hint when posting-date-only filters return an empty page while the list cache is non-empty. Each lead row includes first_linked_to_list_at (ISO UTC, first time this job was added to the list — not last pending-inbox appearance), posted_date, goal_match_level, stress_score, and job/company fields. Archived is the same tab as unactioned — leads Vente archived after long inactivity, not simply leads with no action recorded. Actioned tab only includes leads with activity recorded as actioned within the applied date window (default: roughly the last calendar month). Response includes applied_action_date_filter; optional actioned_leads_outside_date_window_count on the first page when the list is not huge. Use start_date=all to disable the action date window; start_date/end_date accept YYYY-MM-DD (ISO) or dd/mm/yyyy. Today's or new leads → pending tab with no posted_after/posted_before: do not treat that as a request for jobs posted today. Never filter returned rows by posted_date in your reply. first_linked_to_list_at is when the job was first added to the list, not when it last appeared in the inbox — do not use alone for new today. Only an explicit POSTED ON [DATE] or POSTED BETWEEN [DATES] request → posted_after/posted_before; never infer date filters from today's or new leads. JOB TITLE in LOCATION → q= + location= on pending tab. High-stress companies → sort=stress_score direction=desc limit=5. Full lead + HMs → get_lead, not paginated client filter. Due pipeline tasks → list_pipeline_tasks. Null hiring_managers[].email here does not mean undiscoverable — run get_lead + discover_contact_* when the user needs contact details.
list_my_lists
ChatGPTLists owned by the caller ICP lists for the authenticated user with derived list_state and what_you_want (list goal / niche rubric). Pick a list by name + what_you_want before list_leads; get_list adds nothing beyond a single list if you already have list_public_id.
list_pipeline_tasks
ChatGPTDue pipeline tasks Due pipeline stage tasks with lead context. Requires pipeline_enabled from get_account. What should I focus on today → due=today (when pipeline_enabled). Not pending inbox tabs — use list_leads tab=pending.
list_team_lists
ChatGPTTeammate pipeline lists Lists owned by teammates on your pipeline team (not your own — use list_my_lists). Optional owner_user_id filters to one teammate’s public user id from list_team_members.
list_team_members
ChatGPTPipeline team roster User ids and display names for routing (e.g. list_team_lists with owner_user_id).
mark_lead_actioned
ChatGPTMark lead actioned Requires readable lead and vente:write. Idempotent; records mcp_actioned. Reason is stored in activity history. After the user has done something concrete with a lead (logged in CRM, sent outreach, called, exported, etc.), call with a short reason describing what was done so the lead leaves pending/unactioned. Use bulk_mark_leads_actioned for batches.
move_pipeline_lead_stage
ChatGPTMove pipeline lead stage Same validations as pipeline board.
pause_list
ChatGPTPause list delivery ICP owner only. Stops new lead delivery without deleting the list. Reason is required for explicit intent but is not stored on the list record.
reject_company
ChatGPTReject company for list owner Blacklists company and rejects lead. Requires reason and confirmed=true.
reject_lead
ChatGPTReject lead Requires readable lead and vente:write. Idempotent when already rejected. Stored reason is prefixed with [API/MCP] for audit filtering.
resume_list
ChatGPTResume list delivery ICP owner only.