---
title: "Match jobs to a candidate profile — returns ranked results"
method: POST
path: "/jobs/match"
---

# Match jobs to a candidate profile — returns ranked results

`POST /jobs/match`

Send a candidate profile (skills, salary range, workplace preference) and get recent active jobs ranked by relevance score. Anonymous access is open and free; recurring agents can register an API key for stable identity. This is the recommended endpoint for agentic job search.

## Request body

- object
  - `skills` string[], required — Candidate skills (e.g., ["python", "llm", "pytorch"])
  - `salary_min` integer — Desired minimum salary (USD/year)
  - `salary_max` integer — Desired maximum salary (USD/year)
  - `workplace` 'remote' | 'hybrid' | 'onsite'
  - `global_remote` boolean — Only match roles explicitly open worldwide
  - `remote_scope` 'global' | 'restricted' | 'unknown' | 'not_remote'
  - `level` 'junior' | 'mid' | 'senior' | 'lead' | 'principal'
  - `limit` integer — Max results (default 20, max 50)

## Response `200`

Ranked job matches with scores and reasons

- object
  - `matches` object[]
    - `id` string, uuid
    - `title` string
    - `company_name` string
    - `description` string
    - `requirements` string
    - `location` string
    - `workplace` 'remote' | 'hybrid' | 'onsite'
    - `remote_scope` 'global' | 'restricted' | 'unknown' | 'not_remote' — global requires explicit worldwide hiring evidence; unknown means remote eligibility is ambiguous
    - `job_type` string
    - `experience_level` string
    - `salary_min` integer, nullable
    - `salary_max` integer, nullable
    - `tags` string[]
    - `apply_url` string
    - `slug` string
    - `quality_score` integer — Listing quality 0-100 based on salary data, description detail, tags, location specificity
    - `created_at` string, date-time
    - `candidate_resume_action` CandidateResumeAction — Free, anonymous resume-preview action exposed after a candidate selects a job. It does not authorize or submit an application.
      - `status` string
      - `method` string
      - `endpoint` string, uri
      - `job_id_json_path` string
      - `required_body_fields` string[]
      - `candidate_charge` integer
      - `preview_requires_identity` boolean
      - `saved_artifact_requires_verified_human` boolean
      - `uses_candidate_verified_evidence` boolean
      - `requires_explicit_human_review` boolean
      - `application_authorized` boolean
      - `submission_performed` boolean
    - `match_score` integer
    - `matched_tags` string[]
    - `match_reasons` string[]
  - `total_scored` integer
  - `total_matches` integer
  - `candidate_resume_action` CandidateResumeAction — Free, anonymous resume-preview action exposed after a candidate selects a job. It does not authorize or submit an application.
    - `status` string
    - `method` string
    - `endpoint` string, uri
    - `job_id_json_path` string
    - `required_body_fields` string[]
    - `candidate_charge` integer
    - `preview_requires_identity` boolean
    - `saved_artifact_requires_verified_human` boolean
    - `uses_candidate_verified_evidence` boolean
    - `requires_explicit_human_review` boolean
    - `application_authorized` boolean
    - `submission_performed` boolean

---

[API](https://skmtc.net/aidevboard/apis/ai-dev-jobs-api.md) · [All operations](https://skmtc.net/aidevboard/apis/ai-dev-jobs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/aidevboard/ai-dev-jobs-api/revisions/b557e8d0b266/schema)
