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'