Skip to main content
POST
Use this endpoint when an external system needs to publish jobs directly into Kardow.

Required Fields

string
required
Job title.
string
required
Full job description. HTML is accepted.
string
required
Hiring company name.

Application method

how_to_apply and how_to_apply_method only mean something together. If the method is email, website, phone or form-external, you must send a how_to_apply value, otherwise the apply button has nowhere to send candidates. The request is rejected with 422 invalid_apply_destination rather than saved with a dead button. Only form takes no destination.
string
Where candidates apply: an external URL, an email address, or a phone number. Required unless how_to_apply_method is form.This is not the job’s own page on your board. That URL is generated automatically and returned in the response.
string
Controls how Kardow presents the apply button. One of:If omitted, Kardow detects the method from the how_to_apply value, which is usually the safest choice.A method that contradicts its value is also rejected: email pointing at a URL would render a broken mailto: link. Where the intent is unambiguous, Kardow recovers instead of failing: email with no destination falls back to contact_email, website falls back to company_website, and a bare domain is upgraded to https://.The response echoes the resolved destination in meta.apply so you can confirm what was stored.

Common optional fields

string
Category name, e.g. Engineering. Matched to an existing category (case-insensitive) or created if new. See Categories.
string
Existing category UUID. Takes precedence over category if both are sent.
string
One of full-time, part-time, contract, internship, temporary, or casual.
string
The location shown on the job: Remote, Paris, San Francisco, CA, or a full street address.Kardow resolves this to a real place and links the job to it, so the job appears on the right location page and in location filters. Street addresses are filed under their city, and the exact coordinates are kept on the job for map pins.
string
An existing location id from Locations. Takes precedence over location text and skips resolution entirely.Resolve first and pass the id whenever you can: it removes any guesswork about which place the job lands on.
string
Two-letter country code used when resolving location text, e.g. ca. Ignored when location_id is given.
boolean
Set to true for remote roles.
number
Minimum salary amount.
number
Maximum salary amount.
string
Currency code such as USD.
string
One of hourly, daily, weekly, monthly, or yearly.
string
Recruiter or HR contact email (not the apply destination — use how_to_apply for that).
string
default:"pending"
One of pending, active, expired, or draft.

Examples

The most common case: your ATS or careers page hosts the form.
cURL

Apply via email

cURL

Remote role with salary details

cURL

JavaScript example

Response Shape

string
required
Newly created job UUID.
string
required
Job URL path (without the domain).
string
required
The full, shareable public URL to the created job on your live board (uses your active custom domain when you have one).
string
required
Current job status.
number
required
Organization that owns the job.
string
required
The base public URL of your job board.
string
required
The full public URL for the created job (same as data.url).
string | null
The location the job was filed under, or null if it could not be resolved.
string
Human-readable summary of the apply destination that was actually stored, e.g. email: jobs@acme.com. Check it: if it says Kardow-hosted application form when you meant an external one, the destination did not arrive.
string
Human-readable summary of where the job was filed, e.g. Gatineau, QC (geocoded), or none.
string[]
Present only when something needs attention, such as a location that could not be resolved.

Example response

Authorizations

x-api-key
string
header
required

API key for authentication. Get yours from Settings > API Keys in the Kardow dashboard.

Body

application/json
title
string
required
description
string
required
company_name
string
required
apply_url
string

Preferred field for the application destination — an external URL, email address, or phone number. Alias of how_to_apply (which is still accepted).

apply_type
enum<string>

Preferred field for how candidates apply. Alias of how_to_apply_method.

Available options:
form-external,
website,
email,
phone,
form
how_to_apply
string

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
enum<string>

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.

Available options:
form-external,
website,
email,
phone,
form
posted_by_email
string<email>

Email of the employer account posting this job. Must match a job board user in the org, else the request returns 422 employer_not_found.

category
string

Category name (e.g. Engineering). Matched to an existing category or created if new.

is_remote
boolean
is_highlighted
boolean
is_sticky
boolean
location
string

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.

location_restricted
boolean
category_id
string<uuid>

Existing category UUID. Takes precedence over category if both are sent.

job_type
enum<string>
Available options:
full-time,
part-time,
contract,
internship,
temporary,
casual
company_website
string<uri>
company_logo_url
string<uri>
salary_min
number
salary_max
number
salary_currency
string
salary_period
enum<string>
Available options:
hourly,
daily,
weekly,
monthly,
yearly
contact_email
string<email>
expires_at
string<date-time>
status
enum<string>
Available options:
pending,
active,
expired,
draft
location_id
string<uuid>

Existing location id from POST /locations. Takes precedence over location text and skips resolution.

location_country
string

Two-letter country code used when resolving location text, e.g. "ca". Ignored when location_id is given.

Required string length: 2

Response

Job created

data
object
meta
object