API-Dokumentation

Version 1 · REST · JSON

Die Einfach-Projektiert REST API ermöglicht den programmatischen Zugriff auf Ihre Projekte, Aufgaben und Meilensteine. Alle Endpunkte geben und empfangen JSON und erfordern eine Authentifizierung per API-Token.

Authentifizierung

Die API verwendet Bearer-Token-Authentifizierung (Laravel Sanctum). Erstellen Sie Ihren persönlichen Zugriffstoken in der Anwendung unter Profil → API-Token.

Bewahren Sie Ihren Token sicher auf – er wird nur einmal angezeigt. Ein Token kann jederzeit in den Profileinstellungen widerrufen werden.

Token im Request übergeben

Fügen Sie den Token als Authorization-Header bei jedem API-Request hinzu:

Authorization: Bearer <Ihr-Token>
Accept: application/json
Content-Type: application/json

Beispiel (curl)

curl https://app.einfach-projektiert.de/api/v1/projekte \
  -H "Authorization: Bearer ep_abc123..." \
  -H "Accept: application/json"

Basis-URL

https://app.einfach-projektiert.de/api/v1

Alle in dieser Dokumentation genannten Endpunkte sind relativ zu dieser Basis-URL.

Fehlercodes

CodeBedeutung
200Erfolg
201Ressource erstellt
204Erfolg, kein Inhalt (z. B. nach DELETE)
401Nicht authentifiziert – Token fehlt oder ungültig
403Keine Berechtigung für diese Ressource
404Ressource nicht gefunden
422Validierungsfehler – Antwort enthält errors-Objekt

Validierungsfehler (422)

{
  "message": "The name field is required.",
  "errors": {
    "name": ["Der Name ist erforderlich."]
  }
}

Benutzer

GET /benutzer Eigenes Profil abrufen

Gibt die Daten des authentifizierten Benutzers zurück.

Antwort 200

{
  "id": 1,
  "name": "Max Mustermann",
  "email": "max@beispiel.de"
}

Projekte

GET /projekte Alle Projekte auflisten

Gibt alle Projekte zurück, bei denen der authentifizierte Benutzer Mitglied ist.

Antwort 200

{
  "data": [
    {
      "id": 1,
      "name": "Website-Relaunch",
      "slug": "website-relaunch",
      "description": "Neugestaltung der Unternehmenswebsite",
      "color": "#1b3c82",
      "status": "aktiv",
      "start_date": "2026-01-01",
      "end_date": "2026-06-30",
      "is_template": false,
      "tasks_count": 12,
      "created_at": "2026-01-01T10:00:00+00:00",
      "updated_at": "2026-05-15T14:30:00+00:00"
    }
  ]
}
POST /projekte Projekt erstellen

Parameter

FeldTypBeschreibung
namestringPflichtProjektname (max. 255 Zeichen)
colorstringPflichtHex-Farbcode, z. B. #1b3c82
descriptionstringOptionalBeschreibung (max. 5000 Zeichen)
statusstringOptionalplanung · aktiv · pausiert · abgeschlossen · archiviert
start_datedateOptionalFormat: YYYY-MM-DD
end_datedateOptionalFormat: YYYY-MM-DD, muss ≥ start_date sein
is_templatebooleanOptionalAls Vorlage markieren

Beispiel-Request

curl -X POST https://app.einfach-projektiert.de/api/v1/projekte \
  -H "Authorization: Bearer ep_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Website-Relaunch",
    "color": "#1b3c82",
    "status": "planung"
  }'

Rückgabe: 201 – Projektobjekt (siehe Listenformat oben)

GET /projekte/{id} Projekt abrufen

Gibt ein einzelnes Projekt zurück. Rückgabe: 200 mit Projektobjekt.

PUT /projekte/{id} Projekt aktualisieren

Alle Felder sind optional (PATCH-Semantik). Nur übergebene Felder werden geändert.

Rückgabe: 200 mit dem aktualisierten Projektobjekt.

DELETE /projekte/{id} Projekt löschen

