get_analytics_metrics
ChatGPTGet analytics metrics Return analytics metrics and chart payloads for the filtered scope (dashboard + supplementary SMS/time-saved/satisfaction series used by the analytics page). Filters align to the analytics dashboard UI: optional `date_range` (JSON string), `folder_id`, `campaign_id`, `candidate_source`, and `recruiter`. Args: date_range: JSON-encoded date range, e.g. {"start_date":"2026-01-01T00:00:00Z","end_date":"2026-01-31T23:59:59Z"}. folder_id: Optional folder id to scope analytics. campaign_id: Optional job/campaign id to scope analytics. candidate_source: Optional candidate source filter. Supports sourced, applied, or comma-separated values like sourced,applied. recruiter: Optional comma-separated recruiter email list.
get_application
ChatGPTGet application DEPRECATED: use the list endpoint with ids (which now accepts a Tenzo id OR an ATS remote id) for single or batch lookup. Returns a single record when you supply exactly one lookup key: `id` (Tenzo UUID) or `remote_id` (your identifier). Passing both or neither is invalid. Args: id: Tenzo internal UUID for this application (CandidateCampaignInfo id). Exactly one of `id` or `remote_id` is required. remote_id: Your application id—same value as application.remote_id on POST /api/v1/application. Exactly one of `id` or `remote_id` is required.
get_application_by_candidate_and_job
ChatGPTGet application by candidate and job DEPRECATED: use GET /applications with candidate_id + job_id filters instead. Resolve a (candidate_id, job_id) pair to its application record. Use this when you have the Tenzo candidate id and job id but not the application id. Returns 404 when the candidate has no application on that job. Args: candidate_id: Tenzo internal UUID for the candidate (org-scoped). job_id: Tenzo internal UUID for the job/campaign (org-scoped).
get_application_communications_email
ChatGPTGet application email Scoped to an application: supply exactly one of `id` (Tenzo internal application UUID) or `remote_id` (your application.remote_id from POST /application). Passing both or neither returns 400. Args: id: Tenzo internal UUID for this application (CandidateCampaignInfo id). Exactly one of `id` or `remote_id` is required. application_remote_id: Your application id—same value as application.remote_id on POST /api/v1/application. Exactly one of `id` or `remote_id` is required.
get_application_communications_sms
ChatGPTGet application SMS Scoped to an application: supply exactly one of `id` (Tenzo internal application UUID) or `remote_id` (your application.remote_id from POST /application). Passing both or neither returns 400. Args: id: Tenzo internal UUID for this application (CandidateCampaignInfo id). Exactly one of `id` or `remote_id` is required. application_remote_id: Your application id—same value as application.remote_id on POST /api/v1/application. Exactly one of `id` or `remote_id` is required.
get_ats_integration_configuration
ChatGPTGet ATS integration dynamic configuration schema
get_audit_event_filter_options
ChatGPTAudit event filter options Return the distinct filter values available for this org's audit log (the set of event types and entity types actually present). Use these values to populate the filters when calling list_audit_events.
get_call
ChatGPTGet call Returns one call session for your organization. `id` (Tenzo call UUID) is required. This API does not expose a customer remote_id for calls. Args: id: Tenzo internal UUID for this interview / call session.
get_call_quality_eval
ChatGPTGet Call Quality Evaluation Return the AI (LLM-as-a-judge) quality evaluation for a single call, including its overall score and the rationale, keyed by the Tenzo call/interview UUID. Returns 404 when the call does not exist in this org or when no evaluation has been generated for it yet. Args: tenzo_id: Tenzo internal call/interview UUID.
get_call_transcript
ChatGPTGet call transcript Returns voice call_transcript and optionally aggregate sms_transcript when available. `id` (Tenzo call UUID) is required (no remote_id for calls in this API). Args: id: Tenzo internal UUID for this interview / call session.
get_candidate
ChatGPTGet candidate DEPRECATED: use the list endpoint with ids (which now accepts a Tenzo id OR an ATS remote id) for single or batch lookup. Returns a single record when you supply exactly one lookup key: `id` (Tenzo UUID) or `remote_id` (your identifier). Passing both or neither is invalid. Args: id: Tenzo internal UUID for this candidate. Exactly one of `id` or `remote_id` is required. remote_id: Your candidate identifier—same value as candidate.remote_id on POST /api/v1/application. Exactly one of `id` or `remote_id` is required.
get_candidate_resume
ChatGPTGet Candidate Resume Return one candidate's parsed resume text plus structured work-experience entries, keyed by the Tenzo candidate UUID. A real candidate with no resume yet still returns a view with null resume text and an empty experience list; an unknown candidate returns 404. Args: tenzo_id: Tenzo internal candidate UUID.
get_doc
ChatGPTGet Doc Content Return the full content of one product/API documentation file addressed by its relative path (as listed by list_docs). Returns 404 if the path is unknown or not an allowed doc file.
get_grading_analytics
ChatGPTGet per-question grading analytics for a job Aggregate per-question grading stats across all completed graded interviews for a job (identified by `campaign_id`). For each question returns sample size, mean/median grade, min/max, pass rate, and a leniency signal (possibly_too_harsh, possibly_too_lenient, or balanced). Questions are sorted worst-first and worst_question names the lowest-scoring one. Read-only; does not change grading.
get_interview_results
ChatGPTGet interview result Application-scoped interview result payload. Supply exactly one of `id` (Tenzo internal application UUID / candidate_campaign_id) or `remote_application_id` (your application.remote_id from POST /application; remote_id is accepted for backwards compatibility). Response fields match the Results Webhook callback payload. Args: id: Tenzo internal UUID for this application (CandidateCampaignInfo id). Exactly one of `id` or `remote_id` is required. remote_application_id: Your application id (same value as application.remote_id on POST /api/v1/application). Exactly one of id or remote_application_id is required.
get_interview_rules
ChatGPTGet rules Returns the org's script-generation rule sets — the instruction bundles used to generate interview scripts — one per template. Each rule set is identified by its `id` and carries a `name`, an `is_default` flag, and the instruction fields: `instructions`, `variables`, `call_intro_instructions`, `initial_sms_instructions`, `initial_email_instructions`, `resume_requirements_instructions`, `screening_questions_instructions`, `grading_instructions_instructions`, and `outro_instructions`. The optional `id` query param narrows the result to a single rule set by its id. Args: id: Optional rule set id to narrow the result to a single rule set; omit to list all.
get_job
ChatGPTGet job DEPRECATED: use the list endpoint with ids (which now accepts a Tenzo id OR an ATS remote id) for single or batch lookup. Returns a single record when you supply exactly one lookup key: `id` (Tenzo UUID) or `remote_id` (your identifier). Passing both or neither is invalid. Args: id: Tenzo internal UUID for this job. Exactly one of `id` or `remote_id` is required. remote_id: Your job identifier—same value as remote_id on POST /api/v1/job. Exactly one of `id` or `remote_id` is required.
get_job_candidate_questions
ChatGPTList candidate questions for a job (paginated) Args: job_id: Tenzo internal job (campaign) UUID.
get_job_resume_requirements
ChatGPTGet resume filter requirements for a job Args: job_id: Tenzo internal job (campaign) UUID.
get_job_script
ChatGPTGet curated job script payload Returns Cosmos script content (screening requirements, outreach copy) scoped to one job. Args: job_id: Tenzo internal job (campaign) UUID.
get_job_settings
ChatGPTGet effective merged job settings Return the effective settings for one job, computed by merging org-level defaults with any job-specific overrides (the override wins where set). Covers notification, outreach hours, call retry, scheduling, avatar, and related configuration. Keyed by the Tenzo job (campaign) UUID. Args: job_id: Tenzo internal job (campaign) UUID.
get_media_item
ChatGPTGet media asset Returns one media asset metadata record. `id` (Tenzo media asset UUID) is required. There is no customer remote_id for media items in this API. Args: id: Tenzo internal UUID for this media asset.
get_meeting_copilot_note
ChatGPTGet Meeting Copilot note Fetch one Meeting Copilot note by Tenzo internal id. Returns the note's structured sections, markdown summary, transcript, and associated meeting metadata. Args: tenzo_id: Tenzo internal Meeting Copilot note UUID.
get_meeting_copilot_template
ChatGPTGet Meeting Copilot template Fetch one Meeting Copilot template by Tenzo internal id. Returns the template's structured sections, context, constraints, and compliance rules. Args: tenzo_id: Tenzo internal Meeting Copilot template UUID.
get_org_interview_settings
ChatGPTGet org-level interview settings defaults Returns org-level Interview Settings defaults from Settings > Interview Settings > Caller Settings. Use /job/settings for a specific job's merged effective settings.
get_sourcing_by_user
ChatGPTGet sourced-candidate counts per user Return the number of candidates each recruiter sourced over the requested scope, grouped by the sourcing recruiter's email. Answers questions like "how many people did each user source this week?". Optional `date_range` (JSON string, filters on when the candidate was sourced), `folder_id`, and `campaign_id` scope the result. Args: date_range: JSON-encoded date range, e.g. {"start_date":"2026-01-01T00:00:00Z","end_date":"2026-01-31T23:59:59Z"}. folder_id: Optional folder id to scope analytics. campaign_id: Optional job/campaign id to scope analytics.
get_template
ChatGPTFetch one template (or question constraint) by id within a family. Replaces the former per-kind get_*_template tools. Args: kind: Which template family the id belongs to. One of: script_generation, background_info, redaction, suggested_follow_up, voicemail_sms_prompt, flagged_event, summary, thank_you_email, custom_booking_outro, rejection_email, resume_feedback_email, interview_results_layout, question_constraints. template_id: The template id (or constraint id for question_constraints). Returns: The template definition on success, or {error, ...} on failure.
get_top_candidates_for_job
ChatGPTGet top candidates for a job Return the top candidates for a job (identified by `campaign_id`) ranked by their best graded interview: overall_grade descending, tie-broken by question_completion_rate. Use `limit` to set how many to return (default 5, max 50). Answers questions like "who are the top 5 candidates for this role?". Args: limit: How many candidates to return (default 5, clamped to 1-50).
get_user
ChatGPTGet User Args: tenzo_id: Tenzo internal user UUID.
list_applications
ChatGPTList applications Returns a paginated list scoped to your organization (from the API key). Use `updated_after` (ISO 8601) for incremental sync. Use `cursor` from the prior response meta.next_cursor when `meta.has_more` is true. Use `sort` (updated_at_asc or updated_at_desc, default `updated_at_desc`) to order rows by each record's updated_at (stable ordering for `cursor` pagination). Optional filters: `job_id` / `candidate_id` (Tenzo UUIDs) or `job_remote_id` / `candidate_remote_id` (your ATS ids) — at most one per pair; a UUID from a prior result goes in *`_id**. Also **tenzo_stage**. Args: limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. updated_before: If set, only return records whose updated_at is on or before this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). created_after: ISO-8601 timestamp (must include a timezone offset, e.g. 2026-01-01T00:00:00Z). Returns only rows created on or after this instant. created_before: ISO-8601 timestamp (must include a timezone offset). Returns only rows created on or before this instant. job_id: When set, only return applications tied to this Tenzo job UUID (same internal id as application.job_id on POST /api/v1/application). job_remote_id: When set, only return applications tied to this job via the ATS/job remote identifier (same value as job remote_id on POST /api/v1/job). folder_id: When set, only return applications on jobs inside this folder. Same internal id as the folder id from GET /api/v1/folders. candidate_id: When set, only return applications for this Tenzo candidate UUID (the organization's internal candidate id). candidate_remote_id: When set, only return applications for this candidate identifier (same as candidate.remote_id on POST /api/v1/application). candidate_name: When set, only return applications whose candidate's full name contains this substring (case-insensitive). candidate_sources: When set, only return applications whose candidate_source is in this list (e.g. candidate_sources=manual&candidate_sources=sourced). sort: Sort order by each row's updated_at. updated_at_desc returns newest-first (default); updated_at_asc returns oldest-first. Allowed values: updated_at_asc, updated_at_desc. tenzo_stage: When set, only return applications in this Tenzo lifecycle stage (same as tenzo_stage on the application row; e.g. OUTREACH, CALL_COMPLETED). For multiple stages, use tenzo_stages instead. tenzo_stages: When set, only return applications whose tenzo_stage is in this list (e.g. tenzo_stages=OUTREACH&tenzo_stages=CALL_COMPLETED). Combines with the singular tenzo_stage via OR if both are supplied. ids: When set, only return applications whose Tenzo id OR ATS remote id is in this list (e.g. ids=<uuid-or-remote-id>&ids=...`, max 200). Combine with other filters.
list_ats_integration_rules
ChatGPTList ATS integration rules
list_ats_integrations
ChatGPTList ATS integrations
list_audit_events
ChatGPTList audit events Org-scoped audit log (API key). Supports time range and type filters. Args: start_time: ISO 8601 with timezone; events on or after this created_at. end_time: ISO 8601 with timezone; events on or before this created_at. event_types: Filter by one or more event types. entity_type: Filter by audited entity type. entity_name: Case-insensitive search over supported audited entity names. user_email: Case-insensitive search over the actor/user email. limit: Max events to return. offset: Number of events to skip.
list_calls
ChatGPTList calls Returns a paginated list scoped to your organization (from the API key). Use `updated_after` (ISO 8601) for incremental sync. Use `cursor` from the prior response meta.next_cursor when `meta.has_more` is true. Optional: narrow with at most one of `candidate_id` (Tenzo candidate UUID), `call_id` (Tenzo call UUID), or `application_id` (Tenzo application UUID); omit all for org-wide paging. Args: limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. candidate_id: When set, scope the list to calls for this Tenzo candidate UUID. Use at most one of `candidate_id`, `call_id`, or `application_id`. call_id: When set, scope the list to this Tenzo call UUID (typically zero or one row). Use at most one of `candidate_id`, `call_id`, or `application_id`. application_id: When set, scope the list to calls tied to this Tenzo application UUID (internal application / candidate-campaign id). Use at most one of `candidate_id`, `call_id`, or `application_id`. ids: When set, only return calls whose Tenzo id is in this list (e.g. ids=<uuid>&ids=<uuid>, max 200). Combine with other filters.
list_candidate_notes
ChatGPTList Candidate ATS Notes List the ATS-synced timeline notes attached to a candidate, newest first, keyed by the Tenzo candidate UUID. Returns up to limit notes; an unknown candidate returns 404. Args: tenzo_id: Tenzo internal candidate UUID.
list_candidates
ChatGPTList candidates Returns a paginated list scoped to your organization (from the API key). Use `updated_after` (ISO 8601) for incremental sync. Use `cursor` from the prior response meta.next_cursor when `meta.has_more` is true. Use `sort` (updated_at_asc or updated_at_desc, default `updated_at_desc`) to order rows by each record's updated_at (stable ordering for `cursor` pagination). Args: limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. sort: Sort order by each row's updated_at. updated_at_desc returns newest-first (default); updated_at_asc returns oldest-first. Allowed values: updated_at_asc, updated_at_desc. ids: When set, only return candidates whose Tenzo id OR ATS remote id is in this list (e.g. ids=<uuid-or-remote-id>&ids=..., max 200). Combine with other filters.
list_docs
ChatGPTList Doc Paths List the relative paths of all available product/API documentation files (Markdown docs). Use a returned path with get_doc to fetch that document's content.
list_folder_contents
ChatGPTList Folder Contents List the direct children of a folder: its immediate subfolders plus the jobs filed directly in it. Omit folder_id (or pass null) to list the org root: top-level folders and jobs not in any folder. Does not recurse into subfolders; drill down by re-calling with a subfolder's id. Each list is independently capped at limit; use search_jobs for org-wide job listings. Args: folder_id: Tenzo internal folder UUID. Omit (or pass null) to list the org root — top-level folders + jobs not in any folder.
list_interview_results
ChatGPTList interview results Application-scoped interview result payload. Supply exactly one of `id` (Tenzo internal application UUID / candidate_campaign_id) or `remote_application_id` (your application.remote_id from POST /application; remote_id is accepted for backwards compatibility). Response fields match the Results Webhook callback payload. Supports standard list paging/sync parameters: `limit`, `cursor`, `updated_after`, and `sort`. Args: id: Tenzo internal UUID for this application (CandidateCampaignInfo id). Exactly one of `id` or `remote_id` is required. remote_application_id: Your application id (same value as application.remote_id on POST /api/v1/application). Exactly one of id or remote_application_id is required. limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. sort: Sort order by each row's updated_at. updated_at_desc returns newest-first (default); updated_at_asc returns oldest-first. Allowed values: updated_at_asc, updated_at_desc.
list_jobs
ChatGPTList jobs Returns a paginated list scoped to your organization (from the API key). Use `updated_after` (ISO 8601) for incremental sync. Use `cursor` from the prior response meta.next_cursor when `meta.has_more` is true. Use `sort` (updated_at_asc or updated_at_desc, default `updated_at_desc`) to order rows by each record's updated_at (stable ordering for `cursor` pagination). Args: limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. sort: Sort order by each row's updated_at. updated_at_desc returns newest-first (default); updated_at_asc returns oldest-first. Allowed values: updated_at_asc, updated_at_desc. outreach_state: Optional outreach state filter: paused or resumed. name_contains: Optional case-insensitive partial match against job name/title. Use for operator search, not incremental sync. ids: When set, only return jobs whose Tenzo id OR ATS remote id is in this list (e.g. ids=<uuid-or-remote-id>&ids=..., max 200). Combine with other filters.
list_media
ChatGPTList media assets (audio / video metadata) Returns a paginated list scoped to your organization (from the API key). Use `updated_after` (ISO 8601) for incremental sync. Use `cursor` from the prior response meta.next_cursor when `meta.has_more` is true. Args: limit: Maximum number of rows to return in this page (1-100). Default: 50. cursor: Opaque pagination cursor from the previous response's next_cursor. Omit on the first request. updated_after: If set, only return records whose updated_at is strictly after this timestamp (ISO 8601, e.g. 2026-01-15T10:00:00Z). Used for incremental sync. ids: When set, only return media assets whose Tenzo id is in this list (e.g. ids=<uuid>&ids=<uuid>, max 200). Combine with other filters.
list_meeting_copilot_notes
ChatGPTList Meeting Copilot notes List Meeting Copilot notes (recorded meeting/intake/interview sessions) in the org, newest first. Distinct from candidate ATS-timeline notes — those live on the candidate. Optional q substring matches against note name, candidate name, or job name. Optional type filters by meeting type. Args: q: Optional substring matched against note name, candidate name, or job name. type: Filter by note type (interview, intake, sales, other). ids: When set, only return notes whose Tenzo id is in this list (e.g. ids=<uuid>&ids=<uuid>, max 200). Combine with other filters.
list_meeting_copilot_templates
ChatGPTList Meeting Copilot templates List Meeting Copilot templates (note presets) in the org. These define the structured sections, context, and constraints used to shape a meeting note. Optional q substring matches against template name. Optional type filters by meeting type. Args: q: Optional substring matched against template name. type: Filter by template type (interview, intake, sales, other). ids: When set, only return templates whose Tenzo id is in this list (e.g. ids=<uuid>&ids=<uuid>, max 200). Combine with other filters.
list_templates
ChatGPTList your org's templates of a given family. Replaces the former per-kind list_*_templates tools. Args: kind: Which template family to list. One of: script_generation, background_info, redaction, suggested_follow_up, voicemail_sms_prompt, flagged_event, summary, thank_you_email, custom_booking_outro, rejection_email, resume_feedback_email, interview_results_layout, question_constraints. name: Optional case-insensitive substring filter on the template name. Returns: {items: [{template_id, name, updated_at}]} on success, or {error, ...} on failure.
list_unanswered_candidate_questions
ChatGPTList unanswered candidate questions Rows where the model declined to answer the candidate's question (is_answered=false), optionally since a timestamp. Args: since: ISO 8601 timestamp with timezone; only questions created at or after this time.
list_users
ChatGPTList users in organization Args: name: Optional substring match on first name, last name, or email.
search_candidates
ChatGPTSearch Candidates by Name Find candidates by a case-insensitive substring match on full name (email is not searched). Returns up to limit lightweight candidate views (id, name, email, phone, timezone). This is the primary way to resolve a person's name to a candidate_id for use with other tools.
search_folders
ChatGPTSearch Folders by Name Find folders by a case-insensitive substring match on the folder name, returning up to limit folder summaries. Use this to resolve a folder name to a folder_id without walking the tree.
search_interviews
ChatGPTSearch Interviews Search interview records, where each record is one candidate summarized to their most recent call for a job. Filter by candidate name (substring), call statuses, completion fraction range, score range, last-called date range, and job_id, folder_id, or candidate_id. Returns up to limit rows; the response flags likely truncation when score/completion filters may have dropped rows below the limit.
search_jobs
ChatGPTSearch Jobs (rich filters) Search jobs with rich filters, returning up to limit job summary records. Filter by name (case-insensitive substring), statuses, recruiter emails, creating user ids, created-at date range, and containing folder_id. All filters combine with AND; omit a filter to ignore it. statuses values are case-sensitive and must be uppercase: PENDING, PAUSED, or COMPLETED. There is no OPEN/CLOSED status — an open/active/live job is PENDING (the default state for a synced or resumed job); a temporarily stopped job is PAUSED; COMPLETED is deprecated. To list open jobs, pass statuses=["PENDING"]. Args: q: Deprecated alias for name; the previous /job/search endpoint exposed this name before the consolidation with /job/search-rich. Prefer name in new callers. min_length=1 preserves the old endpoint's empty-string rejection so existing callers see the same 400 they used to.
search_users
ChatGPTSearch Users by Name
submit_feedback
ChatGPTReport a question you struggled to answer or a spot where you were uncertain. Use this to flag gaps, missing data, or low-confidence answers so the team can debug external usage issues and improve the agent. Call it in addition to your best answer, not instead of it. Args: category: Why you're flagging this — struggled_to_answer | uncertain | missing_data | other. question: The user's question/request you struggled with (paraphrase). details: What specifically was uncertain or missing, and why. session_id: Optional client/session identifier to help us trace the issue. Returns: {feedback_id, recorded} on success, or {error, recorded: False} on failure.