ProductLabel
Public JSON endpoint: producer guarantee, EU GARAN eligibility and availability + public URL of every label type. Also answers for unknown products (found=false, all labels unavailable) with the URLs still pointing at the show endpoint, so a shop can embed them blindly.
GET/api/invoice/predefinedbillingitems/label/info/{identifier}
Path parameters
identifierrequiredstring | Any unique product identifier |
Responses
default
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/predefinedbillingitems/label/info/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/billing_product_label_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 BillingProductLabelController.getInfo('42');
if (result.success) {
print(result.data);
}Public image endpoint: serves the label of the given type for the product identified by any unique identifier (id, short_identifier, slug, SKU, barcode, import ids). An ECS product is found by both of its import ids, `ecs_118760` and `ecs_{source_system}_item_118760`. A trailing file extension (.png, .jpg, .svg, ...) is ignored, so the URL may look like an image file.
GET/api/invoice/predefinedbillingitems/label/{labelType}/{identifier}
Fallback when the product or its label is missing or not virus checked yet
(?fallback=default|transparent|404, default default): the default configured in
billing_product_label_default_<labelType> (attachment download link -> file, http(s) URL ->
302), otherwise a transparent 1x1 PNG. 404 only on request.
Path parameters
labelTyperequiredstring | energy_label | garan_label | garan_label_pictogram (aliases: energy, garan, garan_pictogram, pictogram, nested) |
identifierrequiredstring | Any unique product identifier, an image file extension may be appended |
Query parameters
fallbackstring | default | transparent | 404 |
Responses
default
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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/predefinedbillingitems/label/42/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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final response = await http.get(
Uri.parse('https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/label/42/42'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);Public: the GARAN pictogram ("nested label") pre-rendered from the official EU template for a given number of years - independent of a product, e.g. for a shop that knows the years itself. `/garan_pictogram/5`, `/garan_pictogram/5.svg`, `/garan_pictogram/10.png`.
GET/api/invoice/product_label/garan_pictogram/{years}
Available for 3, 4, 5, 6, 7, 8, 9, 10, 15 and 20 years; anything else is a 404.
Path parameters
yearsrequiredstring | Producer guarantee in whole years (3-10, 15, 20), optional .png or .svg extension |
Responses
default
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/product_label/garan_pictogram/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/product_label/garan_pictogram/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/product_label/garan_pictogram/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/product_label/garan_pictogram/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/product_label/garan_pictogram/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/product_label/garan_pictogram/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/product_label/garan_pictogram/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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final response = await http.get(
Uri.parse('https://your-instance.iw-erp.de/api/invoice/product_label/garan_pictogram/42'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);Upload (replace) one label of a product. Multipart form `attachment[file]`, optional `attachment[producerGuaranteeYears]` (e.g. "5" or "2,5").
POST/api/attachments/product_labels/{identifier}/{labelType}
Path parameters
identifierrequiredstring | Any unique product identifier |
labelTyperequiredstring | energy_label | garan_label | garan_label_pictogram |
Request body multipart/form-data
attachment[file]string (binary)Label file: png, jpeg, webp, svg, gif or pdf, max. 20 MB
attachment[producerGuaranteeYears]stringOptional producer guarantee in years, whole or .5 steps
Responses
200Uploads a product label and returns the productPredefinedBillingItem
Show fields (53)
idintegerPrimary key of the mapped billing item. Internal ID.
namestringrequiredName of the billing item.
descriptionstringrequiredDescription of the billing item shown to the customer.
internal_descriptionstringInternal description of the billing item, not shown to the customer.
fixed_hoursnumber (float)Fixed number of hours billed.
fixed_pricenumber (float)Fixed price billed.
fixed_price_base_unitnumber (float)Base unit for the fixed price.
price_fixed_hoursnumber (float)Price for the fixed hours.
price_additional_hoursnumber (float)Price for each additional hour.
name_additional_hoursstringName of the additional hours item.
description_additional_hoursstringDescription of the additional hours item.
time_billed_on_ticket_closebooleanWhether the time is billed when the ticket is closed.
billing_typeBillingItemTypeBilling item type.
Show fields (12)
idintegerPrimary key of the billing item type. Internal ID.
namestringName of the billing item type.
fixed_price_addon_one_namestringName of the first fixed price addon.
fixed_price_addon_two_namestringName of the second fixed price addon.
fixed_price_addon_one_name_personstringName of the first fixed price addon for persons.
fixed_price_addon_two_name_personstringName of the second fixed price addon for persons.
categorystringrequiredCategory of the billing item type.
Allowed:
projectsubscriptionbookableeventshippinglocationtypestringrequiredType of the billing item type.
Allowed:
subscriptionbookable-hourevent-fixedslahoursdaysfixedinternalunitstringUnit of the billing item type, for example piece or hour.
force_repeatingbooleanItems of this type always repeat.
can_repeatbooleanItems of this type can repeat.
deletedbooleanThis property is used to mark an entity as deleted / archived
buying_pricenumber (float)Purchase price of the item.
recurrenceCRMRecurrenceRecurrence the billing item follows.
Show fields (9)
idintegerPrimary key of the recurrence. Internal ID.
namestringName of the recurrence, for example monthly.
oncebooleanThe recurrence happens only once.
allow_partial_on_eq_start_billingbooleanAllows partial billing if start and billed date are equal. primarily used for the first billing of a yearly contract
date_stringstringDate pattern of the recurrence as text.
tolerancenumber (float)Tolerance in days around the recurrence date.
deletedbooleanThe recurrence is deleted.
rounding_stepsintegerSteps used to round the recurrence.
month_factorintegerNumber of months between two recurrences.
deletedbooleanWhether the billing item is deleted.
condition_date_afterstring (date-time)The item applies only to dates after this date.
condition_date_beforestring (date-time)The item applies only to dates before this date.
condition_country_codestringCountry code the item applies to.
condition_zip_code_fromstringStart of the postal code range the item applies to.
condition_zip_code_tostringEnd of the postal code range the item applies to.
condition_time_after_hourintegerThe item applies only after this hour of the day.
condition_max_lengthintegerMaximum length the item applies to.
condition_time_before_hourintegerThe item applies only before this hour of the day.
condition_sub_access_tagAccessTagAccess tag a subscription must have for the item to apply.
Show fields (6)
idintegerPrimary key of the access tag. Internal ID, used as the reference in access rights.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
condition_show_despite_missing_access_tagbooleanWhether the item is shown even if the access tag is missing.
condition_sub_free_logicstringFree-form condition logic for the subscription.
fixed_price_logicstringFree-form logic that calculates the fixed price.
sub_self_service_addbooleanWhether members can add the subscription themselves.
sub_self_service_deletebooleanWhether members can cancel the subscription themselves.
sub_self_service_add_fixed_pricenumber (float)Fixed price charged when members add the subscription themselves.
sub_self_service_delete_fixed_pricenumber (float)Fixed price charged when members cancel the subscription themselves.
sub_pre_paidbooleanWhether the subscription is paid in advance.
sub_only_billed_after_startbooleanWhether the subscription is only billed after its start date.
sub_people_age_group_oneintegerUpper age limit of age group one.
sub_people_age_group_one_discountintegerDiscount in percent for age group one.
sub_people_age_group_one_freeintegerNumber of free places for age group one.
sub_people_age_group_twointegerUpper age limit of age group two.
sub_people_age_group_two_discountintegerDiscount in percent for age group two.
sub_people_age_group_two_freeintegerNumber of free places for age group two.
sub_people_age_group_threeintegerUpper age limit of age group three.
sub_people_age_group_three_discountintegerDiscount in percent for age group three.
sub_people_age_group_three_freeintegerNumber of free places for age group three.
sub_people_age_group_fourintegerUpper age limit of age group four.
sub_people_age_group_four_discountintegerDiscount in percent for age group four.
sub_people_age_group_four_freeintegerNumber of free places for age group four.
price_is_bruttobooleanWhether the prices are gross prices including tax.
skustringArtikelnummer (Stock Keeping Unit)
barcodestringBarcode (ISBN, UPC, GTIN usw.)
baseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
secondaryBaseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
baseEventBaseEvent7Show fields (22)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanbaseBookableBaseBookable3secondaryBaseBookableBaseBookable3idintegerPrimary key of the event. Internal ID.
tokenstringPublic token of the event. Used in links and QR codes instead of the ID.
moments_modestringControls the event moments (digital guestbook) feature: DISABLED = feature off, PARTICIPANTS_ONLY = only via participant-bound moments tokens, ALL = additionally open via the anonymous event moments token
moments_designstringVisual theme of the moments (digital guestbook) pages and exports.
public_keywordsstringKeywords shown in the public event listing.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
age_groupstringAge group the event is intended for, for example children or adults.
min_ageintegerMinimum age in years of participants.
max_ageintegerMaximum age in years of participants.
min_age_monthsintegerMinimum age in months of participants, for events for infants.
max_age_monthsintegerMaximum age in months of participants, for events for infants.
min_grade_levelintegerMinimum school grade level of participants.
max_grade_levelintegerMaximum school grade level of participants.
age_toleranceintegerYears by which participants may be outside the age range and still sign up.
event_people_limitintegermaximum number of people that can attend the event
- … 78 more fields
- … 45 more fields
curl --request POST \
--url https://your-instance.iw-erp.de/api/attachments/product_labels/42/42 \
--header 'content-type: multipart/form-data' \
--header 'x-iw-jwt-token: <TOKEN>' \
--form attachment[file]='@datei.pdf'const form = new FormData();
form.append('attachment[file]', 'datei.pdf');
const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
options.body = form;
fetch('https://your-instance.iw-erp.de/api/attachments/product_labels/42/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/attachments/product_labels/42/42"
files = { "attachment[file]": ("datei.pdf", open("datei.pdf", "rb"), "application/pdf") }
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/attachments/product_labels/42/42', [
'multipart' => [
[
'name' => 'attachment[file]',
'filename' => 'datei.pdf',
'contents' => null,
'headers' => [
'Content-Type' => 'application/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.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/attachments/product_labels/42/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new MultipartFormDataContent
{
new StringContent("")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/pdf"),
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "attachment[file]",
FileName = "datei.pdf",
}
}
},
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/attachments/product_labels/42/42")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/attachments/product_labels/42/42"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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/billing_product_label_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 BillingProductLabelController.upload('42', '42', Stream<List<int>>.fromJson({}), 42, '…');
if (result.success) {
print(result.data);
}{
"name": "Beispiel",
"description": "Text",
"id": 42,
"internal_description": "Text",
"fixed_hours": 1.5,
"fixed_price": 49.9,
"fixed_price_base_unit": 49.9,
"price_fixed_hours": 49.9,
"price_additional_hours": 49.9,
"name_additional_hours": "string"
}Auto match upload: the file name names the product (SKU, EAN / barcode, short identifier, ...) and optionally the label type (`..._piktogramm.png`, default `attachment[labelType]`, otherwise the GARAN label). The label is linked when exactly one product matches and it has no uploaded label of this type yet - an existing label is never replaced. Business outcomes (no product, ambiguous, label exists, invalid file) are answered with 200 and a status.
POST/api/attachments/product_labels/auto_match
Multipart form attachment[file], optional attachment[labelType].
Request body multipart/form-data
attachment[file]string (binary)Label file named after the product: png, jpeg, webp, svg, gif or pdf, max. 20 MB
attachment[labelType]stringLabel type when the file name does not name one: energy_label | garan_label | garan_label_pictogram (default garan_label)
Responses
200Match result: filename, status (linked | label_exists | not_found | ambiguous | error), matched, label_type, product_id, product_name, candidates, messageobject
curl --request POST \
--url https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match \
--header 'content-type: multipart/form-data' \
--header 'x-iw-jwt-token: <TOKEN>' \
--form attachment[file]='@datei.pdf'const form = new FormData();
form.append('attachment[file]', 'datei.pdf');
const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
options.body = form;
fetch('https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match', 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/attachments/product_labels/auto_match"
files = { "attachment[file]": ("datei.pdf", open("datei.pdf", "rb"), "application/pdf") }
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match', [
'multipart' => [
[
'name' => 'attachment[file]',
'filename' => 'datei.pdf',
'contents' => null,
'headers' => [
'Content-Type' => 'application/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.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new MultipartFormDataContent
{
new StringContent("")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/pdf"),
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "attachment[file]",
FileName = "datei.pdf",
}
}
},
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/attachments/product_labels/auto_match"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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/billing_product_label_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 BillingProductLabelController.autoMatchUpload(Stream<List<int>>.fromJson({}), 42, '…');
if (result.success) {
print(result.data);
}{}Upload (replace) one label of a product. Multipart form `attachment[file]`, optional `attachment[producerGuaranteeYears]` (e.g. "5" or "2,5").
POST/api/invoice/predefinedbillingitems/{identifier}/label/{labelType}
Path parameters
identifierrequiredstring | Any unique product identifier |
labelTyperequiredstring | energy_label | garan_label | garan_label_pictogram |
Request body multipart/form-data
attachment[file]string (binary)Label file: png, jpeg, webp, svg, gif or pdf, max. 20 MB
attachment[producerGuaranteeYears]stringOptional producer guarantee in years, whole or .5 steps
Responses
200Uploads a product label and returns the productPredefinedBillingItem
Show fields (53)
idintegerPrimary key of the mapped billing item. Internal ID.
namestringrequiredName of the billing item.
descriptionstringrequiredDescription of the billing item shown to the customer.
internal_descriptionstringInternal description of the billing item, not shown to the customer.
fixed_hoursnumber (float)Fixed number of hours billed.
fixed_pricenumber (float)Fixed price billed.
fixed_price_base_unitnumber (float)Base unit for the fixed price.
price_fixed_hoursnumber (float)Price for the fixed hours.
price_additional_hoursnumber (float)Price for each additional hour.
name_additional_hoursstringName of the additional hours item.
description_additional_hoursstringDescription of the additional hours item.
time_billed_on_ticket_closebooleanWhether the time is billed when the ticket is closed.
billing_typeBillingItemTypeBilling item type.
Show fields (12)
idintegerPrimary key of the billing item type. Internal ID.
namestringName of the billing item type.
fixed_price_addon_one_namestringName of the first fixed price addon.
fixed_price_addon_two_namestringName of the second fixed price addon.
fixed_price_addon_one_name_personstringName of the first fixed price addon for persons.
fixed_price_addon_two_name_personstringName of the second fixed price addon for persons.
categorystringrequiredCategory of the billing item type.
Allowed:
projectsubscriptionbookableeventshippinglocationtypestringrequiredType of the billing item type.
Allowed:
subscriptionbookable-hourevent-fixedslahoursdaysfixedinternalunitstringUnit of the billing item type, for example piece or hour.
force_repeatingbooleanItems of this type always repeat.
can_repeatbooleanItems of this type can repeat.
deletedbooleanThis property is used to mark an entity as deleted / archived
buying_pricenumber (float)Purchase price of the item.
recurrenceCRMRecurrenceRecurrence the billing item follows.
Show fields (9)
idintegerPrimary key of the recurrence. Internal ID.
namestringName of the recurrence, for example monthly.
oncebooleanThe recurrence happens only once.
allow_partial_on_eq_start_billingbooleanAllows partial billing if start and billed date are equal. primarily used for the first billing of a yearly contract
date_stringstringDate pattern of the recurrence as text.
tolerancenumber (float)Tolerance in days around the recurrence date.
deletedbooleanThe recurrence is deleted.
rounding_stepsintegerSteps used to round the recurrence.
month_factorintegerNumber of months between two recurrences.
deletedbooleanWhether the billing item is deleted.
condition_date_afterstring (date-time)The item applies only to dates after this date.
condition_date_beforestring (date-time)The item applies only to dates before this date.
condition_country_codestringCountry code the item applies to.
condition_zip_code_fromstringStart of the postal code range the item applies to.
condition_zip_code_tostringEnd of the postal code range the item applies to.
condition_time_after_hourintegerThe item applies only after this hour of the day.
condition_max_lengthintegerMaximum length the item applies to.
condition_time_before_hourintegerThe item applies only before this hour of the day.
condition_sub_access_tagAccessTagAccess tag a subscription must have for the item to apply.
Show fields (6)
idintegerPrimary key of the access tag. Internal ID, used as the reference in access rights.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
condition_show_despite_missing_access_tagbooleanWhether the item is shown even if the access tag is missing.
condition_sub_free_logicstringFree-form condition logic for the subscription.
fixed_price_logicstringFree-form logic that calculates the fixed price.
sub_self_service_addbooleanWhether members can add the subscription themselves.
sub_self_service_deletebooleanWhether members can cancel the subscription themselves.
sub_self_service_add_fixed_pricenumber (float)Fixed price charged when members add the subscription themselves.
sub_self_service_delete_fixed_pricenumber (float)Fixed price charged when members cancel the subscription themselves.
sub_pre_paidbooleanWhether the subscription is paid in advance.
sub_only_billed_after_startbooleanWhether the subscription is only billed after its start date.
sub_people_age_group_oneintegerUpper age limit of age group one.
sub_people_age_group_one_discountintegerDiscount in percent for age group one.
sub_people_age_group_one_freeintegerNumber of free places for age group one.
sub_people_age_group_twointegerUpper age limit of age group two.
sub_people_age_group_two_discountintegerDiscount in percent for age group two.
sub_people_age_group_two_freeintegerNumber of free places for age group two.
sub_people_age_group_threeintegerUpper age limit of age group three.
sub_people_age_group_three_discountintegerDiscount in percent for age group three.
sub_people_age_group_three_freeintegerNumber of free places for age group three.
sub_people_age_group_fourintegerUpper age limit of age group four.
sub_people_age_group_four_discountintegerDiscount in percent for age group four.
sub_people_age_group_four_freeintegerNumber of free places for age group four.
price_is_bruttobooleanWhether the prices are gross prices including tax.
skustringArtikelnummer (Stock Keeping Unit)
barcodestringBarcode (ISBN, UPC, GTIN usw.)
baseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
secondaryBaseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
baseEventBaseEvent7Show fields (22)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanbaseBookableBaseBookable3secondaryBaseBookableBaseBookable3idintegerPrimary key of the event. Internal ID.
tokenstringPublic token of the event. Used in links and QR codes instead of the ID.
moments_modestringControls the event moments (digital guestbook) feature: DISABLED = feature off, PARTICIPANTS_ONLY = only via participant-bound moments tokens, ALL = additionally open via the anonymous event moments token
moments_designstringVisual theme of the moments (digital guestbook) pages and exports.
public_keywordsstringKeywords shown in the public event listing.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
age_groupstringAge group the event is intended for, for example children or adults.
min_ageintegerMinimum age in years of participants.
max_ageintegerMaximum age in years of participants.
min_age_monthsintegerMinimum age in months of participants, for events for infants.
max_age_monthsintegerMaximum age in months of participants, for events for infants.
min_grade_levelintegerMinimum school grade level of participants.
max_grade_levelintegerMaximum school grade level of participants.
age_toleranceintegerYears by which participants may be outside the age range and still sign up.
event_people_limitintegermaximum number of people that can attend the event
- … 78 more fields
- … 45 more fields
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42 \
--header 'content-type: multipart/form-data' \
--header 'x-iw-jwt-token: <TOKEN>' \
--form attachment[file]='@datei.pdf'const form = new FormData();
form.append('attachment[file]', 'datei.pdf');
const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
options.body = form;
fetch('https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/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/predefinedbillingitems/42/label/42"
files = { "attachment[file]": ("datei.pdf", open("datei.pdf", "rb"), "application/pdf") }
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42', [
'multipart' => [
[
'name' => 'attachment[file]',
'filename' => 'datei.pdf',
'contents' => null,
'headers' => [
'Content-Type' => 'application/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.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new MultipartFormDataContent
{
new StringContent("")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/pdf"),
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "attachment[file]",
FileName = "datei.pdf",
}
}
},
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"attachment[file]\"; filename=\"datei.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final request = http.MultipartRequest('POST', Uri.parse('https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42'));
request.headers['x-iw-jwt-token'] = '<TOKEN>';
request.files.add(await http.MultipartFile.fromPath('attachment[file]', 'datei.pdf'));
final response = await request.send();
print(await response.stream.bytesToString());{
"name": "Beispiel",
"description": "Text",
"id": 42,
"internal_description": "Text",
"fixed_hours": 1.5,
"fixed_price": 49.9,
"fixed_price_base_unit": 49.9,
"price_fixed_hours": 49.9,
"price_additional_hours": 49.9,
"name_additional_hours": "string"
}Remove one label of a product (file and attachment are deleted).
DELETE/api/invoice/predefinedbillingitems/{identifier}/label/{labelType}
Path parameters
identifierrequiredstring | Any unique product identifier |
labelTyperequiredstring | energy_label | garan_label | garan_label_pictogram |
Responses
200Removes a product label and returns the productPredefinedBillingItem
Show fields (53)
idintegerPrimary key of the mapped billing item. Internal ID.
namestringrequiredName of the billing item.
descriptionstringrequiredDescription of the billing item shown to the customer.
internal_descriptionstringInternal description of the billing item, not shown to the customer.
fixed_hoursnumber (float)Fixed number of hours billed.
fixed_pricenumber (float)Fixed price billed.
fixed_price_base_unitnumber (float)Base unit for the fixed price.
price_fixed_hoursnumber (float)Price for the fixed hours.
price_additional_hoursnumber (float)Price for each additional hour.
name_additional_hoursstringName of the additional hours item.
description_additional_hoursstringDescription of the additional hours item.
time_billed_on_ticket_closebooleanWhether the time is billed when the ticket is closed.
billing_typeBillingItemTypeBilling item type.
Show fields (12)
idintegerPrimary key of the billing item type. Internal ID.
namestringName of the billing item type.
fixed_price_addon_one_namestringName of the first fixed price addon.
fixed_price_addon_two_namestringName of the second fixed price addon.
fixed_price_addon_one_name_personstringName of the first fixed price addon for persons.
fixed_price_addon_two_name_personstringName of the second fixed price addon for persons.
categorystringrequiredCategory of the billing item type.
Allowed:
projectsubscriptionbookableeventshippinglocationtypestringrequiredType of the billing item type.
Allowed:
subscriptionbookable-hourevent-fixedslahoursdaysfixedinternalunitstringUnit of the billing item type, for example piece or hour.
force_repeatingbooleanItems of this type always repeat.
can_repeatbooleanItems of this type can repeat.
deletedbooleanThis property is used to mark an entity as deleted / archived
buying_pricenumber (float)Purchase price of the item.
recurrenceCRMRecurrenceRecurrence the billing item follows.
Show fields (9)
idintegerPrimary key of the recurrence. Internal ID.
namestringName of the recurrence, for example monthly.
oncebooleanThe recurrence happens only once.
allow_partial_on_eq_start_billingbooleanAllows partial billing if start and billed date are equal. primarily used for the first billing of a yearly contract
date_stringstringDate pattern of the recurrence as text.
tolerancenumber (float)Tolerance in days around the recurrence date.
deletedbooleanThe recurrence is deleted.
rounding_stepsintegerSteps used to round the recurrence.
month_factorintegerNumber of months between two recurrences.
deletedbooleanWhether the billing item is deleted.
condition_date_afterstring (date-time)The item applies only to dates after this date.
condition_date_beforestring (date-time)The item applies only to dates before this date.
condition_country_codestringCountry code the item applies to.
condition_zip_code_fromstringStart of the postal code range the item applies to.
condition_zip_code_tostringEnd of the postal code range the item applies to.
condition_time_after_hourintegerThe item applies only after this hour of the day.
condition_max_lengthintegerMaximum length the item applies to.
condition_time_before_hourintegerThe item applies only before this hour of the day.
condition_sub_access_tagAccessTagAccess tag a subscription must have for the item to apply.
Show fields (6)
idintegerPrimary key of the access tag. Internal ID, used as the reference in access rights.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
condition_show_despite_missing_access_tagbooleanWhether the item is shown even if the access tag is missing.
condition_sub_free_logicstringFree-form condition logic for the subscription.
fixed_price_logicstringFree-form logic that calculates the fixed price.
sub_self_service_addbooleanWhether members can add the subscription themselves.
sub_self_service_deletebooleanWhether members can cancel the subscription themselves.
sub_self_service_add_fixed_pricenumber (float)Fixed price charged when members add the subscription themselves.
sub_self_service_delete_fixed_pricenumber (float)Fixed price charged when members cancel the subscription themselves.
sub_pre_paidbooleanWhether the subscription is paid in advance.
sub_only_billed_after_startbooleanWhether the subscription is only billed after its start date.
sub_people_age_group_oneintegerUpper age limit of age group one.
sub_people_age_group_one_discountintegerDiscount in percent for age group one.
sub_people_age_group_one_freeintegerNumber of free places for age group one.
sub_people_age_group_twointegerUpper age limit of age group two.
sub_people_age_group_two_discountintegerDiscount in percent for age group two.
sub_people_age_group_two_freeintegerNumber of free places for age group two.
sub_people_age_group_threeintegerUpper age limit of age group three.
sub_people_age_group_three_discountintegerDiscount in percent for age group three.
sub_people_age_group_three_freeintegerNumber of free places for age group three.
sub_people_age_group_fourintegerUpper age limit of age group four.
sub_people_age_group_four_discountintegerDiscount in percent for age group four.
sub_people_age_group_four_freeintegerNumber of free places for age group four.
price_is_bruttobooleanWhether the prices are gross prices including tax.
skustringArtikelnummer (Stock Keeping Unit)
barcodestringBarcode (ISBN, UPC, GTIN usw.)
baseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
secondaryBaseBookableBaseBookable3Show fields (50)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
ucatsarray<UnifiedCategory16>Unified categories of the entity.
baseEventBaseEvent7Show fields (22)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanbaseBookableBaseBookable3secondaryBaseBookableBaseBookable3idintegerPrimary key of the event. Internal ID.
tokenstringPublic token of the event. Used in links and QR codes instead of the ID.
moments_modestringControls the event moments (digital guestbook) feature: DISABLED = feature off, PARTICIPANTS_ONLY = only via participant-bound moments tokens, ALL = additionally open via the anonymous event moments token
moments_designstringVisual theme of the moments (digital guestbook) pages and exports.
public_keywordsstringKeywords shown in the public event listing.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
age_groupstringAge group the event is intended for, for example children or adults.
min_ageintegerMinimum age in years of participants.
max_ageintegerMaximum age in years of participants.
min_age_monthsintegerMinimum age in months of participants, for events for infants.
max_age_monthsintegerMaximum age in months of participants, for events for infants.
min_grade_levelintegerMinimum school grade level of participants.
max_grade_levelintegerMaximum school grade level of participants.
age_toleranceintegerYears by which participants may be outside the age range and still sign up.
event_people_limitintegermaximum number of people that can attend the event
- … 78 more fields
- … 45 more fields
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'DELETE', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/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/predefinedbillingitems/42/label/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.delete(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/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.Delete,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/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/predefinedbillingitems/42/label/42")
.delete(null)
.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/predefinedbillingitems/42/label/42"
req, _ := http.NewRequest("DELETE", 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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final response = await http.delete(
Uri.parse('https://your-instance.iw-erp.de/api/invoice/predefinedbillingitems/42/label/42'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);{
"name": "Beispiel",
"description": "Text",
"id": 42,
"internal_description": "Text",
"fixed_hours": 1.5,
"fixed_price": 49.9,
"fixed_price_base_unit": 49.9,
"price_fixed_hours": 49.9,
"price_additional_hours": 49.9,
"name_additional_hours": "string"
}