Soft-löscht das Projekt. Nur der Eigentümer kann ein Projekt löschen. Rückgabe: 204

Aufgaben

Aufgaben sind immer einem Projekt zugeordnet. Für Index/Erstellen wird die Projekt-ID in der URL übergeben. Für Abrufen/Aktualisieren/Löschen wird direkt die Aufgaben-ID verwendet (Shallow Routing).

GET /projekte/{projekt_id}/aufgaben Aufgaben auflisten

Gibt alle Aufgaben eines Projekts zurück, sortiert nach sort_order.

Antwort 200

{
  "data": [
    {
      "id": 42,
      "title": "Design-Konzept erstellen",
      "description": null,
      "status": "in_arbeit",
      "priority": "hoch",
      "phase_id": 3,
      "phase": "Phase 1: Konzeption",
      "assignee_id": 5,
      "assignee": "Anna Schmidt",
      "start_date": "2026-02-01",
      "due_date": "2026-02-15",
      "estimated_hours": "8.00",
      "completed_at": null,
      "sort_order": 1,
      "created_at": "2026-01-20T09:00:00+00:00",
      "updated_at": "2026-02-03T11:45:00+00:00"
    }
  ]
}
POST /projekte/{projekt_id}/aufgaben Aufgabe erstellen
FeldTypBeschreibung
titlestringPflichtAufgabentitel (max. 255 Zeichen)
descriptionstringOptionalBeschreibung
statusstringOptionaloffen · in_arbeit · review · erledigt (Standard: offen)
prioritystringOptionalniedrig · mittel · hoch · dringend (Standard: mittel)
phase_idintegerOptionalID einer Phase im gleichen Projekt
assignee_idintegerOptionalBenutzer-ID des Zuständigen
start_datedateOptionalFormat: YYYY-MM-DD
due_datedateOptionalFormat: YYYY-MM-DD
estimated_hoursnumberOptionalGeschätzter Aufwand in Stunden

Rückgabe: 201 mit dem erstellten Aufgabenobjekt

GET /aufgaben/{id} Aufgabe abrufen

Gibt eine einzelne Aufgabe zurück, inkl. Phase, Zuständigen, Tags, Unteraufgaben und Abhängigkeiten. Rückgabe: 200

PUT /aufgaben/{id} Aufgabe aktualisieren

Alle Felder optional (identisch mit Erstellen). Rückgabe: 200 mit aktualisiertem Objekt.

DELETE /aufgaben/{id} Aufgabe löschen

Soft-löscht die Aufgabe. Rückgabe: 204

Meilensteine

GET /projekte/{projekt_id}/meilensteine Meilensteine auflisten

Gibt alle Meilensteine eines Projekts zurück, sortiert nach Fälligkeitsdatum.

Antwort 200

{
  "data": [
    {
      "id": 7,
      "name": "Beta-Launch",
      "description": "Interne Testphase abgeschlossen",
      "due_date": "2026-04-01",
      "reached_at": null,
      "is_reached": false,
      "is_overdue": false,
      "created_at": "2026-01-05T08:00:00+00:00"
    }
  ]
}
POST /projekte/{projekt_id}/meilensteine Meilenstein erstellen
FeldTypBeschreibung
namestringPflichtMeilensteinname (max. 255 Zeichen)
due_datedatePflichtFälligkeitsdatum YYYY-MM-DD
descriptionstringOptionalBeschreibung (max. 2000 Zeichen)

Rückgabe: 201 mit dem erstellten Meilensteiobjekt

GET /meilensteine/{id} Meilenstein abrufen

Rückgabe: 200 mit Meilensteiobjekt (wie Listenformat oben).

PUT /meilensteine/{id} Meilenstein aktualisieren
FeldTypBeschreibung
namestringOptional
descriptionstringOptional
due_datedateOptional
reached_atdatetimeOptionalISO 8601 – setzen um als erreicht zu markieren, null zum Zurücksetzen

Rückgabe: 200 mit aktualisiertem Objekt.

