Catalogue

36 tools.

Grouped by the scope a key must carry to call them. Your key sees only the tools its granted scopes permit — tools/list is filtered per caller, so this page is the full surface, not your surface.

Read the badges before granting a scope.

writes
Changes data.
reaches a candidate
Fires a notification at a real person — a host should confirm with a human first.
idempotency_key required
The underlying table has no unique index, so a retry without a key would duplicate.

audit:read

3 tools — a key granted audit:read may call these.
ToolWhat it does
get_audit_log Query the unified audit log with optional filters (entity type, entity id, action, actor, since) — the general entry point; get_job_timeline is the one-job shorthand for it. RLS-scoped: admins see everything, company members see only entities in their company, so an empty result means "nothing visible to you", not "nothing happened". PII-safe summary rows. Paginated, most recent first.
get_job_timeline Chronological audit timeline for a single job (who did what, when, which fields changed). Shorthand for get_audit_log with entity_type="job" and entity_id=<job_id> — identical rows and ordering, so call this when you want one job's history and get_audit_log when you need any other filter (action, actor, since) or a different entity type. RLS-scoped: you see it only if you can see the job. PII-safe summary — no raw row snapshots, IPs, or user agents. Paginated (most recent first).
get_pipeline_audit_trail The pipeline audit trail for a job (stage changes and decisions) from pipeline_audit_logs. RLS-scoped to company members. Paginated, most recent first.

candidates:read

4 tools — a key granted candidates:read may call these.
ToolWhat it does
get_candidate_profile Get a full candidate profile (AI summary, scores, skills, preferences). PROFESSIONAL data by default; pass include_contact_details + justification to also return email/phone/social links. RLS still governs whether the profile is visible at all.
list_talent_pool_members List WHO is in a talent-pool list — the membership rows behind search_talent_pool's candidate_count, with each member's professional profile (name, title, company, location). This is the read side of add_to_talent_pool: use it to check membership before adding and to confirm it after. Professional fields only — no email or phone; contact details come solely from get_candidate_profile. Paginated.
search_candidates Search candidate profiles visible to your account by name, title, company, location, industries, skills, years of experience, or actively-looking status. Returns PROFESSIONAL data only by default; pass include_contact_details + a justification to also return email/phone. The full skills list for a single candidate comes from get_candidate_profile. Paginated.
search_talent_pool Find talent-pool LISTS visible to your account by name or type. Returns list metadata only — the candidate_count is a denormalized counter, not the membership. To see WHO is in a list, take the list id from here and call list_talent_pool_members. Paginated.

candidates:write

1 tool — a key granted candidates:write may call these.
ToolWhat it does
add_to_talent_pool Add a candidate to a talent-pool list. Idempotent: re-adding an existing member is reported as a no-op (already_member: true), not an error. The "added_by" is derived from your identity. RLS governs which lists you may write to. Call list_talent_pool_members to see the resulting membership — this tool returns only the row it wrote.
writes

companies:read

3 tools — a key granted companies:read may call these.
ToolWhat it does
get_company_profile Get the professional profile of a company (mission, industry, size, HQ, socials, tech stack, culture). Returns a clean authorization error if the company is not visible to your account. Financial/internal fields are never returned.
list_company_jobs List a company's job postings, optionally filtered by status. Paginated. Scoped to jobs visible to your account (stealth jobs you cannot see are excluded by RLS).
list_company_members List the members of a company (role, job title, department, org-chart position). Optionally filter by role or active status. Paginated. Answers "who is on my team?" for a partner/company.

jobs:read

3 tools — a key granted jobs:read may call these.
ToolWhat it does
get_job_details Get full details of a specific job posting (requirements, salary, pipeline stages) plus its current application count. Returns a clean authorization error if the job is not visible to your account.
get_job_metrics Pipeline analytics for one job: stage distribution, application counts, status breakdown, and average match score. Computed over applications visible to your account.
search_jobs Search and filter job postings visible to your account by title, company, status, location, or remote flag. Returns a paginated summary list. Use the returned cursor to fetch the next page.

jobs:write

2 tools — a key granted jobs:write may call these.
ToolWhat it does
create_job Create a new job posting via the canonical atomic RPC (create_job_atomic). The job is created in DRAFT status, which is NOT visible to candidates — call update_job with status:"published" to make it live. Requires title, company_id, and a unique idempotency_key (so retries do not create duplicates).
writesidempotency_key required
update_job Patch scalar fields on an existing job (title, description, location, remote flag, employment/experience level, salary, currency, urgency) and/or move its lifecycle status. Supply only the fields you want to change — unspecified fields are left untouched. Setting status:"published" makes a draft live and visible to candidates; this is outward-facing — publishing a non-stealth role queues job alerts to every candidate whose saved search matches it, so publish deliberately. Does NOT modify locations, required tools, stealth, access policies, or department — use the full job editor for those.
writesreaches a candidate

kpi:read

