Darstellung
Projektmanagement – Vollständige API-Referenz
Fach-API für Projekte, Aufgaben, Kanban, Support-Linien und Zeiterfassung. Basis ist https://core-backend.reybex.com/api (Staging: https://io-staging-partner.reybex.com/api). Authentifizierung wie im API: --header "authorization: Basic $TOKEN".
Der Kunde steht unter Kunden- und Lieferantenverwaltung. Aufträge unter Auftragsverwaltung. Die Abrechnung der Leistungen schreibt Verkaufsbelege oder Eingangsrechnungen.
Der schreibende Weg des Projekts ist POST /api/project/. Der Körper ist das Projekt selbst. Der schreibende Weg der Aufgabe ist POST /api/task/. Der Körper trägt den Umschlag task.
1. Grundlagen
| Objekt | Rolle |
|---|---|
Project | Projekt, Phase oder Sprint |
Task | Aufgabe oder Ticket |
TaskHistory | Zeitbuchung |
SupportLine | Support-Linie |
Kanban | Board |
Die Zahlen in den Beispielen sind Beispiel-Ids eines Mandanten. 30001 ist Kunde KD-1000. 501 ist der Benutzer. 41 ist ein Projektstatus, 51 ein Projekttyp. 61 ist ein Aufgabenstatus.
Datum am Projekt ist yyyy-MM-dd. Die Projektnummer setzt die API.
1.1 Suchschlüssel
| Ziel | Suchschlüssel |
|---|---|
| Kunde | customerNo |
| Benutzer, Status, Typ | id |
| Artikel an anderen Fach-APIs | matCode, sonst sku |
members sind Benutzer per id.
1.2 Antwort- und Fehlerformat
| Aufruf | Response |
|---|---|
| Projekt | { "id": … } |
| Aufgabe | { "taskId": …, "taskNumber": "…" } |
| Projekt löschen | der Satz wird logisch gelöscht |
| Aufgabe löschen | { "success": true } |
| Situation | Körper |
|---|---|
| Projekt nicht gefunden | HTTP 404 |
| Standardprojekt ohne Partner des Benutzers | customer.not.found.error |
| E-Mail der Aufgabe unbekannt | HTTP 404 |
| Fehlende Anmeldung | HTTP 401 |
2. Projekt
POST /api/project/ legt an, wenn keine id im Körper steht. shouldCreateFromTemplate true kopiert die genannte Vorlage und antwortet mit deren neuer id.
isSprintProject true setzt isSprint und internal. isPhase true macht das Projekt zur Phase. Die Sortierung vergibt die API, wenn sortOrder leer ist.
2.1 Felder
| Feld | Bedeutung |
|---|---|
title | Titel |
customer | Kunde |
user | Verantwortlicher, per id |
projectType, projectStatus | Art und Status, per id |
startDate, endDate | yyyy-MM-dd |
description | Text |
members | Liste { "id": … }. Fehlt die Liste, bleibt sie leer |
isSprint, isPhase | Sprint oder Phase |
mainProject | übergeordnetes Projekt |
isTemplate | Vorlage |
isFixPrice, fixPrice | Festpreis |
pricePerHour | Stundensatz |
isDelete | Logisch gelöscht |
2.2 Pflichtfelder
Auflösung, wenn ein Pflichtfeld fehlt
Die API setzt Pflicht-Referenzen nicht von selbst. Fehlt ein Feld, in dieser Reihenfolge füllen. Der erste Treffer gilt.
- Angabe – Wert aus dem Auftrag für dieses Feld.
- Vorlage – dasselbe Feld aus
GET /api/project/{id}.idundprojectNumbernicht übernehmen. Ist eine Vorlage genannt undshouldCreateFromTemplatetrue, diese Id senden. Sonst keine raten, mit Schritt 3 weiter. - Standard – Wert aus der Tabelle.
- Domäne – Kunde über
customerNolesen. Status und ArtGET /api/domains/projectStatus?take=1&sort=codeundGET /api/domains/projectType?take=1&sort=code. Dieidsetzen. - Stopp – Kunde, Status oder Art ist leer. Projekt nicht anlegen.
| Feld | Pflicht | Vorlage | Standard | Domäne |
|---|---|---|---|---|
title | ja | title | — | — |
customer | ja | customer | — | Kunde, customerNo |
projectStatus | ja | projectStatus | — | projectStatus |
projectType | ja | projectType | — | projectType |
user | nein | user | angemeldeter Benutzer, per id | — |
members | nein | nicht übernehmen | [] | — |
projectNumber | nein | nicht übernehmen | Nummernkreis | — |
2.3 Projekt anlegen
json
{
"title": "Einführung Nordlicht",
"customer": { "customerNo": "KD-1000" },
"user": { "id": 501 },
"projectStatus": { "id": 41 },
"projectType": { "id": 51 },
"startDate": "2026-10-16",
"endDate": "2026-12-31",
"members": [{ "id": 501 }]
}Response: { "id": 97001 }
Phasen: GET /api/project/phases/97001. Sprints: GET /api/project/sprints/97001. Reihenfolge: POST /api/project/reorderSprints.
Offene Aufträge des Kunden: GET /api/project/getOpenSalesOrdersForCustomer. Aufgaben aus Positionen: POST /api/project/importTasksFromSalesItems.
Lesen: GET /api/project/97001. Löschen ist logisch: DELETE /api/project/97001. Unbekannt: HTTP 404.
Beobachten: POST /api/observedProject/97001. Ablegen: DELETE /api/observedProject/97001.
3. Aufgabe
POST /api/task/ speichert task. Response: { "taskId": 97100, "taskNumber": "T-100" }
json
{
"task": {
"title": "Schnittstelle einrichten",
"project": { "id": 97001 },
"customer": { "customerNo": "KD-1000" },
"user": { "id": 501 },
"taskStatus": { "id": 61 },
"plannedCostHour": 4,
"startDate": "2026-10-16",
"endDate": "2026-10-20"
}
}isDefaultForManager true legt die Aufgabe ins Standardprojekt des Benutzers. Hat er keins und keinen Partner: customer.not.found.error.
Status ändern: POST /api/task/changeStatusOfTask. taskId und taskStatus sind Ids. Fehlt eine von beiden: HTTP 404.
json
{ "taskId": 97100, "taskStatus": 62 }In den Sprint: POST /api/task/addTasksToSprint. Unteraufgabe anlegen: POST /api/subTask/. Aus der Aufgabe: POST /api/task/createSubTaskFromTask. Liste: GET /api/task/listSubTasks/97100. Status der Unteraufgabe: POST /api/task/changeSubTaskStatus/{id}.
Verkaufsbeleg aus Kosten, die noch keinen Beleg haben: POST /api/task/createSalesDocuments. taskIds sind die Aufgaben. docDate ist yyyy-MM-dd. Fehlt die Belegart: salesDocType.not.found.error.
json
{
"taskIds": [97100],
"docDate": "2026-10-16",
"docType": { "id": 4101 }
}4101 ist die Verkaufsbelegart. Eingangsbeleg: POST /api/task/createVerificationDocuments.
Liefergegenstand: POST /api/deliverable/. Tickets: GET /api/ticket/listTickets.
Lesen: GET /api/task/97100. Löschen: DELETE /api/task/97100. Antwort { "success": true }.
Kommentar: POST /api/taskComment/.
4. Zeit, Kanban, Support
Buchung starten: GET /api/taskHistory/bookTask/97100. Beenden: GET /api/taskHistory/endTask. Aktuelle Buchung: GET /api/taskHistory/currentBookingTask. Eigene Buchungen: GET /api/taskHistory/myBookings.
Manuell speichern: POST /api/taskHistory/.
Kanban lesen: POST /api/kanban/ oder GET /api/kanban/{kanbanCode}. Spalten: POST /api/kanban/kanbanColumnPreferences.
Support-Linie: POST /api/supportLine/. SLA: POST /api/supportLineSla/. Folgen: GET /api/supportLine/follow/{id}.
Checkliste: POST /api/checkList/. Punkt: POST /api/checkList/checkListItem.
5. Weitere Beispiele
5.1 Vom Kunden zur Aufgabe
- Projekt anlegen, Abschnitt Projekt.
- Aufgabe mit demselben Kunden und
project.id. - Zeit über
GET /api/taskHistory/bookTask/{id}starten und mitendTaskbeenden. POST /api/task/createSalesDocuments, wenn die Stunden berechnet werden.
6. Endpoint-Katalog
| Methode | Pfad | Bedeutung |
|---|---|---|
GET | /api/project/{id} | Ein Projekt |
POST | /api/project/ | Projekt speichern |
DELETE | /api/project/{id} | Logisch löschen |
GET | /api/project/phases/{id} | Phasen |
GET | /api/project/sprints/{id} | Sprints |
POST | /api/project/importTasksFromSalesItems | Aufgaben aus Auftragspositionen |
GET | /api/task/{id} | Eine Aufgabe |
POST | /api/task/ | Speichern, Umschlag task |
DELETE | /api/task/{id} | Löschen |
POST | /api/task/changeStatusOfTask | Status |
POST | /api/task/createSalesDocuments | Verkaufsbeleg aus Kosten |
GET | /api/taskHistory/bookTask/{id} | Zeit starten |
GET | /api/taskHistory/endTask | Zeit beenden |
POST | /api/kanban/ | Board |
POST | /api/supportLine/ | Support-Linie |
POST | /api/checkList/ | Checkliste |
POST | /api/subTask/ | Unteraufgabe |
POST | /api/taskComment/ | Kommentar |
POST | /api/deliverable/ | Liefergegenstand |
GET | /api/ticket/listTickets | Tickets |
POST | /api/taskHistory/bookTaskWithSubTask | Zeit mit Unteraufgabe |
7. Häufige Fehler
| Situation | Ursache |
|---|---|
customer.not.found.error | isDefaultForManager und der Benutzer hat keinen Partner |
| HTTP 404 beim Löschen des Projekts | id unbekannt |
| HTTP 404 beim Speichern der Aufgabe | releatedEmailId zeigt auf keine E-Mail |
| HTTP 404 beim Status | taskId oder taskStatus unbekannt |
salesDocType.not.found.error | createSalesDocuments ohne Belegart |