https://github.com/sysix/lexoffice-php-api
Simple API Integration for lexoffice
https://github.com/sysix/lexoffice-php-api
api api-client lexoffice php psr-18
Last synced: about 1 year ago
JSON representation
Simple API Integration for lexoffice
- Host: GitHub
- URL: https://github.com/sysix/lexoffice-php-api
- Owner: Sysix
- License: mit
- Created: 2020-06-01T15:43:00.000Z (about 6 years ago)
- Default Branch: development
- Last Pushed: 2025-02-14T11:38:39.000Z (over 1 year ago)
- Last Synced: 2025-04-14T21:38:52.627Z (about 1 year ago)
- Topics: api, api-client, lexoffice, php, psr-18
- Language: PHP
- Homepage:
- Size: 408 KB
- Stars: 23
- Watchers: 5
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Lexoffice PHP API


[](https://shepherd.dev/github/Sysix/lexoffice-php-api)
[](//packagist.org/packages/sysix/lex-office-api)
[](//packagist.org/packages/sysix/lex-office-api)
## Requirements
PHP: >= 8.1
Extensions:
- [Composer](https://getcomposer.org/)
- [PHP-JSON](https://www.php.net/manual/en/book.json.php)
- [PSR-18 HTTP-Client](https://packagist.org/providers/psr/http-client-implementation)
## Install
composer:
`composer require sysix/lex-office-api`
## Usage
Search for the [official API Documentation](https://developers.lexoffice.io/docs/).
You need an [API Key](https://app.lexoffice.de/addons/public-api) for that.
### Basic
```php
// store keys in .env file
$apiKey = getenv('LEXOFFICE_API_KEY');
// in this example we are using guzzlehttp/guzzle package, it can be any PSR-18 HTTP Client
// see: https://packagist.org/providers/psr/http-client-implementation
$httpClient = \GuzzleHttp\Client();
$api = new \Sysix\LexOffice\Api($apiKey, $httpClient);
```
### Optimize your HTTP Client
This library only prepares the `\Psr\Http\Message\RequestInterface` for the HTTP Client and returns its Response.
There are almost no error checks, no caching and no rate limiting. Your PSR-18 HTTP Client should come with a way to deal with it.
Here is a example with `guzzlehttp/guzzle` , `kevinrob/guzzle-cache-middleware` and `spatie/guzzle-rate-limiter-middleware`:
```php
$apiKey = getenv('LEXOFFICE_API_KEY');
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push(new \Kevinrob\GuzzleCache\CacheMiddleware(), 'cache');
$stack->push(\Spatie\GuzzleRateLimiterMiddleware\RateLimiterMiddleware::perSecond(2));
$httpClient = \GuzzleHttp\Client(['handler' => $stack]);
$api = new \Sysix\LexOffice\Api($apiKey, $httpClient);
```
## Endpoints
### Article Endpoint
```php
/** @var \Sysix\LexOffice\Api $api */
$client = $api->article();
// filters
$client->size = 100;
$client->sortDirection = 'DESC';
$client->articleNumber = 'LXW-BUHA-2024-001';
$client->gtin = '9783648170632';
$client->type = 'PRODUCT';
// get a page
$response = $client->getPage(0);
// other methods
$response = $client->get($entityId);
$response = $client->create($data);
$response = $client->update($entityId, $data);
$response = $client->delete($entityId);
```
### Contact Endpoint
```php
$client = $api->contact();
// filters
$client->size = 100;
$client->email = 'john.doe@example.com';
$client->name = 'John Doe';
$client->number = 123456;
$client->customer = true;
$client->vendor = false;
// get a page
$response = $client->getPage(0);
// other methods
$response = $client->get($entityId);
$response = $client->create($data);
$response = $client->update($entityId, $data);
```
### Country Endpoint
```php
$response = $api->country()->getAll();
```
### Credit Notes Endpoint
```php
$voucherList = $api->creditNote()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->creditNote()->get($entityId);
$response = $api->creditNote()->create($data);
$response = $api->creditNote()->create($data, true); // finalized
$response = $api->creditNote()->pursue($precedingSalesVoucherId, $data);
$response = $api->creditNote()->pursue($precedingSalesVoucherId, $data, true); // finalized
$response = $api->creditNote()->document($entityId); // get document ID
$response = $api->creditNote()->document($entityId, true); // get file content
$response = $api->creditNote()->document($entityId, true, 'image/*'); // accept only images
```
### Deliverys Notes Endpoint
```php
$voucherList = $api->deliveryNote()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->deliveryNote()->get($entityId);
$response = $api->deliveryNote()->create($data);
$response = $api->deliveryNote()->pursue($precedingSalesVoucherId, $data);
$response = $api->deliveryNote()->document($entityId); // get document ID
$response = $api->deliveryNote()->document($entityId, true); // get file content
$response = $api->deliveryNote()->document($entityId, true, 'image/*'); // accept only images
```
### Down Payment Invoices Endpoint
```php
$voucherList = $api->downPaymentInvoice()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->downPaymentInvoice()->get($entityId);
$response = $api->downPaymentInvoice()->create($data);
$response = $api->downPaymentInvoice()->document($entityId); // get document ID
$response = $api->downPaymentInvoice()->document($entityId, true); // get file content
$response = $api->downPaymentInvoice()->document($entityId, true, 'image/*'); // accept only images
```
### Dunnings Endpoint
```php
$response = $api->dunning()->get($entityId);
$response = $api->dunning()->pursue($precedingSalesVoucherId, $data);
$response = $api->dunning()->document($entityId); // get document ID
$response = $api->dunning()->document($entityId, true); // get file content
$response = $api->dunning()->document($entityId, true, 'image/*'); // accept only images
```
### Event Subscriptions Endpooint
```php
$response = $api->event()->get($entityId);
$response = $api->event()->create($data);
$response = $api->event()->delete($entityId);
$response = $api->event()->getAll();
```
### File Endpoint
```php
$response = $api->file()->upload($filePath, $voucherType);
$response = $api->file()->get($entityId); // accept every file
$response = $api->file()->get($entityId, 'image/*'); // accept only images
$response = $api->file()->get($entityId, 'application/xml'); // get XRechung XML File (if possible)
```
### Invoices Endpoint
```php
$voucherList = $api->invoice()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->invoice()->get($entityId);
$response = $api->invoice()->create($data);
$response = $api->invoice()->create($data, true); // finalized
$response = $api->invoice()->pursue($precedingSalesVoucherId, $data);
$response = $api->invoice()->pursue($precedingSalesVoucherId, $data, true); // finalized
$response = $api->invoice()->document($entityId); // get document ID
$response = $api->invoice()->document($entityId, true); // get file content
$response = $api->invoice()->document($entityId, true, 'image/*'); // accept only images
$response = $api->invoice()->document($entityId, true, 'application/xml'); // get XRechung XML File (if possible)
```
### Order Confirmation Endpoint
```php
$voucherList = $api->orderConfirmation()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->orderConfirmation()->get($entityId);
$response = $api->orderConfirmation()->create($data);
$response = $api->orderConfirmation()->pursue($precedingSalesVoucherId, $data);
$response = $api->orderConfirmation()->document($entityId); // get document ID
$response = $api->orderConfirmation()->document($entityId, true); // get file content
$response = $api->orderConfirmation()->document($entityId, true, 'image/*'); // accept only images
```
### Payment Endpoint
```php
$response = $api->payment()->get($entityId);
```
### Payment Conditions Endpoint
```php
$response = $api->paymentCondition()->getAll();
```
### Posting Categories Endpoint
```php
$response = $api->postingCategory()->getAll();
```
### Print Layouts Endpoint
```php
$response = $api->printLayout()->getAll();
```
### Profile Endpoint
```php
$response = $api->profile()->get();
```
### Quotation Endpoint
```php
$voucherList = $api->quotation()->getVoucherListClient(); // see VoucherlistClient Documentation
$response = $api->quotation()->get($entityId);
$response = $api->quotation()->create($data);
$response = $api->quotation()->create($data, true); // finalized
$response = $api->quotation()->document($entityId); // get document ID
$response = $api->quotation()->document($entityId, true); // get file content
$response = $api->quotation()->document($entityId, true, 'image/*'); // accept only images
```
### Recurring Templates Endpoint
```php
$client = $api->recurringTemplate();
// filters
$client->size = 100;
$client->sortDirection = 'DESC';
$client->sortColumn = 'updatedDate';
// get a page
$response = $client->getPage(0);
// other methods
$response = $api->recurringTemplate()->get($entityId);
```
### Voucher Endpoint
```php
$response = $api->voucher()->get($entityId);
$response = $api->voucher()->create($data);
$response = $api->voucher()->update($entityId, $data);
$response = $api->voucher()->document($entityId); // get document ID
$response = $api->voucher()->document($entityId, true); // get file content
$response = $api->voucher()->document($entityId, true, 'image/*'); // accept only images
$response = $api->voucher()->document($entityId, true, 'application/xml'); // get XRechung XML File (if possible)
$response = $api->voucher()->upload($entitiyId, $filepath);
```
### Voucherlist Endpoint
```php
$client = $api->voucherlist();
$client->size = 100;
$client->sortDirection = 'DESC';
$client->sortColumn = 'voucherNumber';
// filters required
$client->types = [
'salesinvoice',
'salescreditnote',
'purchaseinvoice',
'purchasecreditnote',
'invoice',
'downpaymentinvoice',
'creditnote',
'orderconfirmation',
'quotation'
];
$client->statuses = [
'draft',
'open',
'paid',
'paidoff',
'voided',
//'overdue', overdue can only be fetched alone
'accepted',
'rejected'
];
// filters optional
$client->archived = true;
$client->contactId = 'some-uuid-string';
$client->voucherDateFrom = new \DateTime('2023-12-01');
$client->voucherDateTo = new \DateTime('2023-12-01');
$client->createdDateFrom = new \DateTime('2023-12-01');;
$client->createdDateTo = new \DateTime('2023-12-01');
$client->updatedDateFrom = new \DateTime('2023-12-01');
$client->updatedDateTo = new \DateTime('2023-12-01');
// get a page
$response = $client->getPage(0);
```
## Utils
### get JSON from Success and Error Response
```php
// can be possible null because the response body can be empty
$json = \Sysix\LexOffice\Utils::getJsonFromResponse($response); // as object
$json = \Sysix\LexOffice\Utils::getJsonFromResponse($response, true); // as associative array
```