---
title: "Unified jobs endpoint"
method: POST
path: "/v9/jobs"
tags: ["jobs"]
---

# Unified jobs endpoint

`POST /v9/jobs`

## Request body

- EnrichJobsRequest
  - `jobs` JobInput[], nullable — List of jobs to enrich by id. One result row per entry, in input order. Mutually exclusive with `filter`.
    - `job_id` integer, required — Job id on Sumble.
  - `filter` JobsFilter
    - `organization_ids` integer[], nullable — Sumble organization ids to scope the search to. Unknown ids simply match no jobs.
    - `organization_list_id` integer, nullable — Id of one of your saved organization lists (see /organization-lists) whose organizations to search within. Combined with `organization_ids` when both are provided.
    - `query` Query
      - `query` string, required
  - `select` JobsSelect, required
    - `attributes` union — Job attributes to include, or 'all' for every available attribute (including the full `description`). Off by default. Note that 'all' grows — and its cost grows — as new attributes are added to the endpoint.
      - string[]
      - 'all'
    - `related_people` JobRelatedPeopleSelection
      - `attributes` union — Person-level attributes to include for each related person, or 'all' for every attribute available here. Contact attributes (email, phone) and `person_score` are not available here; `confidence` (the inferred relationship's score breakdown) is only available here.
        - string[]
        - 'all'
      - `limit` integer — Maximum related people returned per job.
      - `job_levels` string[] — Only return related people whose job level is one of these (by name, e.g. 'Director', 'VP'); matching is OR across the list. When provided, this replaces the default seniority filter. When empty (the default), only likely hiring managers are returned — people at Manager level or above, and more senior than the role.
      - `job_functions` string[] — Only return related people whose primary job function is one of these (by name, e.g. 'Engineering') or a descendant of one; matching is OR across the list and all descendants. Combined with `job_levels` as AND. Empty (the default) applies no job function filter.
      - `sort_order` 'score' | 'level' — How related people are ranked: 'score' (similarity score, the default; ties broken by seniority) or 'level' (seniority; ties broken by score).
      - `sort_direction` 'desc' | 'asc' — Direction for `sort_order`. The default 'desc' puts the highest score / most senior people first.
  - `limit` integer — Maximum number of jobs to return (filter mode only; ignored when `jobs` is provided).
  - `offset` integer — Number of results to skip (filter mode only; ignored when `jobs` is provided).

## Response `200`

Successful Response

- EnrichJobsResponse
  - `id` string, uuid, required
  - `credits_used` integer, required
  - `credits_remaining` integer, required
  - `jobs` JobRow[], required
    - `input` JobInput
      - `job_id` integer, required — Job id on Sumble.
    - `job_id` integer, nullable — Absent when the input entry didn't match a Sumble job.
    - `sumble_url` string, uri, nullable — Link to the job posting's Sumble page.
    - `attributes` JobAttributes
      - `title` string, nullable
      - `description` string, nullable
      - `location` string, nullable
      - `posted_date` string, date-time, nullable
      - `organization` JobOrganization
        - `organization_id` integer, required
        - `name` string, nullable
        - `domain` string, nullable
        - `sumble_url` string, uri, nullable — Link to the organization's Sumble profile page.
      - `technologies` JobTechnology[], nullable — All technologies extracted from the posting; empty list when requested but none were extracted.
        - `name` string, required
        - `slug` string, required
        - `used` boolean, required — True when the posting indicates the technology is used by the team, not merely mentioned.
        - `sumble_url` string, uri, nullable — The posting organization's jobs page filtered to this technology.
      - `teams` JobTeam[], nullable — Teams extracted from the posting; empty list when requested but none were extracted.
        - `team_id` integer, required
        - `name` string, required
        - `slug` string, required
        - `sumble_url` string, uri, nullable — Link to the team's Sumble page.
      - `job_functions` AppSchemasPaidApiJobsUnifiedJobFunction[], nullable — Job functions classified from the posting; empty list when requested but none were classified.
        - `name` string, required
        - `slug` string, required
        - `sumble_url` string, uri, nullable — The posting organization's jobs page filtered to this job function.
      - `job_levels` AppSchemasPaidApiJobsUnifiedJobLevel[], nullable — Seniority levels classified from the posting; empty list when requested but none were classified.
        - `name` string, required
      - `projects` JobProject[], nullable — Projects extracted from the posting; empty list when requested but none were extracted.
        - `name` string, required
        - `slug` string, required
        - `goal` string, nullable
        - `sumble_url` string, uri, nullable — The posting organization's jobs page filtered to this project.
    - `related_people` RelatedPersonRow[], nullable — Scored hiring managers / team members for the job. Present (possibly empty) when `select.related_people` is requested and the job matched; absent otherwise.
      - `person_id` integer, required
      - `sumble_url` string, uri, required — Link to the person's Sumble profile page.
      - `confidence` RelatedPersonConfidence
        - `score` number, required — How strongly this person relates to the source person (people endpoint) or job posting (jobs endpoint), 0-1. Sum of the five contributions below. Measures similarity on shared features (technologies, job functions, teams, locations, job titles) — unrelated to the ICP-based `person_score` attribute.
        - `technology_contribution` number, required — Share from technologies shared with the source.
        - `job_function_contribution` number, required — Share from matching job functions.
        - `team_contribution` number, required — Share from shared teams.
        - `location_contribution` number, required — Share from matching locations.
        - `title_similarity_contribution` number, required — Share from semantic similarity between job titles.
        - `matched_features` RelatedPersonConfidenceFeature[], required — The specific matched features behind the contributions, highest contribution first.
          - `match_type` 'technology' | 'job_function' | 'team' | 'location' | 'title_similarity', required
          - `name` string, required — The matched feature's name; for title_similarity, the related person's own job title.
          - `slug` string, nullable — Null for location and title_similarity matches.
          - `contribution` number, required — Share of the confidence score attributable to this feature.
      - `attributes` PersonAttributes
        - `name` string, nullable
        - `email` string, nullable — Revealed work email (match mode only). The first successful reveal per person costs 10 credits; repeat reveals while active are free.
        - `phone` string, nullable — Revealed phone number (match mode only). The first successful reveal per person costs 80 credits; repeat reveals while active are free.
        - `linkedin_url` string, uri, nullable
        - `job_title` string, nullable
        - `job_function` string, nullable
        - `job_level` string, nullable
        - `location` string, nullable
        - `country` string, nullable
        - `current_employer` CurrentEmployer
          - `organization_id` integer, required
          - `name` string, nullable
          - `start_date` string, nullable — Start of the person's current role (YYYY-MM).
          - `sumble_url` string, uri, nullable — Link to the organization's Sumble profile page.
        - `technologies` PersonTechnology[], nullable — Technologies from the skills on the person's LinkedIn profile, normalized to Sumble's technology catalog. The slug can be used in `filter.query` (technology EQ '<slug>'). Empty when none of the profile's skills map to a known technology.
          - `name` string, required
          - `slug` string, required
        - `person_score` PersonScore
          - `value` number, required — How well the person matches your ideal customer profile (ICP), 0-100. Sum of the three contributions below.
          - `skill_contribution` number, required — Points from technologies the person uses that match your ICP.
          - `job_function_contribution` number, required — Points from the person's job function matching your ICP.
          - `seniority_contribution` number, required — Points from the person's job level (seniority).
          - `matched_features` PersonScoreFeature[], required — The matched technologies and job functions behind the skill and job-function contributions, highest contribution first.
            - `name` string, required
            - `slug` string, required
            - `match_type` 'technology' | 'job_function', required
            - `contribution` number, required — Points of the 0-100 score attributable to this feature.
  - `matched_count` integer, nullable — List mode only: how many input entries matched a Sumble job.
  - `total` integer, required
  - `source_data_url` string, uri, nullable

## Other responses

- `422` — Validation Error

---

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