> ## 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.

# Update Job

> Update a job's status or details

Update one or more fields on an existing job. Commonly used to approve pending jobs or change status.

## Path Parameters

<ParamField path="id" type="string" required>
  The job UUID.
</ParamField>

## Request Body

At least one field is required.

<ParamField body="status" type="string">
  New status: `active`, `draft`, `pending`, or `expired`.
</ParamField>

<ParamField body="title" type="string">
  Updated job title.
</ParamField>

<ParamField body="description" type="string">
  Updated job description.
</ParamField>

<ParamField body="location" type="string">
  Updated location text. Changing it re-files the job under the matching place.
</ParamField>

<ParamField body="location_id" type="string">
  An existing location id from [Locations](/docs/api-reference/jobs/locations). Takes precedence over `location` text.
</ParamField>

<ParamField body="location_country" type="string">
  Two-letter country code used when resolving `location` text, e.g. `ca`.
</ParamField>

<ParamField body="how_to_apply" type="string">
  Updated apply destination: URL, email address, or phone number.
</ParamField>

<ParamField body="how_to_apply_method" type="string">
  Updated apply method. The same pairing rule as [Post a Job](/docs/api-reference/jobs/post-job) applies: a method of `email`, `website`, `phone` or `form-external` needs a destination, checked against the job's current `how_to_apply` when you do not send a new one. Mismatches return `422 invalid_apply_destination`.
</ParamField>

<ParamField body="is_remote" type="boolean">
  Updated remote setting.
</ParamField>

## Examples

### Approve a pending job

```bash cURL theme={null}
curl --request PATCH \
  --url "https://api.kardow.com/jobs/550e8400-e29b-41d4-a716-446655440000" \
  --header "x-api-key: your-api-key-here" \
  --header "Content-Type: application/json" \
  --data '{"status": "active"}'
```

### Attach the right location

Resolve the place first, then send its id:

```bash cURL theme={null}
curl --request PATCH \
  --url "https://api.kardow.com/jobs/550e8400-e29b-41d4-a716-446655440000" \
  --header "x-api-key: your-api-key-here" \
  --header "Content-Type: application/json" \
  --data '{"location": "Gatineau, QC", "location_id": "7f8a1c2d-0b34-4c8e-9a71-2f5d6e8b0a13"}'
```

### Fix a broken apply button

```bash cURL theme={null}
curl --request PATCH \
  --url "https://api.kardow.com/jobs/550e8400-e29b-41d4-a716-446655440000" \
  --header "x-api-key: your-api-key-here" \
  --header "Content-Type: application/json" \
  --data '{"how_to_apply": "jobs@acme.com", "how_to_apply_method": "email"}'
```

## Response

<ResponseField name="data" type="object">
  <Expandable title="properties">
    <ResponseField name="id" type="string">Job ID</ResponseField>
    <ResponseField name="title" type="string">Job title</ResponseField>
    <ResponseField name="company_name" type="string">Company name</ResponseField>
    <ResponseField name="status" type="string">Updated status</ResponseField>
    <ResponseField name="updated_at" type="string">ISO 8601 timestamp</ResponseField>
  </Expandable>
</ResponseField>


## OpenAPI

````yaml PATCH /jobs/{id}
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/{id}:
    patch:
      tags:
        - Jobs
      summary: Update Job
      description: Update status or editable fields on an existing job.
      operationId: updateJob
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Job UUID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateJobRequest'
            examples:
              approve_job:
                summary: Approve a pending job
                value:
                  status: active
              update_details:
                summary: Update title and location
                value:
                  title: Senior Backend Engineer
                  location: Remote
                  is_remote: true
      responses:
        '200':
          description: Job updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateJobResponse'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    UpdateJobRequest:
      type: object
      properties:
        status:
          type: string
          enum:
            - active
            - draft
            - pending
            - expired
        title:
          type: string
          minLength: 1
          maxLength: 255
        description:
          type: string
          minLength: 1
        location:
          type: string
          description: >-
            Location shown on the job. Resolved to a real place and linked, so
            the job appears on the right location page and filter. Street
            addresses are filed under their city; exact coordinates stay on the
            job.
        is_remote:
          type: boolean
        location_id:
          type: string
          format: uuid
          description: >-
            Existing location id from POST /locations. Takes precedence over
            `location` text and skips resolution.
        location_country:
          type: string
          minLength: 2
          maxLength: 2
          description: >-
            Two-letter country code used when resolving `location` text, e.g.
            "ca". Ignored when location_id is given.
        how_to_apply:
          type: string
          description: >-
            Required unless how_to_apply_method is "form". Where candidates
            apply: an external URL, an email address, or a phone number. A
            method of email/website/phone/form-external with no destination is
            rejected with 422 invalid_apply_destination.
        how_to_apply_method:
          type: string
          enum:
            - form
            - form-external
            - email
            - website
            - phone
          description: >-
            What the apply button does: form-external, website, email, phone, or
            form. Must match the how_to_apply value. Only "form" takes no
            destination. Omit to auto-detect from how_to_apply.
      minProperties: 1
      additionalProperties: false
    UpdateJobResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              format: uuid
            title:
              type:
                - string
                - 'null'
            company_name:
              type:
                - string
                - 'null'
            status:
              type:
                - string
                - 'null'
            location:
              type:
                - string
                - 'null'
            is_remote:
              type:
                - boolean
                - 'null'
            updated_at:
              type: string
              format: date-time
          required:
            - id
            - updated_at
      required:
        - data
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
            code:
              type: string
            details: {}
            url:
              type: string
          required:
            - message
            - code
      required:
        - error
  responses:
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    NotFoundError:
      description: Not found
      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.

````