DELETE /meilensteine/{id} Meilenstein löschen

Rückgabe: 204

Meine Aufgaben

Gibt alle Aufgaben zurück, die dem authentifizierten Benutzer zugewiesen sind – über alle Projekte hinweg.

GET /aufgaben Meine Aufgaben (alle Projekte)

Query-Parameter

ParameterTypBeschreibung
statusstringOptionaloffen · in_arbeit · review · erledigt
prioritaetstringOptionalniedrig · mittel · hoch · dringend
projekt_idintegerOptionalNur Aufgaben dieses Projekts
ueberfaelligbooleanOptionaltrue → nur überfällige Aufgaben

Antwort 200

{
  "data": [
    {
      "id": 42,
      "title": "Landingpage fertigstellen",
      "description": "<p>Alle Texte einpflegen</p>",
      "status": "in_arbeit",
      "priority": "hoch",
      "due_date": "2026-06-15",
      "is_overdue": false,
      "project": {
        "id": 1,
        "name": "Website-Relaunch",
        "slug": "website-relaunch",
        "color": "#1b3c82",
        "status": "aktiv"
      },
      "phase": "Phase 2",
      "estimated_hours": 4.5,
      "completed_at": null,
      "created_at": "2026-06-01T09:00:00+00:00",
      "updated_at": "2026-06-05T14:23:00+00:00"
    }
  ],
  "meta": {
    "total": 38,
    "per_page": 50,
    "current_page": 1,
    "last_page": 1
  }
}

Sortierung: In Arbeit → Review → Offen → Erledigt, dann nach Fälligkeitsdatum. Paginiert mit 50 Einträgen pro Seite.

Einfach-Formular Webhook

Dieser Endpunkt empfängt Formular-Einreichungen von Einfach-Formular und fügt den Teilnehmer automatisch als Projektmitglied hinzu. Der Endpunkt erfordert keine Bearer-Token-Authentifizierung – die Verifizierung erfolgt über den token-Query-Parameter.

Webhook-URLs werden in den Projekteinstellungen generiert (Eigentümer-Rolle erforderlich). Jedes Token kann mit einer Standard-Rolle und einer Bezeichnung versehen werden.
POST /webhook/formular/{projekt_id}?token={webhook_token} Teilnehmer registrieren

Basis-URL: https://einfach-projektiert.de (kein /api/v1-Prefix)

Payload-Felder

FeldTypBeschreibung
emailstringPflichtE-Mail-Adresse des Teilnehmers
namestringOptionalVollständiger Name (alternativ: vorname + nachname)
vornamestringOptional
nachnamestringOptional
telefonstringOptionalFestnetz
mobilstringOptionalMobilnummer
firmastringOptionalUnternehmen
positionstringOptionalBerufsbezeichnung
abteilungstringOptional
strassestringOptionalStraße + Hausnummer
plzstringOptionalPostleitzahl
ortstringOptionalStadt
landstringOptional
webseiteurlOptional
nachrichtstringOptionalFreitext aus dem Formular
rollestringOptionalbetrachter · kommentator · bearbeiter – überschreibt Token-Standard

Beispiel-Request (curl)

curl -X POST \
  "https://einfach-projektiert.de/webhook/formular/1?token=abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": "max@mustermann.de",
    "vorname": "Max",
    "nachname": "Mustermann",
    "firma": "Muster GmbH",
    "telefon": "+49 30 123456",
    "ort": "Hamburg"
  }'

Antwort 200

{
  "ok": true,
  "message": "Teilnehmer wurde angelegt und dem Projekt hinzugefügt.",
  "data": {
    "user_id": 47,
    "name": "Max Mustermann",
    "email": "max@mustermann.de",
    "already_member": false,
    "account_created": true
  }
}

Wenn der Benutzer noch kein Konto hat, wird eines erstellt und eine E-Mail zum Passwort-Setzen versandt. Bei "already_member": true wird keine Rolle geändert. Ungültiges Token → 401

Startseite Impressum Datenschutz AGB