Projekte
/api/v1/projectsNeueste zuerst. Filter nach Status und Kunde.
Berechtigung: projects:read
Query-Parameter
status"active" | "done" | "archived"nur Projekte mit diesem StatuscontactIdstringnur Projekte dieses Kundenmax. 128 ZeichenlimitintegerAnzahl Einträge (1–100)1–100 · Standard: 25cursorstring`nextCursor` der vorherigen Seitemax. 500 Zeichen
Antwort 200
object"list"PflichtdataArray<Project>PflichtidstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
hasMorebooleanPflichtnextCursorstring | nullPflicht
curl 'https://www.debt-flow.io/api/v1/projects' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": null,
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": null,
"name": null,
"hourlyRateCents": null,
"billable": null,
"done": null
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}
],
"hasMore": false,
"nextCursor": "string"
}/api/v1/projectsKunde (contactId), Budget in Stunden oder Euro, Stundensatz und optionale Aufgaben. Die Projektnummer kommt aus dem Nummernkreis project (abschaltbar mit assignNumber: false). Löst project.created aus.
Berechtigung: projects:write
Header
Idempotency-KeystringEindeutiger Schlüssel (8–255 Zeichen). Wiederholte Anfragen mit gleichem Schlüssel liefern 24 h lang dieselbe Antwort.max. 255 Zeichen
Body (JSON) · ProjectCreate
namestringPflichtmax. 160 Zeichendescriptionstring | nullmax. 2000 ZeichencontactIdstring | nullmax. 128 Zeichenstatus"active" | "done" | "archived"Standard: "active"budgetProjectBudget | nullhourlyRateCentsinteger | nullStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanStandard: truestartDatestring (date) | nullDatum (YYYY-MM-DD)endDatestring (date) | nullDatum (YYYY-MM-DD)tasksArray<object>namestringPflichtmax. 120 ZeichenhourlyRateCentsinteger | nullStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billableboolean | null
assignNumberbooleanProjektnummer aus dem Nummernkreis vergebenStandard: true
Antwort 201 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/projects' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"description": "string",
"contactId": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": true,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"name": "string",
"hourlyRateCents": 0,
"billable": false
}
],
"assignNumber": true
}'{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/projects/{id}Berechtigung: projects:read
Pfadparameter
idstringPflichtID der Ressourcemax. 128 Zeichen
Antwort 200 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/projects/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/projects/{id}Nur übergebene Felder werden geändert. status: "archived" archiviert (Ereignis project.archived). Ein neuer Kunde wird auf noch nicht abgerechnete Zeiteinträge übertragen.
Berechtigung: projects:write
Pfadparameter
idstringPflichtID der Ressourcemax. 128 Zeichen
Body (JSON) · ProjectUpdate
namestringmax. 160 Zeichendescriptionstring | nullmax. 2000 ZeichencontactIdstring | nullmax. 128 Zeichenstatus"active" | "done" | "archived"budgetProjectBudget | nullhourlyRateCentsinteger | nullStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanstartDatestring (date) | nullDatum (YYYY-MM-DD)endDatestring (date) | nullDatum (YYYY-MM-DD)
Antwort 200 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl -X PATCH 'https://www.debt-flow.io/api/v1/projects/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"description": "string",
"contactId": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01"
}'{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/projects/{id}Nur Projekte ohne Zeiteinträge (sonst 409 project_has_entries – stattdessen archivieren).
Berechtigung: projects:write
Pfadparameter
idstringPflichtID der Ressourcemax. 128 Zeichen
Antwort 204
Erfolg, keine Antwort
curl -X DELETE 'https://www.debt-flow.io/api/v1/projects/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"/api/v1/projects/{id}/summaryErfasste, abrechenbare, offene und abgerechnete Zeiten und Beträge über die gesamte Laufzeit, Budgetverbrauch und Aufteilung nach Aufgaben. Beträge = exakte Minuten × Stundensatz (ohne Abrechnungstakt).
Berechtigung: projects:read, time:read
Pfadparameter
idstringPflichtID der Ressourcemax. 128 Zeichen
Antwort 200 · ProjectSummary
projectIdstringPflichtentriesintegerPflicht-9007199254740991–9007199254740991minutesintegerPflicht-9007199254740991–9007199254740991billableMinutesintegerPflicht-9007199254740991–9007199254740991nonBillableMinutesintegerPflicht-9007199254740991–9007199254740991unbilledMinutesintegerPflicht-9007199254740991–9007199254740991invoicedMinutesintegerPflicht-9007199254740991–9007199254740991billableAmountCentsintegerPflichtabrechenbare Zeit × Stundensatz-9007199254740991–9007199254740991unbilledAmountCentsintegerPflichtnoch nicht abgerechnet-9007199254740991–9007199254740991invoicedAmountCentsintegerPflicht-9007199254740991–9007199254740991missingRateMinutesintegerPflichtabrechenbare Minuten ohne Stundensatz (nicht im Betrag enthalten)-9007199254740991–9007199254740991firstDatestring (date) | nullPflichtDatum (YYYY-MM-DD)lastDatestring (date) | nullPflichtDatum (YYYY-MM-DD)budgetProjectBudget | nullPflichtbudgetUsedPercentnumber | nullPflichtverbrauchtes Budget in Prozent (Stunden: alle erfassten; Betrag: abrechenbarer Betrag)budgetRemainingnumber | nullPflichtRest in Stunden bzw. CentbyTaskArray<TimeSummaryRow>PflichtkeystringPflichtlabelstringPflichtentriesintegerPflicht-9007199254740991–9007199254740991minutesintegerPflicht-9007199254740991–9007199254740991billableMinutesintegerPflicht-9007199254740991–9007199254740991nonBillableMinutesintegerPflicht-9007199254740991–9007199254740991unbilledMinutesintegerPflicht-9007199254740991–9007199254740991invoicedMinutesintegerPflicht-9007199254740991–9007199254740991billableAmountCentsintegerPflichtabrechenbare Zeit × Stundensatz-9007199254740991–9007199254740991unbilledAmountCentsintegerPflichtnoch nicht abgerechnet-9007199254740991–9007199254740991invoicedAmountCentsintegerPflicht-9007199254740991–9007199254740991missingRateMinutesintegerPflichtabrechenbare Minuten ohne Stundensatz (nicht im Betrag enthalten)-9007199254740991–9007199254740991
curl 'https://www.debt-flow.io/api/v1/projects/ID/summary' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"projectId": "string",
"entries": 0,
"minutes": 0,
"billableMinutes": 0,
"nonBillableMinutes": 0,
"unbilledMinutes": 0,
"invoicedMinutes": 0,
"billableAmountCents": 0,
"unbilledAmountCents": 0,
"invoicedAmountCents": 0,
"missingRateMinutes": 0,
"firstDate": "2026-11-01",
"lastDate": "2026-11-01",
"budget": {
"type": "hours",
"hours": 0
},
"budgetUsedPercent": 0,
"budgetRemaining": 0,
"byTask": [
{
"key": "string",
"label": "string",
"entries": 0,
"minutes": 0,
"billableMinutes": 0,
"nonBillableMinutes": 0,
"unbilledMinutes": 0,
"invoicedMinutes": 0,
"billableAmountCents": 0,
"unbilledAmountCents": 0,
"invoicedAmountCents": 0,
"missingRateMinutes": 0
}
]
}/api/v1/projects/{id}/tasksAufgaben sind optional. Eigener Stundensatz/abrechenbar überschreibt die Projektwerte. Antwort: das geänderte Projekt.
Berechtigung: projects:write
Pfadparameter
idstringPflichtID der Ressourcemax. 128 Zeichen
Header
Idempotency-KeystringEindeutiger Schlüssel (8–255 Zeichen). Wiederholte Anfragen mit gleichem Schlüssel liefern 24 h lang dieselbe Antwort.max. 255 Zeichen
Body (JSON) · ProjectTaskCreate
namestringPflichtmax. 120 ZeichenhourlyRateCentsinteger | nullStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billableboolean | null
Antwort 201 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/projects/ID/tasks' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"hourlyRateCents": 0,
"billable": false
}'{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/projects/{id}/tasks/{taskId}Name, Stundensatz, abrechenbar oder erledigt. Antwort: das geänderte Projekt.
Berechtigung: projects:write
Pfadparameter
idstringPflichtmax. 128 ZeichentaskIdstringPflichtID der Aufgabemax. 128 Zeichen
Body (JSON) · ProjectTaskUpdate
namestringmax. 120 ZeichenhourlyRateCentsinteger | nullStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billableboolean | nulldoneboolean
Antwort 200 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl -X PATCH 'https://www.debt-flow.io/api/v1/projects/ID/tasks/TASKID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}'{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/projects/{id}/tasks/{taskId}Nur Aufgaben ohne Zeiteinträge (sonst 409 task_has_entries – stattdessen als erledigt markieren). Antwort: das geänderte Projekt.
Berechtigung: projects:write
Pfadparameter
idstringPflichtmax. 128 ZeichentaskIdstringPflichtID der Aufgabemax. 128 Zeichen
Antwort 200 · Project
idstringPflichtnumberstring | nullPflichtProjektnummer aus dem Nummernkreis "project"namestringPflichtdescriptionstring | nullPflichtcontactIdstring | nullPflichtKunde (Kontakt-ID)contactNamestring | nullPflichtAnzeigename des Kundenstatus"active" | "done" | "archived"PflichtbudgetProjectBudget | nullPflichthourlyRateCentsinteger | nullPflichtStundensatz in Cent (netto bzw. brutto je nach Rechnung)0–10000000billablebooleanPflichtStandard für neue ZeiteinträgestartDatestring (date) | nullPflichtDatum (YYYY-MM-DD)endDatestring (date) | nullPflichtDatum (YYYY-MM-DD)tasksArray<ProjectTask>PflichtidstringPflichtnamestringPflichthourlyRateCentsinteger | nullPflichtabweichender Stundensatz; null = Satz des Projekts0–10000000billableboolean | nullPflichtnull = wie ProjektdonebooleanPflicht
archivedAtstring (date-time) | nullPflichtZeitpunkt (ISO 8601)createdAtstring (date-time)PflichtZeitpunkt (ISO 8601)updatedAtstring (date-time)PflichtZeitpunkt (ISO 8601)
curl -X DELETE 'https://www.debt-flow.io/api/v1/projects/ID/tasks/TASKID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "string",
"number": "string",
"name": "string",
"description": "string",
"contactId": "string",
"contactName": "string",
"status": "active",
"budget": {
"type": "hours",
"hours": 0
},
"hourlyRateCents": 0,
"billable": false,
"startDate": "2026-11-01",
"endDate": "2026-11-01",
"tasks": [
{
"id": "string",
"name": "string",
"hourlyRateCents": 0,
"billable": false,
"done": false
}
],
"archivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}