Jobflare REST API
Verwalte Stellenanzeigen programmatisch — erstelle, aktualisiere und lösche Jobs über eine einfache REST-Schnittstelle.
Base URL
https://www.jobflare.de/api/v1Alle 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.
Authorization: Bearer YOUR_API_KEYAnfragen 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.
{
"error": "Rate limit exceeded."
}Fehlerbehandlung
Fehlerantworten enthalten immer ein error Feld mit einer lesbaren Fehlermeldung.
| Status | Bedeutung |
|---|---|
| 400 | Ungültige Anfrage (fehlende/falsche Parameter) |
| 401 | Fehlender oder ungültiger API-Key |
| 403 | Slot-Limit erreicht (Upgrade erforderlich) |
| 404 | Job nicht gefunden |
| 429 | Rate Limit überschritten |
| 500 | Interner Serverfehler |
Endpunkte
/api/v1/jobsGibt eine paginierte Liste aller Jobs des authentifizierten Mandanten zurück.
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| status | string | Nein | Filter nach Status: published, draft, closed oder all. Standard: published |
| limit | number | Nein | Anzahl der Ergebnisse (1-100). Standard: 50 |
| offset | number | Nein | Offset für Pagination. Standard: 0 |
Antwort
{
"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 -X GET "https://www.jobflare.de/api/v1/jobs?status=published&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"/api/v1/jobsErstellt eine neue Stellenanzeige. Standardmäßig wird der Job als Entwurf (draft) gespeichert.
Request Body (JSON)
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| title | string | Ja | Stellentitel (max. 200 Zeichen) |
| description | string | Ja | Stellenbeschreibung als HTML (max. 50.000 Zeichen) |
| status | string | Nein | draft, published oder closed. Standard: draft |
| companyName | string | Nein | Firmenname. Standard: Mandantenname |
| companyUrl | string | Nein | URL der Unternehmenswebsite (http/https) |
| companyLogo | string | Nein | URL des Firmenlogos (http/https) |
| addressLocality | string | Nein | Stadt/Ort. Standard: leer |
| addressRegion | string | Nein | Bundesland/Region |
| addressCountry | string | Nein | Ländercode (ISO 3166). Standard: DE |
| employmentType | string | Nein | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, OTHER |
| jobLocationType | string | Nein | TELECOMMUTE, HYBRID, IN_PERSON, OTHER |
| baseSalaryMin | number | Nein | Mindestgehalt (Jahresbrutto) |
| baseSalaryMax | number | Nein | Maximalgehalt (Jahresbrutto) |
| salaryCurrency | string | Nein | Währungscode. Standard: EUR |
| jobBenefits | string | string[] | Nein | Benefits als kommagetrennte Zeichenkette oder Array |
| directApply | boolean | Nein | Direkte Bewerbung möglich? |
| template | string | Nein | Template: bold, card, corporate, creative, funnel, minimal, elegant, startup, magazine, parallax |
| heroImage | string | Nein | URL des Hero-Bilds (http/https) |
| validThrough | string (ISO 8601) | Nein | Gültig bis. Standard: +30 Tage |
Antwort
{
"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"
}
}status auf published gesetzt wird, muss ein freier Stellenslot verfügbar sein. Andernfalls wird 403 zurückgegeben.Beispiel
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"
}'/api/v1/jobs/:idGibt einen einzelnen Job anhand seiner ID zurück. Enthält alle Felder inklusive description.
URL-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| id | string | Ja | Die eindeutige Job-ID |
Antwort
{
"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 -X GET "https://www.jobflare.de/api/v1/jobs/clx1abc2d0001..." \
-H "Authorization: Bearer YOUR_API_KEY"/api/v1/jobs/:idAktualisiert einen bestehenden Job (Partial Update). Nur die übergebenen Felder werden geändert.
URL-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| id | string | Ja | Die 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.
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| title | string | Nein | Stellentitel (max. 200 Zeichen) |
| description | string | Nein | Stellenbeschreibung als HTML (max. 50.000 Zeichen) |
| status | string | Nein | draft, published oder closed |
| companyName | string | Nein | Firmenname |
| companyUrl | string | null | Nein | URL der Unternehmenswebsite (null zum Entfernen) |
| companyLogo | string | null | Nein | URL des Firmenlogos (null zum Entfernen) |
| addressLocality | string | Nein | Stadt/Ort |
| addressRegion | string | null | Nein | Bundesland/Region (null zum Entfernen) |
| addressCountry | string | Nein | Ländercode (ISO 3166) |
| employmentType | string | null | Nein | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, OTHER |
| jobLocationType | string | null | Nein | TELECOMMUTE, HYBRID, IN_PERSON, OTHER |
| baseSalaryMin | number | null | Nein | Mindestgehalt (null zum Entfernen) |
| baseSalaryMax | number | null | Nein | Maximalgehalt (null zum Entfernen) |
| salaryCurrency | string | Nein | Währungscode |
| jobBenefits | string | string[] | null | Nein | Benefits (null zum Entfernen) |
| directApply | boolean | Nein | Direkte Bewerbung möglich? |
| template | string | null | Nein | Template (null zum Entfernen) |
| heroImage | string | null | Nein | URL des Hero-Bilds (null zum Entfernen) |
| validThrough | string (ISO 8601) | Nein | Gültig bis |
draft/closed auf published geändert, muss ein freier Stellenslot verfügbar sein.Antwort
{
"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 -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"
}'/api/v1/jobs/:idLö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
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| id | string | Ja | Die eindeutige Job-ID |
Antwort
{
"ok": true,
"id": "clx1abc2d0001..."
}Beispiel
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.