// freehire API
API 參考文件
以讀取為主的開放式 HTTP API,涵蓋 freehire 職缺目錄;可透過多種條件查詢職缺、讀取公司資料,並使用金鑰追蹤應徵進度。
基礎網址
所有端點均在 https://freehire.me/api/v1 下提供服務。 API 是先讀且開放的:職缺、搜尋、facet 和公司端點不需要驗證,可以稱為跨來源。
經過驗證的端點接受瀏覽器工作階段 cookie(透過登入設置,同源)或作為承載權杖發送的個人 API 金鑰 - 請參閱下面的驗證和 API 金鑰。
回應格式
單一項目包裝為 { "data": ... }。集合新增分頁中繼資料:{ "data": [...], "meta": { "total", "limit", "offset" } }。錯誤是具有匹配 HTTP 狀態的 { "error": "message" }。
{ "data": { "...": "single item" } }
{ "data": [ ... ], "meta": { "total": 4213, "limit": 20, "offset": 0 } }
{ "error": "job not found" }分頁
使用 limit(預設 20,最多 100)和 offset(預設 0)列出和搜尋端點頁面。 meta.total 會報告目前篩選器符合的總數,因此您可以計算頁數。
搜尋分頁有界:offset + limit 不得超過 10000 (pagination too deep → 400)。這是深度分頁保護,而不是報告總數的上限——使用篩選條件來縮小範圍,而不是分頁那麼遠。
錯誤
錯誤使用標準 HTTP 狀態代碼:400(錯誤請求/無效值)、401(缺少或無效憑證)、403(已驗證但不允許,例如非審核者)、404(沒有此類職缺、公司或擁有的資源)和 503(搜尋暫時不可用)。主體始終為 { "error": ... }。
驗證方式
瀏覽器用戶端使用登入時設定的 HttpOnly 工作階段 cookie 進行驗證(同源;SPA 無法讀取它)。非瀏覽器用戶端使用個人 API 金鑰作為 Authorization: Bearer <token>。
標記為「工作階段或 API 金鑰」的端點接受其中之一;標記為「僅限工作階段」的端點(API 金鑰管理、儲存的搜尋、訂閱)僅接受 cookie,因此洩漏的金鑰無法管理憑證。 「審核人員」端點還需要審核人員角色。
本文件不包含的內容
This reference covers every endpoint you can call. A handful are deliberately left out because calling them directly is meaningless: the Gmail and calendar consent redirects (/me/gmail/connect, /me/calendar/connect, and their callbacks), which only a browser can complete; the Telegram bot webhook and the Discord interaction webhook; the browser-tool websocket relay; the sitemap-cursor helpers behind /sitemap.xml; and the /og/*.png social-preview cards, which render an image rather than answer with JSON.
/jobs/{slug}/fit 端點是 /jobs/{slug}/match-analysis 的預重命名別名,並且命中相同的處理程序。它們仍然有效,因此現有客戶端不會中斷 - 在新程式碼中使用匹配分析路徑。
該 API 的大部分也是 CLI。如果您正在編寫代理程式而不是集成,freehire 可以透過一個 API 金鑰以更少的儀式覆蓋相同的表面 - 搜尋、追蹤、收件匣和履歷自訂。
篩選職缺
下列參數適用於 GET /jobs/search 以及 GET /jobs/facets.
所有參數皆可搭配全文搜尋參數 q。
修飾參數 — 適用於所有分類條件
- ›將多個值作為逗號分隔清單傳遞給 OR:
skills=go,rust符合其中一個。重複參數 (skills=go&skills=rust) 也可以。 - ›新增
<param>_mode=and以要求所有選定的值:skills=go,rust&skills_mode=and與兩者相符。 - ›新增
<param>_exclude=<value>以排除符合項目:company_type_exclude=outstaff刪除員工職缺。 - ›Different facets are ANDed together; numeric and boolean filters are ANDed too. The geography facets are the one exception — see below.
- ›Geography is a single OR group:
regions,countriesandcitieswiden each other instead of narrowing.regions=eu&countries=ITmeans "in Europe **or** in Italy", so it returns everythingregions=eualone would. To search one country, drop the region:countries=IT. The three name a single concept — *where* — so picking two places reads as "either", which is what makesregions=eu&countries=BR("Europe or Brazil") useful. There is no AND to switch on:_mode=anddoes not apply to geography. - ›使用
regions=none來匹配沒有解析地理位置(空區域集)的職缺;它與真實區域值進行「或」運算,並像任何區域一樣支援_exclude。 - ›A param no filter reads is ignored rather than refused — so old links and saved searches keep working — and comes back in
meta.ignored_params, withdid_you_meanwhen it is only the singular of a real facet. Check it: a dropped filter otherwise looks like a genuinely broad result. At most 10 are listed per response. The same report rides on/jobs/facets,/market/coverageand/companies, which answer{"data": ...}and grow ametablock only when there is something to warn about./companiesfilters on its own vocabulary, so a jobs facet sent there is reported as ignored.
分類條件
下列每個分類條件都支援重複 OR、_mode=and 與 _exclude,規則如上所述。
| 參數 | 篩選條件 | 可用值 |
|---|---|---|
collections | 收藏 | yc, techstars, a16z-portfolio, a16z-speedrun, european, ai, mag7, bigtech, unicorn, fortune500, eastern-roots, ai-native, uk-skilled-worker-sponsor, nl-recognised-sponsor, us-h1b-sponsor |
regions | 地區 | global, north_america, latam, eu, uk, mena, africa, apac, cis, none |
work_mode | 工作形式 | remote, hybrid, onsite |
role | 角色 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
category | 專業化 | software_engineering, backend, frontend, fullstack, mobile, devops, sre, network_engineering, data_engineering, data_science, data_analytics, ml_ai, ai_engineering, qa, security, hardware, embedded, blockchain, architecture, design, engineering_design, product, project_management, management, marketing, sales, support, business_analysis, solutions_engineering, developer_relations, technical_writing, recruiting, hr, finance, legal, operations, customer_success, other |
ai_archetype | 人工智慧專業化 | rag_app_builder, agent_builder, cloud_ml_platform_engineer, ml_trainer_researcher, fullstack_ai_engineer, devops_infra_engineer |
seniority | 資歷 | intern, junior, middle, senior, lead, staff, principal, c_level |
skills | 技能 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
domains | 工業 | fintech, crypto, ecommerce, gambling, gamedev, media, travel, healthcare, edtech, govtech, devtools, cybersecurity, ai, hrtech, adtech, proptech, logistics, mobility, climatetech, other |
company_type | 公司類型 | product, startup, outsource, outstaff, agency, inhouse, government |
countries | 國家 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
cities | 城市 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
relocation | 搬遷 | not_supported, supported, required |
employment_type | 就業 | full_time, part_time, contract, internship, fellowship |
english_level | 英語 | none, a1, a2, b1, b2, c1, c2, native |
posting_language | 工作語言 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
reality | 發布現實 | fresh, stale, likely-evergreen |
salary_currency | 貨幣 | USD, EUR, GBP, RUB |
company_slug | 公司簡介 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
source | 來源 | 開放詞彙 — 呼叫 /jobs/facets 了解即時值 |
company_size | 公司規模 | 1-10, 11-50, 51-200, 201-500, 501-1000, 1000+ |
education_level | 教育程度 | none, bachelor, master, phd |
salary_period | 薪資期間 | year, month, day, hour |
數值與布林篩選條件
| 參數 | 篩選條件 | 可用值 |
|---|---|---|
visa_sponsorship | 簽證贊助 | true, false |
salary_min | 最低工資 | integer — jobs whose minimum salary is at least this (pair with salary_currency) |
salary_max | 最高工資 | integer — jobs whose maximum salary is at most this (pair with salary_currency) |
experience_years_min | 最低經驗 | integer — jobs requiring at least this many years |
posted_within_days | 發表於 | integer — jobs whose effective posting date falls in the last N days |
查詢範例
Senior Go,遠程,獨聯體地區
?q=go&seniority=senior&work_mode=remote®ions=cis
德國的後端角色,最新鮮的優先
?category=backend&countries=DE&sort=posted_at&order=desc
One country only — no region param, or it widens back out
?countries=IT&employment_type=contract
必須同時使用 Go 和 Rust
?skills=go,rust&skills_mode=and
排除外派公司
?company_type_exclude=outstaff
至少10萬美元,有簽證贊助
?salary_currency=USD&salary_min=100000&visa_sponsorship=true
端點
每個端點都有獨立頁面;請從下方或側邊欄選擇。
職缺
- GET /jobs 列出職缺,最新的在前,帶有limit/offset 分頁。
- GET /jobs/search 對職缺進行全文+分面搜尋。
- GET /agent/jobs/search 搜尋程序化/代理消費者的完整描述。
- GET /jobs/facets 每個方面值(和數字統計資料)的匹配職缺計數。
- GET /jobs/{slug} 其公開的單一工作(也服務於封閉的工作)。
- GET /jobs/{slug}/similar 與給定職缺相似的職缺(語義;可能為空)。
- GET /jobs/{slug}/copies 同一角色群中的其他開放職缺(每個城市重複)。
- GET /jobs/{slug}/apply-form The captured ATS application form for the posting.
AI 分析
公司
Company feedback
- GET /companies/{slug}/feedback List a company's feedback, newest first.
- GET /companies/{slug}/feedback/mine Your own feedback on this company, across every category (empty if none).
- POST /companies/{slug}/feedback Create or overwrite your feedback in one category on a company.
- DELETE /companies/{slug}/feedback Delete your feedback in one category (no-op if absent).
- POST /company-feedback/{id}/report Report a specific review.
- GET /company-feedback/reported Every review with at least one report, most-reported first.
- POST /company-feedback/{id}/hide Hide a review, dropping it from the company's public list and average.
身分驗證
- POST /auth/register 建立帳戶並開始工作階段。
- POST /auth/login 登入並開始工作階段。
- POST /auth/logout 清除工作階段 cookie。
- GET /auth/me 當前使用者(cookie 或 API 金鑰)。
- GET /auth/oauth/providers 列出已啟用的 OAuth 提供者。
- GET /auth/oauth/{provider}/start 開始 OAuth 登入重新導向。
- POST /auth/verify/request Send (or resend) a six-digit email verification code.
- POST /auth/verify/confirm Confirm the address with the mailed code.
- POST /auth/password/forgot Request a password-reset code by email.
- POST /auth/password/reset Set a new password against a mailed code.
- POST /auth/logout-all Sign out every session on the account, including this one.
- POST /auth/oauth/exchange Redeem a mobile OAuth callback code for a session.
- GET /auth/extension/connect Consent screen for "Sign in with freehire" from the browser extension.
- POST /auth/extension/connect Submit the consent decision and mint the extension’s session token.
API 金鑰
職缺互動
- POST /jobs/{slug}/view 紀錄您查看該職缺的資訊。
- POST /jobs/{slug}/apply 將職缺標記為已套用。
- POST /jobs/{slug}/save 儲存職缺(新增書籤)。
- DELETE /jobs/{slug}/save 取消儲存職缺(如果未儲存則無操作)。
- PATCH /jobs/{slug}/track 設定應徵階段和/或註釋。
- DELETE /jobs/{slug}/stage 清除應徵階段。
- DELETE /jobs/{slug}/track 完全刪除互動紀錄。
- PATCH /me/applications/{id} Set the application stage and/or notes, addressed by row id.
- DELETE /me/applications/{id} Remove the interaction record entirely, addressed by row id.
- DELETE /me/applications/{id}/stage Clear the application stage, addressed by row id.
- POST /jobs/{slug}/dismiss 解僱(滑開)該工作。
- DELETE /jobs/{slug}/dismiss 取消解僱該工作(如果未解僱,則無操作)。
- GET /me/tracking 您追蹤的職缺與職缺資料結合。
- GET /me/tracking/viewed 您查看過的職缺資訊。
- GET /me/tracking/analyses 您已對其執行 AI 匹配分析的職缺。
- GET /me/credits 您目前的 AI 點數餘額。
- GET /me/tracking/saved 您保存的大量工作。
- GET /me/tracking/pipeline 您的應用程式管道快照(每個階段的計數)。
- GET /me/tracking/swipe 刷卡分類平台的一批職缺。
- GET /me/timeline 您的應徵在某個日期範圍內發生了什麼情況。
- GET /me/interviews Arranged meetings whose start falls in the date range.
In-app assistant
- POST /assistant/sessions Start a new conversation.
- GET /assistant/sessions List your chat conversations, newest activity first.
- GET /assistant/sessions/{id} One owned conversation with its full transcript.
- DELETE /assistant/sessions/{id} Delete an owned conversation and its transcript.
- POST /assistant/sessions/{id}/messages Send a message and stream the turn as Server-Sent Events.
- POST /assistant/sessions/{id}/cancel Stop the session’s running turn.
- POST /assistant/sessions/{id}/opening Have the assistant speak first, on an `interview`/`debrief` session.
- POST /assistant/sessions/{id}/retry Resume after a failed turn, without adding another user message.
- POST /assistant/sessions/{id}/voice-token Mint a short-lived credential for a hands-free voice call.
- POST /assistant/sessions/{id}/voice-turns Append one completed spoken exchange to the transcript.
- POST /assistant/sessions/{id}/autopilot Run an unattended CV-tailoring pass as one long streamed turn.
職缺投稿
職缺檢舉
Ghost job reports
個人檔案與履歷
- GET /me/profile 您的職業檔案,如果您尚未保存,則為空。
- PUT /me/profile 建立或替換您的個人資料。
- DELETE /me/profile 清除您的個人資料(冪等)。
- GET /me/profile/verdict 對您的個人資料技能的市場覆蓋率判斷。
- GET /me/profile/ats-report CV ATS 就緒報告(確定性 + 任何快取的 LLM 審核)。
- POST /me/profile/ats-report 執行可選的 LLM 定性 ATS 審查並將其快取。
- POST /me/resume/extract 從上傳的履歷擷取結構化個人資料(不使用 LLM)。
- PUT /me/resume 存储或替换您的简历。
- GET /me/resume 您的履歷狀態(已啟用/目前/已上傳)。
- DELETE /me/resume 刪除您儲存的履歷。
- PUT /me/resume/contacts Override one or more contact-block fields on your profile.
- POST /me/resume/contacts/replace-from-cv Reset every contact override from your current structured résumé.
Screening answers
活動與共享看板
已儲存的搜尋與訂閱
- GET /me/searches 列出您已儲存的搜尋。
- POST /me/searches 儲存搜尋。
- PATCH /me/searches/{id} 重新命名或重新查詢已儲存的搜尋。
- DELETE /me/searches/{id} 刪除已儲存的搜尋。
- GET /me/subscriptions 列出您的訂閱。
- POST /me/subscriptions 將已儲存的搜尋訂閱到摘要頻道。
- PATCH /me/subscriptions/{id} 暫停或恢復訂閱。
- DELETE /me/subscriptions/{id} 刪除訂閱。
- GET /me/telegram 您的 Telegram 連結狀態(用於摘要)。
- POST /me/telegram/link 开始关联您的 Telegram 帐户。
- DELETE /me/telegram 取消您的 Telegram 帳戶的連結。
- GET /me/discord Your Discord link status (for the `/contribute` bot command).
- POST /me/discord/link Mint a one-time token to link your Discord account.
- DELETE /me/discord Unlink your Discord account. Idempotent.
Push notifications & alerts
- POST /me/push-tokens Register (or reassign) a mobile device’s Expo push token.
- GET /me/push-tokens List your own registered devices.
- DELETE /me/push-tokens Unregister one of your own device tokens.
- POST /me/push-tokens/test Send a test push to all of your own registered devices.
- GET /me/notifications List your notification-center entries, newest first.
- GET /me/notifications/{id} One of your notifications, including its jobs snapshot.
- POST /me/notifications/{id}/read Mark one notification read (idempotent).
- POST /me/notifications/read-all Mark every unread notification read.
帳號、點數與瀏覽器擴充功能
- POST /me/password 更改已知密碼。
- DELETE /me 刪除您的帳戶及其下的所有內容。
- GET /me/credits/history 您的人工智慧信用分類賬,最新的在前。
- GET /me/usage Your AI request activity this billing period.
- GET /me/tracking/{slug} 一個被追蹤的應用程序,帶有與其連結的郵件及其歷史紀錄。
- GET /me/tracking/dismissed 您忽略的 slugs,以便客戶可以隱藏它們。
- POST /me/match-text 根據您的個人資料對任何工作文本進行評分。
- GET /me/autofill-profile 您在規範自動填入欄位中的聯絡方式。
- POST /me/autofill/run 驅動您自己的瀏覽器來填寫應徵表。
- PATCH /me/timezone Set your account’s IANA timezone.
- PATCH /me/language Set your preferred interface language.
連結匯入與探索
投票、通知與討論
- POST /jobs/{slug}/vote 對工作進行投票。
- DELETE /jobs/{slug}/vote 清除您對工作的投票。
- POST /companies/{slug}/vote 對一家公司進行投票。
- DELETE /companies/{slug}/vote 清除您對公司的投票。
- GET /me/notification-settings 您的通知規則(控制已儲存的職缺提醒和生命週期推播)。
- PUT /me/notification-settings 更改您的通知規則。
- GET /threads 公共討論主題。
- GET /threads/count 有多少個線程。
- GET /threads/{id} 一個線程及其回應。
- POST /threads 啟動一個線程。
- POST /threads/{id}/replies 回覆主題。
- POST /threads/{id}/close 關閉一個線程。
市場洞察與統計
- GET /stats/catalog The headline catalogue-scale figures (open jobs, companies, sources, …).
- GET /insights/roles 角色(類別×資歷)依職缺或成長排名。
- GET /insights/skills 技能按職缺或成長排名。
- GET /insights/salary 按類別、資歷和國家/地區劃分的薪資範圍。
- GET /insights/velocity 隨著時間的推移,市場招募的速度有多快。
- GET /insights/companies 公司依招募活動排名。
- GET /stats/facets 方面分佈快照:國家、技能、資歷、工作模式。
- GET /stats/user-growth 每個 UTC 天的累積會員成長。
- GET /stats/engagement 所有使用者保存、應用和查看的職缺,以及履歷和收件匣使用情況。
- GET /status 每個提供者的攝取隊列健康狀況。
員工推薦
- POST /me/referrals/offers 提出推薦進入一家公司。多部分——需要證明。
- GET /me/referrals/offers 您的推薦提議及其審核狀態。
- DELETE /me/referrals/offers/{id} 撤回報價。
- POST /me/referrals/requests 向公司認可的推薦人詢問介紹。
- GET /me/referrals/requests 您要求的介紹以及它們的立場。
- GET /me/referrals/incoming 作為批准的推薦人,您正在等待請求。
- GET /me/referrals/incoming/{id}/cv 查看候選人的履歷以了解一項傳入請求。
- POST /me/referrals/incoming/{id}/resolve 將收到的請求標記為已聯絡或已拒絕。
- GET /referrals/offers 提議審核隊列。
- GET /referrals/offers/{id}/proof 查看報價的證明文件。
- POST /referrals/offers/{id}/decide 批准或拒絕要約。
Talent Network
履歷建立與客製化
- GET /me/cvs 列出您的履歷,但不包括其文件。
- POST /me/cvs 建立一份履歷,可以選擇從您儲存的歷史紀錄中播種。
- GET /me/cvs/{id} 一份帶有完整文件的履歷。
- PUT /me/cvs/{id} 替換履歷——標題、模板和文件。
- PATCH /me/cvs/{id} 套用一批編輯,依路徑尋址。
- PUT /me/cvs/{id}/template 僅切換模板。
- DELETE /me/cvs/{id} 刪除履歷。
- GET /me/cvs/{id}/pdf 將履歷渲染為 PDF。
- GET /cv-templates 模板庫。
- GET /cv-fonts 履歷可以使用的字體。
- POST /me/cvs/tailor 開始針對一個職缺訂製履歷。
- POST /me/cvs/{id}/tailor-session 為現有的客製化履歷建立新的代理工作階段。
- POST /me/cvs/base/reset-from-resume 根據您的履歷重建您的基礎履歷。
- POST /me/cvs/{id}/reset-from-resume 根據您的履歷重建這份量身訂製的履歷。
- GET /me/cvs/{id}/tailor-context 客製化履歷應重新建構的匹配分析。
- PUT /me/cvs/{id}/session 將代理工作階段綁定到 CV。
- PUT /me/cvs/{id}/tracer-links Turn link tracing on or off for this CV's PDF.
- GET /me/cvs/{id}/tracer-links What is known about this CV's traced links.
- GET /me/cvs/{id}/revisions The edit history of this CV, newest first.
- POST /me/cvs/{id}/revisions/{rid}/undo Reverse one revision, leaving later edits in place.
- POST /me/cvs/{id}/revisions/batch/{bid}/undo Reverse every standing edit of one agent turn, newest first.
- GET /me/cvs/{id}/ats-delta How tailoring changed this CV's ATS-readiness score.
- GET /me/cvs/{id}/job-match How well a tailored CV matches the vacancy it was written for.
Photo
經驗資料庫
- GET /me/experience 你的作品及其證據原子。
- PUT /me/experience/employments/{id} 編輯一項就業。
- DELETE /me/experience/employments/{id} 刪除一個職業及其原子。
- PUT /me/experience/atoms/{id} 編輯一個證據原子。
- DELETE /me/experience/atoms/{id} 刪除一個證據原子。
- POST /me/experience/employments Record a new place — a job or a project.
- POST /me/experience/atoms Record a new achievement.
- POST /me/experience/atoms/merge Fold two of your atoms into one richer keep.
應徵郵件
- GET /me/tracking/{slug}/followup Draft a chase for a silent application.
- POST /me/tracking/{slug}/followup Record that you sent a chase.
- POST /me/tracking/{slug}/mail-recall Sweep your connected mailbox for mail belonging to this application.
- POST /me/tracking/{slug}/mail-recall/link Import and link one message a mail-recall sweep proposed.
- GET /me/inbox 列出您的郵件,最新的在前,不包括已刪除的郵件。
- GET /me/emails/{id} 一條完整的訊息。標記已讀。
- POST /me/emails 推送一批您自己的郵件用戶端所取得的郵件。
- POST /me/emails/{id}/triage 紀錄訊息是什麼,以及(可選)它屬於哪個應用程式。
- POST /me/emails/{id}/link 將訊息附加到您的其中一個應用程式。
- POST /me/emails/{id}/unlink 清除訊息的應用程式連結;它的分類仍然存在。
- POST /me/emails/{id}/confirm 接受建議的連結。
- POST /me/emails/{id}/reject 關閉建議的連結而不附加它。
- POST /me/emails/{id}/application 紀錄訊息中的應用程序,並將訊息連結到它。
- POST /me/inbox/read-all 將與篩選器相符的每個未讀訊息標記為已讀。
- POST /me/emails/{id}/delete 軟刪除訊息。答案204。
- POST /me/emails/{id}/restore 撤銷軟刪除。答案204。
- GET /me/mailbox 您託管的免費租用地址,以及是否設定了該功能。
- POST /me/mailbox 聲明您的託管地址。
- DELETE /me/mailbox 發布地址;它停止接收。
- GET /me/gmail Gmail 連線狀態。
- POST /me/gmail/sync 開始增量同步。
- DELETE /me/gmail 中斷 Gmail 的連線並清除它同步的郵件。