ZNAPP Public API

Veröffentlichen Sie Stellenangebote programmatisch

RESTful API mit einfacher API-Key Authentifizierung

Schnellstart

1. API-Key erstellen

Loggen Sie sich in Ihr Dashboard ein und navigieren Sie zu "Integrationen":

API-Key generieren

2. Ersten Request senden

curl -X POST https://api.znapp.de/api/v1/jobs/bulk \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobs": [{
      "title": "Senior Backend Developer",
      "description": "<p>Wir suchen...</p>",
      "jobCode": "BE-2025-001",
      "employmentType": "FullTime",
      "remoteWorkStatus": "Hybrid",
      "externalApplyUrl": "https://ihre-firma.de/jobs/be-001",
      "locations": [{
        "city": "Frankfurt am Main",
        "country": "DE"
      }]
    }]
  }'
Authentifizierung

Alle API-Requests müssen einen API-Key im X-API-Key Header enthalten.

Header-Format:

X-API-Key: zk_abcdefghij1234567890

⚠️ Wichtig:

  • API-Keys sind vertraulich - niemals im Frontend oder öffentlich teilen!
  • Speichern Sie Keys sicher (Environment Variables)
  • Widerrufen Sie kompromittierte Keys sofort
Base URL

Production:

https://api.znapp.de/api/v1
Felder & Enumerationen

Pflichtfelder

  • title - Stellentitel (max. 300 Zeichen)
  • description - Stellenbeschreibung in HTML
  • externalApplyUrl - URL für Bewerbungen
  • locations - Mindestens ein Standort

Optionale Felder

  • jobCode - Eindeutiger Identifier für den Job (max. 100 Zeichen)
  • category - Kategorie/Branche
  • department - Abteilung
  • experienceLevel - Erfahrungslevel (z.B. "Junior", "Senior", "Lead")
  • weeklyHours - Wochenstunden (Dezimalzahl)
  • salaryAmount, salaryAmountFrom, salaryAmountTo - Gehaltsinformationen
  • salaryCurrency - Währung (z.B. "EUR", "USD")
  • applicationDeadline - Bewerbungsfrist (ISO 8601 Format, z.B. "2025-12-31T23:59:59Z")
  • numberOfOpenings - Anzahl offener Positionen (Ganzzahl)
  • postedAt - Veröffentlichungsdatum (ISO 8601 Format, Standard: aktuelles Datum)
  • hiringOrganizationName - Name der einstellenden Organisation
  • hiringOrganizationLogoUrl - Logo URL
  • remoteId - Externe ID aus Ihrem System

EmploymentType - Beschäftigungsart

FullTime

Vollzeit

PartTime

Teilzeit

Contract

Vertrag/Freelance

Seasonal

Saisonal

Internship

Praktikum

Minijob

Minijob

RemoteWorkStatus - Remote-Arbeit

OnSite

Vor Ort

Remote

Vollständig Remote

Hybrid

Hybrid (Mix)

SalaryPeriod - Gehaltszeitraum

Hour

Stündlich

Day

Täglich

Week

Wöchentlich

Month

Monatlich

Year

Jährlich

JobVisibility - Sichtbarkeit

Public

Öffentlich sichtbar (Standard)

Internal

Nur intern

Unlisted

Nicht gelistet (nur über Link)

Confidential

Vertraulich

Location - Standort

Jedes Location-Objekt kann folgende Felder enthalten:

  • city - Stadt (max. 100 Zeichen)
  • country - Ländercode (2 Zeichen, z.B. "DE", "AT", "CH")
  • state - Bundesland/Staat (optional, max. 100 Zeichen)
  • zipCode - Postleitzahl (optional, max. 20 Zeichen)
  • latitude - Breitengrad (optional, Dezimalzahl)
  • longitude - Längengrad (optional, Dezimalzahl)
  • raw - Rohadresse als Text (optional, max. 500 Zeichen)
Endpoints
POST/api/v1/jobs

Erstellen Sie ein oder mehrere Stellenangebote

Request Body (ein Job):

{
  "jobs": [
    {
      // Pflichtfelder
      "title": "Senior Backend Developer",
      "description": "<p>Wir suchen einen erfahrenen Backend-Entwickler mit Expertise in C# und .NET...</p>",
      "externalApplyUrl": "https://ihre-firma.de/jobs/be-2025-001",
      "locations": [
        {
          "city": "Frankfurt am Main",
          "country": "DE",
          "state": "Hessen",
          "zipCode": "60313",
          "latitude": 50.1109,
          "longitude": 8.6821
        }
      ],
      
      // Optionale Felder
      "jobCode": "BE-2025-001",
      "employmentType": "FullTime",
      "remoteWorkStatus": "Hybrid",
      "visibility": "Public",
      "category": "IT",
      "department": "Engineering",
      "experienceLevel": "Senior",
      "weeklyHours": 40,
      "salaryAmountFrom": 70000,
      "salaryAmountTo": 85000,
      "salaryCurrency": "EUR",
      "salaryPeriod": "Year",
      "applicationDeadline": "2025-12-31T23:59:59Z",
      "numberOfOpenings": 2,
      "postedAt": "2025-10-31T10:00:00Z",
      "hiringOrganizationName": "Ihre Firma GmbH",
      "remoteId": "internal-job-12345"
    }
  ]
}

