> ## Documentation Index
> Fetch the complete documentation index at: https://kardow.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Jobs

> List jobs for your organization with pagination, search, and filtering

Use this endpoint when you need to mirror your job board into another system, power a search page, or run scheduled exports.

## Common Filters

<ParamField query="search" type="string">
  Match against the job title, description, and company name.
</ParamField>

<ParamField query="job_types" type="string">
  Comma-separated job types such as `full-time,contract`.
</ParamField>

<ParamField query="locations" type="string">
  Comma-separated locations such as `Remote,New York`.
</ParamField>

<ParamField query="categories" type="string">
  Comma-separated category UUIDs.
</ParamField>

<ParamField query="is_remote" type="boolean">
  Set to `true` to return only remote jobs.
</ParamField>

<ParamField query="posted_within" type="string">
  Only return jobs posted within a recent window. One of `24h`, `7d`, `14d`, `30d`, `90d`. Use `7d` for "this week".
</ParamField>

<ParamField query="date_from" type="string">
  Only return jobs posted on or after this date (ISO 8601, e.g. `2026-07-01` or a full timestamp). Combine with `date_to` for a custom range.
</ParamField>

<ParamField query="date_to" type="string">
  Only return jobs posted on or before this date (ISO 8601).
</ParamField>

<ParamField query="page" type="number" default="1">
  Page number.
</ParamField>

<ParamField query="per_page" type="number" default="20">
  Number of records per page, up to `100`.
</ParamField>

## Examples

### List the latest jobs

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?page=1&per_page=20" \
  --header "x-api-key: your-api-key-here"
```

### Search for a phrase

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?search=product%20designer" \
  --header "x-api-key: your-api-key-here"
```

### Fetch only remote full-time jobs

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?job_types=full-time&is_remote=true" \
  --header "x-api-key: your-api-key-here"
```

### Combine search, location, and pagination

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?search=engineer&locations=Remote,London&page=2&per_page=10" \
  --header "x-api-key: your-api-key-here"
```

### Jobs posted this week

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?posted_within=7d" \
  --header "x-api-key: your-api-key-here"
```

### Jobs posted in a custom date range

```bash cURL theme={null}
curl --request GET \
  --url "https://api.kardow.com/jobs?date_from=2026-07-01&date_to=2026-07-31" \
  --header "x-api-key: your-api-key-here"
```

### JavaScript example

```javascript theme={null}
const response = await fetch(
  "https://api.kardow.com/jobs?search=engineering&job_types=full-time,contract&is_remote=true",
  {
    headers: {
      "x-api-key": process.env.KARDOW_API_KEY,
    },
  }
);

const result = await response.json();

console.log(result.meta.pagination);
console.log(result.data.map((job) => job.title));
```

### Python example

```python theme={null}
import os
import requests

response = requests.get(
    "https://api.kardow.com/jobs",
    headers={"x-api-key": os.environ["KARDOW_API_KEY"]},
    params={
        "search": "data",
        "locations": "Remote,New York",
        "page": 1,
        "per_page": 25,
    },
)

