4dayweek-io Jobs API
The Jobs API from 4dayweek-io — 2 operation(s) for jobs.
The Jobs API from 4dayweek-io — 2 operation(s) for jobs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/4dayweek-io:4dayweek-io-jobs-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: 4dayweek Io Jobs API
version: 1.0.0
contact:
name: 4dayweek.io
url: https://4dayweek.io/contact
license:
name: Free for public use; link-back requested.
description: 'Operations tagged Jobs across 2 of this provider''s published API definitions: 4dayweek-io-openapi.yaml, 4dayweek-io.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://4dayweek.io
description: Production
tags:
- name: Jobs
paths:
/api/v2/jobs:
get:
tags:
- Jobs
summary: List live jobs (modern shape)
description: Paginated, filterable job listings.
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/LimitParam'
- name: category
in: query
description: Comma-separated list of categories (e.g. engineering,sales).
schema:
type: string
- name: level
in: query
description: Comma-separated list of levels (e.g. senior,lead).
schema:
type: string
- name: schedule
in: query
description: Comma-separated schedule types (e.g. 4_day_week,9_day_fortnight).
schema:
type: string
- name: work_arrangement
in: query
description: Comma-separated work arrangements (onsite, hybrid, remote).
schema:
type: string
- name: skills
in: query
description: Comma-separated skill slugs (e.g. python,go).
schema:
type: string
- name: country
in: query
description: Country name — matches office or remote-allowed locations.
schema:
type: string
- name: salary_min
in: query
description: Minimum salary in USD (whole dollars).
schema:
type: integer
minimum: 0
- name: salary_max
in: query
description: Maximum salary in USD (whole dollars).
schema:
type: integer
minimum: 0
- name: posted_after
in: query
description: Posted within the last N days. Capped at 365.
schema:
type: integer
minimum: 0
maximum: 365
- name: q
in: query
description: Full-text search.
schema:
type: string
- name: sort
in: query
schema:
type: string
enum:
- date
- salary
default: date
responses:
'200':
description: Successful response
headers:
X-API-Version:
schema:
type: string
example: v2
content:
application/json:
schema:
$ref: '#/components/schemas/V2ListResponse'
'400':
description: Invalid query parameter (e.g. bad sort value).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
$ref: '#/components/responses/RateLimited'
operationId: getApiV2Jobs
x-operation-id-source: derived
servers:
- url: https://4dayweek.io
description: Production
/api/v2/jobs/{slug}:
get:
tags:
- Jobs
summary: Get a single job by slug (modern shape)
parameters:
- name: slug
in: path
required: true
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/V2Job'
'404':
description: Job not found, or not public yet. A listing added in the last 48 hours can return `error.error_code` = `NOT_YET_PUBLIC` with `error.data.available_at`, an RFC 3339 time at which it becomes available.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
$ref: '#/components/responses/RateLimited'
operationId: getApiV2JobsBySlug
x-operation-id-source: derived
servers:
- url: https://4dayweek.io
description: Production
components:
schemas:
V2ListResponse:
type: object
required:
- data
- page
- limit
- total
- has_more
properties:
data:
type: array
items:
$ref: '#/components/schemas/V2Job'
page:
type: integer
limit:
type: integer
total:
type: integer
has_more:
type: boolean
V2Company:
type: object
required:
- id
- slug
- name
- url
properties:
id:
type: string
slug:
type: string
name:
type: string
url:
type: string
format: uri
website:
type: string
format: uri
logo_url:
type: string
format: uri
short_description:
type: string
country:
type: string
employees:
type: integer
format: int64
schedule_type:
type: string
hours_full_time:
type: integer
format: int64
remote_level:
type: string
description: 'Office-presence policy: fully-remote, hybrid, or onsite. Worldwide hiring is a separate boolean below (post-2026-05-25).'
hires_worldwide:
type: boolean
description: True when the company accepts applicants from any country (no geographic restriction). Orthogonal to remote_level — a fully-remote company can be country-restricted or globally-hiring.
work_life_score:
type: integer
ErrorResponse:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: integer
example: 400
message:
type: string
example: invalid sort
field:
type: string
error_code:
type: string
description: Machine-readable code, present for some errors.
example: NOT_YET_PUBLIC
data:
type: object
description: Extra detail for the code, when there is any.
example:
available_at: '2026-10-09T12:00:00Z'
V2Tag:
type: object
required:
- name
- slug
properties:
name:
type: string
slug:
type: string
V2Job:
type: object
required:
- id
- slug
- title
- url
- work_arrangement
- is_remote
- posted_at
properties:
id:
type: string
description: UUID string
slug:
type: string
title:
type: string
description:
type: string
description: Plain text only.
url:
type: string
format: uri
category:
type: string
role:
type: string
level:
type: string
contract_type:
type: string
enum:
- permanent
- contract
- freelance
schedule_type:
type: string
example: 4_day_week
hours_per_week_min:
type: integer
hours_per_week_max:
type: integer
work_arrangement:
type: string
enum:
- onsite
- hybrid
- remote
is_remote:
type: boolean
office_locations:
type: array
items:
$ref: '#/components/schemas/V2JobLocation'
remote_allowed:
type: array
items:
$ref: '#/components/schemas/V2JobLocation'
timezones:
type: array
items:
type: string
salary_min:
type: integer
format: int64
description: 'In smallest currency unit (e.g. cents for USD). 8000000 = $80,000.
Note: the salary_min/salary_max query *filters* accept whole dollars
(e.g. 80000), but *response* values are in cents.
'
salary_max:
type: integer
format: int64
salary_currency:
type: string
example: USD
salary_period:
type: string
enum:
- year
- month
- hour
skills:
type: array
items:
$ref: '#/components/schemas/V2Tag'
stack:
type: array
items:
$ref: '#/components/schemas/V2Tag'
tools:
type: array
items:
$ref: '#/components/schemas/V2Tag'
posted_at:
type: string
format: date-time
description: RFC3339 UTC timestamp.
expires_at:
type: string
format: date-time
description: RFC3339 UTC timestamp. Omitted when unknown.
company:
$ref: '#/components/schemas/V2Company'
V2JobLocation:
type: object
properties:
city:
type: string
state:
type: string
country:
type: string
continent:
type: string
region:
type: string
parameters:
PageParam:
name: page
in: query
schema:
type: integer
minimum: 1
default: 1
LimitParam:
name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 25
responses:
RateLimited:
description: Rate limit exceeded (60 req/min per IP).
headers:
Retry-After:
schema:
type: integer
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-refined-from:
- 4dayweek-io-openapi.yaml
- 4dayweek-io.yaml