# API response shapes

Taken 2026-09-27 09:45 UTC by live/api_shape.py against a live account.

Field names and JSON types. Values appear only for the closed vocabularies the script names,
never for anything a person entered. See the module docstring for the rule.

19 endpoints read, 1 not available
  not available: GET /v1/down-payment-invoices/{id} - no downpaymentinvoice in the account

## GET /v1/articles
content[]: array
content[].archived: bool
content[].articleNumber: NoneType
content[].createdDate: str
content[].description: NoneType
content[].gtin: NoneType
content[].id: str
content[].note: NoneType
content[].organizationId: str
content[].price.grossPrice: float
content[].price.leadingPrice: str=NET
content[].price.netPrice: float
content[].price.taxRate: int
content[].title: str
content[].type: str=SERVICE
content[].unitName: str
content[].updatedDate: str
content[].version: int
first: bool
last: bool
number: int
numberOfElements: int
size: int
sort[]: array
sort[].ascending: bool
sort[].direction: str
sort[].ignoreCase: bool
sort[].nullHandling: str
sort[].property: str
totalElements: int
totalPages: int

## GET /v1/articles/{id}
archived: bool
articleNumber: NoneType
createdDate: str
description: NoneType
gtin: NoneType
id: str
note: NoneType
organizationId: str
price.grossPrice: float
price.leadingPrice: str=NET
price.netPrice: float
price.taxRate: int
title: str
type: str=SERVICE
unitName: str
updatedDate: str
version: int

## GET /v1/contacts
content[]: array
content[].addresses.billing[]: array
content[].addresses.billing[].city: str
content[].addresses.billing[].countryCode: str
content[].addresses.billing[].street: str
content[].addresses.billing[].zip: str
content[].archived: bool
content[].company.name: str
content[].emailAddresses.office[]: array|str
content[].emailAddresses.private[]: array|str
content[].id: str
content[].organizationId: str
content[].person.firstName: str
content[].person.lastName: str
content[].person.salutation: str
content[].phoneNumbers.office[]: array|str
content[].roles.customer.number: int
content[].version: int
first: bool
last: bool
number: int
numberOfElements: int
size: int
sort[]: array
sort[].ascending: bool
sort[].direction: str
sort[].ignoreCase: bool
sort[].nullHandling: str
sort[].property: str
totalElements: int
totalPages: int

## GET /v1/contacts/{id} (company)
addresses.billing[]: array
addresses.billing[].city: str
addresses.billing[].countryCode: str
addresses.billing[].street: str
addresses.billing[].zip: str
archived: bool
company.name: str
id: str
organizationId: str
roles.customer.number: int
version: int

## GET /v1/contacts/{id} (person)
archived: bool
emailAddresses.private[]: array|str
id: str
organizationId: str
person.firstName: str
person.lastName: str
person.salutation: str
roles.customer.number: int
version: int

## GET /v1/countries
[]: array
[].countryCode: str
[].countryNameDE: str
[].countryNameEN: str
[].taxClassification: str=thirdPartyCountry

## GET /v1/credit-notes/{id}
address.city: str
address.contactId: str
address.countryCode: str
address.name: str
address.street: str
address.zip: str
archived: bool
createdDate: str
electronicDocumentProfile: str=NONE
id: str
introduction: str
language: str=de
lineItems[]: array
lineItems[].lineItemAmount: float
lineItems[].name: str
lineItems[].quantity: float
lineItems[].type: str=custom
lineItems[].unitName: str
lineItems[].unitPrice.currency: str
lineItems[].unitPrice.grossAmount: float
lineItems[].unitPrice.netAmount: float
lineItems[].unitPrice.taxRatePercentage: float
organizationId: str
relatedVouchers[]: array
remark: str
taxAmounts[]: array
taxAmounts[].netAmount: float
taxAmounts[].taxAmount: float
taxAmounts[].taxRatePercentage: float
taxConditions.taxType: str=net
title: str
totalPrice.currency: str
totalPrice.totalGrossAmount: float
totalPrice.totalNetAmount: float
totalPrice.totalTaxAmount: float
updatedDate: str
version: int
voucherDate: str
voucherNumber: str
voucherStatus: str=draft

