Projekte — API und MCP
Überblick
Dieser Bereich stellt 93 Operationen bereit. Jede davon ist zugleich ein MCP-Werkzeug.
Der Bereich hängt am Modul-Schalter module.projects. Ist das Modul aus, antworten diese Operationen mit 404.
Operationen
| Methode | Pfad | Zweck | Recht | Parameter |
|---|---|---|---|---|
GET | /api/v1/project-acceptances | Liste der ProjectAcceptance | projects.project.view | page, projectId, projectUlid, status |
GET | /api/v1/project-acceptances/{ulid}/pdf | Abnahme-Beleg als PDF — Beleg einer Abnahme mit Marken-Briefkopf: Gegenstand, Art, Entscheidung, wer/wann, IP, Browser, Kommentar bzw. Änderungswunsch und — bei Kunden-Abnahmen im Portal — Unterzeichner und Nachweis-Hash. Antwort application/pdf; Abnahme eines unsichtbaren Projekts 404. | projects.project.view | ulid |
GET | /api/v1/project-activity | Liste der ProjectActivity | projects.project.view | page, itemsPerPage, projectUlid, order[occurredAt] |
GET | /api/v1/project-boards | Liste der Board | projects.project.view | page, projectId, projectUlid |
POST | /api/v1/project-boards | Eine Board anlegen | projects.project.edit | + Rumpf |
GET | /api/v1/project-boards/{boardUlid}/columns | Spalten einer Tafel — Spalten des Boards in Reihenfolge (sortOrder): Name, gebundener Aufgaben-Status (statusKey), WIP-Grenze. Verlangt projects.project.view am Projekt der Tafel; eine unsichtbare Tafel antwortet 404. | projects.project.view | boardUlid |
POST | /api/v1/project-boards/{boardUlid}/columns | Spalte anlegen — Legt eine Spalte an der Tafel an: name, statusKey (Aufgaben-Status, je Tafel höchstens einmal — sonst 422), optional wipLimit (≤ 0/leer = keine Grenze) und sortOrder (ohne Angabe hinten angehängt). Verlangt projects.project.edit am Projekt der Tafel (sonst 403). | projects.project.edit | boardUlid, + Rumpf |
DELETE | /api/v1/project-boards/{boardUlid}/columns/{ulid} | Spalte löschen — Entfernt die Spalte von der Tafel. Die Vorgänge behalten ihren Status; ohne Spalte erscheinen sie nicht mehr auf dieser Tafel. | projects.project.edit | boardUlid, ulid |
GET | /api/v1/project-boards/{boardUlid}/columns/{ulid} | Eine BoardColumn lesen | projects.project.view | boardUlid, ulid |
PATCH | /api/v1/project-boards/{boardUlid}/columns/{ulid} | Spalte ändern — Umbenennen, anderen Status binden, WIP-Grenze setzen oder aufheben (null), Position setzen (sortOrder — je Spalte ihr Ziel, keine Umnummerierung der übrigen). | projects.project.edit | boardUlid, ulid, + Rumpf |
DELETE | /api/v1/project-boards/{ulid} | Eine Board löschen | projects.project.edit | ulid |
GET | /api/v1/project-boards/{ulid} | Eine Board lesen | projects.project.view | ulid |
PATCH | /api/v1/project-boards/{ulid} | Eine Board ändern | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/project-file-requests | Datei-Anforderungen eines Projekts — Datei-Anforderungen beim Kunden mit Plätzen und hochgeladenen Dateien. Pflichtfilter projectUlid. | projects.project.view | projectUlid, status |
POST | /api/v1/project-file-requests | Dateien beim Kunden anfordern — Legt eine Datei-Anforderung am Projekt an (projectUlid, title, description?, dueAt?, slotLabels?) und benachrichtigt die Portal-Nutzer des Kunden. Das Projekt braucht einen Kunden. | projects.project.edit | + Rumpf |
DELETE | /api/v1/project-file-requests/{ulid} | Datei-Anforderung löschen — Löscht die Anforderung; hochgeladene Dateien bleiben im Projekt. | projects.project.edit | ulid |
GET | /api/v1/project-file-requests/{ulid} | Eine ProjectFileRequest lesen | projects.project.view | ulid |
PATCH | /api/v1/project-file-requests/{ulid} | Datei-Anforderung ändern — Ändert Titel, Hinweis oder Frist; status=completed erledigt, status=open öffnet wieder. | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/project-gantt-baselines | Baselines eines Projektplans — Gespeicherte Baselines eines Projekts, neueste zuerst. Pflichtfilter projectUlid. | projects.project.view | projectUlid |
POST | /api/v1/project-gantt-baselines | Baseline des Projektplans speichern — Friert die aktuellen Termine des Projekts ein (Start/Ende je Aufgabe, Meilenstein-Termine, Projektrahmen). Body {projectUlid, name?}; ohne Namen „Baseline <Datum>". Der Plan wird danach gegen sie verglichen. | projects.project.edit | + Rumpf |
DELETE | /api/v1/project-gantt-baselines/{ulid} | Baseline verwerfen — Löscht eine Baseline des Projektplans. | projects.project.edit | ulid |
GET | /api/v1/project-gantt-baselines/{ulid} | Eine ProjectGanttBaseline lesen | projects.project.view | ulid |
GET | /api/v1/project-members | Liste der ProjectMember | projects.project.view | page, projectId, employeeId |
POST | /api/v1/project-members | Eine ProjectMember anlegen | projects.project.edit | + Rumpf |
DELETE | /api/v1/project-members/{id} | Eine ProjectMember löschen | projects.project.edit | id |
GET | /api/v1/project-members/{id} | Eine ProjectMember lesen | projects.project.view | id |
PATCH | /api/v1/project-members/{id} | Eine ProjectMember ändern | projects.project.edit | id, + Rumpf |
GET | /api/v1/project-milestones | Liste der Milestone | projects.project.view | page, projectId, order[dueAt], order[name], order[sortOrder] |
POST | /api/v1/project-milestones | Eine Milestone anlegen | projects.project.edit | + Rumpf |
DELETE | /api/v1/project-milestones/{ulid} | Eine Milestone löschen | projects.project.edit | ulid |
GET | /api/v1/project-milestones/{ulid} | Eine Milestone lesen | projects.project.view | ulid |
PATCH | /api/v1/project-milestones/{ulid} | Eine Milestone ändern | projects.project.edit | ulid, + Rumpf |
POST | /api/v1/project-milestones/{ulid}/accept | Meilenstein intern abnehmen — Nimmt den Meilenstein INTERN ab. Die Kundenentscheidung läuft ausschließlich über das Portal. | projects.acceptance.internal | ulid, + Rumpf |
POST | /api/v1/project-milestones/{ulid}/bill | Meilenstein abrechnen — Stößt die Festpreis-Abrechnung des Meilensteins an (meldet BillingRequested). Verlangt das eigene Auslöserecht für Abrechnungen; billedAt ist nicht direkt schreibbar. | projects.billing.trigger | ulid, + Rumpf |
POST | /api/v1/project-milestones/{ulid}/request-acceptance | Kundenabnahme des Meilensteins anfordern — Fordert die Abnahme durch den Kunden an: legt sie als pending an und benachrichtigt das Portal. Nimmt nur kind=customer. | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/project-risks | Liste der ProjectRisk | projects.project.view | page, projectId, projectUlid, status, type |
POST | /api/v1/project-risks | Eine ProjectRisk anlegen | projects.project.edit | + Rumpf |
DELETE | /api/v1/project-risks/{ulid} | Eine ProjectRisk löschen | projects.project.edit | ulid |
GET | /api/v1/project-risks/{ulid} | Eine ProjectRisk lesen | projects.project.view | ulid |
PATCH | /api/v1/project-risks/{ulid} | Eine ProjectRisk ändern | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/project-templates | Liste der ProjectTemplate | projects.project.view | page, active, projectType, brandId, search, order[name], order[createdAt], order[updatedAt] |
POST | /api/v1/project-templates | Eine ProjectTemplate anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/project-templates/{ulid} | Eine ProjectTemplate löschen | projects.config.manage | ulid |
GET | /api/v1/project-templates/{ulid} | Eine ProjectTemplate lesen | projects.project.view | ulid |
PATCH | /api/v1/project-templates/{ulid} | Eine ProjectTemplate ändern | projects.config.manage | ulid, + Rumpf |
GET | /api/v1/project/milestone-statuses | Liste der MilestoneStatus | projects.project.view | page |
POST | /api/v1/project/milestone-statuses | Eine MilestoneStatus anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/project/milestone-statuses/{key} | Eine MilestoneStatus löschen | projects.config.manage | key |
GET | /api/v1/project/milestone-statuses/{key} | Eine MilestoneStatus lesen | projects.project.view | key |
PATCH | /api/v1/project/milestone-statuses/{key} | Eine MilestoneStatus ändern | projects.config.manage | key, + Rumpf |
GET | /api/v1/project/project-roles | Liste der ProjectRole | projects.project.view | page |
POST | /api/v1/project/project-roles | Eine ProjectRole anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/project/project-roles/{key} | Eine ProjectRole löschen | projects.config.manage | key |
GET | /api/v1/project/project-roles/{key} | Eine ProjectRole lesen | projects.project.view | key |
PATCH | /api/v1/project/project-roles/{key} | Eine ProjectRole ändern | projects.config.manage | key, + Rumpf |
GET | /api/v1/project/project-statuses | Liste der ProjectStatus | projects.project.view | page |
POST | /api/v1/project/project-statuses | Eine ProjectStatus anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/project/project-statuses/{key} | Eine ProjectStatus löschen | projects.config.manage | key |
GET | /api/v1/project/project-statuses/{key} | Eine ProjectStatus lesen | projects.project.view | key |
PATCH | /api/v1/project/project-statuses/{key} | Eine ProjectStatus ändern | projects.config.manage | key, + Rumpf |
GET | /api/v1/project/project-types | Liste der ProjectType | projects.project.view | page |
POST | /api/v1/project/project-types | Eine ProjectType anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/project/project-types/{key} | Eine ProjectType löschen | projects.config.manage | key |
GET | /api/v1/project/project-types/{key} | Eine ProjectType lesen | projects.project.view | key |
PATCH | /api/v1/project/project-types/{key} | Eine ProjectType ändern | projects.config.manage | key, + Rumpf |
GET | /api/v1/projects | Liste der Project | projects.project.view | page, customerId, brandId, teamId, type, statusId, statusCategory, showDone, health, mine, search, q, order[createdAt], order[updatedAt], order[name], order[code], order[dueAt], order[budgetAmount] |
POST | /api/v1/projects | Eine Project anlegen | projects.project.create | + Rumpf |
POST | /api/v1/projects/from-quote | Create project from a quote — Create project from a quote. Dedicated action endpoint — not a standard CRUD create. | projects.project.create_from_quote | + Rumpf |
POST | /api/v1/projects/from-template | Eine Project anlegen | projects.project.create | + Rumpf |
POST | /api/v1/projects/{projectUlid}/ai/risk-scan | Verzugs- und Risikosignale erkennen — Erkennt Verzugs-/Risiko-Signale und ordnet sie ein; createRisk legt daraus ein Projekt-Risiko an (verlangt projects.project.edit). | projects.project.view | projectUlid, + Rumpf |
POST | /api/v1/projects/{projectUlid}/ai/status-summary | Statusbericht erzeugen — Erzeugt einen Statusbericht zum Projekt. | projects.project.view | projectUlid, + Rumpf |
POST | /api/v1/projects/{projectUlid}/ai/task-breakdown | Aufgaben-Vorschlag aus einem Briefing — Schlägt Aufgaben aus einem Briefing vor (Vorschau, legt nichts an). | projects.project.view | projectUlid, + Rumpf |
POST | /api/v1/projects/{projectUlid}/ai/task-breakdown/apply | Aufgaben-Vorschläge übernehmen — Legt die übergebenen Aufgaben-Vorschläge als Aufgaben des Projekts an. | projects.project.edit | projectUlid, + Rumpf |
GET | /api/v1/projects/{projectUlid}/autopilot | Eine ProjectAutopilot lesen | projects.project.view | projectUlid |
PATCH | /api/v1/projects/{projectUlid}/autopilot | Autopilot-Einstellungen ändern — Ändert die Autopilot-Einstellungen des Projekts. Wirkt ausschließlich auf Benachrichtigungen — nie auf Status oder Termine. | projects.project.edit | projectUlid, + Rumpf |
POST | /api/v1/projects/{projectUlid}/change-quote | Nachtrag zum Projekt anbieten — Legt aus einem Änderungswunsch einen Angebots-Entwurf mit Projektbezug an (Herkunft sourceProjectId am Angebot): Kunde, Marke und Betreff kommen aus dem Projekt. Body {acceptanceUlid?, note?, title?} — acceptanceUlid übernimmt den Änderungswunsch einer Abnahme des Projekts (Status changes_requested) als Einleitung, sonst gilt note. Verlangt ein sichtbares Projekt (sonst 404) mit Kunde (sonst 422) und finance.quote.create in seiner Marke (sonst 403); ohne aktives Angebots-Modul 409. Ein noch unversendeter Nachtrags-Entwurf desselben Projekts wird zurückgegeben (created: false). | finance.quote.create | projectUlid, + Rumpf |
GET | /api/v1/projects/{projectUlid}/gantt | Retrieves a ProjectGantt resource. — Balken (Aufgaben mit Start/Ende), Kanten (Abhängigkeiten) und Meilensteine eines Projekts für die Zeitachse — mit kritischem Pfad (Gesamtpuffer je Balken) und Vergleich gegen eine gespeicherte Baseline (Abweichung in Tagen). | projects.project.view | projectUlid, baselineUlid |
POST | /api/v1/projects/{projectUlid}/progress-billing | Festpreis nach Fertigstellungsgrad abrechnen — Rechnet ein Festpreis-Projekt (Abrechnungsmodus progress, Festpreis = Budget-Betrag) bis zum angegebenen Fertigstellungsgrad ab: die Differenz zum bereits abgerechneten Anteil wird als Einmal-Vorgabe an die Abrechnung gemeldet. Nur aufwärts; 100 % rechnet den Rest exakt ab. | projects.billing.trigger | projectUlid, + Rumpf |
DELETE | /api/v1/projects/{ulid} | Eine Project löschen | projects.project.delete | ulid |
GET | /api/v1/projects/{ulid} | Eine Project lesen | projects.project.view | ulid |
PATCH | /api/v1/projects/{ulid} | Eine Project ändern | projects.project.edit | ulid, + Rumpf |
POST | /api/v1/projects/{ulid}/as-template | Projekt als Vorlage sichern — Legt aus dem Projekt eine Projektvorlage an. Verlangt das Konfigurationsrecht. | projects.config.manage | ulid, + Rumpf |
POST | /api/v1/projects/{ulid}/duplicate | Projekt kopieren — Legt eine Kopie des Projekts an. | projects.project.create | ulid, + Rumpf |
POST | /api/v1/projects/{ulid}/request-acceptance | Kundenabnahme des Projekts anfordern — Fordert die Abnahme des Projekts durch den Kunden an: legt sie als pending an und benachrichtigt das Portal. Nimmt nur kind=customer. | projects.project.edit | ulid, + Rumpf |
POST | /api/v1/projects/{ulid}/request-feedback | Feedback-Runde beim Kunden anfordern — Legt eine Feedback-Runde (scope=feedback, title Pflicht) als offene Kunden-Abnahme an und benachrichtigt das Portal. Der Kunde gibt frei oder wünscht Änderungen; keine Wirkung auf Meilensteine oder Abrechnung. Je Titel höchstens eine offene Runde. | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/projects/{ulid}/status-pdf | Projektstatus als PDF — Statusbericht mit Marken-Briefkopf: Eckdaten, Fortschritt, Budget (nur mit Budget-/Ertrags-Recht), Meilensteine, offene Risiken und Abnahmen. Antwort application/pdf; unsichtbares Projekt 404. | projects.project.view | ulid |
POST | /api/v1/projects/{ulid}/template-sync | Vorlagen-Fassung übernehmen, verwerfen oder Anlage wiederholen — templateSyncMode: adopt legt die in der neueren Vorlagen-Fassung HINZUGEKOMMENEN Meilensteine, Listen und Aufgaben an (Bestehendes bleibt unberührt) · dismiss markiert die Fassung als gesehen · retry stößt eine gescheiterte Anlage aus der Vorlage erneut im Hintergrund an. | projects.project.edit | ulid, + Rumpf |
GET | /api/v1/task-bundles | Liste der TaskBundle | projects.project.view | page, active, q, order[name], order[createdAt], order[updatedAt] |
POST | /api/v1/task-bundles | Eine TaskBundle anlegen | projects.config.manage | + Rumpf |
DELETE | /api/v1/task-bundles/{ulid} | Eine TaskBundle löschen | projects.config.manage | ulid |
GET | /api/v1/task-bundles/{ulid} | Eine TaskBundle lesen | projects.project.view | ulid |
PATCH | /api/v1/task-bundles/{ulid} | Eine TaskBundle ändern | projects.config.manage | ulid, + Rumpf |
POST | /api/v1/task-bundles/{ulid}/apply | Aufgaben-Bündel in ein Projekt laden — Lädt das Bündel in ein bestehendes Projekt (gleichnamige Listen werden gemerged). | projects.project.edit | ulid, + Rumpf |
Zweckangaben, die nicht dem Standardmuster folgen, stammen unverändert aus der Schnittstellen-Beschreibung im Code.