The Muse Jobs API

Search and retrieve live job openings across hundreds of thousands of listings. Filter by category (Data Science, Design, Engineering, Sales, and 20+ more), experience level (Entry Level, Mid Level, Senior Level, Management, Internship), company, and location, with paginated results and per-job company details. Retrieve a single job by its numeric ID. This is the core surface for "job openings", job search, and careers use cases.

OpenAPI Specification

themuse-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: The Muse Public API
  description: >-
    The Muse public API (v2) exposes live job openings and employer company
    profiles over REST. All endpoints return JSON. Authentication is optional:
    passing an `api_key` query parameter raises the hourly rate limit from 500
    (unauthenticated) to 3,600 (registered). List endpoints are paginated with
    20 results per page and require a `page` query parameter. The current base
    URL is https://www.themuse.com/api/public; the legacy host
    https://api-v2.themuse.com still resolves via redirect. Use of the API
    requires agreement to the terms at
    https://www.themuse.com/developers/api/v2/terms.
  version: '2.0'
  contact:
    name: The Muse Developer Support
    url: https://www.themuse.com/developers/api/v2
    email: api@themuse.com
  termsOfService: https://www.themuse.com/developers/api/v2/terms
servers:
  - url: https://www.themuse.com/api/public
    description: Current public API base URL
  - url: https://api-v2.themuse.com
    description: Legacy base URL (redirects to the current host)
security:
  - {}
  - apiKeyQuery: []
tags:
  - name: Jobs
    description: Live job openings, searchable by category, level, company, and location.
  - name: Companies
    description: Employer company profiles that back the job listings.