## GET /v1/delivery-notes/{id}
address.city: str
address.contactId: str
address.countryCode: str
address.name: str
address.street: str
address.zip: str
archived: bool
createdDate: str
deliveryTerms: str
electronicDocumentProfile: str=NONE
id: str
introduction: str
language: str=de
lineItems[]: array
lineItems[].name: str
lineItems[].quantity: float
lineItems[].type: str=custom
lineItems[].unitName: str
lineItems[].unitPrice.currency: str
lineItems[].unitPrice.grossAmount: float
lineItems[].unitPrice.netAmount: float
lineItems[].unitPrice.taxRatePercentage: float
organizationId: str
relatedVouchers[]: array
remark: str
shippingConditions.shippingDate: str
shippingConditions.shippingType: str=delivery
taxConditions.taxType: str=net
title: str
updatedDate: str
version: int
voucherDate: str
voucherNumber: str
voucherStatus: str=draft

## GET /v1/invoices/{id}
address.city: str
address.contactId: str
address.countryCode: str
address.name: str
address.street: str
address.zip: str
archived: bool
closingInvoice: bool
createdDate: str
dueDate: str
electronicDocumentProfile: str=NONE
files.documentFileId: str
id: str
introduction: str
language: str=de
lineItems[]: array
lineItems[].discountPercentage: int
lineItems[].lineItemAmount: float
lineItems[].name: str
lineItems[].quantity: float
lineItems[].type: str=custom
lineItems[].unitName: str
lineItems[].unitPrice.currency: str
lineItems[].unitPrice.grossAmount: float
lineItems[].unitPrice.netAmount: float
lineItems[].unitPrice.taxRatePercentage: float
organizationId: str
paymentConditions.paymentTermDuration: int
paymentConditions.paymentTermLabel: str
paymentConditions.paymentTermLabelTemplate: str
relatedVouchers[]: array
remark: str
shippingConditions.shippingDate: str
shippingConditions.shippingType: str=delivery
taxAmounts[]: array
taxAmounts[].netAmount: float
taxAmounts[].taxAmount: float
taxAmounts[].taxRatePercentage: float
taxConditions.taxType: str=net
title: str
totalPrice.currency: str
totalPrice.totalGrossAmount: float
totalPrice.totalNetAmount: float
totalPrice.totalTaxAmount: float
updatedDate: str
version: int
voucherDate: str
voucherNumber: str
voucherStatus: str=open

## GET /v1/order-confirmations/{id}
address.city: str
address.contactId: str
address.countryCode: str
address.name: str
address.street: str
address.zip: str
archived: bool
createdDate: str
deliveryTerms: str
electronicDocumentProfile: str=NONE
id: str
introduction: str
language: str=de
lineItems[]: array
lineItems[].discountPercentage: int
lineItems[].lineItemAmount: float
lineItems[].name: str
lineItems[].quantity: float
lineItems[].type: str=custom
lineItems[].unitName: str
lineItems[].unitPrice.currency: str
lineItems[].unitPrice.grossAmount: float
lineItems[].unitPrice.netAmount: float
lineItems[].unitPrice.taxRatePercentage: float
organizationId: str
paymentConditions.paymentTermDuration: int
paymentConditions.paymentTermLabel: str
paymentConditions.paymentTermLabelTemplate: str
relatedVouchers[]: array
remark: str
shippingConditions.shippingDate: str
shippingConditions.shippingType: str=delivery
taxAmounts[]: array
taxAmounts[].netAmount: float
taxAmounts[].taxAmount: float
taxAmounts[].taxRatePercentage: float
taxConditions.taxType: str=net
title: str
totalPrice.currency: str
totalPrice.totalGrossAmount: float
totalPrice.totalNetAmount: float
totalPrice.totalTaxAmount: float
updatedDate: str
version: int
voucherDate: str
voucherNumber: str
voucherStatus: str=draft