5 tools — a key granted kpi:read may call these.
ToolWhat it does
get_funnel_analytics Application funnel breakdown (counts by status + hire rate) over ALL applications visible to your account, regardless of job status, capped at the first 5000 rows (sample_capped tells you when the cap was hit). Optionally scoped to one job or a time window. Status values are the real pipeline states (active, submitted, rejected, closed, withdrawn, hired). Related: get_pipeline_health covers published jobs only (max 50) and adds per-stage detail; get_job_metrics covers one job of any status, uncapped.
get_hiring_metrics Top-level hiring KPIs scoped to your account: open jobs, visible candidates, applications in the last 30 days, and hires in the last 30 days.
get_pipeline_health Pipeline health across your PUBLISHED jobs (max 50 jobs), or one published job: per-job stage distribution, status breakdown, and an aggregate summary. Population is published jobs only — a draft/closed/archived job_id yields an empty report (the response names the excluded job and its status). Related: for ONE job of ANY status use get_job_metrics; for application-level funnel counts and hire rate use get_funnel_analytics.
get_source_effectiveness Sourcing effectiveness: applications grouped by source (direct, referral, linkedin, careers_page, club_sync, member_stealth_share, other) with volume and hire rate. Scoped to applications visible to your account; optional time window.
get_time_to_fill Average / median time-to-fill (days) over jobs visible to your account that have a recorded fill time. Returns sample_size — the platform only records fill time on closed/hired jobs, so the sample may be small.

offers:read

1 tool — a key granted offers:read may call these.
ToolWhat it does
list_offers List offers for a job or for a single application, optionally filtered by status. Paginated, newest first. Returns compensation figures, which is why it sits behind its own read scope.

offers:write

2 tools — a key granted offers:write may call these.
ToolWhat it does
extend_offer Create a compensation offer for an application. Defaults to status "draft", which records the numbers without reaching the candidate; creating with status "sent" dispatches offer notification to them immediately. Requires at least one of base_salary or total_compensation, and an idempotency_key so a retry cannot extend two offers. Refuses when a live offer already exists.
writesreaches a candidateidempotency_key required
update_offer_status Move an existing offer to a new status: pending_approval, sent, accepted, rejected, negotiating or expired. Moving to "sent" dispatches offer notification to the candidate and stamps sent_at; accepted and rejected stamp responded_at. Terminal responses cannot be walked back.
writesreaches a candidate

pipeline:read

6 tools — a key granted pipeline:read may call these.
ToolWhat it does
get_application_details Get full details of a specific application (stage history, match score, review statuses), enriched with its job. Returns a clean authorization error if not visible to your account.
get_candidate_applications List all job applications for a candidate (which jobs, pipeline stage, review status), enriched with job titles. Paginated.
list_applications List the application pipeline for a specific job, optionally filtered by status or pipeline stage index. Paginated. Returns professional candidate summary fields only.
list_candidate_notes List team notes on a candidate (screening context, prior feedback, interview impressions), newest first with pinned notes on top. Optionally filter by note type or search the title/body. RLS decides which notes you can see: general notes are visible to any member, partner_shared to admin/strategist/partner, tqc_internal to admin/strategist. Paginated.
list_interviews List scheduled interviews for a job or for a single application, optionally filtered by status. Paginated, soonest first. Supply exactly one of job_id or application_id.
list_scorecards List the interview scorecards filed against an application — every evaluator, newest first. Paginated. Use this to review feedback before advancing or declining a candidate.

pipeline:write

6 tools — a key granted pipeline:write may call these.
ToolWhat it does
add_candidate_note Add a team-visible note/feedback entry to a candidate's profile. Author is derived from your identity. RLS governs whether you may write notes for this candidate.
writes
decline_candidate Decline or withdraw a candidate application via the canonical atomic RPC (decline_application_atomic). Resolves to rejected vs withdrawn from the decline_source. Also writes pipeline audit, role/company feedback, and a candidate interaction (best-effort). Requires job_id, decline_source, rejection_reason, feedback_text, and an idempotency_key.
writesidempotency_key required
move_candidate_stage Move a candidate's application to a different pipeline stage (0-based index). Writes are RLS-gated: you must have pipeline-write access to the job. Accepts an optional idempotency_key.
writes
schedule_interview Schedule an interview for an application. The job is derived from the application, so the two cannot be mismatched. Inserting the row dispatches interview notification to the candidate and the assigned interviewers, so this reaches people outside the system and is not silently undoable.
writesreaches a candidateidempotency_key required
submit_scorecard Record interview feedback for an application as a scorecard, filed under YOUR identity — row-level security requires the evaluator to be the calling user, so this cannot be filed in someone else's name. Scores are 1–5. The recommendation vocabulary is strong_yes, yes, neutral, no, strong_no; there is no "maybe". This is an internal evaluation record and stays inside the system.
writes
update_application_status Update an application to a NON-DECLINE status (active, hired, on_hold). To reject or withdraw a candidate, use decline_candidate instead — that routes through the canonical atomic decline RPC so feedback and audit rows are written.
writes