paths:
  /jobs:
    get:
      operationId: listJobs
      tags:
        - Jobs
      summary: Search job openings
      description: >-
        Returns a paginated list of job openings intelligently sorted by factors
        such as trendiness, uniqueness, and newness. Supports filtering by
        category, experience level, company, and location. Multiple values may be
        supplied for `category`, `level`, `company`, and `location` by repeating
        the query parameter. Returns up to 20 results per page.
      parameters:
        - name: page
          in: query
          required: true
          description: Page number of results to return (0-indexed pagination cursor).
          schema:
            type: integer
            default: 1
        - name: descending
          in: query
          required: false
          description: Sort results in descending order when true.
          schema:
            type: boolean
            default: false
        - name: category
          in: query
          required: false
          description: >-
            Filter by job category, for example "Data Science", "Design",
            "Software Engineering", "Sales", or "Accounting". Repeat the parameter
            to filter on multiple categories.
          schema:
            type: string
        - name: level
          in: query
          required: false
          description: >-
            Filter by experience level. One of "Entry Level", "Mid Level",
            "Senior Level", "Management", or "Internship". Repeat the parameter to
            filter on multiple levels.
          schema:
            type: string
            enum:
              - Entry Level
              - Mid Level
              - Senior Level
              - Management
              - Internship
        - name: company
          in: query
          required: false
          description: >-
            Filter by company short name (for example "hartfordhealthcare").
            Repeat the parameter to filter on multiple companies.
          schema:
            type: string
        - name: location
          in: query
          required: false
          description: >-
            Filter by location, for example "New York, NY" or "Flexible /
            Remote". Repeat the parameter to filter on multiple locations.
          schema:
            type: string
        - $ref: '#/components/parameters/ApiKey'
      responses:
        '200':
          description: A paginated list of job openings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/RateLimited'
  /jobs/{id}:
    parameters:
      - name: id
        in: path
        required: true
        description: The numeric ID of the job.
        schema:
          type: integer
    get:
      operationId: getJob
      tags:
        - Jobs
      summary: Retrieve a single job
      description: Retrieves a single job opening by its numeric ID.
      parameters:
        - $ref: '#/components/parameters/ApiKey'
      responses:
        '200':
          description: The requested job opening.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '403':
          $ref: '#/components/responses/RateLimited'
        '404':
          $ref: '#/components/responses/NotFound'
  /companies:
    get:
      operationId: listCompanies
      tags:
        - Companies
      summary: Search employer company profiles
      description: >-
        Returns a paginated list of employer company profiles. Supports
        filtering by industry, company size, and location. Returns up to 20
        results per page.
      parameters:
        - name: page
          in: query
          required: true
          description: Page number of results to return.
          schema:
            type: integer
            default: 1
        - name: descending
          in: query
          required: false
          description: Sort results in descending order when true.
          schema:
            type: boolean
            default: false
        - name: industry
          in: query
          required: false
          description: >-
            Filter by industry name, for example "Financial Services" or
            "Technology". Repeat the parameter to filter on multiple industries.
          schema:
            type: string
        - name: size
          in: query
          required: false
          description: >-
            Filter by company size. One of "Small Size", "Medium Size", or
            "Large Size".
          schema:
            type: string
            enum:
              - Small Size
              - Medium Size
              - Large Size
        - name: location
          in: query
          required: false
          description: Filter by location, for example "Charlotte, NC".
          schema:
            type: string
        - $ref: '#/components/parameters/ApiKey'
      responses:
        '200':
          description: A paginated list of company profiles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompaniesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/RateLimited'
  /companies/{id}:
    parameters:
      - name: id
        in: path
        required: true
        description: The numeric ID of the company.
        schema:
          type: integer
    get:
      operationId: getCompany
      tags:
        - Companies
      summary: Retrieve a single company
      description: Retrieves a single employer company profile by its numeric ID.
      parameters:
        - $ref: '#/components/parameters/ApiKey'
      responses:
        '200':
          description: The requested company profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
        '403':
          $ref: '#/components/responses/RateLimited'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    apiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: >-
        Optional API key passed as the `api_key` query parameter. Registering an
        application and supplying a key raises the hourly rate limit from 500 to
        3,600 requests.
  parameters:
    ApiKey:
      name: api_key
      in: query
      required: false
      description: Optional API key that raises the hourly rate limit.
      schema:
        type: string
  responses:
    BadRequest:
      description: The request was malformed or a parameter value was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: >-
        The rate limit for the current window has been exceeded. Inspect the
        X-RateLimit-Remaining, X-RateLimit-Limit, and X-RateLimit-Reset response
        headers.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        code:
          type: integer
          description: HTTP-style status code echoed in the body.
        error:
          type: string
          description: Human-readable error message.
    NamedValue:
      type: object
      description: A generic named reference (used for locations and industries).
      properties:
        name:
          type: string
    Tag:
      type: object
      properties:
        name:
          type: string
        short_name:
          type: string
    Level:
      type: object
      properties:
        name:
          type: string
        short_name:
          type: string
    Category:
      type: object
      properties:
        name:
          type: string
        short_name:
          type: string
    CompanySize:
      type: object
      properties:
        name:
          type: string
        short_name:
          type: string
    JobCompanyRef:
      type: object
      description: The company that posted the job (summary form embedded in a job).
      properties:
        id:
          type: integer
        short_name:
          type: string
        name:
          type: string
    JobRefs:
      type: object
      properties:
        landing_page:
          type: string
          format: uri
          description: Canonical Muse URL for the job posting.
    Job:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          description: Job title.
        contents:
          type: string
          description: HTML job description.
        type:
          type: string
          description: Job type, for example "external".
        publication_date:
          type: string
          format: date-time
        short_name:
          type: string
        model_type:
          type: string
          description: Always "jobs" for this resource.
        locations:
          type: array
          items:
            $ref: '#/components/schemas/NamedValue'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/Category'
        levels:
          type: array
          items:
            $ref: '#/components/schemas/Level'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        refs:
          $ref: '#/components/schemas/JobRefs'
        company:
          $ref: '#/components/schemas/JobCompanyRef'
    CompanyRefs:
      type: object
      properties:
        landing_page:
          type: string
          format: uri
        jobs_page:
          type: string
          format: uri
        mini_f1_image:
          type: string
          format: uri
        f2_image:
          type: string
          format: uri
    Company:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        short_name:
          type: string
        description:
          type: string
        model_type:
          type: string
          description: Always "companies" for this resource.
        publication_date:
          type: string
          format: date-time
        twitter:
          type: string
          nullable: true
        size:
          $ref: '#/components/schemas/CompanySize'
        locations:
          type: array
          items:
            $ref: '#/components/schemas/NamedValue'
        industries:
          type: array
          items:
            $ref: '#/components/schemas/NamedValue'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        refs:
          $ref: '#/components/schemas/CompanyRefs'
    PagedResponse:
      type: object
      properties:
        page:
          type: integer
        page_count:
          type: integer
        items_per_page:
          type: integer
        total:
          type: integer
        took:
          type: integer
          description: Server-side query time in milliseconds.
        timed_out:
          type: boolean
        aggregations:
          type: array
          items:
            type: object
    JobsResponse:
      allOf:
        - $ref: '#/components/schemas/PagedResponse'
        - type: object
          properties:
            results:
              type: array
              items:
                $ref: '#/components/schemas/Job'
    CompaniesResponse:
      allOf:
        - $ref: '#/components/schemas/PagedResponse'
        - type: object
          properties:
            results:
              type: array
              items:
                $ref: '#/components/schemas/Company'