data = response.json()
print(data["meta"]["pagination"])
```

## Response Shape

<ResponseField name="data" type="array" required>
  Matching jobs. Each job includes the full public `url`, salary, category, dates, and the fields below.
</ResponseField>

<ResponseField name="data[].url" type="string">
  The full, shareable public URL to the job on your live board (uses your active custom domain when you have one, otherwise your `*.kardow.com` subdomain). Send people here.
</ResponseField>

<ResponseField name="data[].slug" type="string">
  The URL path portion only, without the domain.
</ResponseField>

<ResponseField name="data[].salary_min" type="number">
  Minimum salary, or `null`. Also `salary_max`, `salary_currency` (ISO code), and `salary_period` (`hourly`, `daily`, `weekly`, `monthly`, `yearly`).
</ResponseField>

<ResponseField name="data[].posted_at" type="string">
  When the job was posted (ISO 8601). Alias of `created_at`. See also `updated_at` and `expires_at`.
</ResponseField>

<ResponseField name="data[].how_to_apply" type="string">
  The application destination (URL, email, or phone), with `how_to_apply_method` describing which it is. This is where a candidate applies, and is not the same as `url` (the public listing page).
</ResponseField>

<ResponseField name="meta.board_url" type="string">
  The base public URL of your job board.
</ResponseField>

<ResponseField name="meta.pagination" type="object" required>
  Pagination summary with the current page, page size, total items, total pages, and whether another page is available.
</ResponseField>

<ResponseField name="meta.filters" type="object" required>
  Echoes the filters Kardow applied to the query, including any date filter.
</ResponseField>

### Example response

```json theme={null}
{
  "data": [
    {
      "id": "4d1b6fe8-688f-467c-b233-b5d6a51ce1cb",
      "title": "Senior Product Designer",
      "description": "Lead product design across web and mobile.",
      "status": "active",
      "url": "https://jobs.acme.com/companies/acme/jobs/senior-product-designer-4d1b6fe8688f467cb233b5d6a51ce1cb",
      "slug": "/companies/acme/jobs/senior-product-designer-4d1b6fe8688f467cb233b5d6a51ce1cb",
      "company_name": "Acme",
      "company_website": "https://acme.com",
      "company_logo_url": "https://cdn.kardow.com?url=...",
      "location": "Remote",
      "is_remote": true,
      "job_type": "full-time",
      "category": "Design",
      "category_slug": "design",
      "salary_min": 120000,
      "salary_max": 150000,
      "salary_currency": "USD",
      "salary_period": "yearly",
      "how_to_apply": "https://acme.com/careers/apply/123",
      "how_to_apply_method": "form-external",
      "is_highlighted": false,
      "is_sticky": false,
      "source": "user",
      "posted_at": "2026-07-08T14:03:00.000Z",
      "created_at": "2026-07-08T14:03:00.000Z",
      "updated_at": "2026-07-08T14:03:00.000Z",
      "expires_at": null
    }
  ],
  "meta": {
    "organization_name": "Acme",
    "board_url": "https://jobs.acme.com",
    "pagination": {
      "current_page": 1,
      "per_page": 20,
      "total_items": 1,
      "total_pages": 1,
      "has_more": false
    },
    "filters": {
      "search": "designer",
      "categories": [],
      "job_types": ["full-time"],
      "locations": ["Remote"],
      "is_remote": true,
      "posted_within": "7d",
      "date_from": "2026-07-04T00:00:00.000Z",
      "date_to": null
    }
  }
}
```


## OpenAPI

````yaml GET /jobs
openapi: 3.1.0
info:
  title: Kardow Public API
  description: Public API for jobs and member automation on Kardow.
  version: 1.0.0
  contact:
    name: Kardow Support
    email: support@kardow.com
    url: https://kardow.com
servers:
  - url: https://api.kardow.com
    description: Production API
security:
  - ApiKeyAuth: []
paths:
  /jobs:
    get:
      tags:
        - Jobs
      summary: Get Jobs
      description: >-
        Retrieve jobs for your organization with search, filtering, and
        pagination.
      operationId: getJobs
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
            minimum: 1
        - name: per_page
          in: query
          required: false
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
        - name: search
          in: query
          required: false
          schema:
            type: string
        - name: job_types
          in: query
          required: false
          description: Comma-separated job types.
          schema:
            type: string
            example: full-time,contract
        - name: locations
          in: query
          required: false
          description: Comma-separated locations.
          schema:
            type: string
            example: Remote,New York
        - name: categories
          in: query
          required: false
          description: Comma-separated category UUIDs.
          schema:
            type: string
            example: >-
              123e4567-e89b-12d3-a456-426614174000,123e4567-e89b-12d3-a456-426614174001
        - name: is_remote
          in: query
          required: false
          schema:
            type: boolean
        - name: posted_within
          in: query
          required: false
          description: Only jobs posted within a recent window. Use 7d for "this week".
          schema:
            type: string
            enum:
              - 24h
              - 7d
              - 14d
              - 30d
              - 90d
        - name: date_from
          in: query
          required: false
          description: >-
            Only jobs posted on or after this ISO 8601 date. Combine with
            date_to for a custom range.
          schema:
            type: string
            example: '2026-07-01'
        - name: date_to
          in: query
          required: false
          description: Only jobs posted on or before this ISO 8601 date.
          schema:
            type: string
            example: '2026-07-31'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobsListResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    JobsListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Job'
        meta:
          type: object
          properties:
            pagination:
              type: object
              properties:
                current_page:
                  type: integer
                per_page:
                  type: integer
                total_items:
                  type: integer
                total_pages:
                  type: integer
                has_more:
                  type: boolean
            filters:
              type: object
      required:
        - data
        - meta
    Job:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        description:
          type:
            - string
            - 'null'
        status:
          type: string
        url:
          type: string
          description: >-
            Full public URL to the job on the live board (active custom domain
            when available).
        slug:
          type: string
          description: URL path only, without the domain.
        company_name:
          type:
            - string
            - 'null'
        company_website:
          type:
            - string
            - 'null'
        company_logo_url:
          type:
            - string
            - 'null'
        location:
          type:
            - string
            - 'null'
        is_remote:
          type: boolean
        job_type:
          type:
            - string
            - 'null'
        category:
          type:
            - string
            - 'null'
        category_slug:
          type:
            - string
            - 'null'
        salary_min:
          type:
            - number
            - 'null'
        salary_max:
          type:
            - number
            - 'null'
        salary_currency:
          type:
            - string
            - 'null'
        salary_period:
          type:
            - string
            - 'null'
          enum:
            - hourly
            - daily
            - weekly
            - monthly
            - yearly
            - null
        how_to_apply:
          type:
            - string
            - 'null'
          description: >-
            Where a candidate applies (URL, email, or phone). Not the same as
            url.
        how_to_apply_method:
          type:
            - string
            - 'null'
        recruiter_name:
          type:
            - string
            - 'null'
        recruiter_url:
          type:
            - string
            - 'null'
        is_highlighted:
          type: boolean
        is_sticky:
          type: boolean
        source:
          type:
            - string
            - 'null'
        form_data:
          type:
            - object
            - 'null'
        posted_at:
          type:
            - string
            - 'null'
          format: date-time
          description: When the job was posted. Alias of created_at.
        created_at:
          type:
            - string
            - 'null'
          format: date-time
        updated_at:
          type:
            - string
            - 'null'
          format: date-time
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
            code:
              type: string
            details: {}
            url:
              type: string
          required:
            - message
            - code
      required:
        - error
  responses:
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    RateLimitError:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key for authentication. Get yours from Settings > API Keys in the
        Kardow dashboard.

````