Last active
February 12, 2026 10:40
-
-
Save nightscape/490001dc0a3637ed815c2a443299a4d1 to your computer and use it in GitHub Desktop.
Lexware (lexoffice) Public API - OpenAPI 3.0 Spec for UTCP/MCP integration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "openapi": "3.0.3", | |
| "info": { | |
| "title": "Lexware Internal UI API", | |
| "description": "Undocumented internal Lexware endpoints for bank account transactions and voucher-transaction assignment (Zuordnung). Requires session JWT from browser login. JWT expires after ~5 hours. Obtain by logging into app.lexware.de and extracting the grldJWT cookie value.", | |
| "version": "1.5.0" | |
| }, | |
| "servers": [ | |
| { | |
| "url": "https://app.lexware.de", | |
| "description": "Lexware Internal UI" | |
| } | |
| ], | |
| "security": [ | |
| { | |
| "bearerAuth": [] | |
| } | |
| ], | |
| "paths": { | |
| "/fis/finance-rest/financialtransactionservice/v3/financialTransactions": { | |
| "get": { | |
| "operationId": "listFinancialTransactions", | |
| "summary": "List bank account transactions (Umsätze/Kontobewegungen)", | |
| "parameters": [ | |
| { "name": "pageNumber", "in": "query", "schema": { "type": "integer", "default": 0 }, "description": "0-based page index" }, | |
| { "name": "pageSize", "in": "query", "schema": { "type": "integer", "default": 50 }, "description": "Items per page" }, | |
| { "name": "ignored", "in": "query", "schema": { "type": "boolean", "default": false }, "description": "Filter by ignored status" }, | |
| { "name": "negativeAmounts", "in": "query", "schema": { "type": "boolean" }, "description": "Only outgoing payments" }, | |
| { "name": "searchTerm", "in": "query", "schema": { "type": "string" }, "description": "Free text search across recipient/sender name, purpose" }, | |
| { "name": "dateFrom", "in": "query", "schema": { "type": "string", "format": "date-time" }, "description": "Start date filter (ISO 8601)" }, | |
| { "name": "dateTo", "in": "query", "schema": { "type": "string", "format": "date-time" }, "description": "End date filter (ISO 8601)" }, | |
| { "name": "financialAccountIds", "in": "query", "schema": { "type": "string", "format": "uuid" }, "description": "Account UUID filter" }, | |
| { "name": "financialAccountType", "in": "query", "schema": { "type": "string", "enum": ["GIRO", "CREDITCARD", "SAVINGS"] }, "description": "Account type filter" } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of financial transactions", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/FinancialTransactionPage" | |
| } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/fis/finance-rest/voucherpaymentintegrationservice/v100/voucherPayment": { | |
| "post": { | |
| "operationId": "createVoucherPayment", | |
| "summary": "Link a financial transaction to a voucher (Zuordnung). This creates the payment assignment that marks the voucher as paid.", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/VoucherPaymentRequest" } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Payment assignment created successfully", | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/VoucherPaymentResponse" } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/fis/finance-rest/voucherpaymentintegrationservice/v101/voucherPayment/financialTransaction/{financialTransactionId}/reverse": { | |
| "post": { | |
| "operationId": "reverseVoucherPayment", | |
| "summary": "Remove/reverse a voucher-transaction assignment (Zuordnung aufheben). Unlinks the financial transaction from its assigned voucher(s).", | |
| "parameters": [ | |
| { "name": "financialTransactionId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "The financialTransactionId of the bank transaction to unassign" } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "object", | |
| "required": ["reversalNote"], | |
| "properties": { | |
| "reversalNote": { "type": "string", "description": "Reason for reversing the assignment (e.g. 'Fehlende Rechnung')" } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { "description": "Assignment reversed successfully (empty response body)" }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/autocat/autocat-rest/voucherdriventransactionsearchservice/v101/searchRequest": { | |
| "post": { | |
| "operationId": "createTransactionSearchRequest", | |
| "summary": "Search for bank transactions matching a voucher. Returns 200 with a search request ID if a match is found, 204 if no match.", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/TransactionSearchRequest" } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Match found, returns search request with proposal", | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/TransactionSearchResponse" } | |
| } | |
| } | |
| }, | |
| "204": { "description": "No matching transaction found" }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/autocat/autocat-rest/voucherdriventransactionsearchservice/v101/searchRequest/{searchRequestId}/reviewResult": { | |
| "post": { | |
| "operationId": "reviewTransactionSearchResult", | |
| "summary": "Accept or reject a transaction-voucher match proposal", | |
| "parameters": [ | |
| { "name": "searchRequestId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "object", | |
| "required": ["reviewResult"], | |
| "properties": { | |
| "reviewResult": { "type": "string", "enum": ["ACCEPTED", "REJECTED"] } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "202": { "description": "Review result accepted" }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/autocat/autocat-rest/voucherdriventransactionsearchservice/v101/searchRequest/{searchRequestId}/bookingState": { | |
| "post": { | |
| "operationId": "updateTransactionBookingState", | |
| "summary": "Confirm the booking state after a voucher-transaction assignment", | |
| "parameters": [ | |
| { "name": "searchRequestId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "object", | |
| "required": ["bookingState"], | |
| "properties": { | |
| "bookingState": { "type": "string", "enum": ["BOOKED", "UNBOOKED"] } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "202": { "description": "Booking state updated" }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/grld-rest/postingcategoryservice/1/v300/postingCategories/{direction}": { | |
| "get": { | |
| "operationId": "searchPostingCategories", | |
| "summary": "Search posting categories (Buchungskategorien) by direction and optional search term. Used to find the correct category when updating a voucher.", | |
| "parameters": [ | |
| { "name": "direction", "in": "path", "required": true, "schema": { "type": "string", "enum": ["outgo", "income"] }, "description": "Filter by expense (outgo) or revenue (income) categories" }, | |
| { "name": "searchTerm", "in": "query", "schema": { "type": "string" }, "description": "Free text search across category names, e.g. '13b', 'Büro', 'Software'" }, | |
| { "name": "withoutContact", "in": "query", "schema": { "type": "boolean", "default": false }, "description": "If true, exclude contact-specific categories" } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "List of matching posting categories", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "object", | |
| "properties": { | |
| "postingCategories": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/PostingCategory" } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/grld-rest/taxrateservice/1/v300/taxRates/postingCategory/{postingCategoryId}": { | |
| "get": { | |
| "operationId": "getTaxRatesForCategory", | |
| "summary": "Get applicable tax rates for a posting category. Returns reverse-charge rates (percent=0, calcPercent=19) for §13b categories.", | |
| "parameters": [ | |
| { "name": "postingCategoryId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "The posting category UUID" }, | |
| { "name": "contactId", "in": "query", "schema": { "type": "string", "format": "uuid" }, "description": "Contact UUID — may affect available tax rates" }, | |
| { "name": "keyDateForSorting", "in": "query", "schema": { "type": "string", "format": "date" }, "description": "Reference date to determine which tax rate validities apply (YYYY-MM-DD)" } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "List of applicable tax rates with validity periods", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "object", | |
| "properties": { | |
| "taxRates": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/TaxRate" } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| }, | |
| "/capsa/capsa-rest/vouchers/v1/vouchers/{voucherId}": { | |
| "put": { | |
| "operationId": "updateBookkeepingVoucher", | |
| "summary": "Update a bookkeeping voucher (used during save to set contact, category, amounts, and link to a financial transaction)", | |
| "parameters": [ | |
| { "name": "voucherId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/BookkeepingVoucherUpdate" } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Voucher updated successfully", | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/BookkeepingVoucherResponse" } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" }, | |
| "409": { "description": "Optimistic locking conflict — lockVersion mismatch" } | |
| } | |
| }, | |
| "get": { | |
| "operationId": "getBookkeepingVoucher", | |
| "summary": "Get a bookkeeping voucher by ID", | |
| "parameters": [ | |
| { "name": "voucherId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Voucher details", | |
| "content": { | |
| "application/json": { | |
| "schema": { "$ref": "#/components/schemas/BookkeepingVoucherResponse" } | |
| } | |
| } | |
| }, | |
| "401": { "description": "JWT expired or invalid" } | |
| } | |
| } | |
| } | |
| }, | |
| "components": { | |
| "securitySchemes": { | |
| "bearerAuth": { | |
| "type": "http", | |
| "scheme": "bearer", | |
| "description": "Session JWT from browser login to app.lexware.de (grldJWT cookie value). Expires ~5h." | |
| } | |
| }, | |
| "schemas": { | |
| "FinancialTransactionPage": { | |
| "type": "object", | |
| "properties": { | |
| "totalElements": { "type": "integer", "description": "Total number of transactions matching the query" }, | |
| "size": { "type": "integer", "description": "Page size (items per page)" }, | |
| "number": { "type": "integer", "description": "Current page number (0-based)" }, | |
| "totalPages": { "type": "integer", "description": "Total number of pages" }, | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/FinancialTransaction" } | |
| } | |
| } | |
| }, | |
| "FinancialTransaction": { | |
| "type": "object", | |
| "properties": { | |
| "financialTransactionId": { "type": "string", "format": "uuid" }, | |
| "financialAccount": { "$ref": "#/components/schemas/FinancialAccount" }, | |
| "ignored": { "type": "boolean" }, | |
| "ignoreReason": { "type": "string", "nullable": true }, | |
| "bookingState": { | |
| "type": "string", | |
| "enum": ["COMPLETELY_ASSIGNED", "PARTIALLY_ASSIGNED", "UNASSIGNED"] | |
| }, | |
| "amount": { "type": "number", "description": "Transaction amount (negative = outgoing)" }, | |
| "openAmount": { "type": "number", "description": "Remaining unassigned amount" }, | |
| "purpose": { "type": "string", "description": "Payment purpose / reference text" }, | |
| "bookingText": { "type": "string", "nullable": true }, | |
| "additionalInfo": { "type": "string" }, | |
| "transactionDate": { "type": "string", "format": "date-time" }, | |
| "valueDate": { "type": "string", "format": "date-time" }, | |
| "recipientOrSenderName": { "type": "string", "nullable": true }, | |
| "recipientOrSenderEmail": { "type": "string", "nullable": true }, | |
| "recipientOrSenderIban": { "type": "string", "nullable": true }, | |
| "externalReference": { "type": "string", "description": "Bank-provided unique transaction reference" }, | |
| "endToEndId": { "type": "string", "nullable": true, "description": "SEPA end-to-end identifier" }, | |
| "pendingProposalId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "acceptedProposalId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "proposal": { | |
| "nullable": true, | |
| "$ref": "#/components/schemas/Proposal" | |
| }, | |
| "numberOfVouchers": { "type": "integer" }, | |
| "createdDate": { "type": "string", "format": "date-time", "description": "When the transaction was imported" }, | |
| "sepaTransferConfirmationPrintUrl": { "type": "string", "nullable": true }, | |
| "showValueDate": { "type": "boolean" } | |
| } | |
| }, | |
| "FinancialAccount": { | |
| "type": "object", | |
| "properties": { | |
| "financialAccountId": { "type": "string", "format": "uuid" }, | |
| "virtualAccountId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string", "description": "User-given account name" }, | |
| "bankName": { "type": "string" }, | |
| "brandColor": { "type": "string", "description": "Hex color code for UI display" }, | |
| "brandLogoUrlLight": { "type": "string" }, | |
| "brandLogoUrlDark": { "type": "string" }, | |
| "brandLogoUrlColor": { "type": "string" }, | |
| "brandLogoUrlAvatar": { "type": "string" }, | |
| "canIgnoreTransactions": { "type": "boolean" }, | |
| "type": { | |
| "type": "string", | |
| "enum": ["GIRO", "CREDITCARD", "SAVINGS"] | |
| }, | |
| "usingProfileType": { "type": "string", "enum": ["BUSINESS", "PRIVATE"] }, | |
| "printSepaTransferConfirmationAllowed": { "type": "boolean" } | |
| } | |
| }, | |
| "VoucherPaymentRequest": { | |
| "type": "object", | |
| "required": ["voucherReferences", "paymentReferences", "paymentDifferenceStrategy"], | |
| "properties": { | |
| "voucherReferences": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "required": ["voucherId", "voucherSource"], | |
| "properties": { | |
| "voucherId": { "type": "string", "format": "uuid" }, | |
| "voucherSource": { "type": "string", "enum": ["BOOKKEEPING_VOUCHER", "SALES_VOUCHER"] } | |
| } | |
| } | |
| }, | |
| "paymentReferences": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "required": ["paymentId", "paymentSource"], | |
| "properties": { | |
| "paymentId": { "type": "string", "format": "uuid", "description": "The financialTransactionId of the bank transaction" }, | |
| "paymentSource": { "type": "string", "enum": ["FINANCIAL_TRANSACTION", "CASH_BOX"] } | |
| } | |
| } | |
| }, | |
| "paymentDifferenceStrategy": { | |
| "type": "string", | |
| "enum": ["NONE", "CASH_DISCOUNT", "WRITE_OFF"], | |
| "description": "How to handle amount differences between voucher and transaction" | |
| } | |
| } | |
| }, | |
| "VoucherPaymentResponse": { | |
| "type": "object", | |
| "properties": { | |
| "voucherPayments": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "voucherPaymentId": { "type": "string", "format": "uuid" }, | |
| "paymentAmount": { "type": "number" }, | |
| "paymentSplitAmount": { "type": "number" }, | |
| "voucherOpenAmount": { "type": "number" }, | |
| "assignmentStatus": { "type": "string", "enum": ["booked", "pending"] }, | |
| "paymentDifferenceStrategy": { "type": "string" }, | |
| "paymentVirtualAccountId": { "type": "string", "format": "uuid" }, | |
| "paymentDate": { "type": "string", "format": "date-time" }, | |
| "note": { "type": "string", "nullable": true }, | |
| "voucherId": { "type": "string", "format": "uuid" }, | |
| "voucherType": { "type": "string", "enum": ["PURCHASE_INVOICE", "PURCHASE_CREDIT_NOTE", "SALES_INVOICE", "SALES_CREDIT_NOTE"] }, | |
| "voucherSource": { "type": "string" }, | |
| "paymentId": { "type": "string", "format": "uuid" }, | |
| "paymentSource": { "type": "string" }, | |
| "voucherIdentificationNumber": { "type": "string" }, | |
| "voucherNote": { "type": "string", "nullable": true }, | |
| "voucherDate": { "type": "string", "format": "date-time" }, | |
| "voucherTotalGrossAmount": { "type": "number" }, | |
| "voucherIsIncome": { "type": "boolean" }, | |
| "contactName": { "type": "string" }, | |
| "reservation": { "type": "boolean" } | |
| } | |
| } | |
| }, | |
| "voucherIsPartialPaid": { "type": "boolean" } | |
| } | |
| }, | |
| "TransactionSearchRequest": { | |
| "type": "object", | |
| "required": ["voucherId", "organizationId", "totalGrossAmount", "postingType", "voucherSource"], | |
| "properties": { | |
| "voucherId": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "companyName": { "type": "string", "description": "Contact/vendor name to match against transaction recipient/sender" }, | |
| "totalGrossAmount": { "type": "number", "description": "Voucher gross amount to match against transaction amount" }, | |
| "voucherDate": { "type": "string", "format": "date", "description": "Voucher date (YYYY-MM-DD)" }, | |
| "voucherNumber": { "type": "string" }, | |
| "postingType": { "type": "string", "enum": ["EXPENSE", "INCOME"] }, | |
| "voucherSource": { "type": "string", "enum": ["BOOKKEEPING_VOUCHER", "SALES_VOUCHER"] }, | |
| "ibans": { "type": "array", "items": { "type": "string" }, "description": "Known IBANs of the contact for matching" }, | |
| "note": { "type": "string" } | |
| } | |
| }, | |
| "TransactionSearchResponse": { | |
| "type": "object", | |
| "properties": { | |
| "searchRequestId": { "type": "string", "format": "uuid" }, | |
| "financialTransactionId": { "type": "string", "format": "uuid" }, | |
| "amount": { "type": "number" }, | |
| "transactionDate": { "type": "string", "format": "date-time" }, | |
| "recipientOrSenderName": { "type": "string" }, | |
| "purpose": { "type": "string" } | |
| } | |
| }, | |
| "BookkeepingVoucherUpdate": { | |
| "type": "object", | |
| "required": ["voucherId", "voucherType", "lockVersion", "taxType", "items", "totalGrossAmount"], | |
| "properties": { | |
| "voucherId": { "type": "string", "format": "uuid" }, | |
| "voucherType": { "type": "string", "enum": ["PurchaseInvoice", "PurchaseCreditNote", "SalesInvoice", "SalesCreditNote"] }, | |
| "identificationNumber": { "type": "string", "description": "Voucher/invoice number" }, | |
| "voucherDate": { "type": "string", "format": "date" }, | |
| "dueDate": { "type": "string", "format": "date" }, | |
| "note": { "type": "string" }, | |
| "contact": { | |
| "type": "object", | |
| "properties": { | |
| "contactId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string" } | |
| } | |
| }, | |
| "imageIds": { "type": "array", "items": { "type": "string", "format": "uuid" } }, | |
| "lockVersion": { "type": "integer", "description": "Optimistic locking version — GET the voucher first to get current version" }, | |
| "taxType": { "type": "string", "enum": ["gross", "net"] }, | |
| "payMethod": { "type": "string", "enum": ["notpaid", "paid", "cashbox", "banktransfer"] }, | |
| "billingState": { "type": "string", "enum": ["open", "paid", "voided"] }, | |
| "items": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "taxRate": { "type": "string", "enum": ["PERCENT_0", "PERCENT_7", "PERCENT_19"] }, | |
| "amount": { "type": "number" }, | |
| "postingCategory": { "type": "string", "description": "Category key from PostingCategory.name, e.g. 'LicencesConcessions', 'OfficeSupplies', 'LicencesConcessions13bNonEu'. Use searchPostingCategories to find valid values." } | |
| } | |
| } | |
| }, | |
| "totalGrossAmount": { "type": "number" }, | |
| "additionalInformation": { | |
| "type": "object", | |
| "properties": { | |
| "triggeringFinancialTransactionId": { "type": "string", "format": "uuid", "description": "Set this to link the voucher to a specific bank transaction during save" } | |
| } | |
| } | |
| } | |
| }, | |
| "BookkeepingVoucherResponse": { | |
| "type": "object", | |
| "properties": { | |
| "voucherId": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "lockVersion": { "type": "integer" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "afaSuitable": { "type": "boolean" }, | |
| "journalized": { "type": "boolean" }, | |
| "hasPayments": { "type": "boolean" }, | |
| "editable": { "type": "boolean" }, | |
| "imageIds": { "type": "array", "items": { "type": "string", "format": "uuid" } }, | |
| "voucherType": { "type": "string" }, | |
| "contact": { | |
| "type": "object", | |
| "properties": { | |
| "contactId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string" }, | |
| "collective": { "type": "boolean" } | |
| } | |
| }, | |
| "identificationNumber": { "type": "string" }, | |
| "dueDate": { "type": "string", "format": "date" }, | |
| "voucherDate": { "type": "string", "format": "date" }, | |
| "items": { "type": "array", "items": { "type": "object" } }, | |
| "billingState": { "type": "string" }, | |
| "taxType": { "type": "string" }, | |
| "totalGrossAmount": { "type": "number" } | |
| } | |
| }, | |
| "PostingCategory": { | |
| "type": "object", | |
| "properties": { | |
| "postingCategoryId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string", "description": "Machine-readable category key, e.g. 'LicencesConcessions13bNonEu', 'OfficeSupplies'. Use this value in BookkeepingVoucherUpdate.items[].postingCategory" }, | |
| "matchedTerms": { "type": "array", "items": { "type": "string" }, "description": "German display names that matched the search" }, | |
| "displayName": { "type": "string", "description": "Human-readable German name, e.g. 'Lizenzen/Konzessionen §13b Drittland'" }, | |
| "accountInformation": { "type": "string", "description": "SKR chart-of-accounts number and description" }, | |
| "description": { "type": "string", "description": "Detailed German explanation of when to use this category" }, | |
| "splitAllowed": { "type": "boolean", "description": "Whether this category can be split across multiple line items" }, | |
| "reverseCharge": { "type": "boolean", "description": "True for §13b reverse-charge categories" }, | |
| "parentId": { "type": "string", "format": "uuid", "description": "Parent category group UUID" }, | |
| "contactRequired": { "type": "boolean", "description": "Whether a contact must be set when using this category" } | |
| } | |
| }, | |
| "TaxRate": { | |
| "type": "object", | |
| "properties": { | |
| "taxRateId": { "type": "string", "format": "uuid" }, | |
| "formatVersion": { "type": "integer" }, | |
| "i18nKey": { "type": "string", "description": "Localization key, e.g. 'ReC19' (reverse-charge 19%), 'ReC16' (reverse-charge 16%)" }, | |
| "percent": { "type": "number", "description": "Displayed tax percentage (0 for reverse-charge since buyer reports VAT)" }, | |
| "calcPercent": { "type": "number", "description": "Actual calculation percentage (19.0 or 16.0 for reverse-charge)" }, | |
| "taxRateLevel": { "type": "string", "enum": ["regular", "reduced"], "description": "Whether this is the regular or reduced rate" }, | |
| "countryCode": { "type": "string" }, | |
| "preferred": { "type": "boolean" }, | |
| "validities": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "validFrom": { "type": "string", "format": "date-time" }, | |
| "validTo": { "type": "string", "format": "date-time" } | |
| } | |
| }, | |
| "description": "Date ranges when this tax rate is applicable (note: 16% was only valid Jul-Dec 2020)" | |
| } | |
| } | |
| }, | |
| "Proposal": { | |
| "type": "object", | |
| "description": "Assignment proposal — either a CATEGORY or VOUCHER match. Fields present depend on proposalType.", | |
| "properties": { | |
| "proposalId": { "type": "string", "format": "uuid" }, | |
| "proposalOrigin": { | |
| "type": "string", | |
| "enum": [ | |
| "EXTENDED_CUSTOM_CATEGORIZATION", | |
| "CUSTOM_CATEGORIZATION_V2", | |
| "MACHINE_LEARNING", | |
| "VOUCHER_BANK_TRANSFER", | |
| "VOUCHER_SEARCH", | |
| "VOUCHER_DRIVEN_TRANSACTION_SEARCH_WITH_AMOUNT" | |
| ] | |
| }, | |
| "proposalOriginScore": { "type": "integer", "description": "Confidence score (0-100)" }, | |
| "proposalAutoBooked": { "type": "boolean" }, | |
| "proposalUnchecked": { "type": "boolean" }, | |
| "proposalType": { "type": "string", "enum": ["CATEGORY", "VOUCHER"] }, | |
| "proposalReviewResult": { "type": "string", "enum": ["ACCEPTED", "REJECTED", "PENDING"] }, | |
| "proposalExternalReference": { "type": "string", "format": "uuid" }, | |
| "proposalNote": { "type": "string", "nullable": true }, | |
| "proposalVoucherPaymentDifferenceStrategy": { "type": "string", "nullable": true }, | |
| "proposalCategoryName": { "type": "string", "description": "Present when proposalType=CATEGORY" }, | |
| "proposalCategoryTaxRateName": { "type": "string", "description": "Present when proposalType=CATEGORY" }, | |
| "proposalCategoryId": { "type": "string", "format": "uuid", "description": "Present when proposalType=CATEGORY" }, | |
| "proposalTaxRateId": { "type": "string", "format": "uuid", "description": "Present when proposalType=CATEGORY" }, | |
| "proposalVoucherId": { "type": "string", "format": "uuid", "description": "Present when proposalType=VOUCHER" }, | |
| "proposalVoucherType": { "type": "string", "enum": ["Invoice", "PurchaseInvoice"], "description": "Present when proposalType=VOUCHER" }, | |
| "proposalVoucherNumber": { "type": "string", "description": "Present when proposalType=VOUCHER" }, | |
| "proposalVoucherDate": { "type": "string", "format": "date-time", "description": "Present when proposalType=VOUCHER" }, | |
| "proposalVoucherContactName": { "type": "string", "description": "Present when proposalType=VOUCHER" }, | |
| "proposalVoucherTotalGrossAmount": { "type": "number", "description": "Present when proposalType=VOUCHER" } | |
| } | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "openapi": "3.0.3", | |
| "info": { | |
| "title": "Lexware API", | |
| "description": "OpenAPI specification for the Lexware (lexoffice) Public API and internal UI endpoints. Public endpoints use api.lexware.io with a Bearer API key. Internal endpoints use app.lexware.de with a session JWT cookie (grldJWT) obtained after browser login.", | |
| "version": "1.1.0", | |
| "contact": { | |
| "name": "Lexware Developer Portal", | |
| "url": "https://developers.lexware.io" | |
| } | |
| }, | |
| "servers": [ | |
| { | |
| "url": "https://api.lexware.io/v1", | |
| "description": "Lexware Public API" | |
| } | |
| ], | |
| "security": [ | |
| { | |
| "bearerAuth": [] | |
| } | |
| ], | |
| "paths": { | |
| "/voucherlist": { | |
| "get": { | |
| "operationId": "getVoucherlist", | |
| "summary": "List and filter vouchers", | |
| "description": "Returns paginated meta data for vouchers matching the given filter parameters. Filters voucherType and voucherStatus are mandatory.", | |
| "parameters": [ | |
| { | |
| "name": "voucherType", | |
| "in": "query", | |
| "required": true, | |
| "description": "Comma-separated list of voucher types or 'any'. Values: salesinvoice, salescreditnote, purchaseinvoice, purchasecreditnote, invoice, downpaymentinvoice, creditnote, orderconfirmation, quotation, deliverynote.", | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "voucherStatus", | |
| "in": "query", | |
| "required": true, | |
| "description": "Comma-separated list of voucher statuses or 'any'. Values: draft, open, paid, paidoff, voided, transferred, sepadebit, overdue, accepted, rejected, unchecked.", | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "archived", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "boolean" } | |
| }, | |
| { | |
| "name": "contactId", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "format": "uuid" } | |
| }, | |
| { | |
| "name": "voucherDateFrom", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter from date in yyyy-MM-dd format.", | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "voucherDateTo", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter to date in yyyy-MM-dd format.", | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "createdDateFrom", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "createdDateTo", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "updatedDateFrom", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "updatedDateTo", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "format": "date" } | |
| }, | |
| { | |
| "name": "voucherNumber", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "size", | |
| "in": "query", | |
| "required": false, | |
| "description": "Page size, default 25, max 250.", | |
| "schema": { "type": "integer", "default": 25, "maximum": 250 } | |
| }, | |
| { | |
| "name": "page", | |
| "in": "query", | |
| "required": false, | |
| "description": "0-based page index.", | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "sort", | |
| "in": "query", | |
| "required": false, | |
| "description": "Sort property and direction, e.g. 'voucherDate,DESC'. Properties: voucherDate, voucherNumber, createdDate, updatedDate.", | |
| "schema": { "type": "string" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of voucher metadata", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoucherlistPage" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/invoices": { | |
| "post": { | |
| "operationId": "createInvoice", | |
| "summary": "Create an invoice", | |
| "description": "Creates a new invoice. By default created as draft. Set finalize=true to create a finalized invoice with status 'open'.", | |
| "parameters": [ | |
| { | |
| "name": "finalize", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "boolean" } | |
| }, | |
| { | |
| "name": "precedingSalesVoucherId", | |
| "in": "query", | |
| "required": false, | |
| "description": "ID of a preceding sales voucher to pursue.", | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/InvoiceCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Created invoice reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/invoices/{id}": { | |
| "get": { | |
| "operationId": "getInvoice", | |
| "summary": "Retrieve an invoice by ID", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Invoice details", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Invoice" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/invoices/{id}/file": { | |
| "get": { | |
| "operationId": "downloadInvoiceFile", | |
| "summary": "Download invoice PDF/XML file", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Invoice file as binary data", | |
| "content": { | |
| "application/pdf": { | |
| "schema": { "type": "string", "format": "binary" } | |
| }, | |
| "application/xml": { | |
| "schema": { "type": "string", "format": "binary" } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/contacts": { | |
| "get": { | |
| "operationId": "listContacts", | |
| "summary": "List and filter contacts", | |
| "parameters": [ | |
| { | |
| "name": "email", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by email (min 3 chars, pattern matching with _ and %).", | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "name", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by name (min 3 chars, pattern matching with _ and %).", | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "number", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by customer/vendor number.", | |
| "schema": { "type": "integer" } | |
| }, | |
| { | |
| "name": "customer", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "boolean" } | |
| }, | |
| { | |
| "name": "vendor", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "boolean" } | |
| }, | |
| { | |
| "name": "page", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "size", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 25, "maximum": 250 } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of contacts", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ContactsPage" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "post": { | |
| "operationId": "createContact", | |
| "summary": "Create a new contact", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ContactCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Created contact reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/contacts/{id}": { | |
| "get": { | |
| "operationId": "getContact", | |
| "summary": "Retrieve a contact by ID", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Contact details", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Contact" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "put": { | |
| "operationId": "updateContact", | |
| "summary": "Update an existing contact", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ContactCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Updated contact reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/articles": { | |
| "get": { | |
| "operationId": "listArticles", | |
| "summary": "List and filter articles", | |
| "parameters": [ | |
| { | |
| "name": "articleNumber", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "gtin", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "type", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "string", "enum": ["PRODUCT", "SERVICE"] } | |
| }, | |
| { | |
| "name": "page", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "size", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 25, "maximum": 250 } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of articles", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ArticlesPage" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "post": { | |
| "operationId": "createArticle", | |
| "summary": "Create an article", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ArticleCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Created article reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/articles/{id}": { | |
| "get": { | |
| "operationId": "getArticle", | |
| "summary": "Retrieve an article by ID", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Article details", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Article" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "put": { | |
| "operationId": "updateArticle", | |
| "summary": "Update an existing article", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ArticleCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Updated article reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "delete": { | |
| "operationId": "deleteArticle", | |
| "summary": "Delete an article", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "204": { "description": "Article deleted successfully" }, | |
| "404": { "description": "Article not found" } | |
| } | |
| } | |
| }, | |
| "/vouchers": { | |
| "get": { | |
| "operationId": "filterVouchers", | |
| "summary": "Filter bookkeeping vouchers by voucherNumber (deprecated, use /voucherlist instead)", | |
| "deprecated": true, | |
| "parameters": [ | |
| { | |
| "name": "voucherNumber", | |
| "in": "query", | |
| "required": true, | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "page", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "size", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 25, "maximum": 250 } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of vouchers matching the filter", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VouchersPage" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "post": { | |
| "operationId": "createVoucher", | |
| "summary": "Create a bookkeeping voucher", | |
| "description": "Creates a new bookkeeping voucher (e.g. purchase invoice, sales invoice for bookkeeping). Set voucherStatus to 'unchecked' for draft vouchers that still need review. The created voucher appears in the main voucher list in Lexware.", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoucherCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Created voucher reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/vouchers/{id}": { | |
| "get": { | |
| "operationId": "getVoucher", | |
| "summary": "Retrieve a bookkeeping voucher by ID", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Voucher details", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Voucher" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "put": { | |
| "operationId": "updateVoucher", | |
| "summary": "Update a bookkeeping voucher", | |
| "description": "Updates an existing voucher. The version field must match the current version (optimistic locking). Status cannot be changed except from 'unchecked' to 'open'. Omitting file ids from the files array will permanently delete those files.", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoucherCreateRequest" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Updated voucher reference", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ActionResult" | |
| } | |
| } | |
| } | |
| }, | |
| "409": { | |
| "description": "Version conflict - refresh via GET and retry" | |
| } | |
| } | |
| } | |
| }, | |
| "/vouchers/{id}/files": { | |
| "post": { | |
| "operationId": "uploadVoucherFile", | |
| "summary": "Upload a file (PDF/image/XML) to a voucher", | |
| "description": "Upload and assign a file to the voucher identified by {id}. Supported formats: pdf, jpg, png, xml. Max 5 MB. Duplicate files (by checksum) return the existing file id.", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "multipart/form-data": { | |
| "schema": { | |
| "type": "object", | |
| "properties": { | |
| "file": { | |
| "type": "string", | |
| "format": "binary", | |
| "description": "The file to upload (pdf, jpg, png, or xml)" | |
| } | |
| }, | |
| "required": ["file"] | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "202": { | |
| "description": "File accepted and assigned to voucher", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/FileUploadResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "406": { | |
| "description": "Invalid file content or format" | |
| } | |
| } | |
| } | |
| }, | |
| "/files": { | |
| "post": { | |
| "operationId": "uploadFile", | |
| "summary": "Upload a standalone file (creates an unchecked voucher)", | |
| "description": "Upload a file to Lexware. A voucher in 'unchecked' status is automatically created. The voucher will go through OCR processing (initially 'blank', then 'unchecked' when done). Supported formats: pdf, jpg, png, xml. Max 5 MB.", | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "multipart/form-data": { | |
| "schema": { | |
| "type": "object", | |
| "properties": { | |
| "file": { | |
| "type": "string", | |
| "format": "binary", | |
| "description": "The file to upload" | |
| }, | |
| "type": { | |
| "type": "string", | |
| "enum": ["voucher"], | |
| "description": "Upload type, must be 'voucher'" | |
| } | |
| }, | |
| "required": ["file", "type"] | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "202": { | |
| "description": "File accepted, voucher created", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/FileUploadResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "400": { | |
| "description": "Missing or invalid upload type" | |
| }, | |
| "406": { | |
| "description": "Invalid file content or format" | |
| } | |
| } | |
| } | |
| }, | |
| "/files/{id}": { | |
| "get": { | |
| "operationId": "downloadFile", | |
| "summary": "Download a file by ID", | |
| "description": "Returns the file as binary data. Use Accept header to choose format: */* for default, application/xml for e-invoice XML, application/pdf for PDF. Deprecated for sales voucher documents — use the sales voucher file subresource instead.", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "File binary data", | |
| "content": { | |
| "application/pdf": { | |
| "schema": { "type": "string", "format": "binary" } | |
| }, | |
| "application/xml": { | |
| "schema": { "type": "string", "format": "binary" } | |
| }, | |
| "image/png": { | |
| "schema": { "type": "string", "format": "binary" } | |
| }, | |
| "image/jpeg": { | |
| "schema": { "type": "string", "format": "binary" } | |
| } | |
| } | |
| }, | |
| "404": { | |
| "description": "File not found or format not available" | |
| } | |
| } | |
| } | |
| }, | |
| "/posting-categories": { | |
| "get": { | |
| "operationId": "listPostingCategories", | |
| "summary": "List all posting categories for bookkeeping vouchers", | |
| "description": "Returns all posting categories. Use 'income' type categories for salesinvoice/salescreditnote and 'outgo' type for purchaseinvoice/purchasecreditnote.", | |
| "responses": { | |
| "200": { | |
| "description": "List of posting categories", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/components/schemas/PostingCategory" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/recurring-templates": { | |
| "get": { | |
| "operationId": "listRecurringTemplates", | |
| "summary": "List all recurring invoice templates", | |
| "parameters": [ | |
| { | |
| "name": "page", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "size", | |
| "in": "query", | |
| "required": false, | |
| "schema": { "type": "integer", "default": 25, "maximum": 250 } | |
| }, | |
| { | |
| "name": "sort", | |
| "in": "query", | |
| "required": false, | |
| "description": "Sort by createdDate, updatedDate, lastExecutionDate, or nextExecutionDate. Direction: ASC or DESC.", | |
| "schema": { "type": "string" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of recurring templates", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/RecurringTemplatesPage" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/recurring-templates/{id}": { | |
| "get": { | |
| "operationId": "getRecurringTemplate", | |
| "summary": "Retrieve a recurring template by ID", | |
| "parameters": [ | |
| { | |
| "name": "id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { "type": "string", "format": "uuid" } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Recurring template details", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/RecurringTemplate" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "/fis/finance-rest/financialtransactionservice/v3/financialTransactions": { | |
| "get": { | |
| "operationId": "listFinancialTransactions", | |
| "summary": "List bank account transactions (internal UI endpoint) - USE lexware_internal.listFinancialTransactions INSTEAD", | |
| "description": "Returns paginated bank account transactions. This is an undocumented internal endpoint on app.lexware.de (NOT api.lexware.io). This entry is for documentation only. The working UTCP tool is registered separately as lexware_internal.listFinancialTransactions.", | |
| "deprecated": true, | |
| "security": [ | |
| { | |
| "sessionJWT": [] | |
| } | |
| ], | |
| "parameters": [ | |
| { | |
| "name": "pageNumber", | |
| "in": "query", | |
| "required": false, | |
| "description": "0-based page index.", | |
| "schema": { "type": "integer", "default": 0 } | |
| }, | |
| { | |
| "name": "pageSize", | |
| "in": "query", | |
| "required": false, | |
| "description": "Number of items per page.", | |
| "schema": { "type": "integer", "default": 50 } | |
| }, | |
| { | |
| "name": "ignored", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by ignored status. Set to false to exclude ignored transactions.", | |
| "schema": { "type": "boolean", "default": false } | |
| }, | |
| { | |
| "name": "negativeAmounts", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter for negative amounts (outgoing payments) only.", | |
| "schema": { "type": "boolean" } | |
| }, | |
| { | |
| "name": "searchTerm", | |
| "in": "query", | |
| "required": false, | |
| "description": "Free text search across recipient/sender name, purpose, etc. Matching terms are highlighted with <em> tags in the response.", | |
| "schema": { "type": "string" } | |
| }, | |
| { | |
| "name": "dateFrom", | |
| "in": "query", | |
| "required": false, | |
| "description": "Start date filter in ISO 8601 format (e.g. 2024-01-01T00:00:00.000Z).", | |
| "schema": { "type": "string", "format": "date-time" } | |
| }, | |
| { | |
| "name": "dateTo", | |
| "in": "query", | |
| "required": false, | |
| "description": "End date filter in ISO 8601 format.", | |
| "schema": { "type": "string", "format": "date-time" } | |
| }, | |
| { | |
| "name": "financialAccountIds", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by financial account UUID. Can be comma-separated for multiple accounts.", | |
| "schema": { "type": "string", "format": "uuid" } | |
| }, | |
| { | |
| "name": "financialAccountType", | |
| "in": "query", | |
| "required": false, | |
| "description": "Filter by account type.", | |
| "schema": { "type": "string", "enum": ["GIRO", "CREDIT_CARD", "SAVINGS"] } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Paginated list of financial transactions", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/FinancialTransactionsPage" | |
| } | |
| } | |
| } | |
| }, | |
| "401": { | |
| "description": "JWT expired or invalid" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "components": { | |
| "securitySchemes": { | |
| "bearerAuth": { | |
| "type": "http", | |
| "scheme": "bearer", | |
| "description": "Lexware API key as Bearer token (for api.lexware.io endpoints)" | |
| }, | |
| "sessionJWT": { | |
| "type": "apiKey", | |
| "in": "cookie", | |
| "name": "grldJWT", | |
| "description": "Session JWT cookie obtained after browser login to app.lexware.de. Expires after ~5 hours. Also requires grldOrganizationId cookie." | |
| } | |
| }, | |
| "schemas": { | |
| "ActionResult": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "resourceUri": { "type": "string", "format": "uri" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "version": { "type": "integer" } | |
| } | |
| }, | |
| "PageInfo": { | |
| "type": "object", | |
| "properties": { | |
| "first": { "type": "boolean" }, | |
| "last": { "type": "boolean" }, | |
| "totalPages": { "type": "integer" }, | |
| "totalElements": { "type": "integer" }, | |
| "numberOfElements": { "type": "integer" }, | |
| "size": { "type": "integer" }, | |
| "number": { "type": "integer" } | |
| } | |
| }, | |
| "VoucherlistItem": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "voucherType": { | |
| "type": "string", | |
| "enum": ["salesinvoice", "salescreditnote", "purchaseinvoice", "purchasecreditnote", "invoice", "downpaymentinvoice", "creditnote", "orderconfirmation", "quotation", "deliverynote"] | |
| }, | |
| "voucherStatus": { | |
| "type": "string", | |
| "enum": ["draft", "open", "paid", "paidoff", "voided", "transferred", "sepadebit", "overdue", "accepted", "rejected", "unchecked"] | |
| }, | |
| "voucherNumber": { "type": "string" }, | |
| "voucherDate": { "type": "string", "format": "date-time" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "dueDate": { "type": "string", "format": "date-time", "nullable": true }, | |
| "contactId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "contactName": { "type": "string" }, | |
| "totalAmount": { "type": "number" }, | |
| "openAmount": { "type": "number", "nullable": true }, | |
| "currency": { "type": "string", "enum": ["EUR"] }, | |
| "archived": { "type": "boolean" } | |
| } | |
| }, | |
| "VoucherlistPage": { | |
| "allOf": [ | |
| { "$ref": "#/components/schemas/PageInfo" }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/VoucherlistItem" } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "Address": { | |
| "type": "object", | |
| "properties": { | |
| "contactId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string" }, | |
| "supplement": { "type": "string" }, | |
| "street": { "type": "string" }, | |
| "city": { "type": "string" }, | |
| "zip": { "type": "string" }, | |
| "countryCode": { "type": "string" }, | |
| "contactPerson": { "type": "string" } | |
| } | |
| }, | |
| "UnitPrice": { | |
| "type": "object", | |
| "properties": { | |
| "currency": { "type": "string", "enum": ["EUR"] }, | |
| "netAmount": { "type": "number" }, | |
| "grossAmount": { "type": "number" }, | |
| "taxRatePercentage": { "type": "number" } | |
| }, | |
| "required": ["currency", "taxRatePercentage"] | |
| }, | |
| "LineItem": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "type": { "type": "string", "enum": ["service", "material", "custom", "text"] }, | |
| "name": { "type": "string" }, | |
| "description": { "type": "string" }, | |
| "quantity": { "type": "number" }, | |
| "unitName": { "type": "string" }, | |
| "unitPrice": { "$ref": "#/components/schemas/UnitPrice" }, | |
| "discountPercentage": { "type": "number" }, | |
| "lineItemAmount": { "type": "number" } | |
| }, | |
| "required": ["type", "name"] | |
| }, | |
| "TotalPrice": { | |
| "type": "object", | |
| "properties": { | |
| "currency": { "type": "string", "enum": ["EUR"] }, | |
| "totalNetAmount": { "type": "number" }, | |
| "totalGrossAmount": { "type": "number" }, | |
| "totalTaxAmount": { "type": "number" }, | |
| "totalDiscountAbsolute": { "type": "number", "nullable": true }, | |
| "totalDiscountPercentage": { "type": "number", "nullable": true } | |
| }, | |
| "required": ["currency"] | |
| }, | |
| "TaxAmount": { | |
| "type": "object", | |
| "properties": { | |
| "taxRatePercentage": { "type": "number" }, | |
| "taxAmount": { "type": "number" }, | |
| "netAmount": { "type": "number" } | |
| } | |
| }, | |
| "TaxConditions": { | |
| "type": "object", | |
| "properties": { | |
| "taxType": { | |
| "type": "string", | |
| "enum": ["net", "gross", "vatfree", "intraCommunitySupply", "constructionService13b", "externalService13b", "thirdPartyCountryService", "thirdPartyCountryDelivery", "photovoltaicEquipment"] | |
| }, | |
| "taxSubType": { "type": "string", "enum": ["distanceSales", "electronicServices"], "nullable": true }, | |
| "taxTypeNote": { "type": "string", "nullable": true } | |
| }, | |
| "required": ["taxType"] | |
| }, | |
| "PaymentConditions": { | |
| "type": "object", | |
| "properties": { | |
| "paymentTermLabel": { "type": "string" }, | |
| "paymentTermLabelTemplate": { "type": "string" }, | |
| "paymentTermDuration": { "type": "integer" }, | |
| "paymentDiscountConditions": { | |
| "type": "object", | |
| "properties": { | |
| "discountPercentage": { "type": "number" }, | |
| "discountRange": { "type": "integer" } | |
| } | |
| } | |
| } | |
| }, | |
| "ShippingConditions": { | |
| "type": "object", | |
| "properties": { | |
| "shippingDate": { "type": "string", "format": "date-time" }, | |
| "shippingEndDate": { "type": "string", "format": "date-time", "nullable": true }, | |
| "shippingType": { "type": "string", "enum": ["service", "serviceperiod", "delivery", "deliveryperiod", "none"] } | |
| }, | |
| "required": ["shippingType"] | |
| }, | |
| "Invoice": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "version": { "type": "integer" }, | |
| "language": { "type": "string" }, | |
| "archived": { "type": "boolean" }, | |
| "voucherStatus": { "type": "string", "enum": ["draft", "open", "paid", "voided"] }, | |
| "voucherNumber": { "type": "string" }, | |
| "voucherDate": { "type": "string", "format": "date-time" }, | |
| "dueDate": { "type": "string", "format": "date-time", "nullable": true }, | |
| "address": { "$ref": "#/components/schemas/Address" }, | |
| "lineItems": { "type": "array", "items": { "$ref": "#/components/schemas/LineItem" } }, | |
| "totalPrice": { "$ref": "#/components/schemas/TotalPrice" }, | |
| "taxAmounts": { "type": "array", "items": { "$ref": "#/components/schemas/TaxAmount" } }, | |
| "taxConditions": { "$ref": "#/components/schemas/TaxConditions" }, | |
| "paymentConditions": { "$ref": "#/components/schemas/PaymentConditions" }, | |
| "shippingConditions": { "$ref": "#/components/schemas/ShippingConditions" }, | |
| "closingInvoice": { "type": "boolean" }, | |
| "recurringTemplateId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "printLayoutId": { "type": "string", "format": "uuid" }, | |
| "title": { "type": "string" }, | |
| "introduction": { "type": "string" }, | |
| "remark": { "type": "string" }, | |
| "files": { | |
| "type": "object", | |
| "properties": { | |
| "documentFileId": { "type": "string", "format": "uuid" } | |
| } | |
| } | |
| } | |
| }, | |
| "InvoiceCreateRequest": { | |
| "type": "object", | |
| "properties": { | |
| "voucherDate": { "type": "string", "format": "date-time" }, | |
| "address": { "$ref": "#/components/schemas/Address" }, | |
| "lineItems": { "type": "array", "items": { "$ref": "#/components/schemas/LineItem" } }, | |
| "totalPrice": { "$ref": "#/components/schemas/TotalPrice" }, | |
| "taxConditions": { "$ref": "#/components/schemas/TaxConditions" }, | |
| "paymentConditions": { "$ref": "#/components/schemas/PaymentConditions" }, | |
| "shippingConditions": { "$ref": "#/components/schemas/ShippingConditions" }, | |
| "language": { "type": "string", "enum": ["de", "en"] }, | |
| "printLayoutId": { "type": "string", "format": "uuid" }, | |
| "title": { "type": "string" }, | |
| "introduction": { "type": "string" }, | |
| "remark": { "type": "string" } | |
| }, | |
| "required": ["voucherDate", "address", "lineItems", "totalPrice", "taxConditions", "shippingConditions"] | |
| }, | |
| "Contact": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "version": { "type": "integer" }, | |
| "roles": { | |
| "type": "object", | |
| "properties": { | |
| "customer": { | |
| "type": "object", | |
| "properties": { "number": { "type": "integer" } } | |
| }, | |
| "vendor": { | |
| "type": "object", | |
| "properties": { "number": { "type": "integer" } } | |
| } | |
| } | |
| }, | |
| "company": { | |
| "type": "object", | |
| "properties": { | |
| "name": { "type": "string" }, | |
| "taxNumber": { "type": "string" }, | |
| "vatRegistrationId": { "type": "string" }, | |
| "allowTaxFreeInvoices": { "type": "boolean" }, | |
| "contactPersons": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "salutation": { "type": "string" }, | |
| "firstName": { "type": "string" }, | |
| "lastName": { "type": "string" }, | |
| "primary": { "type": "boolean" }, | |
| "emailAddress": { "type": "string" }, | |
| "phoneNumber": { "type": "string" } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "person": { | |
| "type": "object", | |
| "properties": { | |
| "salutation": { "type": "string" }, | |
| "firstName": { "type": "string" }, | |
| "lastName": { "type": "string" } | |
| } | |
| }, | |
| "addresses": { | |
| "type": "object", | |
| "properties": { | |
| "billing": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "supplement": { "type": "string" }, | |
| "street": { "type": "string" }, | |
| "zip": { "type": "string" }, | |
| "city": { "type": "string" }, | |
| "countryCode": { "type": "string" } | |
| } | |
| } | |
| }, | |
| "shipping": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "supplement": { "type": "string" }, | |
| "street": { "type": "string" }, | |
| "zip": { "type": "string" }, | |
| "city": { "type": "string" }, | |
| "countryCode": { "type": "string" } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "emailAddresses": { | |
| "type": "object", | |
| "properties": { | |
| "business": { "type": "array", "items": { "type": "string" } }, | |
| "office": { "type": "array", "items": { "type": "string" } }, | |
| "private": { "type": "array", "items": { "type": "string" } }, | |
| "other": { "type": "array", "items": { "type": "string" } } | |
| } | |
| }, | |
| "phoneNumbers": { | |
| "type": "object", | |
| "properties": { | |
| "business": { "type": "array", "items": { "type": "string" } }, | |
| "office": { "type": "array", "items": { "type": "string" } }, | |
| "mobile": { "type": "array", "items": { "type": "string" } }, | |
| "private": { "type": "array", "items": { "type": "string" } }, | |
| "fax": { "type": "array", "items": { "type": "string" } }, | |
| "other": { "type": "array", "items": { "type": "string" } } | |
| } | |
| }, | |
| "note": { "type": "string" }, | |
| "archived": { "type": "boolean" } | |
| } | |
| }, | |
| "ContactCreateRequest": { | |
| "type": "object", | |
| "properties": { | |
| "version": { "type": "integer" }, | |
| "roles": { | |
| "type": "object", | |
| "properties": { | |
| "customer": { "type": "object" }, | |
| "vendor": { "type": "object" } | |
| } | |
| }, | |
| "company": { | |
| "type": "object", | |
| "properties": { | |
| "name": { "type": "string" }, | |
| "taxNumber": { "type": "string" }, | |
| "vatRegistrationId": { "type": "string" }, | |
| "allowTaxFreeInvoices": { "type": "boolean" }, | |
| "contactPersons": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "salutation": { "type": "string" }, | |
| "firstName": { "type": "string" }, | |
| "lastName": { "type": "string" }, | |
| "primary": { "type": "boolean" }, | |
| "emailAddress": { "type": "string" }, | |
| "phoneNumber": { "type": "string" } | |
| }, | |
| "required": ["lastName"] | |
| } | |
| } | |
| } | |
| }, | |
| "person": { | |
| "type": "object", | |
| "properties": { | |
| "salutation": { "type": "string" }, | |
| "firstName": { "type": "string" }, | |
| "lastName": { "type": "string" } | |
| }, | |
| "required": ["lastName"] | |
| }, | |
| "addresses": { | |
| "type": "object", | |
| "properties": { | |
| "billing": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "supplement": { "type": "string" }, | |
| "street": { "type": "string" }, | |
| "zip": { "type": "string" }, | |
| "city": { "type": "string" }, | |
| "countryCode": { "type": "string" } | |
| }, | |
| "required": ["countryCode"] | |
| } | |
| }, | |
| "shipping": { | |
| "type": "array", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "supplement": { "type": "string" }, | |
| "street": { "type": "string" }, | |
| "zip": { "type": "string" }, | |
| "city": { "type": "string" }, | |
| "countryCode": { "type": "string" } | |
| }, | |
| "required": ["countryCode"] | |
| } | |
| } | |
| } | |
| }, | |
| "note": { "type": "string" } | |
| }, | |
| "required": ["version", "roles"] | |
| }, | |
| "ContactsPage": { | |
| "allOf": [ | |
| { "$ref": "#/components/schemas/PageInfo" }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/Contact" } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "Article": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "archived": { "type": "boolean" }, | |
| "title": { "type": "string" }, | |
| "description": { "type": "string" }, | |
| "type": { "type": "string", "enum": ["PRODUCT", "SERVICE"] }, | |
| "articleNumber": { "type": "string" }, | |
| "gtin": { "type": "string" }, | |
| "note": { "type": "string" }, | |
| "unitName": { "type": "string" }, | |
| "price": { | |
| "type": "object", | |
| "properties": { | |
| "netPrice": { "type": "number" }, | |
| "grossPrice": { "type": "number" }, | |
| "leadingPrice": { "type": "string", "enum": ["NET", "GROSS"] }, | |
| "taxRate": { "type": "number" } | |
| } | |
| }, | |
| "version": { "type": "integer" } | |
| } | |
| }, | |
| "ArticleCreateRequest": { | |
| "type": "object", | |
| "properties": { | |
| "title": { "type": "string" }, | |
| "description": { "type": "string" }, | |
| "type": { "type": "string", "enum": ["PRODUCT", "SERVICE"] }, | |
| "articleNumber": { "type": "string" }, | |
| "gtin": { "type": "string" }, | |
| "note": { "type": "string" }, | |
| "unitName": { "type": "string" }, | |
| "price": { | |
| "type": "object", | |
| "properties": { | |
| "netPrice": { "type": "number" }, | |
| "grossPrice": { "type": "number" }, | |
| "leadingPrice": { "type": "string", "enum": ["NET", "GROSS"] }, | |
| "taxRate": { "type": "number" } | |
| }, | |
| "required": ["leadingPrice", "taxRate"] | |
| } | |
| }, | |
| "required": ["title", "type", "unitName", "price"] | |
| }, | |
| "ArticlesPage": { | |
| "allOf": [ | |
| { "$ref": "#/components/schemas/PageInfo" }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/Article" } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "RecurringTemplateSettings": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "startDate": { "type": "string", "format": "date", "nullable": true }, | |
| "endDate": { "type": "string", "format": "date", "nullable": true }, | |
| "finalize": { "type": "boolean" }, | |
| "shippingType": { "type": "string", "enum": ["service", "serviceperiod", "delivery", "deliveryperiod", "none"] }, | |
| "retroactiveInvoice": { "type": "boolean" }, | |
| "executionInterval": { "type": "string", "enum": ["WEEKLY", "BIWEEKLY", "MONTHLY", "QUARTERLY", "BIANNUALLY", "ANNUALLY"] }, | |
| "nextExecutionDate": { "type": "string", "format": "date", "nullable": true }, | |
| "lastExecutionFailed": { "type": "boolean" }, | |
| "lastExecutionErrorMessage": { "type": "string", "nullable": true }, | |
| "executionStatus": { "type": "string", "enum": ["ACTIVE", "PAUSED", "ENDED"] } | |
| } | |
| }, | |
| "RecurringTemplate": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "version": { "type": "integer" }, | |
| "language": { "type": "string" }, | |
| "archived": { "type": "boolean" }, | |
| "address": { "$ref": "#/components/schemas/Address" }, | |
| "lineItems": { "type": "array", "items": { "$ref": "#/components/schemas/LineItem" } }, | |
| "totalPrice": { "$ref": "#/components/schemas/TotalPrice" }, | |
| "taxAmounts": { "type": "array", "items": { "$ref": "#/components/schemas/TaxAmount" } }, | |
| "taxConditions": { "$ref": "#/components/schemas/TaxConditions" }, | |
| "paymentConditions": { "$ref": "#/components/schemas/PaymentConditions" }, | |
| "title": { "type": "string" }, | |
| "introduction": { "type": "string" }, | |
| "remark": { "type": "string" }, | |
| "recurringTemplateSettings": { "$ref": "#/components/schemas/RecurringTemplateSettings" } | |
| } | |
| }, | |
| "RecurringTemplatesPage": { | |
| "allOf": [ | |
| { "$ref": "#/components/schemas/PageInfo" }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/RecurringTemplate" } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "VoucherItem": { | |
| "type": "object", | |
| "description": "A line item of a bookkeeping voucher, grouped by tax rate.", | |
| "properties": { | |
| "amount": { "type": "number", "description": "Net or gross amount depending on voucher taxType. Format ##.00" }, | |
| "taxAmount": { "type": "number", "description": "Tax amount for this item. Format ##.00" }, | |
| "taxRatePercent": { "type": "number", "description": "Tax rate as percentage (e.g. 19, 7, 0)" }, | |
| "categoryId": { "type": "string", "format": "uuid", "description": "Posting category ID from /posting-categories" } | |
| }, | |
| "required": ["amount", "taxAmount", "taxRatePercent", "categoryId"] | |
| }, | |
| "Voucher": { | |
| "type": "object", | |
| "description": "A bookkeeping voucher (Beleg) — container for bookkeeping data with optional receipt file.", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "organizationId": { "type": "string", "format": "uuid" }, | |
| "type": { | |
| "type": "string", | |
| "enum": ["salesinvoice", "salescreditnote", "purchaseinvoice", "purchasecreditnote"] | |
| }, | |
| "voucherStatus": { | |
| "type": "string", | |
| "enum": ["blank", "open", "paid", "paidoff", "voided", "transferred", "sepadebit", "unchecked"] | |
| }, | |
| "voucherNumber": { "type": "string" }, | |
| "voucherDate": { "type": "string", "format": "date-time" }, | |
| "shippingDate": { "type": "string", "format": "date-time", "nullable": true }, | |
| "dueDate": { "type": "string", "format": "date-time", "nullable": true }, | |
| "totalGrossAmount": { "type": "number" }, | |
| "totalTaxAmount": { "type": "number" }, | |
| "taxType": { "type": "string", "enum": ["net", "gross"] }, | |
| "useCollectiveContact": { "type": "boolean" }, | |
| "contactName": { "type": "string", "nullable": true }, | |
| "contactId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "remark": { "type": "string", "nullable": true }, | |
| "voucherItems": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/VoucherItem" } | |
| }, | |
| "files": { | |
| "type": "array", | |
| "items": { "type": "string", "format": "uuid" }, | |
| "description": "List of file IDs attached to this voucher. Omitting IDs on PUT will permanently delete those files." | |
| }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "updatedDate": { "type": "string", "format": "date-time" }, | |
| "version": { "type": "integer" } | |
| } | |
| }, | |
| "VoucherCreateRequest": { | |
| "type": "object", | |
| "properties": { | |
| "type": { | |
| "type": "string", | |
| "enum": ["salesinvoice", "salescreditnote", "purchaseinvoice", "purchasecreditnote"] | |
| }, | |
| "voucherStatus": { | |
| "type": "string", | |
| "enum": ["open", "unchecked"], | |
| "description": "Set to 'unchecked' for draft vouchers. Defaults to 'open' if omitted." | |
| }, | |
| "voucherNumber": { "type": "string", "description": "Required unless status is 'unchecked'" }, | |
| "voucherDate": { "type": "string", "format": "date", "description": "Format yyyy-MM-dd. Required unless status is 'unchecked'" }, | |
| "shippingDate": { "type": "string", "format": "date", "description": "Only for salesinvoice/salescreditnote" }, | |
| "dueDate": { "type": "string", "format": "date", "description": "Defaults to voucherDate if omitted" }, | |
| "totalGrossAmount": { "type": "number", "description": "Must match sum of voucherItems. Required unless 'unchecked'" }, | |
| "totalTaxAmount": { "type": "number", "description": "Must match sum of voucherItems tax. Required unless 'unchecked'" }, | |
| "taxType": { "type": "string", "enum": ["net", "gross"], "description": "Note: 'net' + 'unchecked' is not supported" }, | |
| "useCollectiveContact": { "type": "boolean" }, | |
| "contactName": { "type": "string", "description": "Custom name when using collective contact" }, | |
| "contactId": { "type": "string", "format": "uuid", "description": "Required if useCollectiveContact is false" }, | |
| "remark": { "type": "string" }, | |
| "voucherItems": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/VoucherItem" }, | |
| "description": "Required unless status is 'unchecked'" | |
| }, | |
| "version": { "type": "integer", "description": "Set to 0 or 1 for POST. For PUT, use version from latest GET." } | |
| }, | |
| "required": ["type", "taxType"] | |
| }, | |
| "VouchersPage": { | |
| "allOf": [ | |
| { "$ref": "#/components/schemas/PageInfo" }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/Voucher" } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "FileUploadResponse": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid", "description": "File ID" }, | |
| "voucherId": { "type": "string", "format": "uuid", "description": "Associated voucher ID" } | |
| } | |
| }, | |
| "PostingCategory": { | |
| "type": "object", | |
| "properties": { | |
| "id": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string" }, | |
| "type": { "type": "string", "enum": ["income", "outgo"] }, | |
| "contactRequired": { "type": "boolean" }, | |
| "splitAllowed": { "type": "boolean", "description": "Whether items with different tax rates are allowed" }, | |
| "groupName": { "type": "string" } | |
| } | |
| }, | |
| "FinancialAccount": { | |
| "type": "object", | |
| "description": "Bank account information associated with a transaction.", | |
| "properties": { | |
| "financialAccountId": { "type": "string", "format": "uuid" }, | |
| "virtualAccountId": { "type": "string", "format": "uuid" }, | |
| "name": { "type": "string", "description": "User-defined account name" }, | |
| "bankName": { "type": "string" }, | |
| "brandColor": { "type": "string", "description": "Hex color code for the bank brand" }, | |
| "canIgnoreTransactions": { "type": "boolean" }, | |
| "type": { "type": "string", "enum": ["GIRO", "CREDIT_CARD", "SAVINGS"] }, | |
| "usingProfileType": { "type": "string", "enum": ["BUSINESS", "PRIVATE"] }, | |
| "printSepaTransferConfirmationAllowed": { "type": "boolean" } | |
| } | |
| }, | |
| "TransactionProposal": { | |
| "type": "object", | |
| "description": "Auto-categorization proposal for a transaction.", | |
| "properties": { | |
| "proposalId": { "type": "string", "format": "uuid" }, | |
| "proposalOrigin": { "type": "string", "description": "Origin of the categorization, e.g. CUSTOM_CATEGORIZATION_V2" }, | |
| "proposalOriginScore": { "type": "integer", "description": "Confidence score (0-100)" }, | |
| "proposalAutoBooked": { "type": "boolean" }, | |
| "proposalUnchecked": { "type": "boolean" }, | |
| "proposalType": { "type": "string", "enum": ["CATEGORY", "VOUCHER"] }, | |
| "proposalReviewResult": { "type": "string", "enum": ["ACCEPTED", "REJECTED", "PENDING"], "nullable": true }, | |
| "proposalCategoryName": { "type": "string", "nullable": true }, | |
| "proposalCategoryTaxRateName": { "type": "string", "nullable": true }, | |
| "proposalCategoryId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "proposalTaxRateId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "proposalNote": { "type": "string", "nullable": true }, | |
| "proposalVoucherPaymentDifferenceStrategy": { "type": "string", "nullable": true } | |
| } | |
| }, | |
| "FinancialTransaction": { | |
| "type": "object", | |
| "description": "A bank account transaction (Kontobewegung/Umsatz).", | |
| "properties": { | |
| "financialTransactionId": { "type": "string", "format": "uuid" }, | |
| "financialAccount": { "$ref": "#/components/schemas/FinancialAccount" }, | |
| "ignored": { "type": "boolean" }, | |
| "ignoreReason": { "type": "string", "nullable": true }, | |
| "bookingState": { | |
| "type": "string", | |
| "enum": ["COMPLETELY_ASSIGNED", "PARTIALLY_ASSIGNED", "UNASSIGNED"], | |
| "description": "Whether the transaction has been fully matched to vouchers" | |
| }, | |
| "amount": { "type": "number", "description": "Transaction amount in EUR. Negative = outgoing, positive = incoming." }, | |
| "openAmount": { "type": "number", "description": "Remaining unassigned amount" }, | |
| "purpose": { "type": "string", "description": "Payment reference / Verwendungszweck" }, | |
| "bookingText": { "type": "string", "nullable": true }, | |
| "additionalInfo": { "type": "string" }, | |
| "transactionDate": { "type": "string", "format": "date-time" }, | |
| "valueDate": { "type": "string", "format": "date-time" }, | |
| "recipientOrSenderName": { "type": "string", "description": "Name of the counterparty. May contain <em> tags when searchTerm is used." }, | |
| "recipientOrSenderEmail": { "type": "string", "nullable": true }, | |
| "recipientOrSenderIban": { "type": "string", "nullable": true }, | |
| "externalReference": { "type": "string", "description": "Bank-provided unique reference" }, | |
| "endToEndId": { "type": "string", "nullable": true }, | |
| "pendingProposalId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "acceptedProposalId": { "type": "string", "format": "uuid", "nullable": true }, | |
| "proposal": { "$ref": "#/components/schemas/TransactionProposal" }, | |
| "numberOfVouchers": { "type": "integer", "description": "Number of vouchers linked to this transaction" }, | |
| "createdDate": { "type": "string", "format": "date-time" }, | |
| "sepaTransferConfirmationPrintUrl": { "type": "string", "nullable": true }, | |
| "showValueDate": { "type": "boolean" } | |
| } | |
| }, | |
| "FinancialTransactionsPage": { | |
| "type": "object", | |
| "description": "Paginated list of financial transactions.", | |
| "properties": { | |
| "totalElements": { "type": "integer" }, | |
| "size": { "type": "integer" }, | |
| "number": { "type": "integer", "description": "Current page number (0-based)" }, | |
| "totalPages": { "type": "integer" }, | |
| "content": { | |
| "type": "array", | |
| "items": { "$ref": "#/components/schemas/FinancialTransaction" } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment