Zum Inhalt springen

Jobflare REST API

Verwalte Stellenanzeigen programmatisch — erstelle, aktualisiere und lösche Jobs über eine einfache REST-Schnittstelle.

Base URL

https://www.jobflare.de/api/v1

Alle Endpunkte verwenden HTTPS. Anfragen ohne gültiges TLS-Zertifikat werden abgelehnt.


Authentifizierung

Jede Anfrage muss einen gültigen API-Key im Authorization Header enthalten. API-Keys können im Dashboard unter API & Integrationen erstellt werden.

Header
Authorization: Bearer YOUR_API_KEY

Anfragen ohne oder mit ungültigem API-Key erhalten einen 401 Fehler. Abgelaufene Keys werden ebenfalls mit 401 abgelehnt.


Rate Limiting

Die API ist auf 100 Anfragen pro Minute pro API-Key begrenzt. Bei Überschreitung wird ein 429 Too Many Requests zurückgegeben.

429 Antwort
{
  "error": "Rate limit exceeded."
}

Fehlerbehandlung

Fehlerantworten enthalten immer ein error Feld mit einer lesbaren Fehlermeldung.

StatusBedeutung
400Ungültige Anfrage (fehlende/falsche Parameter)
401Fehlender oder ungültiger API-Key
403Slot-Limit erreicht (Upgrade erforderlich)
404Job nicht gefunden
429Rate Limit überschritten
500Interner Serverfehler

Endpunkte

GET/api/v1/jobs

Gibt eine paginierte Liste aller Jobs des authentifizierten Mandanten zurück.

Query-Parameter

NameTypPflichtBeschreibung
statusstringNeinFilter nach Status: published, draft, closed oder all. Standard: published
limitnumberNeinAnzahl der Ergebnisse (1-100). Standard: 50
offsetnumberNeinOffset für Pagination. Standard: 0

Antwort

200 OK
{
  "data": [
    {
      "id": "clx1abc2d0001...",
      "slug": "frontend-entwickler-mwd",
      "title": "Frontend-Entwickler (m/w/d)",
      "status": "published",
      "companyName": "Muster GmbH",
      "companyLogo": "https://example.com/logo.png",
      "addressLocality": "Berlin",
      "addressRegion": "Berlin",
      "addressCountry": "DE",
      "employmentType": "FULL_TIME",
      "jobLocationType": "HYBRID",
      "baseSalaryMin": 55000,
      "baseSalaryMax": 75000,
      "salaryCurrency": "EUR",
      "jobBenefits": "Homeoffice,Firmenwagen,Betriebliche Altersvorsorge",
      "directApply": true,
      "template": "corporate",
      "heroImage": null,
      "datePosted": "2026-03-15T10:00:00.000Z",
      "validThrough": "2026-04-14T10:00:00.000Z",
      "createdAt": "2026-03-15T10:00:00.000Z",
      "updatedAt": "2026-03-15T10:00:00.000Z"
    }
  ],
  "total": 12,
  "limit": 50,
  "offset": 0
}

Beispiel

curl
curl -X GET "https://www.jobflare.de/api/v1/jobs?status=published&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST/api/v1/jobs

Erstellt eine neue Stellenanzeige. Standardmäßig wird der Job als Entwurf (draft) gespeichert.

Request Body (JSON)

NameTypPflichtBeschreibung
titlestringJaStellentitel (max. 200 Zeichen)
descriptionstringJaStellenbeschreibung als HTML (max. 50.000 Zeichen)
statusstringNeindraft, published oder closed. Standard: draft
companyNamestringNeinFirmenname. Standard: Mandantenname
companyUrlstringNeinURL der Unternehmenswebsite (http/https)
companyLogostringNeinURL des Firmenlogos (http/https)
addressLocalitystringNeinStadt/Ort. Standard: leer
addressRegionstringNeinBundesland/Region
addressCountrystringNeinLändercode (ISO 3166). Standard: DE
employmentTypestringNeinFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, OTHER
jobLocationTypestringNeinTELECOMMUTE, HYBRID, IN_PERSON, OTHER
baseSalaryMinnumberNeinMindestgehalt (Jahresbrutto)
baseSalaryMaxnumberNeinMaximalgehalt (Jahresbrutto)
salaryCurrencystringNeinWährungscode. Standard: EUR
jobBenefitsstring | string[]NeinBenefits als kommagetrennte Zeichenkette oder Array
directApplybooleanNeinDirekte Bewerbung möglich?
templatestringNeinTemplate: bold, card, corporate, creative, funnel, minimal, elegant, startup, magazine, parallax
heroImagestringNeinURL des Hero-Bilds (http/https)
validThroughstring (ISO 8601)NeinGültig bis. Standard: +30 Tage