## GET /v1/payment-conditions
[]: array
[].id: str
[].organizationDefault: bool
[].paymentTermDuration: int
[].paymentTermLabelTemplate: str

## GET /v1/payments/{id}
currency: str
openAmount: float
paymentItems[]: array
paymentStatus: str=openExpense
voucherStatus: str=open
voucherType: str=purchaseinvoice

## GET /v1/posting-categories
[]: array
[].contactRequired: bool
[].groupName: str
[].id: str
[].name: str
[].splitAllowed: bool
[].type: str=outgo

## GET /v1/print-layouts
[]: array
[].default: bool
[].id: str
[].name: str

## GET /v1/profile
businessFeatures[]: array|str
companyName: str
connectionId: str
created.date: str
created.userEmail: str
created.userId: str
created.userName: str
organizationId: str
smallBusiness: bool
taxType: str=net

## GET /v1/quotations/{id}
address.city: str
address.contactId: str
address.countryCode: str
address.name: str
address.street: str
address.zip: str
archived: bool
createdDate: str
electronicDocumentProfile: str=NONE
expirationDate: str
id: str
introduction: str
language: str=de
lineItems[]: array
lineItems[].alternative: bool
lineItems[].discountPercentage: int
lineItems[].lineItemAmount: float
lineItems[].name: str
lineItems[].optional: bool
lineItems[].quantity: float
lineItems[].type: str=custom
lineItems[].unitName: str
lineItems[].unitPrice.currency: str
lineItems[].unitPrice.grossAmount: float
lineItems[].unitPrice.netAmount: float
lineItems[].unitPrice.taxRatePercentage: float
organizationId: str
paymentConditions.paymentTermDuration: int
paymentConditions.paymentTermLabel: str
paymentConditions.paymentTermLabelTemplate: str
relatedVouchers[]: array
remark: str
taxAmounts[]: array
taxAmounts[].netAmount: float
taxAmounts[].taxAmount: float
taxAmounts[].taxRatePercentage: float
taxConditions.taxType: str=net
title: str
totalPrice.currency: str
totalPrice.totalGrossAmount: float
totalPrice.totalNetAmount: float
totalPrice.totalTaxAmount: float
updatedDate: str
version: int
voucherDate: str
voucherNumber: str
voucherStatus: str=draft

## GET /v1/recurring-templates
content[]: array
first: bool
last: bool
number: int
numberOfElements: int
size: int
sort[]: array
sort[].ascending: bool
sort[].direction: str
sort[].ignoreCase: bool
sort[].nullHandling: str
sort[].property: str
totalElements: int
totalPages: int

## GET /v1/voucherlist
content[]: array
content[].archived: bool
content[].contactId: str
content[].contactName: str
content[].createdDate: str
content[].currency: str
content[].dueDate: str
content[].id: str
content[].openAmount: float
content[].totalAmount: float
content[].updatedDate: str
content[].voucherDate: str
content[].voucherNumber: str
content[].voucherStatus: str=draft|str=open
content[].voucherType: str=creditnote|str=deliverynote|str=invoice|str=orderconfirmation|str=purchaseinvoice
first: bool
last: bool
number: int
numberOfElements: int
size: int
sort[]: array
sort[].ascending: bool
sort[].direction: str
sort[].ignoreCase: bool
sort[].nullHandling: str
sort[].property: str
totalElements: int
totalPages: int

## GET /v1/vouchers/{id}
contactName: str
createdDate: str
dueDate: str
files[]: array|str
id: str
organizationId: str
taxType: str=gross
totalGrossAmount: float
totalTaxAmount: float
type: str=purchaseinvoice
updatedDate: str
useCollectiveContact: bool
version: int
voucherDate: str
voucherItems[]: array
voucherItems[].amount: float
voucherItems[].categoryId: str
voucherItems[].taxAmount: float
voucherItems[].taxRatePercent: float
voucherNumber: str
voucherStatus: str=open
