API - Aufgaben Admin
📕 Für Administratoren und Entwickler
Über die Public API können Aufgaben programmatisch abgerufen, erstellt, aktualisiert und archiviert werden. Alle Endpunkte befinden sich unter dem Basis-Pfad /api/v1/tasks.
Für alle Anfragen wird ein gültiger API-Key als Header benötigt:
X-API-Key: sf_live_xxxxxxxx...
Status-Werte
| Status | Bedeutung |
|---|---|
BACKLOG | Backlog (kein Bearbeiter erforderlich) |
DRAFT | Entwurf (kein Bearbeiter erforderlich) |
PLANNED | Geplant |
IN_PROGRESS | In Bearbeitung |
READY_FOR_REVIEW | Bereit zur Pruefung (erfordert einen Pruefer/Reviewer) |
IN_REVIEW | In Pruefung |
COMPLETED | Abgeschlossen |
BLOCKED | Blockiert |
REJECTED | Abgelehnt |
ON_HOLD | Pausiert |
Hinweis: Alle Status ausser
BACKLOGundDRAFTerfordern einen zugewiesenen Benutzer (assigneeId). Wird eine Aufgabe ohne Bearbeiter auf einen dieser Status gesetzt, gibt die API einen400 VALIDATION_ERRORzurück.
Prioritäts-Werte
| Priorität | Bedeutung |
|---|---|
LOW | Niedrig |
MEDIUM | Mittel |
HIGH | Hoch |
CRITICAL | Kritisch |
Aufgaben auflisten
GET /api/v1/tasks
Erforderlicher Scope: tasks:read
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status | String | Nein | Filtern nach Status (z.B. IN_PROGRESS) |
priority | String | Nein | Filtern nach Priorität (z.B. HIGH) |
assigneeId | Long | Nein | Filtern nach zugewiesenem Benutzer (ID) |
projectId | Long | Nein | Filtern nach Projekt (ID) |
archived | Boolean | Nein | Archivierte Aufgaben einschließen (Standard: false) |
search | String | Nein | Volltextsuche in Titel und Beschreibung (Gross-/Kleinschreibung egal) |
searchNotes | Boolean | Nein | Wenn true, wird die Suche auf Kommentare/Notizen erweitert (Standard: false) |
createdAfter | Instant | Nein | Nur Aufgaben, die nach diesem Zeitpunkt erstellt wurden (ISO 8601, UTC) |
createdBefore | Instant | Nein | Nur Aufgaben, die vor diesem Zeitpunkt erstellt wurden (ISO 8601, UTC) |
updatedAfter | Instant | Nein | Nur Aufgaben, die nach diesem Zeitpunkt aktualisiert wurden (ISO 8601, UTC) |
updatedBefore | Instant | Nein | Nur Aufgaben, die vor diesem Zeitpunkt aktualisiert wurden (ISO 8601, UTC) |
dueDateAfter | Instant | Nein | Nur Aufgaben mit Fälligkeitsdatum nach diesem Zeitpunkt (ISO 8601, UTC) |
dueDateBefore | Instant | Nein | Nur Aufgaben mit Fälligkeitsdatum vor diesem Zeitpunkt (ISO 8601, UTC) |
plannedStartAfter | Instant | Nein | Nur Aufgaben mit geplantem Start nach diesem Zeitpunkt (ISO 8601, UTC) |
plannedStartBefore | Instant | Nein | Nur Aufgaben mit geplantem Start vor diesem Zeitpunkt (ISO 8601, UTC) |
page | Integer | Nein | Seitennummer, nullbasiert (Standard: 0) |
size | Integer | Nein | Einträge pro Seite, max. 100 (Standard: 20) |
sort | String | Nein | Sortierung (Standard: createdAt,desc) |
Antwort (200 OK)
{
"data": [
{
"id": 42,
"ticketNumber": "PROJ-0042",
"title": "Webseite für ACME GmbH erstellen",
"description": "Komplette Neuentwicklung der Unternehmenswebseite.",
"status": "IN_PROGRESS",
"priority": "HIGH",
"progress": 45,
"assigneeId": 7,
"reviewerId": 3,
"ownerId": 2,
"projectId": 5,
"projectName": "Website-Relaunch ACME",
"dueDate": "2025-04-30T22:00:00Z",
"plannedStartDate": "2025-03-01T00:00:00Z",
"completedAt": null,
"timeBudgetMinutes": 4800,
"timeSpentMinutes": 1320,
"archived": false,
"tags": [
{ "id": 1, "name": "Frontend", "color": "#3F51B5" },
{ "id": 2, "name": "Prio", "color": "#F44336" }
],
"createdAt": "2025-01-15T08:30:00Z",
"updatedAt": "2025-02-28T14:15:00Z"
}
],
"pagination": {
"page": 0,
"size": 20,
"totalElements": 57,
"totalPages": 3
},
"meta": {
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-03-01T10:30:00Z"
}
}
cURL-Beispiel
curl -X GET "https://app.spiritflow.team/api/v1/tasks?status=IN_PROGRESS&priority=HIGH&page=0&size=20" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Mit Datumsfiltern und Suchbegriff (inkl. Kommentare)
curl -X GET "https://app.spiritflow.team/api/v1/tasks?search=Webseite&searchNotes=true&createdAfter=2025-01-01T00:00:00Z&dueDateBefore=2025-06-30T23:59:59Z" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Einzelne Aufgabe abrufen
GET /api/v1/tasks/{id}
Erforderlicher Scope: tasks:read
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
id | Long | ID der Aufgabe |
Antwort (200 OK)
{
"data": {
"id": 42,
"ticketNumber": "PROJ-0042",
"title": "Webseite für ACME GmbH erstellen",
"description": "Komplette Neuentwicklung der Unternehmenswebseite mit CMS-Anbindung.",
"status": "IN_PROGRESS",
"priority": "HIGH",
"progress": 45,
"assigneeId": 7,
"reviewerId": 3,
"ownerId": 2,
"projectId": 5,
"projectName": "Website-Relaunch ACME",
"dueDate": "2025-04-30T22:00:00Z",
"plannedStartDate": "2025-03-01T00:00:00Z",
"completedAt": null,
"timeBudgetMinutes": 4800,
"timeSpentMinutes": 1320,
"archived": false,
"tags": [
{ "id": 1, "name": "Frontend", "color": "#3F51B5" }
],
"createdAt": "2025-01-15T08:30:00Z",
"updatedAt": "2025-02-28T14:15:00Z"
},
"meta": {
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-03-01T10:30:00Z"
}
}
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 404 | NOT_FOUND | Aufgabe nicht gefunden oder gehoert nicht zu diesem Mandanten |
cURL-Beispiel
curl -X GET "https://app.spiritflow.team/api/v1/tasks/42" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Aufgabe nach Ticketnummer abrufen
GET /api/v1/tasks/by-ticket-number/{ticketNumber}
Erforderlicher Scope: tasks:read
Ticketnummern haben je nach Projekt ein eigenes Praefix, z.B. PROJ-0042 oder SPIR-0276. Die Antwort-Struktur ist identisch mit GET /api/v1/tasks/{id}.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
ticketNumber | String | Ticketnummer im Format PRAEFIX-NUMMER, z.B. PROJ-0042 |
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 404 | NOT_FOUND | Aufgabe mit dieser Ticketnummer nicht gefunden |
cURL-Beispiel
curl -X GET "https://app.spiritflow.team/api/v1/tasks/by-ticket-number/PROJ-0042" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Aufgabe erstellen
POST /api/v1/tasks
Erforderlicher Scope: tasks:write
Request-Body
| Feld | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
title | String | Ja | - | Titel der Aufgabe (max. 500 Zeichen) |
description | String | Nein | null | Beschreibung |
status | String | Nein | BACKLOG | Status (siehe Status-Werte oben). Alle Status ausser BACKLOG und DRAFT erfordern eine assigneeId. |
priority | String | Nein | MEDIUM | Priorität (siehe Prioritäts-Werte oben) |
assigneeId | Long | Nein | null | ID des zugewiesenen Benutzers |
reviewerId | Long | Nein | null | ID des Pruefers |
projectId | Long | Nein | null | ID des zugehoerigen Projekts |
dueDate | Instant | Nein | null | Fälligkeitsdatum (ISO 8601, UTC) |
plannedStartDate | Instant | Nein | null | Geplantes Startdatum (ISO 8601, UTC) |
timeBudgetMinutes | Integer | Nein | null | Zeitbudget in Minuten |
tagIds | Long[] | Nein | [] | Liste der Tag-IDs |
Beispiel-Request
{
"title": "Angebot für Mustermann GmbH erstellen",
"description": "Detailliertes Angebot für die Neugestaltung der Firmenwebseite inkl. CMS.",
"status": "PLANNED",
"priority": "HIGH",
"assigneeId": 7,
"reviewerId": 3,
"projectId": 5,
"dueDate": "2025-04-15T22:00:00Z",
"plannedStartDate": "2025-03-10T00:00:00Z",
"timeBudgetMinutes": 480,
"tagIds": [1, 4]
}
Antwort (201 Created)
{
"data": {
"id": 58,
"ticketNumber": "PROJ-0058",
"title": "Angebot für Mustermann GmbH erstellen",
"description": "Detailliertes Angebot für die Neugestaltung der Firmenwebseite inkl. CMS.",
"status": "PLANNED",
"priority": "HIGH",
"progress": null,
"assigneeId": 7,
"reviewerId": 3,
"ownerId": 2,
"projectId": 5,
"projectName": "Website-Relaunch ACME",
"dueDate": "2025-04-15T22:00:00Z",
"plannedStartDate": "2025-03-10T00:00:00Z",
"completedAt": null,
"timeBudgetMinutes": 480,
"timeSpentMinutes": null,
"archived": false,
"tags": [
{ "id": 1, "name": "Frontend", "color": "#3F51B5" },
{ "id": 4, "name": "Angebot", "color": "#4CAF50" }
],
"createdAt": "2025-03-01T10:30:00Z",
"updatedAt": "2025-03-01T10:30:00Z"
},
"meta": {
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-03-01T10:30:00Z"
}
}
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 400 | VALIDATION_ERROR | Pflichtfeld fehlt oder ungültig |
| 404 | NOT_FOUND | Referenziertes Projekt, Benutzer oder Tag nicht gefunden |
cURL-Beispiel
curl -X POST "https://app.spiritflow.team/api/v1/tasks" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"title": "Angebot für Mustermann GmbH erstellen",
"priority": "HIGH",
"assigneeId": 7,
"dueDate": "2025-04-15T22:00:00Z"
}'
Aufgabe aktualisieren
PUT /api/v1/tasks/{id}
Erforderlicher Scope: tasks:write
Alle Felder im Request-Body sind optional. Nur übermittelte Felder werden aktualisiert. Ein Feld auf null zu setzen entfernt den Wert (sofern das Feld nullable ist).
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
id | Long | ID der Aufgabe |
Request-Body (alle Felder optional)
| Feld | Typ | Beschreibung |
|---|---|---|
title | String | Neuer Titel (max. 500 Zeichen) |
description | String | Neue Beschreibung (null = löschen) |
status | String | Neuer Status |
priority | String | Neue Priorität |
assigneeId | Long | Neue Zuweisung (null = entfernen) |
reviewerId | Long | Neuer Pruefer (null = entfernen) |
projectId | Long | Neues Projekt (null = aus Projekt entfernen) |
dueDate | Instant | Neues Fälligkeitsdatum (null = entfernen) |
plannedStartDate | Instant | Neues geplantes Startdatum (null = entfernen) |
timeBudgetMinutes | Integer | Neues Zeitbudget in Minuten |
progress | Integer | Fortschritt in Prozent (0-100) |
tagIds | Long[] | Tag-IDs (ersetzt alle bisherigen Tags vollständig) |
Beispiel-Request
{
"status": "IN_PROGRESS",
"progress": 25,
"assigneeId": 8
}
Antwort (200 OK)
Aktualisiertes Aufgaben-Objekt (gleiche Struktur wie beim Abrufen einer einzelnen Aufgabe).
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 400 | VALIDATION_ERROR | Ungültige Feldwerte |
| 404 | NOT_FOUND | Aufgabe nicht gefunden |
cURL-Beispiel
curl -X PUT "https://app.spiritflow.team/api/v1/tasks/42" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"status": "IN_PROGRESS",
"progress": 25
}'
Aufgabe löschen (archivieren)
DELETE /api/v1/tasks/{id}
Erforderlicher Scope: tasks:write
Aufgaben werden nicht endgültig gelöscht, sondern archiviert. Archivierte Aufgaben können weiterhin mit dem Query-Parameter archived=true abgerufen werden.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
id | Long | ID der Aufgabe |
Antwort
204 No Content
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 404 | NOT_FOUND | Aufgabe nicht gefunden |
cURL-Beispiel
curl -X DELETE "https://app.spiritflow.team/api/v1/tasks/42" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Aufgaben-Status aktualisieren
PATCH /api/v1/tasks/{id}/status
PUT /api/v1/tasks/{id}/status
Erforderlicher Scope: tasks:write
Dedizierter Endpunkt für reine Status-Aenderungen. Wenn der Status auf READY_FOR_REVIEW gesetzt wird und noch kein Pruefer zugewiesen ist, muss reviewerId mitgeliefert werden.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
id | Long | ID der Aufgabe |
Request-Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status | String | Ja | Neuer Status (darf nicht leer sein) |
reviewerId | Long | Nein | ID des Pruefers. Erforderlich wenn Status auf READY_FOR_REVIEW gesetzt wird und noch kein Pruefer zugewiesen ist. |
Beispiel-Request (einfacher Status-Wechsel)
{
"status": "COMPLETED"
}
Beispiel-Request (mit Pruefer-Zuweisung)
{
"status": "READY_FOR_REVIEW",
"reviewerId": 3
}
Antwort (200 OK)
Aktualisiertes Aufgaben-Objekt (gleiche Struktur wie beim Abrufen einer einzelnen Aufgabe).
cURL-Beispiel
curl -X PATCH "https://app.spiritflow.team/api/v1/tasks/42/status" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"status": "COMPLETED"}'
Bearbeiter aktualisieren
PATCH /api/v1/tasks/{id}/assignee
PUT /api/v1/tasks/{id}/assignee
Erforderlicher Scope: tasks:write
Dedizierter Endpunkt für die Zuweisung oder Aufhebung eines Bearbeiters. Um die Zuweisung zu entfernen, wird assigneeId auf null gesetzt.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
id | Long | ID der Aufgabe |
Request-Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
assigneeId | Long | Nein | ID des neuen Bearbeiters. null hebt die Zuweisung auf. |
Beispiel-Request (Bearbeiter setzen)
{
"assigneeId": 9
}
Beispiel-Request (Zuweisung aufheben)
{
"assigneeId": null
}
Antwort (200 OK)
Aktualisiertes Aufgaben-Objekt (gleiche Struktur wie beim Abrufen einer einzelnen Aufgabe).
cURL-Beispiel
# Bearbeiter setzen
curl -X PATCH "https://app.spiritflow.team/api/v1/tasks/42/assignee" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"assigneeId": 9}'
# Zuweisung aufheben
curl -X PATCH "https://app.spiritflow.team/api/v1/tasks/42/assignee" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"assigneeId": null}'
Kommentare (Notes)
Aufgaben können Kommentare haben. Es gibt drei Typen: normale Kommentare (COMMENT), Feldbericht-Einträge (FIELD_REPORT) und System-Einträge (SYSTEM). Über die API können COMMENT und FIELD_REPORT erstellt werden.
Kommentare abrufen
GET /api/v1/tasks/{id}/notes
Erforderlicher Scope: tasks:read
Gibt alle Kommentare einer Aufgabe zurück, sortiert nach Erstellungsdatum (neueste zuerst).
Antwort-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
id | number | Eindeutige ID des Kommentars |
content | string | Inhalt des Kommentars |
noteType | string | Typ: COMMENT, FIELD_REPORT oder SYSTEM |
authorId | number | ID des Autors |
authorName | string | Anzeigename des Autors |
createdAt | string | Erstellungszeitpunkt (ISO 8601, UTC) |
updatedAt | string | Letzte Aktualisierung (ISO 8601, UTC) |
cURL-Beispiel
curl "https://app.spiritflow.team/api/v1/tasks/42/notes" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Kommentar erstellen
POST /api/v1/tasks/{id}/notes
Erforderlicher Scope: tasks:write
Erstellt einen neuen Kommentar zu einer Aufgabe. Als Autor wird der Inhaber des API-Keys eingetragen.
Request-Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
content | string | Ja | Inhalt des Kommentars |
noteType | string | Nein | Typ des Kommentars (Standard: COMMENT). Erlaubt: COMMENT, FIELD_REPORT |
cURL-Beispiel
curl -X POST "https://app.spiritflow.team/api/v1/tasks/42/notes" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"content": "Review abgeschlossen, sieht gut aus!"}'
Anhänge (Attachments)
Dateien können über die API an Aufgaben angehaengt, aufgelistet und heruntergeladen werden. Alle Endpunkte verwenden den Basis-Pfad /api/v1/tasks/{taskId}/attachments.
Anhänge auflisten
GET /api/v1/tasks/{taskId}/attachments
Erforderlicher Scope: tasks:read
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
taskId | Long | ID der Aufgabe |
Antwort-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
id | number | Eindeutige ID des Anhangs |
fileName | string | Angezeigter Dateiname |
fileSize | number | Dateigröße in Bytes |
contentType | string | MIME-Typ der Datei |
attachedBy | string | Anzeigename des Uploaders (kann null sein) |
createdAt | string | Zeitpunkt des Hochladens (ISO 8601, UTC) |
cURL-Beispiel
curl "https://app.spiritflow.team/api/v1/tasks/42/attachments" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Anhang herunterladen
GET /api/v1/tasks/{taskId}/attachments/{attachmentId}/download
Erforderlicher Scope: tasks:read
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
taskId | Long | ID der Aufgabe |
attachmentId | Long | ID des Anhangs |
Antwort (200 OK)
Die Datei als Binaerdaten. Die Antwort enthält folgende Header:
| Header | Beispielwert |
|---|---|
Content-Type | application/pdf (abhaengig vom Dateityp) |
Content-Disposition | attachment; filename="rechnung.pdf" |
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 404 | NOT_FOUND | Aufgabe oder Anhang nicht gefunden |
cURL-Beispiel
curl "https://app.spiritflow.team/api/v1/tasks/42/attachments/7/download" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-o "heruntergeladene-datei.pdf"
Anhang hochladen
POST /api/v1/tasks/{taskId}/attachments
Erforderlicher Scope: tasks:write
Content-Type: multipart/form-data
Dateien werden vor dem Speichern automatisch auf Viren geprüft (ClamAV). Bei Duplikaten wird der vorhandene Speicher wiederverwendet (Hash-basierte Deduplizierung). Die maximale Dateigröße und das Speicherkontingent richten sich nach dem Lizenzplan des Mandanten.
Pfad-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
taskId | Long | ID der Aufgabe |
Formular-Felder
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
file | File | Ja | Die hochzuladende Datei |
description | String | Nein | Optionale Beschreibung der Datei |
Antwort (201 Created)
{
"data": {
"id": 7,
"fileName": "angebot.pdf",
"fileSize": 204800,
"contentType": "application/pdf",
"attachedBy": "Max Mustermann",
"createdAt": "2025-03-01T10:30:00Z"
},
"meta": {
"requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-03-01T10:30:00Z"
}
}
Fehler-Codes
| HTTP-Status | Code | Beschreibung |
|---|---|---|
| 400 | BAD_REQUEST | Datei zu gross oder Speicherkontingent erschoepft |
| 404 | NOT_FOUND | Aufgabe nicht gefunden |
| 422 | VIRUS_DETECTED | Datei wurde als infiziert erkannt und abgelehnt |
| 503 | VIRUS_SCAN_FAILED | Virenscanner ist nicht verfügbar |
| 503 | VIRUS_SCAN_TIMEOUT | Virenscanner hat nicht rechtzeitig geantwortet |
cURL-Beispiel
curl -X POST "https://app.spiritflow.team/api/v1/tasks/42/attachments" \
-H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "file=@/pfad/zur/datei.pdf" \
-F "description=Angebot für Kunde"