Lexware-php-api: Unterschied zwischen den Versionen

Aus Baebeca Solutions GmbH - Wiki
Zur Navigation springen Zur Suche springen
Slutz (Diskussion | Beiträge)
Slutz (Diskussion | Beiträge)
 
(23 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Übersicht & Informationen =
= Übersicht & Informationen =


PHP Client für [https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice] REST API
PHP Client für [https://office.lexware.de/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start Lexware office] REST API


Wir lieben Automatisierung und die nahtlose Verzahnung von Systemen!
Wir lieben Automatisierung und die nahtlose Verzahnung von Systemen!


[https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice] stellt seinen Kunden eine öffentliche API-Schnittstelle zur Verfügung über die bestehende Systeme integriert oder Prozesse automatisiert werden können.<br>
[https://office.lexware.de/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start Lexware Office] stellt seinen Kunden eine öffentliche API-Schnittstelle zur Verfügung über die bestehende Systeme integriert oder Prozesse automatisiert werden können.<br>
Für diesen Ansatz haben wir einen PHP-Client entwickelt und stellen diesen kostenfrei zur Verfügung.  
Für diesen Ansatz haben wir einen PHP-Client entwickelt und stellen diesen kostenfrei zur Verfügung.  


Alle weiteren Informationen finden Sie auf unserer [https://www.baebeca.de/softwareentwicklung/projekte/lexoffice-php-client/ Projektseite].
Alle weiteren Informationen finden Sie auf unserer [https://www.baebeca.de/softwareentwicklung/projekte/lexware-php-client/ Projektseite].


== Baebeca Solutions bei lexoffice.de ==
== Baebeca Solutions bei Lexware Office ==
* lexoffice [https://www.lexoffice.de/partner/public-api/integrationspartner/ Integrationspartner]
* Integrationspartner [https://office.lexware.de/partner/public-api/integrationspartner/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start Integrationspartner]
* lexoffice [https://www.lexoffice.de/partner/ Softwarepartner]
* Softwarepartner [https://office.lexware.de/partner/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start Softwarepartner]
* Offizielle Lexoffice [https://developers.lexoffice.io/docs/ API-Dokumentation]
* Offizielle Lexware Office [https://developers.lexoffice.io/docs/ API-Dokumentation]


[[Datei:Lexoffice logo.png||link=https://www.awin1.com/cread.php?s=2440752&v=13787&q=368492&r=635216]]
[[Datei:Lexware-Office-Logo.png||link=https://office.lexware.de/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start]]


== Download ==
== Download ==
Die aktuelle Version können Sie jeweils in unserem Github Repository herunterladen: https://github.com/Baebeca-Solutions/lexoffice-php-api
Die aktuelle Version können Sie jeweils in unserem Github Repository herunterladen: https://github.com/Baebeca-Solutions/lexware-php-api


== Lizenz ==
== Lizenz ==
Zeile 27: Zeile 27:


Wenn Sie Ihre Lösung nicht veröffentlichen möchten, Support benötigen, individuelle  
Wenn Sie Ihre Lösung nicht veröffentlichen möchten, Support benötigen, individuelle  
Erweiterungen benötigen oder dieses Projekt einfach Unterstützen möchten, können Sie für 99,- EUR/Netto eine lifetime Nutzungslizenz erhalten. Setzten Sie sich diesbezüglich bitte kurz mit uns in [https://www.baebeca.de/softwareentwicklung/projekte/lexoffice-php-client/ Verbindung].
Erweiterungen benötigen oder dieses Projekt einfach Unterstützen möchten, können Sie für 99,- EUR/Netto eine lifetime Nutzungslizenz erhalten. Setzten Sie sich diesbezüglich bitte kurz mit uns in [https://www.baebeca.de/softwareentwicklung/projekte/lexware-php-client/ Verbindung].


== Support ==
== Support ==
An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?<br>
An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?<br>
Für diese Frage ist entscheidend, ob Sie eine Nutzungslizenz für unsere lexoffice-php-api erworben haben oder die kostenlose Variante nutzen.
Für diese Frage ist entscheidend, ob Sie eine Nutzungslizenz für unsere lexware-php-api erworben haben oder die kostenlose Variante nutzen.


* Sofern eine Nutzungslizenz vorhanden ist, können sich jederzeit per Mail an [mailto:support@baebeca.de support@baebeca.de] wenden und erhalten vorrangigen Support.  
* Sofern eine Nutzungslizenz vorhanden ist, können sich jederzeit per Mail an [mailto:support@baebeca.de support@baebeca.de] wenden und erhalten vorrangigen Support.  
* Wenn Sie die kostenlose Version nutzen bitten wir Sie auf Github einen [https://github.com/Baebeca-Solutions/lexoffice-php-api/issues issue] zu erstellen.
* Wenn Sie die kostenlose Version nutzen bitten wir Sie auf Github einen [https://github.com/Baebeca-Solutions/lexware-php-api/issues issue] zu erstellen.


== Lexoffice API Account erstellen ==
== Lexware Office API Account erstellen ==
Erstellen Sie in Ihrem [https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice Account] einen API Key.
Erstellen Sie in Ihrem [https://office.lexware.de/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start Lexware Office Account] einen API Key.


Einstellungen :: Erweiterungen :: lexoffice Public API :: "Schlüssel neu erstellen"
Einstellungen :: Erweiterungen :: Lexware Office Public API :: "Schlüssel neu erstellen"


== Mehrwertsteuersenkung - Konjunkturpaket 01.07.2020 - 31.12.2020 ==
== Mehrwertsteuersenkung - Konjunkturpaket 01.07.2020 - 31.12.2020 ==
* https://www.lexoffice.de/mehrwertsteuer-rest-api/
* https://office.lexware.de/mehrwertsteuer-rest-api/?cid=6143&pid=pmc&utm_medium=affiliate&utm_source=baebeca&utm_campaign=start
* https://developers.lexoffice.io/docs/#faq-valid-tax-rates
* https://developers.lexoffice.io/docs/#faq-valid-tax-rates
== One-Stop-Shop (OSS) ab 01.07.2021 ==
* Für den Voucher-Import reicht es aus die Methode get_needed_voucher_booking_id() zu nutzen.
* https://support.lexoffice.de/de-form/articles/5207137-one-stop-shop-eu-regelung-belege-an-privatpersonen-im-eu-ausland
== Rate-Limit ==
Lexware Office hat ein Rate-Limit von 2 Anfragen pro Sekunde. Siehe dazu: https://developers.lexoffice.io/docs/#api-rate-limits
Dieses Rate-Limit wird automatisch erkannt und der Request wird nach einem Sleep von "Sekunden * Anzahl Versuche" erneut abgesetzt.
Mithilfe von <code>$lexoffice->configure_rate_limit(bool $repeat = true, int $seconds_to_sleep = 1, int $max_tries = 10): void</code> kann man das Verhalten parametrisieren.
Zusätzlich besteht die Möglichkeit via <code>configure_rate_limit_callable(callable $callback = null) : void</code> eine Callbackfunktion mitzugeben, die jedes Mal getriggert wird, wenn ein Rate-Limit getroffen wurde. Es wird dann ein bool Parameter mitgegeben ob der Aufruf noch einmal versucht wird.


= Klasse einbinden =
= Klasse einbinden =
Zeile 59: Zeile 71:
:API Schlüssel
:API Schlüssel
;callback [string]
;callback [string]
:Ihre Standard Callback URL für Webhooks von Lexoffice   
:Ihre Standard Callback URL für Webhooks von Lexware Office
;ssl_verify [bool] (default true)
;ssl_verify [bool] (default true)
:Soll die SSL verbindung zu Lexoffice validiert werden
:Soll die SSL verbindung zu Lexware Office validiert werden


= Methoden =
= Methoden =
Zeile 116: Zeile 128:
<syntaxhighlight lang="php">$lexoffice->create_invoice( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->create_invoice( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
;data
;data
:Ein Array der Rechnungsdaten nach der nötigen [https://developers.lexoffice.io/docs/#invoices-properties Lexoffice Formatierung]
:Ein Array der Rechnungsdaten nach der nötigen [https://developers.lexoffice.io/docs/#invoices-properties Lexware Office Formatierung]
:Beispiel
:Beispiel
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Zeile 166: Zeile 178:
; finalized
; finalized
: Entscheidet ob die Rechnung fertiggestellt werden soll.
: Entscheidet ob die Rechnung fertiggestellt werden soll.
== Serienrechnungen ==
=== Serienrechnung abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_recurring_template( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
=== Alle Serienrechnungen abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_recurring_templates_all() : object</syntaxhighlight>


== Gutschriften ==
== Gutschriften ==
Zeile 177: Zeile 201:
=== Gutschrift anlegen ===
=== Gutschrift anlegen ===


<syntaxhighlight lang="php">$lexoffice->create_creditnote( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->create_creditnote( array $data [, bool $finalized = false, string $linked_invoice_id = '' ] ) : object</syntaxhighlight>
;data
;data
:Ein Array der Gutschriftsdaten nach der nötigen [https://developers.lexoffice.io/docs/#credit-notes-endpoint-credit-notes-properties Lexoffice Formatierung]
:Ein Array der Gutschriftsdaten nach der nötigen [https://developers.lexoffice.io/docs/#credit-notes-endpoint-credit-notes-properties Lexware Office Formatierung]
:Beispiel
:Beispiel
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Zeile 221: Zeile 245:
; finalized
; finalized
: Entscheidet ob die Gutschrift fertiggestellt werden soll.
: Entscheidet ob die Gutschrift fertiggestellt werden soll.
; linked_invoice_id
: Eine Lexware Office UUID einer offenen Rechnung für die eine Gutschrift erstellt wird.


== Angebote ==
== Angebote ==
Zeile 234: Zeile 260:
<syntaxhighlight lang="php">$lexoffice->create_quotation( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->create_quotation( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
;data
;data
:Ein Array der Angebotsdaten nach der nötigen [https://developers.lexoffice.io/docs/#quotations-endpoint-quotations-properties Lexoffice Formatierung]
:Ein Array der Angebotsdaten nach der nötigen [https://developers.lexoffice.io/docs/#quotations-endpoint-quotations-properties Lexware Office Formatierung]
:Beispiel
:Beispiel
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Zeile 297: Zeile 323:
<syntaxhighlight lang="php">$lexoffice->create_orderconfirmation( array $data ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->create_orderconfirmation( array $data ) : object</syntaxhighlight>
;data
;data
:Ein Array der Auftragsbestätigungsdaten nach der nötigen [https://developers.lexoffice.io/docs/#invoices-properties Lexoffice Formatierung]
:Ein Array der Auftragsbestätigungsdaten nach der nötigen [https://developers.lexoffice.io/docs/#invoices-properties Lexware Office Formatierung]
:Beispiel
<syntaxhighlight lang="php">
array(
    'voucherDate' => date(DATE_RFC3339_EXTENDED),
    'introduction' => 'Einleitungstext',
    'remark' => "Fußzeile\r\nMehrzeilig",
    'address' => array(
    #'contactId' => '<id>',
    'name' => 'Frau Jane Doe',
    'street' => 'Str. 1',
    'zip' => '12345',
    'city' => 'Stadt',
    'countryCode' => 'DE',
      ),
      'lineItems' => array(
      array(
      'type' => 'custom',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitPrice' => array(
      'currency' => 'EUR',
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
      ),
      #'discountPercentage' => 0,
      ),
      ),
      'totalPrice' => array(
      'currency' => 'EUR',
      #'totalDiscountAbsolute' => 0,
      #'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      'taxType' => 'net',
      ),
      'shippingConditions' => array(
      'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      'paymentTermLabel' => 'Vorkasse',
      'paymentTermDuration' => 1,
      ),
    )
</syntaxhighlight>
 
== Lieferschein ==
 
=== Lieferschein abfragen ===
 
<syntaxhighlight lang="php">$lexoffice->get_deliverynote( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid des Lieferscheins der abgefragt werden soll
 
=== Lieferschein anlegen ===
<syntaxhighlight lang="php">$lexoffice->create_delivery_note( array $data ) : object</syntaxhighlight>
;data
:Ein Array der Lieferscheindaten nach der nötigen [https://developers.lexoffice.io/docs/#delivery-notes-endpoint-delivery-notes-properties Lexware Office Formatierung]
:Beispiel
:Beispiel
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Zeile 352: Zeile 438:
;Paramater
;Paramater
;data
;data
:Ein Array der Belegdaten nach der nötigen [https://developers.lexoffice.io/docs/#vouchers-endpoint-create-a-voucher Lexoffice Formatierung]
:Ein Array der Belegdaten nach der nötigen [https://developers.lexoffice.io/docs/#vouchers-endpoint-create-a-voucher Lexware Office Formatierung]


=== Beleg abfragen ===
=== Beleg abfragen ===
Zeile 362: Zeile 448:
=== Belege abfragen ===
=== Belege abfragen ===


<syntaxhighlight lang="php">$lexoffice->get_vouchers( string $type = 'invoice,creditnote,orderconfirmation', string $state = 'draft,open,paid,paidoff,voided,transferred', string $archived = 'both') : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->get_vouchers( string $type = 'invoice,creditnote,orderconfirmation', string $state = 'draft,open,paid,paidoff,voided,transferred', string $archived = 'both', string $date_from = '', string $date_to = '') : object</syntaxhighlight>
;type
;type
:Einen oder mehrere Typen von Belegen (komma getrennt) die abgefragt werden sollen
:Einen oder mehrere Typen von Belegen (komma getrennt) die abgefragt werden sollen
Zeile 369: Zeile 455:
;archived
;archived
:"both", "true" oder "false" als String ob archivierte/nicht archivierte Belege ausgegeben werden sollen
:"both", "true" oder "false" als String ob archivierte/nicht archivierte Belege ausgegeben werden sollen
;date_from
:Datum (Format YYYY-MM-DD) ab wann einschließlich abgefragt werden soll
;date_to
:Datum (Format YYYY-MM-DD) bis wann einschließlich abgefragt werden soll


=== Belegbild hochladen (nicht zugeordnet) ===
=== Belegbild hochladen (nicht zugeordnet) ===
Zeile 377: Zeile 467:
; Rückgabe
; Rückgabe
* id
* id
** Die eindeutige Datei-ID von lexoffice
** Die eindeutige Datei-ID von Lexware Office


;Beispiel Anfrage
;Beispiel Anfrage
Zeile 400: Zeile 490:
; Rückgabe
; Rückgabe
* id
* id
** Die eindeutige Datei-ID von lexoffice
** Die eindeutige Datei-ID von Lexware Office


=== Beleg Dateien herunterladen ===
=== Beleg Dateien herunterladen ===
Zeile 435: Zeile 525:


=== Kontakt suchen ===
=== Kontakt suchen ===
<syntaxhighlight lang="php">$lexoffice->search_contact( array $filter ) : object</syntaxhighlight>
Bitte beachte das Lexware Office stets eine Suche nach "contains" macht. Eine Suche nach ''hans@hans.de'' liefert einen Treffer für den Kontakt ''hans@hans.de.google.com''
<syntaxhighlight lang="php">$lexoffice->search_contact( array $filter, bool $respect_wildcards = false ) : object</syntaxhighlight>
;Paramater
;Paramater
*filter
*filter
Zeile 444: Zeile 535:
*** customer (true/false)
*** customer (true/false)
*** vendor (true/false)
*** vendor (true/false)
*wildcards
** Bool | Wenn ''true'' werden die Zeichen "_" (ein Zeichen) und "%" (mehrere Zeichen) als Wildcards genutzt, andernfalls im Inhalt als Zeichen erwartet.
;Beispiel Anfrage
;Beispiel Anfrage
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Zeile 451: Zeile 544:
'number' => '',
'number' => '',
'customer' => '',
'customer' => '',
'venodr' => '',
'vendor' => '',
));
));
</syntaxhighlight>
</syntaxhighlight>
Zeile 462: Zeile 555:
;Parameter
;Parameter
*data
*data
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexoffice Formatierung]
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexware Office Formatierung]


;Beispiel Anfrage
;Beispiel Anfrage
Zeile 527: Zeile 620:
**Die eindeutige uuid des Eintrages der abgefragt werden soll
**Die eindeutige uuid des Eintrages der abgefragt werden soll
*data
*data
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexoffice Formatierung]
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexware Office Formatierung]


== Events / Webhooks ==
== Events / Webhooks ==
Zeile 534: Zeile 627:
<syntaxhighlight lang="php">$lexoffice->create_event( string $event [, bool $callback = false ] ) : array|bool</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->create_event( string $event [, bool $callback = false ] ) : array|bool</syntaxhighlight>
;event
;event
:Mögliche sind alle von Lexoffice [https://developers.lexoffice.io/docs/#event-subscriptions-endpoint-event-types angebotenen Events].
:Mögliche sind alle von Lexware Office [https://developers.lexoffice.io/docs/#event-subscriptions-endpoint-event-types angebotenen Events].
;callback
;callback
:Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.
:Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.
Zeile 563: Zeile 656:


=== Buchungskategorie bestimmen ===
=== Buchungskategorie bestimmen ===
<syntaxhighlight lang="php">$lexoffice->get_needed_voucher_booking_id(float $taxrate, string $country_code, bool $euopean_vatid, bool $b2b_business, bool $physical_good = true): string</syntaxhighlight>
<syntaxhighlight lang="php">$lexoffice->get_needed_voucher_booking_id(float $taxrate, string $country_code, int $date, bool $euopean_vatid, bool $b2b_business, bool $physical_good = true): string</syntaxhighlight>
;$taxrate
;$taxrate
:Steuersatz der verwendet werden soll (Wird auf Gültigkeit geprüft)
:Steuersatz der verwendet werden soll (Wird auf Gültigkeit geprüft)
;$country_code
;$country_code
:2-Stelliger Country Code des Rechnungslandes
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
;$euopean_vatid
;$euopean_vatid
:Verfügt man über die Kunden UST-ID
:Verfügt man über die Kunden UST-ID
Zeile 575: Zeile 670:
Wird physikalische Ware oder digitale Dienstleistung verkauft
Wird physikalische Ware oder digitale Dienstleistung verkauft


== One-Stop-Shop (OSS) / Steuer Methoden ==
=== Abfrage der möglichen Steuersätze ===
<syntaxhighlight lang="php">$lexoffice->get_taxrates(string $country_code, int $date): array</syntaxhighlight>
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
 


<syntaxhighlight lang="php">$lexoffice->is_oss_needed(string $country_code)</syntaxhighlight>
=== Prüfung Steuersatz ===
<syntaxhighlight lang="php">$lexoffice->check_taxrate(float $taxrate, string $country_code, int $date): bool</syntaxhighlight>
;$taxrate
:Der zu prüfende Steuersatz
;$country_code
;$country_code
:2-Stelliger Country Code des Rechnungslandes
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
== One-Stop-Shop (OSS) / Steuer Methoden ==


<syntaxhighlight lang="php">$lexoffice->get_oss_taxrates(string $country_code): array</syntaxhighlight>
=== OSS Einstellungen prüfen ===
<syntaxhighlight lang="php">$lexoffice->is_oss_needed(string $country_code, int $date)</syntaxhighlight>
;$country_code
;$country_code
:2-Stelliger Country Code des Rechnungslandes
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum


<syntaxhighlight lang="php">$lexoffice->get_oss_voucher_category(string $country_code, int $booking_category = 1): string</syntaxhighlight>
=== Prüfung OSS Voucher Kategorie ===
<syntaxhighlight lang="php">$lexoffice->get_oss_voucher_category(string $country_code, int $date, int $booking_category = 1, float $taxrate = 0): string</syntaxhighlight>
;$country_code
;$country_code
:2-Stelliger Country Code des Rechnungslandes
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
;$booking_category
;$booking_category
:Angabe welche Buchungskategorie genutzt werden soll
:Angabe welche Buchungskategorie genutzt werden soll
:1 => Fernverkauf
:1 => Fernverkauf
:2 => Elektronische Dienstleistung
:2 => Elektronische Dienstleistung
;$taxrate
: Genutzter Steuersatz in Buchung


== Sonstiges ==
== Sonstiges ==
Zeile 879: Zeile 995:


Wir liefern eine ''callback.php'' mit, die als callback URL angegeben werden kann.
Wir liefern eine ''callback.php'' mit, die als callback URL angegeben werden kann.
Bei allen Aufrufen wird die ''X-Lxo-Signature'' überprüft und sichergestellt, dass der Aufruf wirklich von einem lexoffice Server erstellt wurde.
Bei allen Aufrufen wird die ''X-Lxo-Signature'' überprüft und sichergestellt, dass der Aufruf wirklich von einem Lexware Office Server erstellt wurde.


= Error Handling =
= Error Handling =

Aktuelle Version vom 7. Oktober 2024, 09:14 Uhr

Übersicht & Informationen

PHP Client für Lexware office REST API

Wir lieben Automatisierung und die nahtlose Verzahnung von Systemen!

Lexware Office stellt seinen Kunden eine öffentliche API-Schnittstelle zur Verfügung über die bestehende Systeme integriert oder Prozesse automatisiert werden können.
Für diesen Ansatz haben wir einen PHP-Client entwickelt und stellen diesen kostenfrei zur Verfügung.

Alle weiteren Informationen finden Sie auf unserer Projektseite.

Baebeca Solutions bei Lexware Office

Download

Die aktuelle Version können Sie jeweils in unserem Github Repository herunterladen: https://github.com/Baebeca-Solutions/lexware-php-api

Lizenz

Unsere Software wurde unter der "GNU Affero General Public License v3.0" Lizenz veröffentlicht. Dies bedeutet, dass Sie unsere Software gerne in Ihren Projekten und Produkten nutzen dürfen, solange Sie Ihr Projekt dann ebenso Quelloffen unter den in der Lizenz genannten Rahmenbedingungen zur Verfügung stellen.

Wenn Sie Ihre Lösung nicht veröffentlichen möchten, Support benötigen, individuelle Erweiterungen benötigen oder dieses Projekt einfach Unterstützen möchten, können Sie für 99,- EUR/Netto eine lifetime Nutzungslizenz erhalten. Setzten Sie sich diesbezüglich bitte kurz mit uns in Verbindung.

Support

An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?
Für diese Frage ist entscheidend, ob Sie eine Nutzungslizenz für unsere lexware-php-api erworben haben oder die kostenlose Variante nutzen.

  • Sofern eine Nutzungslizenz vorhanden ist, können sich jederzeit per Mail an support@baebeca.de wenden und erhalten vorrangigen Support.
  • Wenn Sie die kostenlose Version nutzen bitten wir Sie auf Github einen issue zu erstellen.

Lexware Office API Account erstellen

Erstellen Sie in Ihrem Lexware Office Account einen API Key.

Einstellungen :: Erweiterungen :: Lexware Office Public API :: "Schlüssel neu erstellen"

Mehrwertsteuersenkung - Konjunkturpaket 01.07.2020 - 31.12.2020

One-Stop-Shop (OSS) ab 01.07.2021

Rate-Limit

Lexware Office hat ein Rate-Limit von 2 Anfragen pro Sekunde. Siehe dazu: https://developers.lexoffice.io/docs/#api-rate-limits

Dieses Rate-Limit wird automatisch erkannt und der Request wird nach einem Sleep von "Sekunden * Anzahl Versuche" erneut abgesetzt. Mithilfe von $lexoffice->configure_rate_limit(bool $repeat = true, int $seconds_to_sleep = 1, int $max_tries = 10): void kann man das Verhalten parametrisieren.

Zusätzlich besteht die Möglichkeit via configure_rate_limit_callable(callable $callback = null) : void eine Callbackfunktion mitzugeben, die jedes Mal getriggert wird, wenn ein Rate-Limit getroffen wurde. Es wird dann ein bool Parameter mitgegeben ob der Aufruf noch einmal versucht wird.

Klasse einbinden

// include the class file, check the correct folder
require_once (__DIR__.'/lexoffice-php-api.php');
    
// initiate client with your settings
$lexoffice = new lexoffice_client(array(
  'api_key' => 'xyz',
));

Start Parameter

api_key [string]
API Schlüssel
callback [string]
Ihre Standard Callback URL für Webhooks von Lexware Office
ssl_verify [bool] (default true)
Soll die SSL verbindung zu Lexware Office validiert werden

Methoden

Account

Account abfragen

$lexoffice->get_profile() : object

Beispiel Rückgabe:

{
  "organizationId": "42b1fbdd-c4e0-4bb4-8c20-1d3d0b9432e8",
  "companyName": "Testfirma GmbH",
  "created": {
    "userName": "Frau Erika Musterfrau",
    "userEmail": "erika.musterfrau@testfirma.de",
    "date": "2017-01-03T13:15:45+0100"
  },
  "connectionId": "3dea098a-fae5-4458-a85c-f97965966c25",
  "features": [
    "cashbox"
  ],
  "subscriptionStatus": "active",
  "taxType": "net",
  "isSmallBusiness": false
}

Rechnungen

Rechnung abfragen

$lexoffice->get_invoice( string $uuid ) : object
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle Rechnungen abfragen

$lexoffice->get_invoices_all() : object

Die letzten n Rechnungen abfragen

$lexoffice->get_last_invoices(int $count) : object

Rechnung PDF herunterladen

legacy function - will be removed in futere releases, use get_pdf($type, $uuid, $filename) instead

$lexoffice->get_invoice_pdf( string $uuid, string $filename) : bool
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll
filename
Der lokale Dateiname an dem das PDF abgelegt werden soll

Rechnung anlegen

$lexoffice->create_invoice( array $data [, bool $finalized = false ] ) : object
data
Ein Array der Rechnungsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       		'type' => 'custom',
       		'name' => 'Produktname',
       		'description' => 'Beschreibung',
       		'quantity' => 1,
       		'unitName' => 'Stück',
       		'unitPrice' => array(
       			'currency' => 'EUR',
       			'netAmount' => 10.99,
           		'taxRatePercentage' => 19,
       		),
       		#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )
finalized
Entscheidet ob die Rechnung fertiggestellt werden soll.

Serienrechnungen

Serienrechnung abfragen

$lexoffice->get_recurring_template( string $uuid ) : object
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle Serienrechnungen abfragen

$lexoffice->get_recurring_templates_all() : object

Gutschriften

Gutschrift abfragen

$lexoffice->get_creditnote( string $uuid ) : object
uuid
Die eindeutige uuid der Gutschrift die abgefragt werden soll

Gutschrift anlegen

$lexoffice->create_creditnote( array $data [, bool $finalized = false, string $linked_invoice_id = '' ] ) : object
data
Ein Array der Gutschriftsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Rechnungskorrektur',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       		'type' => 'custom',
       		'name' => 'Produktname',
       		'description' => 'Beschreibung',
       		'quantity' => 1,
       		'unitName' => 'Stück',
       		'unitPrice' => array(
       			'currency' => 'EUR',
       			'netAmount' => 10.99,
           		'taxRatePercentage' => 19,
       		),
       		#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      )
    )
finalized
Entscheidet ob die Gutschrift fertiggestellt werden soll.
linked_invoice_id
Eine Lexware Office UUID einer offenen Rechnung für die eine Gutschrift erstellt wird.

Angebote

Angebot abfragen

$lexoffice->get_quotation( string $uuid ) : object
uuid
Die eindeutige uuid des Angebotes das abgefragt werden soll

Angebot anlegen

$lexoffice->create_quotation( array $data [, bool $finalized = false ] ) : object
data
Ein Array der Angebotsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'expirationDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       		'type' => 'custom',
       		'name' => 'Produktname',
       		'description' => 'Beschreibung',
       		'quantity' => 1,
       		'unitName' => 'Stück',
       		'unitPrice' => array(
       			'currency' => 'EUR',
       			'netAmount' => 10.99,
           		'taxRatePercentage' => 19,
       		),
       		#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => [
        'shippingDate' => date(DATE_RFC3339_EXTENDED),
        'shippingType' => 'delivery',
      ],
      'paymentConditions' => [
        'paymentTermLabel' => 'Vorkasse',
        'paymentTermDuration' => 1,
      ],
 )
finalized
Entscheidet ob das ANgebot fertiggestellt werden soll.

Auftragsbestätigungen

Auftragsbestätigung abfragen

$lexoffice->get_orderconfirmation( string $uuid ) : object
uuid
Die eindeutige uuid der Auftragsbestätigung die abgefragt werden soll

Auftragsbestätigung anlegen

$lexoffice->create_orderconfirmation( array $data ) : object
data
Ein Array der Auftragsbestätigungsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       		'type' => 'custom',
       		'name' => 'Produktname',
       		'description' => 'Beschreibung',
       		'quantity' => 1,
       		'unitName' => 'Stück',
       		'unitPrice' => array(
       			'currency' => 'EUR',
       			'netAmount' => 10.99,
           		'taxRatePercentage' => 19,
       		),
       		#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )

Lieferschein

Lieferschein abfragen

$lexoffice->get_deliverynote( string $uuid ) : object
uuid
Die eindeutige uuid des Lieferscheins der abgefragt werden soll

Lieferschein anlegen

$lexoffice->create_delivery_note( array $data ) : object
data
Ein Array der Lieferscheindaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       		'type' => 'custom',
       		'name' => 'Produktname',
       		'description' => 'Beschreibung',
       		'quantity' => 1,
       		'unitName' => 'Stück',
       		'unitPrice' => array(
       			'currency' => 'EUR',
       			'netAmount' => 10.99,
           		'taxRatePercentage' => 19,
       		),
       		#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )

Belege

Beleg anlegen

$lexoffice->create_voucher( array $data ) : object
Paramater
data
Ein Array der Belegdaten nach der nötigen Lexware Office Formatierung

Beleg abfragen

$lexoffice->get_voucher( string $uuid ) : object
Paramater
  • uuid
    • Die eindeutige uuid des Beleges der abgefragt werden soll

Belege abfragen

$lexoffice->get_vouchers( string $type = 'invoice,creditnote,orderconfirmation', string $state = 'draft,open,paid,paidoff,voided,transferred', string $archived = 'both', string $date_from = '', string $date_to = '') : object
type
Einen oder mehrere Typen von Belegen (komma getrennt) die abgefragt werden sollen
state
Status der Belege die abgefragt werden sollen
archived
"both", "true" oder "false" als String ob archivierte/nicht archivierte Belege ausgegeben werden sollen
date_from
Datum (Format YYYY-MM-DD) ab wann einschließlich abgefragt werden soll
date_to
Datum (Format YYYY-MM-DD) bis wann einschließlich abgefragt werden soll

Belegbild hochladen (nicht zugeordnet)

$lexoffice->upload_file($file) : object
Parameter
  • file
    • Der Pfad zur Datei die hochgeladen werden soll
Rückgabe
  • id
    • Die eindeutige Datei-ID von Lexware Office
Beispiel Anfrage
$lexoffice->upload_file(__DIR__.'/invoice.pdf');
Beispiel Rückgabe
stdClass Object (
    [id] => 221fd5ed-5547-4bd3-b7c2-9796c1a0e4a6
)

Beleg hochladen (zugeordnet)

$lexoffice->upload_voucher($uuid, $file) : object
Parameter
  • uuid
    • Die ID des Beleges dem der Upload zugeordnet werden soll
  • file
    • Der Pfad zur Datei die hochgeladen werden soll
Rückgabe
  • id
    • Die eindeutige Datei-ID von Lexware Office

Beleg Dateien herunterladen

$lexoffice->get_voucher_files(string $uuid, string $filename_prefix) : array
Parameter
  • uiui
    • Die ID des Beleges dessen Dateien heruntergeladen werden sollen
  • filename_prefix
    • Der Dateipfad inkl. eines Dateiprefixes.
Rückgabe

Ein Array der Dateinamen

Beispiel Anfrage
$lexoffice->get_voucher_files($uuid, '/files/IN_1234');
Beispiel Rückgabe
array (
    [0] => /files/IN_1234_1.jpg
    [1] => /files/IN_1234_2.png
    [2] => /files/IN_1234_3.pdf
)

Kontakte

Kontakt abfragen

$lexoffice->get_contact( string $uuid ) : object
Paramater
  • uuid
    • Die eindeutige uuid des Eintrages der abgefragt werden soll

Kontakt suchen

Bitte beachte das Lexware Office stets eine Suche nach "contains" macht. Eine Suche nach hans@hans.de liefert einen Treffer für den Kontakt hans@hans.de.google.com

$lexoffice->search_contact( array $filter, bool $respect_wildcards = false ) : object
Paramater
  • filter
    • Array bestehend aus den möglichen Filtern. Mehere Filter werden mit einem UND verknüpft.
      • email (mindestens 3 Zeichen)
      • name (mindestens 3 Zeichen)
      • number
      • customer (true/false)
      • vendor (true/false)
  • wildcards
    • Bool | Wenn true werden die Zeichen "_" (ein Zeichen) und "%" (mehrere Zeichen) als Wildcards genutzt, andernfalls im Inhalt als Zeichen erwartet.
Beispiel Anfrage
$lexoffice->search_contact(array(
	'email' => '',
	'name' => 'John Doe',
	'number' => '',
	'customer' => '',
	'vendor' => '',
));

Alle Kontakte abfragen

$lexoffice->get_contacts_all() : object

Kontakt anlegen

$lexoffice->create_contact( array $data) : object
Parameter
Beispiel Anfrage
$lexoffice->create_contact(array(
	'version' => 0,
	'roles' => array(
		'customer' => array(
			'number' => '',
		),
	),
	'company' => array(
		'name' => 'Baebeca Solutions GmbH',
		'street' => 'Genklerhardt 6',
		'zip' => '51647',
		'city' => 'Gummersbach',
		'countryCode' => 'DE',
		'contactPersons' => array(
			array(
				'salutation' => 'Herr',
				'firstName' => 'Jon',
				'lastName' => 'Doe',
				'emailAddress' =>'support@baebeca.de',
        			'phoneNumber' => '022619202930',
			)
		),
	),
	'addresses' => array(
		'billing' => array(
			array(
				'street' => 'Genklerhardt 6',
				'zip' => '51647',
				'city' => 'Gummersbach',
				'countryCode' => 'DE',
			),
		),
		'shipping' => array(
			array(
				'street' => 'Genklerhardt 6',
				'zip' => '51647',
				'city' => 'Gummersbach',
				'countryCode' => 'DE',
			),
		),
	),
	'emailAddresses' => array(
		'business' => array(
			'support@baebeca.de'
		),
	),
	'phoneNumbers' => array(
		'business' => array(
			'022619202930'
		),
	),
	'note' => '',
));

Kontakt aktualisieren

$lexoffice->update_contact( string $uuid, array $data) : object
Parameter
  • uuid
    • Die eindeutige uuid des Eintrages der abgefragt werden soll
  • data

Events / Webhooks

Event anlegen

$lexoffice->create_event( string $event [, bool $callback = false ] ) : array|bool
event
Mögliche sind alle von Lexware Office angebotenen Events.
callback
Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.

Aktives Event abfragen

$lexoffice->get_event( string $uuid ) : array
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle aktiven Events abfragen

$lexoffice->get_events_all() : object

Event löschen

$lexoffice->delete_event( string $iiud ) : object
uuid
Die ID eines zuvor erstellten Events.

Steuern

Kleinunternehmer

$lexoffice->is_tax_free_company(): bool

EU - Innergemeinschaftlicher Raum

$lexoffice->is_european_member(string $country_code, int $date): bool
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum

Buchungskategorie bestimmen

$lexoffice->get_needed_voucher_booking_id(float $taxrate, string $country_code, int $date, bool $euopean_vatid, bool $b2b_business, bool $physical_good = true): string
$taxrate
Steuersatz der verwendet werden soll (Wird auf Gültigkeit geprüft)
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum
$euopean_vatid
Verfügt man über die Kunden UST-ID
$b2b_business
Handelt es sich um einen Endkunden oder Geschäftskunden
$physical_good

Wird physikalische Ware oder digitale Dienstleistung verkauft

Abfrage der möglichen Steuersätze

$lexoffice->get_taxrates(string $country_code, int $date): array
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum


Prüfung Steuersatz

$lexoffice->check_taxrate(float $taxrate, string $country_code, int $date): bool
$taxrate
Der zu prüfende Steuersatz
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum

One-Stop-Shop (OSS) / Steuer Methoden

OSS Einstellungen prüfen

$lexoffice->is_oss_needed(string $country_code, int $date)
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum

Prüfung OSS Voucher Kategorie

$lexoffice->get_oss_voucher_category(string $country_code, int $date, int $booking_category = 1, float $taxrate = 0): string
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum
$booking_category
Angabe welche Buchungskategorie genutzt werden soll
1 => Fernverkauf
2 => Elektronische Dienstleistung
$taxrate
Genutzter Steuersatz in Buchung

Sonstiges

PDFs herunterladen

$lexoffice->get_pdf(string $type, string $uuid, string $filename): bool
type
Die Art des Beleges. Möglich Varianten sind: "invoices", "credit-notes"
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll
filename
Der lokale Dateiname an dem das PDF abgelegt werden soll

Voucher Kategorien

Bei zu erstellenden Vouchers, muss ein Buchungskonto angegeben werden.

incoming
Ausgangsbelege (eingehender Geldfluß)
outgoing
Eingangsbelege (ausgehender Geldfluß)
   private $booking_categories = [
       'incoming' => [
           // Einnahmen
           '8f8664a1-fd86-11e1-a21f-0800200c9a66' => 'Einnahmen',
           '8f8664a0-fd86-11e1-a21f-0800200c9a66' => 'Dienstleistung',
           '8f8664a4-fd86-11e1-a21f-0800200c9a66' => 'Honorar/Gage',
           '8f8664a5-fd86-11e1-a21f-0800200c9a66' => 'Geräteverleih',
           '8f8664a6-fd86-11e1-a21f-0800200c9a66' => 'Prämien',
           '8f8664a7-fd86-11e1-a21f-0800200c9a66' => 'Provision/Courtage',
           '8f8664a8-fd86-11e1-a21f-0800200c9a66' => 'Warenverkäufe',
           '8f8664a9-fd86-11e1-a21f-0800200c9a66' => 'Wartung',
           '8f8664a3-fd86-11e1-a21f-0800200c9a66' => 'Erlösminderungen',
           'be32ceb3-684a-485e-b628-4bcc748bac4b' => 'Bauleistungen §13b',
           '380a20cb-d04c-426e-b49c-84c22adfa362' => 'Fremdleistungen §13b',
           '7a1efa0e-6283-4cbf-9583-8e88d3ba5960' => 'Einnahmen als Kleinunternehmer',
           '9075a4e3-66de-4795-a016-3889feca0d20' => 'Innergemeinschaftliche Lieferung',
           'ef5b1a6e-f690-4004-9a19-91276348894f' => 'Dienstleistungen an Drittländer',
           '93d24c20-ea84-424e-a731-5e1b78d1e6a9' => 'Ausfuhrlieferungen an Drittländer',
           // Sonstige Einnahmen
           '27758e6b-220a-4ad4-98a0-96e1f17e2783' => 'Forderungen gegenüber Krankenkassen aus Aufwendungsausgleichsgesetz',
           'cfddcc50-fd86-11e1-a21f-0800200c9a66' => 'Sonstige Einnahmen',
           'cfddcc52-fd86-11e1-a21f-0800200c9a66' => 'Miete/Pacht',
           'cfddcc53-fd86-11e1-a21f-0800200c9a66' => 'Patent- und Lizenzverträge',
           '4cef8d07-b757-43eb-8dd8-da0c947800ff' => 'Mahngebühren',
           '5f1c4290-ad14-4487-b6f9-cbb2aff5efe2' => 'Zinserträge',
           'aba9020f-d0a6-47ca-ace6-03d6ed492351' => 'Rundungsdifferenzen',
           'c9eebb77-3f62-4ffa-99af-887c345a4a02' => 'Währungsumrechnung',
           'b01910ba-bcdd-4465-865e-3ffe0159f193' => 'Erstattungen Aufwendungsausgleichsgesetz',
           // Vereinnahmte Umsatzsteuer
           'd9bc790d-1a26-40a6-8b32-e5ef7c8b4d52' => 'Umsatzsteuer-Forderungen',
           // Umsatzsteuer-Erstattungen
           'af1a07f3-8ce4-47dc-8c82-263960c2442d' => 'Umsatzsteuer-Vorauszahlungen',
           '487ce31c-4db6-40d2-b192-3485b5ae5c6e' => 'Umsatzsteuer-Vorjahr',
           // Anlagevermögen
           'c5430e38-6daa-46e7-99d5-a65fd737338f' => 'Software',
           'b32709ec-08c2-4d3f-8c29-4f8da6e03541' => 'Technische Anlagen und Maschinen',
           '4f01e761-d912-441f-ad1a-1c1d2d590a81' => 'KFZ',
           '13efe6dc-c3a3-4d6b-a793-81a1c0d78ece' => 'LKW',
           '21027249-d7c3-455f-9b27-88cfe23cb14f' => 'Sonstige Transportmittel',
           '78361a84-43e6-4643-84ce-7c4925e30a7f' => 'Werkzeuge',
           'd8f6b5c4-62c4-4ed8-8deb-27eb284de06d' => 'Betriebs-und Geschäftsausstattung',
           'f87b5aa8-aa1f-49bb-b5af-7fc6d52c0941' => 'Ladeneinrichtung',
           'fe4ed5d8-8e69-4d10-923e-525948ea34df' => 'Büroeinrichtung',
           'ec2ec6e5-217f-4e59-a3bc-ebd5562c3f50' => 'Geringwertige Wirtschaftsgüter',
           // Darlehen
           '4ae5384e-438e-4466-9c9f-338096abac58' => 'Darlehen',
           'b9439764-a201-4a5c-84f4-2ae20c8bd40d' => 'Aufnahme',
           '89c3d29c-5896-4747-8cbb-9e44cb269946' => 'Aufnahme Gesellschafter',
           '097c0c6f-8fb0-4277-9d4e-f36bb91a0737' => 'Tilgung Gesellschafter',
           // Privat
           '5461e150-10d7-492f-968d-33413ff63a53' => 'Privat',
           'cfddcc54-fd86-11e1-a21f-0800200c9a66' => 'Privateinlagen',
           'bc25f5d5-c2c7-4394-b5ae-f422a779d68a' => 'Gesellschafter-Einlagen',
           'ef5afd88-4a48-4582-8934-9b60fd9ad9d5' => 'Einkommensteuer',
           '6d0a1338-803c-4188-86a1-ba0b2f88e2f3' => 'Versicherungen',
           '55e8b902-671e-49a4-b4bf-7e3b6f9ad305' => 'Spenden',
           'db6c9e4f-bf42-424d-ab36-a1c0977c8375' => 'Krankheitskosten',
           // Kapital
           'a08696c7-ee18-48da-aba6-e5ba07b76082' => 'Ausstehende Einlagen',
           // Zu prüfen
           '32b4c1d5-050f-4b80-9377-a8e98384ebee' => 'Zu prüfen',
           'eeaffbf8-d006-4c8c-b035-992817499eb4' => 'Durchlaufende Posten',
           '6656bbd4-f278-4a3d-8e22-c8543abfe906' => 'Geldtransit',
       ],
       'outgoing' => [
           // Material/Waren
           'efa82f42-fd85-11e1-a21f-0800200c9a66' => 'Material/Waren',
           '97704fd4-0e83-4c5b-a09c-1b4289644d10' => 'Materialeinkauf',
           '97938aa5-c5a7-4d31-bdac-a19209ba432e' => 'Wareneinkauf',
           'dba64b05-85f7-4359-8e83-a2556a62eeac' => 'Innergemeinschaftlicher Erwerb',
           '3085632b-dd6b-4380-9425-e5821c1c9031' => 'Bezugsnebenkosten',
           'e9905c70-fd87-11e1-a21f-0800200c9a66' => 'Aufwandsminderungen',
           // Fremdleistungen
           'efa82f43-fd85-11e1-a21f-0800200c9a66' => 'Fremdleistungen',
           '205cae73-fd88-11e1-a21f-0800200c9a66' => 'Dienstleister',
           '205cae70-fd88-11e1-a21f-0800200c9a66' => 'Agenturen',
           '205cae71-fd88-11e1-a21f-0800200c9a66' => 'Freelancer/Freie Mitarbeiter',
           '205cae72-fd88-11e1-a21f-0800200c9a66' => 'Subunternehmer',
           '3ce7ec19-4828-4469-ac31-754a495cdbf1' => 'Bauleistungen §13b',
           '113476af-ac83-4bf2-941d-0daa37022945' => 'Fremdleistungen §13b',
           '6d49f842-54d9-4ebb-9c24-a25daac76203' => 'Fremdleistungen §13b nicht EU',
           // Personal
           'efa82f44-fd85-11e1-a21f-0800200c9a66' => 'Personal',
           '5bcf2ff2-fd88-11e1-a21f-0800200c9a66' => 'Löhne',
           '5bcf2ff4-fd88-11e1-a21f-0800200c9a66' => 'Prämie/Provision',
           '278d79f0-2d9a-4326-9ff7-28b666ae49ca' => 'Gehälter',
           '689092e1-cb82-4d93-8659-e9068cf97b78' => 'Geschäftsführergehälter',
           'a8f23059-48c2-4dc9-aeae-d5fb8438c476' => 'Geschäftsführergehälter GmbH-Gesellschafter',
           '5bcf2ff1-fd88-11e1-a21f-0800200c9a66' => 'Sozialabgaben',
           'ec6225a9-e6d5-40bd-89fb-0d944ea4cc98' => 'Soziale Abgaben für Minijobber',
           '93793549-d846-4c55-86b8-98902a2c47f3' => 'Berufsgenossenschaft',
           '94c7de01-6898-4e2b-803a-50e442149692' => 'Vermögenswirksame Leistungen',
           '5bcf2ff0-fd88-11e1-a21f-0800200c9a66' => 'Aushilfslöhne',
           '5bcf2ff3-fd88-11e1-a21f-0800200c9a66' => 'Pauschale Steuer für Aushilfen',
           '48806a21-87a2-4e4c-8ced-1857100091d4' => 'Pauschale Steuern für Minijobber',
           '8afe1a96-bb88-4740-922f-ac36dc897144' => 'Pauschale Steuer auf sonstige Bezüge',
           '7a7300b0-e588-4732-a88b-a09537bf49f4' => 'Pauschale Steuern für Gesellschafter-Geschäftsführer',
           // Raumkosten
           '2f47898b-ad5c-460b-93f2-8966c49cf6e3' => 'Raumkosten',
           'ccbd1972-fd88-11e1-a21f-0800200c9a66' => 'Miete/Pacht',
           'ccbd1970-fd88-11e1-a21f-0800200c9a66' => 'Heizung',
           'ccbd1973-fd88-11e1-a21f-0800200c9a66' => 'Strom, Wasser, Gas',
           'd5249d11-fd90-11e1-a21f-0800200c9a66' => 'Renovierung/Instandhaltung',
           'ccbd1974-fd88-11e1-a21f-0800200c9a66' => 'Müllgebühren',
           // Telefon/Internet
           'efa82f4b-fd85-11e1-a21f-0800200c9a66' => 'Telefon/Internet',
           'b3a1f840-fd90-11e1-a21f-0800200c9a66' => 'Festnetz',
           'b3a1f842-fd90-11e1-a21f-0800200c9a66' => 'Mobil',
           'b3a1f841-fd90-11e1-a21f-0800200c9a66' => 'Internet',
           // Reisen
           'efa82f49-fd85-11e1-a21f-0800200c9a66' => 'Reisen',
           'f9f05691-fd89-11e1-a21f-0800200c9a66' => 'Fahrtkosten',
           'f9f05692-fd89-11e1-a21f-0800200c9a66' => 'Öffentliche Verkehrsmittel',
           'f9f05693-fd89-11e1-a21f-0800200c9a66' => 'Taxi',
           'f9f05690-fd89-11e1-a21f-0800200c9a66' => 'Bahn-/Flugticket, Mietwagen',
           'f9f05694-fd89-11e1-a21f-0800200c9a66' => 'Übernachtungskosten',
           '4c4f9907-0379-408a-989b-22850d2fbcdc' => 'Frühstück',
           '9fb5e4b0-94ae-47f3-804f-5ed00e4aceb6' => 'Verpflegungsmehraufwendungen',
           'cf03a2b0-f838-474f-ac5e-67adb9b830c7' => 'Reise MA',
           '3620798f-ae06-4492-b775-1c87eb99247c' => 'Fahrtkosten MA',
           'b99b667f-bfee-41b9-8ec0-cee308bdacfd' => 'Übernachtung MA',
           '353e8c93-5f69-4476-887f-d48734ee2cc7' => 'Verpflegungsmehraufw. MA',
           // Fortbildung
           '5bc9acec-85af-48dd-a4c3-9ccc4ea6ac80' => 'Fortbildung',
           '16d04a27-fd91-11e1-a21f-0800200c9a66' => 'Seminar/Weiterbildung',
           // Beratung
           'efa85651-fd85-11e1-a21f-0800200c9a66' => 'Beratung',
           'f48154a0-fd90-11e1-a21f-0800200c9a66' => 'Rechtsanwalt',
           'f48154a1-fd90-11e1-a21f-0800200c9a66' => 'Steuerberater',
           '2bdc3fd5-3ef3-4732-b315-4fa2c1061994' => 'Buchführungskosten',
           '90999976-9851-491a-9b68-12f4078c219c' => 'Abschluss- und Prüfungskosten',
           // Miete/Leasing
           'efa82f45-fd85-11e1-a21f-0800200c9a66' => 'Miete/Leasing',
           'ccbd1971-fd88-11e1-a21f-0800200c9a66' => 'Leasing für Geräte',
           // Versicherungen/Beiträge
           'efa82f46-fd85-11e1-a21f-0800200c9a66' => 'Versicherungen/Beiträge',
           'f49d88d0-fd88-11e1-a21f-0800200c9a66' => 'Betriebshaftpflicht',
           '5ce0f8a0-fd89-11e1-a21f-0800200c9a66' => 'Firmenversicherung',
           'f49d88d2-fd88-11e1-a21f-0800200c9a66' => 'Rechtschutz',
           'f49d88d3-fd88-11e1-a21f-0800200c9a66' => 'Transportversicherung',
           'f49d88d1-fd88-11e1-a21f-0800200c9a66' => 'Innungs- und Verbandsbeiträge',
           // Werbung
           'efa82f48-fd85-11e1-a21f-0800200c9a66' => 'Werbung',
           'd22989b5-fd89-11e1-a21f-0800200c9a66' => 'Werbegeschenke/Sponsoring',
           'd22989b0-fd89-11e1-a21f-0800200c9a66' => 'Anzeigen Print- und Online',
           'd22989b1-fd89-11e1-a21f-0800200c9a66' => 'Dekoration',
           'd22989b2-fd89-11e1-a21f-0800200c9a66' => 'Geschäftspapier/Visitenkarten',
           'd22989b3-fd89-11e1-a21f-0800200c9a66' => 'Marketing',
           'd22989b4-fd89-11e1-a21f-0800200c9a66' => 'Messekosten',
           '01d94be1-ba15-4dd8-a8e2-e1d51eaab8f9' => 'Repräsentationskosten',
           // Zinsen/Gebühren
           'c3dc62f5-e382-4f34-a286-b06bda0b5e90' => 'Zinsen/Gebühren',
           '16d04a22-fd91-11e1-a21f-0800200c9a66' => 'Girokontozinsen',
           '16d04a23-fd91-11e1-a21f-0800200c9a66' => 'Kontoführung/Kartengebühr',
           '5921d420-fd91-11e1-a21f-0800200c9a66' => 'Darlehenszinsen',
           '5921d422-fd91-11e1-a21f-0800200c9a66' => 'Darlehensgebühren',
           // Gezahlte Vorsteuer
           '3da06950-a89f-4b3f-9932-0e627cdf6a34' => 'Gezahlte Vorsteuer',
           'f1c2c983-db43-4d91-b0b1-c9d8aa89adef' => 'Einfuhrumsatzsteuer',
           // Umsatzsteuer-Vorauszahlungen
           '222b6f72-fd92-11e1-a21f-0800200c9a66' => 'Umsatzsteuer-Vorauszahlungen',
           'e68b1ec8-3a46-4100-890b-01bc86cf8ada' => 'Umsatzsteuer-Vorauszahlungen 1/11',
           'ebbdd0f4-3bd4-4d2e-847f-8b68314f7ef6' => 'Umsatzsteuer-Vorjahr',
           // Beschränkt abziehbare Betriebsausgaben
           'efa82f4a-fd85-11e1-a21f-0800200c9a66' => 'Beschränkt abziehbare Betriebsausgaben',
           '934adb21-fd90-11e1-a21f-0800200c9a66' => 'Bewirtungskosten',
           'be378725-ff9e-4180-b72a-2effe6493bba' => 'Bewirtungskosten (nicht abziehbar)',
           '09b906eb-8e05-4ee7-88a5-8e49e6c4db72' => 'Geschenke',
           // Fahrzeug
           'efa82f47-fd85-11e1-a21f-0800200c9a66' => 'Fahrzeug',
           '9eaf6ff0-fd89-11e1-a21f-0800200c9a66' => 'Benzin',
           '9eaf6ff7-fd89-11e1-a21f-0800200c9a66' => 'Wagenpflege',
           '9eaf6ff1-fd89-11e1-a21f-0800200c9a66' => 'Inspektion/Reparatur',
           '9eaf6ff3-fd89-11e1-a21f-0800200c9a66' => 'KFZ-Versicherungen',
           '9eaf6ff4-fd89-11e1-a21f-0800200c9a66' => 'Leasing/Mietwagen',
           '9eaf6ff5-fd89-11e1-a21f-0800200c9a66' => 'Stellplatz/Garagenmiete',
           '1e541b97-42de-4eb2-abe7-0e208cf46f38' => 'Mietleasing KFZ',
           '9eaf6ff8-fd89-11e1-a21f-0800200c9a66' => 'Sonstige KFZ-Kosten',
           '79e1efd6-7103-46cf-99c2-0717cc60350b' => 'Mautgebühren',
           '5597e22b-7ce8-4686-b15d-c2a6caa12d3b' => 'Kosten betriebl. Nutzung KFZ im Privatvermögen',
           // Reparaturen
           'efa85650-fd85-11e1-a21f-0800200c9a66' => 'Reparaturen',
           'd5249d10-fd90-11e1-a21f-0800200c9a66' => 'Kleinmaterial',
           'd5249d12-fd90-11e1-a21f-0800200c9a66' => 'Wartung',
           '50ca159d-1155-4d9a-8f79-b013943c774e' => 'Anlagen und Maschinen',
           'd854ed5f-969a-4b5f-b13a-9679648aa988' => 'Sonstige Reparaturen',
           // Sonstige Ausgaben
           '16d04a28-fd91-11e1-a21f-0800200c9a66' => 'Sonstige Ausgaben',
           '16d04a21-fd91-11e1-a21f-0800200c9a66' => 'Bürobedarf',
           '16d04a24-fd91-11e1-a21f-0800200c9a66' => 'Porto',
           '16d04a29-fd91-11e1-a21f-0800200c9a66' => 'Zeitschriften/Bücher',
           '934adb20-fd90-11e1-a21f-0800200c9a66' => 'Betriebliche Besprechungen',
           '16d04a26-fd91-11e1-a21f-0800200c9a66' => 'Reinigung/Reinigungsmittel',
           '16d04a20-fd91-11e1-a21f-0800200c9a66' => 'Anschaffungen',
           'fb198cf9-79f2-407c-baeb-9d8aa9b98fd0' => 'Kosten der Warenabgabe',
           '26e4fa58-db12-443f-9e70-9a8081730c1c' => 'Verpackungsmaterial',
           'b49aae5f-4121-4262-b8bd-f49278b66423' => 'Lizenzen und Konzessionen',
           '9d92c0dc-8cea-4791-ab3b-90f913101d32' => 'Wartungskosten für Hard- und Software',
           '6a90d581-46ba-4b59-ba8f-e568a552e0c0' => 'Aufmerksamkeiten',
           'c1d7d464-0b42-4a7e-b6af-535b2eb4a2fd' => 'Mahngebühren',
           '61b6c617-d5b6-44ee-b43a-ac97b71f1bd8' => 'Rundungsdifferenzen',
           '207833b2-59fb-4185-b7b3-52ab9b944d59' => 'Währungsumrechnung',
           // Anlagevermögen
           'aa2d19a0-43e7-4330-a579-75c962254546' => 'Software',
           'e82f21da-c21b-44a0-8abb-cd805b62b231' => 'Technische Anlagen und Maschinen',
           '1b029e34-70ad-4869-95da-bc9454c8650c' => 'KFZ',
           'ff95af70-57e3-46a8-b6cb-0b03400d4879' => 'LKW',
           '281cd301-6e13-4d27-81c2-30f896e5bf1d' => 'Sonstige Transportmittel',
           '121188e5-61ec-4734-bcc2-282e4340bb33' => 'Werkzeuge',
           '60a5a91b-6b4a-485e-b610-232b423a161d' => 'Betriebs-und Geschäftsausstattung',
           '571e17ef-962d-4ec1-aedf-b166d876ebe1' => 'Ladeneinrichtung',
           'd0d633ec-dda7-4aa3-867c-96e7a0d97477' => 'Büroeinrichtung',
           '1b2d76c2-23a2-48c6-a717-7f9fecf99556' => 'Geringwertige Wirtschaftsgüter',
           // Steuern
           '9eaf6ff2-fd89-11e1-a21f-0800200c9a66' => 'KFZ-Steuer',
           '222b6f71-fd92-11e1-a21f-0800200c9a66' => 'Gewerbesteuer',
           '75c4dd86-9977-4624-bac8-620e7aa08dd2' => 'Körperschaftsteuer',
           'fcac6066-8597-4086-8544-b95c444738a2' => 'Solidaritätszuschlag',
           // Darlehen
           'efa85654-fd85-11e1-a21f-0800200c9a66' => 'Darlehen',
           '5921d421-fd91-11e1-a21f-0800200c9a66' => 'Tilgung',
           // Privat
           'efa85653-fd85-11e1-a21f-0800200c9a66' => 'Privat',
           '16d04a25-fd91-11e1-a21f-0800200c9a66' => 'Privatentnahmen',
           '35bfb902-6845-45aa-8f90-747226f1e632' => 'Gesellschafter-Entnahmen',
           '222b6f70-fd92-11e1-a21f-0800200c9a66' => 'Einkommensteuer',
           '328a41b4-58d7-4595-8840-1b96ad398f15' => 'Versicherungen',
           '72b9ed0d-95fa-4be7-8035-1f96d28b9725' => 'Spenden',
           '800030a3-b5e8-43ef-b1a1-62046d65f1a3' => 'Krankheitskosten',
           // Zu zahlen
           'ec472a04-9712-4ebb-9c8d-981941a456e5' => 'Zu zahlen',
           '4708d50c-f3a9-4a27-98c4-d37502e3b45c' => 'Lohn-und Kirchensteuer',
           '27c9577e-9472-47cd-818e-a0cbb042bf82' => 'Sozialversicherungsbeiträge',
           'db9689f7-49d6-4f6f-9cc4-93804f7c674a' => 'Vermögensbildung',
           'fa4aadaa-8f1f-4121-99b4-bac9ad7c9bc9' => 'Verrechnung Lohn/Gehalt',
           'cd3ea3e5-b681-496b-9886-7f8a8ab0397a' => 'Nettogehälter',
           // Zu prüfen
           '8d2e71c6-09d5-439a-a295-a9e71661afcd' => 'Zu prüfen',
           '62e21a0d-af46-4674-bfa0-60bc2607fa17' => 'Durchlaufende Posten',
           'dd56efd2-6c62-40e4-9d9e-cba7b0045911' => 'Geldtransit',
       ]
   ];

One-Stop-Shop (OSS) Kategorien

  1. Deutsche Umsatzsteuer
Kategorie: Fernverkauf (Fernverkauf steht für Verkauf von Waren)
categoryId: 7c112b66-0565-479c-bc18-5845e080880a
Steuersätze: Es gelten die deutschen Steuersätze

Kategorie: Elektronische Dienstleistungen (ehemals MOSS)
categoryId: d73b880f-c24a-41ea-a862-18d90e1c3d82
Steuersätze: Es gelten die deutschen Steuersätze
  1. EU-Zielland-Steuer
Kategorie: Fernverkauf in EU-Land steuerpflichtig
categoryId: 4ebd965a-7126-416c-9d8c-a5c9366ee473
Steuersätze: Es gelten Steuersätze des Ziellandes

Kategorie: Elektronische Dienstleistung in EU-Land steuerpflichtig (ehemals MOSS)
categoryId: efa82f40-fd85-11e1-a21f-0800200c9a66
Steuersätze: Es gelten Steuersätze des Ziellandes

Webhook Anfragen

Wir liefern eine callback.php mit, die als callback URL angegeben werden kann. Bei allen Aufrufen wird die X-Lxo-Signature überprüft und sichergestellt, dass der Aufruf wirklich von einem Lexware Office Server erstellt wurde.

Error Handling

Alle Methoden sollten stets in einem try/catch Block verwendet werden.
Unser Client bietet eine erweiterte Execption Klasse, die via "$e->get_error()" sofern vorhanden weitere Details zur Anfrage und dem API Response zurück gibt.

Beispiel: Versuch eines PDF Downloads von einer nicht fertig gestellten Rechnung

try {
    $lexoffice->get_invoice_pdf('7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9', 'test.pdf');
} catch (lexoffice_exception $e) {
    echo $e->getMessage();
    // lexoffice-php-api: error in api request - check details via $e->get_error()
 
    print_r($e->get_error());
    /*
    Array (
        [HTTP Status] => 500
        [Requested URI] => https://api.lexoffice.io/v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
        [Requested Payload] => 
        [Response] => stdClass Object
           (
                [timestamp] => 2019-11-20T17:34:53.360+01:00
                [status] => 500
                [error] => Internal Server Error
                [path] => /v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
                [traceId] => f9f241666675
                [message] => A technical error has occurred that is not specified in more detail.
            )
    )
    */
}