List vacancies the user's job radar has found (automatic job search based on their resume), best match first. Each item carries title, company, location, match_grade (strong/possible/weak — the radar's rough fit; match_percentage is the same guess as a number and does not predict an analysis), the keywords behind it, the published salary when the board gave one, the applicant-tracking system behind the link, the level and employment type its title states (null when it states none), an opening snippet of the posting text and on_screen (whether the user has seen it in the app yet), analysis_id when this vacancy was already analyzed, with analysis_match_percentage once that analysis finished (get_vacancy_detail reads it at no cost; analyze_radar_match analyzes one that has none). The stored snippet is all the posting text we hold. Optional status: 'new' (not yet reviewed) or 'saved' (liked) pick one half of the active list; 'deferred' reads the put-off-for-later pile and 'archived' the Skipped pile — everything the user skipped or put away, latest first, and where delete_radar_match takes its ids from. Omit for new plus saved. Narrow with min_match, is_remote, source, posted_after (ISO date), has_analysis, seniority and employment_type — the last two come from the title, so a posting whose title says nothing is dropped by them: a small result means most titles were silent, not that such jobs are rare. Order with sort='fresh' (newest posting first) instead of the default best-match. total says how many matched the filters; offset pages past the 30-item cap. Empty list is a normal result, and the usual one before the first start_radar_scan.