Antwort

201 Created
{
  "data": {
    "id": "clx1abc2d0001...",
    "slug": "backend-entwickler-nodejs-mwd",
    "title": "Backend-Entwickler Node.js (m/w/d)",
    "status": "draft",
    "companyName": "Muster GmbH",
    "companyLogo": null,
    "addressLocality": "München",
    "addressCountry": "DE",
    "employmentType": "FULL_TIME",
    "jobLocationType": "HYBRID",
    "jobBenefits": "Homeoffice,30 Tage Urlaub",
    "directApply": true,
    "template": "bold",
    "heroImage": null,
    "createdAt": "2026-03-21T14:30:00.000Z"
  }
}
Hinweis: Wenn status auf published gesetzt wird, muss ein freier Stellenslot verfügbar sein. Andernfalls wird 403 zurückgegeben.

Beispiel

curl
curl -X POST "https://www.jobflare.de/api/v1/jobs" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Backend-Entwickler Node.js (m/w/d)",
    "description": "<h2>Deine Aufgaben</h2><ul><li>APIs entwickeln</li></ul>",
    "status": "draft",
    "companyName": "Muster GmbH",
    "addressLocality": "München",
    "employmentType": "FULL_TIME",
    "jobLocationType": "HYBRID",
    "baseSalaryMin": 60000,
    "baseSalaryMax": 80000,
    "template": "bold"
  }'

GET/api/v1/jobs/:id

Gibt einen einzelnen Job anhand seiner ID zurück. Enthält alle Felder inklusive description.

URL-Parameter

NameTypPflichtBeschreibung
idstringJaDie eindeutige Job-ID

Antwort

200 OK
{
  "data": {
    "id": "clx1abc2d0001...",
    "slug": "frontend-entwickler-mwd",
    "title": "Frontend-Entwickler (m/w/d)",
    "description": "<h2>Deine Aufgaben</h2><p>...</p>",
    "status": "published",
    "companyName": "Muster GmbH",
    "companyUrl": "https://muster.de",
    "companyLogo": "https://example.com/logo.png",
    "addressLocality": "Berlin",
    "addressRegion": "Berlin",
    "addressCountry": "DE",
    "employmentType": "FULL_TIME",
    "jobLocationType": "HYBRID",
    "baseSalaryMin": 55000,
    "baseSalaryMax": 75000,
    "salaryCurrency": "EUR",
    "jobBenefits": "Homeoffice,Firmenwagen",
    "directApply": true,
    "template": "corporate",
    "heroImage": null,
    "datePosted": "2026-03-15T10:00:00.000Z",
    "validThrough": "2026-04-14T10:00:00.000Z",
    "externalId": null,
    "externalSource": null,
    "createdAt": "2026-03-15T10:00:00.000Z",
    "updatedAt": "2026-03-15T10:00:00.000Z"
  }
}

Beispiel

curl
curl -X GET "https://www.jobflare.de/api/v1/jobs/clx1abc2d0001..." \
  -H "Authorization: Bearer YOUR_API_KEY"

PATCH/api/v1/jobs/:id

Aktualisiert einen bestehenden Job (Partial Update). Nur die übergebenen Felder werden geändert.

URL-Parameter

NameTypPflichtBeschreibung
idstringJaDie eindeutige Job-ID

Request Body (JSON)

Alle Felder sind optional. Es werden nur die übergebenen Felder aktualisiert. Die verfügbaren Felder entsprechen denen des POST-Endpunkts.