Request Body (mehrere Jobs):

{
  "jobs": [
    {
      "title": "Senior Backend Developer",
      "description": "<p>Beschreibung...</p>",
      "jobCode": "BE-2025-001",
      "employmentType": "FullTime",
      "externalApplyUrl": "https://ihre-firma.de/jobs/be-001",
      "locations": [{"city": "Frankfurt", "country": "DE"}]
    },
    {
      "title": "Frontend Developer",
      "description": "<p>Beschreibung...</p>",
      "jobCode": "FE-2025-001",
      "employmentType": "FullTime",
      "externalApplyUrl": "https://ihre-firma.de/jobs/fe-001",
      "locations": [{"city": "Berlin", "country": "DE"}]
    }
  ]
}

Response (200 OK):

{
  "totalRequested": 2,
  "successfullyCreated": 2,
  "failed": 0,
  "results": [
    {
      "success": true,
      "job": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "slug": "senior-backend-developer-frankfurt-c44cdee8",
        "title": "Senior Backend Developer",
        "isActive": true,
        "createdAt": "2025-10-31T10:00:00Z"
      },
      "jobCodeOrTitle": "BE-2025-001"
    },
    {
      "success": true,
      "job": {
        "id": "...",
        "slug": "frontend-developer-berlin-e5f6g7h8",
        "title": "Frontend Developer",
        "isActive": true,
        "createdAt": "2025-10-31T10:00:00Z"
      },
      "jobCodeOrTitle": "FE-2025-001"
    }
  ]
}
PUT/api/v1/jobs/{id}

Aktualisieren Sie ein bestehendes Stellenangebot

DELETE/api/v1/jobs/{id}

Deaktivieren Sie ein Stellenangebot (Soft Delete)

GET/api/v1/jobs

Listen Sie alle Ihre Stellenangebote auf

Code-Beispiele
curl -X POST https://api.znapp.de/api/v1/jobs \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobs": [{
      "title": "Senior Backend Developer",
      "description": "<p>Wir suchen einen erfahrenen Backend-Entwickler mit Expertise in C# und .NET...</p>",
      "jobCode": "BE-2025-001",
      "employmentType": "FullTime",
      "remoteWorkStatus": "Hybrid",
      "visibility": "Public",
      "category": "IT",
      "department": "Engineering",
      "experienceLevel": "Senior",
      "weeklyHours": 40,
      "salaryAmountFrom": 70000,
      "salaryAmountTo": 85000,
      "salaryCurrency": "EUR",
      "salaryPeriod": "Year",
      "externalApplyUrl": "https://ihre-firma.de/jobs/be-2025-001",
      "applicationDeadline": "2025-12-31T23:59:59Z",
      "numberOfOpenings": 2,
      "postedAt": "2025-10-31T10:00:00Z",
      "hiringOrganizationName": "Ihre Firma GmbH",
      "locations": [{
        "city": "Frankfurt am Main",
        "country": "DE",
        "state": "Hessen",
        "zipCode": "60313",
        "latitude": 50.1109,
        "longitude": 8.6821
      }],
      "remoteId": "internal-job-12345"
    }]
  }'
Limits & Kontingente

Keine API Rate Limits

Es gibt keine Beschränkung der API-Requests pro Sekunde oder Tag.

Job-Kontingent nach Abonnement

Die Anzahl gleichzeitig aktiver Stellenangebote richtet sich nach Ihrem Paket:

Starter: 50 Jobs
Basic: 100 Jobs
Professional: 200 Jobs
Business: 500 Jobs
Enterprise: 1.000 Jobs
Premium: 2.000 Jobs
Ultimate: 4.000 Jobs

Bei Überschreitung bleiben die neuesten Jobs aktiv, ältere werden deaktiviert.

HTTP Status Codes
200/201Erfolg - Request wurde verarbeitet
400Bad Request - Validierungsfehler in Ihren Daten
401Unauthorized - Ungültiger oder fehlender API-Key
403Forbidden - Job-Limit erreicht
404Not Found - Ressource existiert nicht
500Server Error - Interner Fehler (bitte Support kontaktieren)

Benötigen Sie Hilfe?

Bei Fragen zur API-Integration kontaktieren Sie unseren Support:

Geschäftszeiten: Montag bis Freitag, 8:00 - 17:00 Uhr