Endpunkt für Projekte & Aufgaben

NEU v2.35.0 · xoCRM

Projects Endpoint

Verwalten Sie xoCRM-Projekte und Projektaufgaben per JSON-API: exportieren, anlegen, aktualisieren und löschen — inkl. mehrsprachiger Beschreibungen, Projektleitern, Bearbeiter-Zuweisungen und Status-History.


Endpoints

MethodeEndpointScopeBeschreibung
GET/Export/JSON/projectsprojects:readAlle Projekte (optional ?include_tasks=1)
GET/Export/JSON/project/{id}projects:readEinzelnes Projekt
POST/Import/JSON/projectsprojects:writeNeue Projekte anlegen
PUT/Import/JSON/projectsprojects:writeProjekte aktualisieren (project_id Pflicht)
DELETE/Delete/JSON/project/{id}projects:deleteProjekt löschen (kaskadierend inkl. Aufgaben)
GET/Export/JSON/project_tasksproject_tasks:readAlle Aufgaben (Filter siehe unten)
GET/Export/JSON/project_task/{id}project_tasks:readEinzelne Aufgabe
POST/Import/JSON/project_tasksproject_tasks:writeNeue Aufgaben anlegen (project_id Pflicht)
PUT/Import/JSON/project_tasksproject_tasks:writeAufgaben aktualisieren (task_id Pflicht)
DELETE/Delete/JSON/project_task/{id}project_tasks:deleteAufgabe löschen (Projekt bleibt bestehen)

Filter (Export)

Projekte

  • ?status={id} — Projektstatus
  • ?customer_id={id} — zugeordneter Kunde
  • ?category_id={id} — Projektkategorie
  • ?leader_admin_id={id} — Projektleiter
  • ?is_private=0|1 — private Projekte
  • ?date_from / ?date_to — Anlagedatum
  • ?last_modified={ts} — geändert seit
  • ?include_tasks=1 — Aufgaben eingebettet

Aufgaben

  • ?project_id={id} — Aufgaben eines Projekts
  • ?status={id} — Aufgabenstatus
  • ?priority=1-5 — Priorität
  • ?admin_id={id} — zugewiesener Bearbeiter
  • ?customer_id={id} / ?category_id={id}
  • ?due_from / ?due_to — Fälligkeitsbereich
  • ?progress_min / ?progress_max — Fortschritt (0-100)
  • ?last_modified={ts} — geändert seit

?language=de|en steuert die Sprache der Status-/Kategorienamen. Die Meta-Blöcke project_statuses[] bzw. task_statuses[] liefern alle verfügbaren Status-Werte.


Payload-Struktur (Projekt)

{
  "type": "projects",
  "data": [
    {
      "name": "Website-Relaunch",
      "description": "<p>Beschreibung (Default-Sprache)</p>",
      "descriptions": [
        { "language_id": 1, "project_name": "Website Relaunch", "project_description": "<p>EN</p>" }
      ],
      "customer_scope": "specific",
      "customer_ids": [4711],
      "date_start": "2026-07-01",
      "date_end": "2026-09-30",
      "is_private": false,
      "leader_admin_ids": [1],
      "category_ids": [2],
      "relationships": [ { "target_type": "orders_id", "target_id": 12345 } ],
      "admin_id": 1,
      "status_comment": "Projekt via API angelegt"
    }
  ]
}

Payload-Struktur (Aufgabe)

{
  "type": "project_tasks",
  "data": [
    {
      "project_id": 126,
      "name": "Konzept erstellen",
      "priority": 4,
      "progress_percent": 0,
      "date_start": "2026-07-01",
      "due_date": "2026-07-15",
      "hours_planned": 8.5,
      "hours_actual": null,
      "status_id": 60,
      "assigned_admin_ids": [1],
      "admin_id": 1,
      "status_comment": "Aufgabe via API angelegt"
    }
  ]
}

Hinweise

  • NEU v2.36.0: Projekte und Aufgaben enthalten im Export status_history[] — alle Statuseinträge inkl. comments (Meeting-Protokolle), progress_percent, status_name und user_name.
  • admin_id = handelnder Admin (wird als created_by/modified_by und in der Status-History als user_id gespeichert; ohne Angabe = 0/System).
  • status_id wird gegen die Status-Verwaltung validiert (Typ projects bzw. tasks); ohne Angabe greift der Default-Status. Ein Statuswechsel per PUT erzeugt automatisch einen Status-History-Eintrag mit status_comment — seit v2.40.0 schreibt status_comment auch ohne Statusänderung einen Eintrag (Arbeitsnotizen/Protokolle); bei Aufgaben wandert progress_percent als Fortschritt in den Eintrag.
  • descriptions[] ist mehrsprachig; bei PUT gilt Merge-Semantik — nur gelieferte Sprachen/Felder werden überschrieben.
  • leader_admin_ids, relationships (Projekte) und assigned_admin_ids (Aufgaben) werden nur ersetzt, wenn der Key im Payload enthalten ist (replace-on-present).
  • POST mit bereits vergebener ID liefert Already exists — in dem Fall PUT verwenden (und umgekehrt Not found bei PUT auf unbekannte IDs).
  • Achtung: DELETE /project/{id} löscht kaskadierend alle Aufgaben des Projekts mit. Verknüpfte Bestellungen/Tickets werden dabei nur entkoppelt, nicht gelöscht. Die Response enthält deleted_tasks.