ProjectTimeReport
This method will get a single ProjectTimeReport Object with the given id
GET/api/invoice/projecttimereports/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single ProjectTimeReportProjectTimeReport2
Show fields (9)
idintegerPrimary key of the project time report. Internal ID.
projectCRMProject12Project the time report belongs to.
Show fields (19)
idintegerPrimary key of the project. Internal ID.
namestringName of the project.
closedstring (date-time)Time the project was closed.
billedstring (date-time)Time the project was billed.
numberstringNumber of the project.
startstring (date-time)Start of the project.
endstring (date-time)End of the project.
descriptionstringDescription of the project.
companyCRMCompanyCompany the project belongs to.
internal_main_contactUser14Internal login user who is the main contact.
categoryCRMProjectCategoryCategory of the project.
archivedbooleanThe project is archived.
visible_for_customerbooleanThe project is visible in the customer app.
name_for_customerstringName of the project shown to customers.
invoice_emailstringE-mail address for invoices of the project.
time_report_emailstringE-mail address for time reports of the project.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
invoiceInvoice16Invoice the time report was billed on.
Show fields (38)
idintegerPrimary key of the invoice document. Internal ID.
tokenstringToken that identifies the document for public access.
numberintegerRunning document number.
manual_number_prefixstringPrefix of a manually entered document number.
manual_numberintegerManually entered document number.
number_stringstringDocument number as displayed to users.
generation_datestring (date-time)Date the document was generated.
number_datestring (date-time)Date used for the document number.
messagestringMessage printed on the document.
currencystringCurrency of the document.
namestringName of the document.
due_datestring (date-time)Due date of the document.
netto_valuenumber (float)Net total of the document.
brutto_valuenumber (float)Gross total of the document.
tax_valuenumber (float)Total tax amount of the document.
taxTaxrequiredTax rate applied to the document.
linked_number_titlestringTitle of the linked document number.
linked_numberstringNumber of the linked document.
statusstringStatus of the document.
previous_statusstringStatus before the last change.
status_updatedstring (date-time)Point in time the status was last changed.
archivedbooleanWhether the document is archived.
last_pdf_exportstring (date-time)Point in time the PDF was last exported.
last_status_exportstringStatus at the last export.
search_stringstringText that the entity can be searched by.
accounting_typeAccountingTyperequiredAccounting type of the invoice.
payment_typePaymentTypePayment type of the invoice.
payment_goalPaymentGoalPayment term of the invoice.
expense_categoryExpenseCategory10EÜR-Kategorie für diese Rechnung (Einnahmen-Zuordnung) Wenn nicht gesetzt, wird die Default-Kategorie des AccountingTypes verwendet
buyerInvoiceBuyer16Buyer of the invoice.
payment_datestring (date-time)Date the invoice was paid.
vat_categorystringDer umsatzsteuerliche Sachverhalt. Der Steuersatz sagt nicht, in welche Zeile der Voranmeldung ein Umsatz gehört. Null Prozent stehen an einer innergemeinschaftlichen Lieferung (Kennzahl 41), an einer Ausfuhr (43), an einer Leistung nach § 13b UStG (60) und an einem steuerfreien Umsatz nach § 4 UStG (48) - vier verschiedene Zeilen, derselbe Steuersatz. Hier ist die einzige Stelle, an der jemand das weiss: beim Schreiben der Rechnung ist bekannt, ob der Kunde eine USt-IdNr. hat und wohin die Ware geht. Später ist es nicht mehr rekonstruierbar. Ohne Angabe der Regelfall - alles andere war bisher nicht erfassbar.
is_payment_date_from_ext_servicebooleanThe payment date comes from an external service.
direct_debit_exportedbooleanThe invoice was exported for direct debit.
cancel_datestring (date-time)Date the invoice was canceled.
cancel_textstringText of the cancellation.
start_datestring (date-time)Start of the billed period.
end_datestring (date-time)End of the billed period.
itemsarray<ProjectTimeReportItem2>Items of the time report.
Show fields (7)
idintegerPrimary key of the project time report item. Internal ID.
ticketCustomerTicket5Ticket the item was created from.
project_time_reportProjectTimeReport2Project time report the item belongs to.
namestringName of the ticket or task.
statusstringStatus of the ticket or task.
time_string_billablestringBillable time as text.
time_string_not_billablestringNon-billable time as text.
time_billed_on_ticket_closebooleanTime is billed when the ticket is closed.
startstring (date-time)Start of the reported period.
endstring (date-time)End of the reported period.
time_string_billablestringBillable time as text.
time_string_not_billablestringNon-billable time as text.
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/projecttimereports/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/projecttimereports/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/projecttimereports/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/projecttimereports/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/projecttimereports/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/projecttimereports/42")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/projecttimereports/42"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/project_time_report_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ProjectTimeReportController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"project": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"invoice_email": "lena.hartmann@example.org",
"time_report_email": "lena.hartmann@example.org",
"closed": "2026-10-15T09:30:00+02:00",
"billed": "2026-10-15T09:30:00+02:00",
"number": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
},
"invoice": {
"tax": {
"name": "Beispiel",
"id": 42,
"value": 1.5,
"deleted": true,
"global_default": true,
"datev_tax_key": 1
},
"accounting_type": {
"name": "Beispiel",
"type": "string",
"id": 42,
"cancelled_name": "Beispiel",
"deleted": true
},
"id": 42,
"currency": "EUR",
"name": "Beispiel",
"linked_number_title": "Beispiel",
"cancel_text": "Text",
"token": "string",
"number": 1,
"manual_number_prefix": "string"
},
"items": [
{
"id": 42,
"name": "Beispiel",
"status": "string",
"time_string_billable": "string",
"time_string_not_billable": "string"
}
],
"time_billed_on_ticket_close": true,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"time_string_billable": "string",
"time_string_not_billable": "string"
}This method will get all ProjectTimeReport Objects
GET/api/invoice/projecttimereports
Query parameters
idstring | |
projectstring | |
invoicestring | |
timeBilledOnTicketCloseboolean | |
startstring | |
endstring | |
timeStringBillablestring | |
timeStringNotBillablestring | |
searchStringstring | text to search for in the list |
orderFieldNamestring | name of the order field |
orderFieldSortstring | sorting modeAllowed: DESCASC |
pageinteger | page of the list |
pageSizeinteger | number of entries for each page |
withMaxPageNumberstring | returns the number of pages available as a header if this is set |
Responses
200Returns a list of ProjectTimeReport objectsarray<ProjectTimeReport3>
Show fields (8)
idintegerPrimary key of the project time report. Internal ID.
projectCRMProjectProject the time report belongs to.
Show fields (19)
idintegerPrimary key of the project. Internal ID.
namestringName of the project.
closedstring (date-time)Time the project was closed.
billedstring (date-time)Time the project was billed.
numberstringNumber of the project.
startstring (date-time)Start of the project.
endstring (date-time)End of the project.
descriptionstringDescription of the project.
companyCRMCompanyCompany the project belongs to.
internal_main_contactUser14Internal login user who is the main contact.
categoryCRMProjectCategoryCategory of the project.
archivedbooleanThe project is archived.
visible_for_customerbooleanThe project is visible in the customer app.
name_for_customerstringName of the project shown to customers.
invoice_emailstringE-mail address for invoices of the project.
time_report_emailstringE-mail address for time reports of the project.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
invoiceInvoiceInvoice the time report was billed on.
Show fields (38)
idintegerPrimary key of the invoice document. Internal ID.
tokenstringToken that identifies the document for public access.
numberintegerRunning document number.
manual_number_prefixstringPrefix of a manually entered document number.
manual_numberintegerManually entered document number.
number_stringstringDocument number as displayed to users.
generation_datestring (date-time)Date the document was generated.
number_datestring (date-time)Date used for the document number.
messagestringMessage printed on the document.
currencystringCurrency of the document.
namestringName of the document.
due_datestring (date-time)Due date of the document.
netto_valuenumber (float)Net total of the document.
brutto_valuenumber (float)Gross total of the document.
tax_valuenumber (float)Total tax amount of the document.
taxTaxrequiredTax rate applied to the document.
linked_number_titlestringTitle of the linked document number.
linked_numberstringNumber of the linked document.
statusstringStatus of the document.
previous_statusstringStatus before the last change.
status_updatedstring (date-time)Point in time the status was last changed.
archivedbooleanWhether the document is archived.
last_pdf_exportstring (date-time)Point in time the PDF was last exported.
last_status_exportstringStatus at the last export.
search_stringstringText that the entity can be searched by.
accounting_typeAccountingTyperequiredAccounting type of the invoice.
payment_typePaymentTypePayment type of the invoice.
payment_goalPaymentGoalPayment term of the invoice.
expense_categoryExpenseCategory10EÜR-Kategorie für diese Rechnung (Einnahmen-Zuordnung) Wenn nicht gesetzt, wird die Default-Kategorie des AccountingTypes verwendet
buyerInvoiceBuyerBuyer of the invoice.
payment_datestring (date-time)Date the invoice was paid.
vat_categorystringDer umsatzsteuerliche Sachverhalt. Der Steuersatz sagt nicht, in welche Zeile der Voranmeldung ein Umsatz gehört. Null Prozent stehen an einer innergemeinschaftlichen Lieferung (Kennzahl 41), an einer Ausfuhr (43), an einer Leistung nach § 13b UStG (60) und an einem steuerfreien Umsatz nach § 4 UStG (48) - vier verschiedene Zeilen, derselbe Steuersatz. Hier ist die einzige Stelle, an der jemand das weiss: beim Schreiben der Rechnung ist bekannt, ob der Kunde eine USt-IdNr. hat und wohin die Ware geht. Später ist es nicht mehr rekonstruierbar. Ohne Angabe der Regelfall - alles andere war bisher nicht erfassbar.
is_payment_date_from_ext_servicebooleanThe payment date comes from an external service.
direct_debit_exportedbooleanThe invoice was exported for direct debit.
cancel_datestring (date-time)Date the invoice was canceled.
cancel_textstringText of the cancellation.
start_datestring (date-time)Start of the billed period.
end_datestring (date-time)End of the billed period.
time_billed_on_ticket_closebooleanTime is billed when the ticket is closed.
startstring (date-time)Start of the reported period.
endstring (date-time)End of the reported period.
time_string_billablestringBillable time as text.
time_string_not_billablestringNon-billable time as text.
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/projecttimereports \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/projecttimereports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/projecttimereports"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/projecttimereports', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/projecttimereports"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/projecttimereports")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/projecttimereports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/project_time_report_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ProjectTimeReportController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"project": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"invoice_email": "lena.hartmann@example.org",
"time_report_email": "lena.hartmann@example.org",
"closed": "2026-10-15T09:30:00+02:00",
"billed": "2026-10-15T09:30:00+02:00",
"number": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
},
"invoice": {
"id": 42,
"currency": "EUR",
"name": "Beispiel",
"linked_number_title": "Beispiel",
"cancel_text": "Text",
"token": "string",
"number": 1,
"manual_number_prefix": "string",
"manual_number": 1,
"number_string": "string"
},
"time_billed_on_ticket_close": true,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"time_string_billable": "string",
"time_string_not_billable": "string"
}
]This method will print a ProjectTimeReport as PDF
GET/api/invoice/projecttimereports/{id}/pdf
Path parameters
idrequiredstring |
Responses
default
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/projecttimereports/42/pdf"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/project_time_report_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ProjectTimeReportController.getDownloadLinkPdf('42');
print(result);