Skip to main content
llms.txt

Create, publish and manage jobs through the API

Read active jobs, save a draft, preview funding, publish with confirmation and reconcile duplicates or uncertain writes.

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, contract or internship.
remoteUse true for remote jobs only. Omit it or use false to include all workplace types.
cityCity slug, such as berlin.
page, per_pagePage numbers start at 1. Default 20 results per page, maximum 50.
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 active jobs in data.jobs. Follow data.pagination.next while has_next is true.

Create a job

POST /v2/jobs creates a new job. Use jobs:draft to save a draft or jobs:publish to request publication. Historical jobs:write and write grants retain compatible access. 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, contract or internship.
tagsComma-separated tags.
LocationUse a verified id_city, or an exact city_name with city_country and, if needed, city_region. A remote job can omit its city.

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, id_plan (default 5) and status (draft or active). sal_min cannot exceed sal_max. Check the full reference for all optional fields.

Your credential selects the hiring account. A conflicting id_space is rejected. Resolve ambiguous cities before submitting.

# 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",
    "city_country": "DE",
    "status": "draft",
    "tags": "community,events,hospitality",
    "apply_url": "https://example.com/careers/apply",
    "is_remote": 0,
    "currency": "EUR",
    "sal_min": 35000,
    "sal_max": 45000
  }'

Publish or edit an existing draft

Check data.status after every write. A successful HTTP response can still mean a draft or a required payment. A draft is private and consumes no hiring credit. Save the returned data.job_id. Read your drafts with GET /v2/jobs/owned?status=draft or get the current revision with GET /v2/jobs/owned?job_id=ID.

  1. Send the job ID and revision to POST /v2/jobs/publish-preview. Review the returned draft, hiring account and funding (Free, one Pro credit or website payment).
  2. After explicit approval, send that job ID, revision and unchanged funding_confirmation to POST /v2/jobs/publish. If the preview expires or the job changes, read it again and obtain a fresh confirmation.
  3. Check the returned publication state. Complete any required payment on Coworkies. For a new paid create or repost that needs funding confirmation, first send action (create or repost) and payload (the exact intended write) to POST /v2/jobs/publication-preview. If it returns a funding confirmation, review it and send it unchanged with the approved write.

To edit, use POST /v2/jobs/update with the ID and current revision. Reposting uses POST /v2/jobs/repost with jobs:publish. Withdrawing uses POST /v2/jobs/unpublish with jobs:lifecycle. See the OpenAPI reference for each payload. Keep private edit and payment links out of logs.

Duplicates and uncertain writes

An ordinary or assistant create that matches an existing job returns 409 job_exists with its ID. It does not edit, publish or demote that job. Only trusted platform importers retain fingerprint-based updates. Use the same idempotency key for the same request and body. After a timeout, check the owned job before trying again.

When durable writes are enabled for your connection, use X-Coworkies-Durable-Job: 1 with the original idempotency key. To recover, send operation and the original request_id to POST /v2/jobs/recover with that header and the same grant. Check GET /v2/auth/context for availability before using this optional mode.