NameTypPflichtBeschreibung
titlestringNeinStellentitel (max. 200 Zeichen)
descriptionstringNeinStellenbeschreibung als HTML (max. 50.000 Zeichen)
statusstringNeindraft, published oder closed
companyNamestringNeinFirmenname
companyUrlstring | nullNeinURL der Unternehmenswebsite (null zum Entfernen)
companyLogostring | nullNeinURL des Firmenlogos (null zum Entfernen)
addressLocalitystringNeinStadt/Ort
addressRegionstring | nullNeinBundesland/Region (null zum Entfernen)
addressCountrystringNeinLändercode (ISO 3166)
employmentTypestring | nullNeinFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, OTHER
jobLocationTypestring | nullNeinTELECOMMUTE, HYBRID, IN_PERSON, OTHER
baseSalaryMinnumber | nullNeinMindestgehalt (null zum Entfernen)
baseSalaryMaxnumber | nullNeinMaximalgehalt (null zum Entfernen)
salaryCurrencystringNeinWährungscode
jobBenefitsstring | string[] | nullNeinBenefits (null zum Entfernen)
directApplybooleanNeinDirekte Bewerbung möglich?
templatestring | nullNeinTemplate (null zum Entfernen)
heroImagestring | nullNeinURL des Hero-Bilds (null zum Entfernen)
validThroughstring (ISO 8601)NeinGültig bis
Hinweis: Wird der Status von draft/closed auf published geändert, muss ein freier Stellenslot verfügbar sein.

Antwort

200 OK
{
  "data": {
    "id": "clx1abc2d0001...",
    "slug": "frontend-entwickler-mwd",
    "title": "Senior Frontend-Entwickler (m/w/d)",
    "description": "<h2>Deine Aufgaben</h2><p>...</p>",
    "status": "published",
    "companyName": "Muster GmbH",
    "companyUrl": "https://muster.de",
    "companyLogo": "https://example.com/logo.png",
    "addressLocality": "Berlin",
    "addressRegion": "Berlin",
    "addressCountry": "DE",
    "employmentType": "FULL_TIME",
    "jobLocationType": "HYBRID",
    "baseSalaryMin": 65000,
    "baseSalaryMax": 85000,
    "salaryCurrency": "EUR",
    "jobBenefits": "Homeoffice,Firmenwagen",
    "directApply": true,
    "template": "corporate",
    "heroImage": null,
    "datePosted": "2026-03-15T10:00:00.000Z",
    "validThrough": "2026-04-14T10:00:00.000Z",
    "externalId": null,
    "externalSource": null,
    "createdAt": "2026-03-15T10:00:00.000Z",
    "updatedAt": "2026-03-21T14:45:00.000Z"
  }
}

Beispiel

curl
curl -X PATCH "https://www.jobflare.de/api/v1/jobs/clx1abc2d0001..." \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior Frontend-Entwickler (m/w/d)",
    "baseSalaryMin": 65000,
    "baseSalaryMax": 85000,
    "status": "published"
  }'

DELETE/api/v1/jobs/:id

Löscht einen Job (Soft-Delete). Der Job wird als geschlossen markiert und ist nicht mehr sichtbar. Veröffentlichte Jobs werden automatisch bei Google de-indexiert.

URL-Parameter

NameTypPflichtBeschreibung
idstringJaDie eindeutige Job-ID

Antwort

200 OK
{
  "ok": true,
  "id": "clx1abc2d0001..."
}

Beispiel

curl
curl -X DELETE "https://www.jobflare.de/api/v1/jobs/clx1abc2d0001..." \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhooks

Jobflare kann bei bestimmten Ereignissen (z. B. job.created, job.published, job.updated, job.closed) HTTP-Callbacks an deine Systeme senden. Webhooks werden im Dashboard unter API & Integrationen konfiguriert.

Fehlt dir ein Endpunkt, ein Webhook-Typ oder eine Schnittstelle zu einem bestimmten System? Schnittstellenwunsch per E-Mail senden — wir sammeln das Feedback für die Roadmap.

Fragen zur API? Kontaktiere uns oder schreibe an support@jobflare.de.