---
title: "List profile fetch jobs"
method: GET
path: "/v1/jobs"
tags: ["Profiles"]
---

# List profile fetch jobs

`GET /v1/jobs`

## Request

- Base URL: `https://api.recruitmcp.com`
- URL: `https://api.recruitmcp.com/v1/jobs`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://recruitmcp.com/oauth/authorize`, token URL `https://recruitmcp.com/oauth/token`, scopes: `sourcing:read`)

Scope: `sourcing:read`.

## Query parameters

- `status` 'queued' | 'running' | 'parked' | 'completed' | 'failed'
- `created_after` string, date-time
- `created_before` string, date-time
- `limit` integer
- `cursor` string

## Headers

- `RecruitMCP-Version` '2026-10-13'
- `RecruitMCP-Customer` string

## Response `200`

Jobs, newest first.

- JobList
  - `object` 'list', required
  - `data` Job[], required
    - `id` string, required
    - `object` 'job', required
    - `kind` 'people_fetch'
    - `job_id` string: Same as id.
    - `status` 'queued' | 'running' | 'parked' | 'completed' | 'failed', required
    - `poll_url` string: Path of GET /v1/jobs/{job_id}. Poll it every few seconds until status is completed or failed.
    - `credits_charged` number: Credits the ledger charged for this job, the same number as result.cost.credits once completed. 0 until the job completes. The call that queued the job is charged when it completes.
    - `progress` object
      - `done` integer
      - `total` integer
    - `error` string, nullable
    - `result` object, nullable
      - `data` Profile[]
        - `profile_id` string, required: Search id. The same value search returned when both ids are known.
        - `alternate_id` string, nullable: The other profile id for the same person. Null until the person has been enriched and both ids are known.
        - `full_name` string, nullable
        - `headline` string, nullable
        - `summary` string, nullable
        - `photo` string, nullable: Profile photo on this API, /v1/media/{token}. The token expires after 7 days; a later response signs a new one. Null when there is no photo.
        - `profile_url` string, nullable
        - `public_identifier` string, nullable
        - `locations` object[]
          - `name` string
        - `experience` object[]
          - `position` string, nullable
          - `company` string, nullable
          - `started` string, nullable
          - `ended` string, nullable
          - `current` boolean
          - `summary` string, nullable
          - `location` string, nullable
          - `company_url` string, nullable
          - `company_industry` string, nullable
          - `company_size` string, nullable
        - `education` object[]
          - `university` string, nullable
          - `url` string, nullable: School profile URL.
          - `degree` string[]
          - `faculty` string, nullable
          - `started_year` integer, nullable
          - `ended_year` integer, nullable
        - `skills` string[]
        - `language` object[]
          - `name` string, nullable
          - `proficiency` string, nullable
        - `certification` object[]
          - `name` string, nullable
          - `authority` string, nullable
        - `open_to_work` boolean
        - `source` 'profile_index' | 'contact_provider', required
        - `fetched_at` string, date-time
      - `not_found` string[]
      - `cost` Cost
        - `credits` integer, required: Credits charged by this call. Whole credits. 0 on an idempotent replay, where the body also has replayed: true and the header Idempotent-Replayed: true.
        - `cached_items` integer: Items read from cache. On a replay, the value of the first response.
        - `live_items` integer: Items fetched live by this call. 0 on a replay.
        - `upstream_calls` integer: Index calls made by this call. 0 on a replay.
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `next_cursor` string, nullable, required: Pass as cursor for the next page. Null on the last page.
  - `has_more` boolean, required

## Other responses

- `400`: `invalid_request` (do not retry): A field is missing or has a value this endpoint does not accept. `unsupported_version` (do not retry): RecruitMCP-Version is not a supported version.
- `401`: `unauthorized` (do not retry): Missing bearer API key.
- `403`: `forbidden` (do not retry): This customer is disabled. `insufficient_scope` (do not retry): This key does not include the scope this endpoint requires.
- `429`: `rate_limited` (retry): Per-key rate limit exceeded.

## Changes

- **2026-10-20** `ad27b35513a6`: 4 warning
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `400`
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `401`
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `403`
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `429`

[Operation history](https://skmtc.dev/recruitmcp/apis/recruitmcp-api/changes/v1/jobs/get.md)

---

[API](https://skmtc.dev/recruitmcp/apis/recruitmcp-api.md) · [All operations](https://skmtc.dev/recruitmcp/apis/recruitmcp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/recruitmcp/apis/recruitmcp-api/revisions/ad27b35513a6?raw)
