Read, create and unpublish jobs through the API

Read active jobs

GET /v2/jobs requires jobs:read, broad read, or another scope that grants the required read access.

QueryMeaning
qSearch title, company and tags.
job_typefulltime, parttime, freelance or internship.
remoteFilter remote work with true or false.
cityCity slug, such as berlin.
page, per_pageUsed when server-side pagination is enabled; maximum 50 per page.
curl --fail-with-body --max-time 30   'https://api.coworkies.com/v2/jobs?city=berlin&job_type=fulltime'   -H "X-API-Key: ${COWORKIES_API_KEY}"

A space-scoped key returns that space’s jobs. Read the array in data.jobs. If data.pagination exists, use has_next and current_page to fetch further pages. Otherwise the server returns the complete matching list with data.total; do not assume per_page limits it.

Create a job

POST /v2/jobs requires jobs:write or broad write. Send JSON.

Required fieldValue
titleJob title.
companyHiring company name.
descriptionText or basic HTML (p, br, ul, ol, li, h2, h3, strong, em, a).
job_typefulltime, parttime, freelance or internship.
tagsComma-separated tags.
id_city or city_nameConfirmed city ID or a name the API can resolve.

Optional fields include external_url (original listing), apply_url (application destination), is_remote (0 or 1), inv_email, currency (EUR, USD, GBP), sal_min, sal_max, id_space and id_plan (default 5). sal_min cannot exceed sal_max. Check the full reference for all optional fields.

The key’s space is assigned automatically. A conflicting id_space is rejected. Tags are trimmed, lowercased and deduplicated. City-name resolution tries an exact match and then a prefix match; use a confirmed id_city when the name is ambiguous. The source URL receives a Coworkies referral parameter.

# Use a unique value for a new job; retain it for retries of this request.
COWORKIES_JOB_REQUEST_ID='space-job-community-manager-001'
curl --fail-with-body --max-time 30   'https://api.coworkies.com/v2/jobs'   -X POST   -H "X-API-Key: ${COWORKIES_API_KEY}"   -H 'Content-Type: application/json'   -H "Idempotency-Key: ${COWORKIES_JOB_REQUEST_ID}"   -d '{
    "title": "Community Manager",
    "company": "Example Workspace",
    "description": "Lead member experience at our Berlin workspace.",
    "job_type": "fulltime",
    "city_name": "Berlin",
    "tags": "community,events,hospitality",
    "apply_url": "https://example.com/careers/apply",
    "is_remote": 0,
    "currency": "EUR",
    "sal_min": 35000,
    "sal_max": 45000
  }'

Check the publication result

For a confirmed Pro space, a new API job can be published as active automatically. Other space-key jobs start as draft. Trusted platform importers can also auto-publish. The client cannot force the initial status by adding a status field.

Always inspect data.status, data.action, data.job_id and the returned view/edit/payment links. Success alone does not mean a job is publicly visible. Follow the returned edit or payment route when further action is needed.

Deduplication and retries

The API matches a fingerprint of normalized title, company, city and source URL. A match updates the existing job; data.action distinguishes created from updated. An existing expired or paused job is not automatically made active by a matching update.

An Idempotency-Key (up to 200 characters) avoids repeating a successful creation on an exact retry. Reuse it for that request, use a new one for a new operation, and handle an in-flight 409 or rate-limited 429 as described in API errors.

Unpublish a job

POST /v2/jobs/unpublish requires job write access and a job belonging to the key’s space.

curl --fail-with-body --max-time 30   'https://api.coworkies.com/v2/jobs/unpublish'   -X POST   -H "X-API-Key: ${COWORKIES_API_KEY}"   -H 'Content-Type: application/json'   -d '{"job_id": 1234}'

Replace 1234 with the saved data.job_id. A successful removal returns an expired status and an unpublished action. A job already expired or closed returns already_unpublished. This removes the listing from active results; it does not delete the job record.