mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-16 21:17:14 +01:00
6901 lines
220 KiB
Plaintext
6901 lines
220 KiB
Plaintext
#%RAML 1.0
|
||
title: Xentral-API
|
||
description: Die API befindet sich in ihrer Xentral-Installation im Unterordner `/www/api/`.
|
||
version: v1, v2
|
||
baseUri: http://www.example.com/api/{version}/
|
||
mediaType: application/json
|
||
securedBy: [ Digest ]
|
||
securitySchemes:
|
||
Digest:
|
||
type: Digest Authentication
|
||
displayName: Digest Authentifizierung
|
||
description: |
|
||
Die API unterstützt nur die Digest Authentifizierung.
|
||
Grundsätzlich empfehlen wir aber die zusätzliche Absicherung mit HTTPS-Verschlüsselung.
|
||
describedBy:
|
||
responses:
|
||
401:
|
||
description: |
|
||
Fehler bei der Authentifizierung werden immer mit dem HTTP-Status `401 Unauthorized` ausgeliefert.
|
||
|
||
**Beispiel-Response beim Zugriff ohne Authentifizierung:**
|
||
```
|
||
{
|
||
"error": {
|
||
"code": 7411,
|
||
"http_code": 401,
|
||
"message": "Unauthorized. You need to login.",
|
||
"href": "http://www.example.com/api/docs.html#error-7411"
|
||
}
|
||
}
|
||
```
|
||
|
||
documentation:
|
||
- title: Authentifizierung
|
||
content: |
|
||
Die REST-API unterstützt momentan nur die Digest Authentifizierung, da nur diese Authentifizierungsmethode auch
|
||
ohne HTTPS ausreichend Sicherheit bietet. Wir empfehlen grundsätzlich aber die zusätzliche Absicherung mit
|
||
HTTPS-Verschlüsselung.
|
||
|
||
## API-Account anlegen
|
||
|
||
In Xentral unter *Administration > Einstellungen > API-Account*. Dort auf *Neu* klicken.
|
||
|
||
Wichtig sind folgende Felder:
|
||
* *Aktiv*: Hacken muss gesetzt sein, damit API-Account genutzt werden kann.
|
||
* *App Name / Benutzername* und *Initkey / Passwort*: Benutzername und Kennwort für Digest-Authentifizierung.
|
||
|
||
- title: Authorisierung
|
||
content: |
|
||
Der Zugriff eines API-Accounts kann über Berechtigungen granular eingeschränkt werden.
|
||
|
||
## Berechtigungen bearbeiten
|
||
|
||
In Xentral unter *Administration > Einstellungen > API-Account* muss der gewünschte API-Account mit einem Klick
|
||
auf den Stift bearbeitet werden. Dort ist eine Liste der vorhandenen Berechtigungen.
|
||
|
||
### Alte API-Accounts
|
||
|
||
Alle API-Accounts, die vor der Einführung der Berechtigungen existierten, haben automatisch alle
|
||
Berechtigungen erhalten.
|
||
|
||
- title: Requests
|
||
content: |
|
||
## Ressourcen
|
||
Grundsätzlich können alle API-Ressourcen nach folgendem Schema angesprochen werden.
|
||
|
||
**Beispiel mit der `Addressen` Ressource:**
|
||
|
||
| Method | Endpoint | Aktion |
|
||
| --------- | ------------------ | ------------------------------ |
|
||
| `GET` | `/v1/adressen` | Alle Adressen auflisten |
|
||
| `GET` | `/v1/adressen/10` | Einzelne Adresse abrufen |
|
||
| `PUT` | `/v1/adressen/10` | Vorhandene Adresse bearbeiten |
|
||
| `POST` | `/v1/adressen` | Neue Adresse anlegen |
|
||
| `DELETE` | `/v1/adressen/10` | Vorhandene Adresse löschen |
|
||
|
||
Bei vereinzelten Ressourcen kann es Abweichungen von diesem Schema geben.
|
||
|
||
## Content-Types
|
||
Die API erwartet Anfragen mit dem Content-Type `application/json` oder `application/xml`.
|
||
|
||
## Zeichensatz
|
||
Alle Anfragen mit Nutzdaten müssen mit `UTF-8` kodiert sein.
|
||
|
||
## Nutzdaten
|
||
Nutzdaten müssen im Request-Body mitgeschickt werden. Nutzdaten sind nur bei POST- und PUT-Request zulässig;
|
||
also nur Anfragen bei denen Ressourcen (z.B. Adressen) angelegt oder bearbeitet werden.
|
||
|
||
**Beispiel HTTP-Request:**
|
||
```
|
||
PUT /v1/adressen/7 HTTP/1.1
|
||
Host: api.example.com
|
||
Accept: application/json
|
||
Content-Type: application/json; charset=utf-8
|
||
Authorization: Digest XXXXXXXXXXX
|
||
|
||
{
|
||
"name": "Schrauben Meier",
|
||
"telefon": "0987654321"
|
||
}
|
||
```
|
||
|
||
### Aufbau Nutzdaten
|
||
|
||
#### JSON
|
||
JSON-Nutzdaten werden ohne einheitliches Root-Element erwartet. Die zu ändernden Feldnamen werden in der ersten
|
||
Ebene erwartet.
|
||
|
||
**Beispiel JSON:**
|
||
```json
|
||
{
|
||
"name": "Schrauben Meier GmbH",
|
||
"strasse": "Dorfstrasse 123",
|
||
"ort": "Musterdorf",
|
||
"plz": "12345",
|
||
"telefon": "0987654321",
|
||
}
|
||
```
|
||
|
||
#### XML
|
||
XML-Nutzdaten müssen von einem Root-Element umschlossen sein. Der Name des Root-Elements kann beliebig lauten.
|
||
Die zu ändernden Feldnamen werden in der zweiten Ebene erwartet.
|
||
|
||
**Beispiel XML:**
|
||
```xml
|
||
<data>
|
||
<name>Schrauben Meier GmbH</name>
|
||
<strasse>Dorfstrasse 123</strasse>
|
||
<ort>Musterdorf</ort>
|
||
<plz>12345</plz>
|
||
<telefon>0987654321</telefon>
|
||
</data>
|
||
```
|
||
|
||
- title: Responses
|
||
content: |
|
||
Die API liefert Antworten im `JSON`- oder `XML`-Format aus; abhängig vom `Accept`-Header der Anfrage.
|
||
|
||
Es wird die `JSON`-Ausgabe bevorzugt, wenn der `Accept`-Header fehlt oder ein nicht unterstütztes Format aufweist.
|
||
|
||
## Content-Types
|
||
Antworten werden mit dem Content-Type `application/json` oder `application/xml` ausgeliefert; abhängig
|
||
vom gesendeten Format.
|
||
|
||
## Zeichensatz
|
||
Alle Antworten sind `UTF-8` kodiert.
|
||
|
||
## Response-Body
|
||
### Erfolgreiche Anfrage
|
||
Der Response-Body einer erfolgreichen Anfrage beinhaltet immer ein `data`-Property als Root-Element.
|
||
|
||
#### Einzelne Ressource
|
||
**Beispiel mit einzelnem Ergebnis:**
|
||
```
|
||
{
|
||
"data": {
|
||
"id": 1,
|
||
"title": "Bernhardt Bieber"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### Mehrere Ressourcen
|
||
Anworten mit mehreren Ressourcen beinhalten zusätzlich ein `pagination` Root-Element.
|
||
|
||
**Beispiel mit mehreren Ergebnissen:**
|
||
```
|
||
{
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"title": "Phillipp Pabst"
|
||
},
|
||
{
|
||
"id": 2,
|
||
"name": "Peter Pfaff"
|
||
}
|
||
],
|
||
"pagination": {
|
||
"items_total": 50,
|
||
"items_current": 20,
|
||
"items_per_page": 20,
|
||
"page_current": 1,
|
||
"page_last": 3
|
||
}
|
||
}
|
||
```
|
||
Die Paginierung lässt sich über die GET-Parameter `page` und `items` steuern.
|
||
|
||
### Fehler
|
||
Auch Fehler besitzen ein einheitliches Schema mit `error`-Property als Root-Element:
|
||
```
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
```
|
||
|
||
Fehler-Responses beinhalten in der Regel ein `code` Property. Jeder Code steht für einen spezifischen Fehler.
|
||
Im Helpdesk (oder dieser Dokumentation) ist zu jedem Code eine genaue Beschreibung und idealerweise
|
||
Lösungsvorschläge zu finden.
|
||
|
||
- title: Filter/Sortierung/Paginierung
|
||
content: |
|
||
Suchfilter, Sortierung und Paginierung stehen bei allen Endpunkten zur Verfügung die eine Liste zurückliefern.
|
||
|
||
## Filter
|
||
|
||
### Einfache Filter
|
||
|
||
Beispiel: `/resource?ausverkauft=1&typ=produkt`
|
||
|
||
Welche Filter-Parameter zur Verfügung stehen erfahren Sie in der jeweiligen Endpunkt-Beschreibung.
|
||
|
||
### Komplexe Filter
|
||
|
||
Komplexe Filter sind grundsätzlich bei allen Endpunkt verfügbar die eine Liste zurückliefern; unabhängig
|
||
von den einfachen Filtern.
|
||
|
||
Beispiele:
|
||
- `/resource?filter[0][property]=mwst_satz&filter[0][expression]=gte&filter[0][value]=10`
|
||
- `/resource?filter[0][property]=beschreibung&filter[0][value]=%Schraube%`
|
||
- `/resource?filter[0][property]=land&filter[0][value]=DE&filter[0][operation]=OR&filter[1][property]=land&filter[1][value]=AT`
|
||
|
||
Parameter:
|
||
- `property`\
|
||
Feld in dem gesucht werden soll (Pflichtangabe).
|
||
|
||
- `value`\
|
||
Wert nach dem gesucht werden soll (Pflichtangabe).
|
||
|
||
- `expression`\
|
||
Vergleichsoperator\
|
||
Mögliche Werte:
|
||
- `eq` entspricht **=**
|
||
- `not` entspricht **!=**
|
||
- `gt` entspricht **>**
|
||
- `gte` entspricht **>=**
|
||
- `lt` entspricht **<**
|
||
- `lte` entspricht **<=**
|
||
- `like` entspricht **LIKE**
|
||
- `not_like` entspricht **NOT LIKE**
|
||
Default-Wert: `like`
|
||
|
||
- `operation`\
|
||
Verknüpfungsart bei der Anwendung mehrerer Filter.\
|
||
Mögliche Werte: `and`, `or`.\
|
||
Default-Wert: `and`
|
||
|
||
## Sortierung
|
||
|
||
Welche Felder für die Sortierung zur Verfügung stehen, erfahren Sie in der jeweiligen Endpunkt-Beschreibung.
|
||
|
||
Ein Minuszeichen vor dem Feldnamen kehrt die Sortierung um.
|
||
|
||
Beispiel: `/resource?sort=titel,-projekt`
|
||
|
||
## Paginierung
|
||
|
||
| Parameter | Beschreibung | Default | Wertebereich |
|
||
| ---------- | -------------------------------- | -------- | -------------- |
|
||
| `page` | Auswahl der Seite | `1` | `1` bis `1000` |
|
||
| `items` | Anzahl der Ergebnisse pro Seite | `20` | `1` bis `1000` |
|
||
|
||
Beispiel: `/resource?page=2&items=5`
|
||
|
||
- title: Fehler-Codes
|
||
content: |
|
||
|
||
TODO: Erklärungen hinzufügen
|
||
|
||
## Auth-Fehler
|
||
### <a name="error-7411"></a> #7411 - Unauthorized
|
||
Zugriff ohne Authentifizierung. Authorization-Header fehlt komplett.
|
||
|
||
### <a name="error-7412"></a> #7412 - Digest header incomplete
|
||
Digest-Header unvollständig; benötigte Teile fehlen.
|
||
|
||
### <a name="error-7413"></a> #7413 - Api account missing
|
||
Es ist kein API-Account angelegt oder aktiv.
|
||
|
||
### <a name="error-7414"></a> #7414 - Api account invalid
|
||
Der verwendete API-Account ist nicht gültig. Eventuell wurde der Account auf inaktiv gestellt.
|
||
|
||
### <a name="error-7415"></a> #7415 - Digest validation failed
|
||
Die Prüfung der Digest-Authentifizierung ist fehlgeschlagen.
|
||
|
||
### <a name="error-7416"></a> #7416 - Digest nonce invalid
|
||
Server-Nonce ist auf Server nicht vorhanden. Mögliche Ursachen:
|
||
- Der Client hat einen beliebigen Nonce-Key mitgeschickt der dem Server nicht bekannt ist.
|
||
- Der Nonce-Key ist schon länger abgelaufen und wurde gelöscht. Abgelaufene Nonce-Keys werden nach einigen Tagen
|
||
gelöscht.
|
||
|
||
### <a name="error-7417"></a> #7417 - Digest nonce expired
|
||
Server-Nonce ist abgelaufen. Nonce-Keys sind maximal 24 Stunden gültig und danach muss die Authentifizierung neu
|
||
initialisiert werden. Beim erneuten Zugriff (auch schon beim Ausliefern des Fehlers) wird automatisch ein neuer
|
||
Nonce-Key erzeugt und dem Client mitgeteilt (im www-authenticate Header). Der Client muss bei den weiteren
|
||
Zugriffen den neuen Nonce-Key verwenden.
|
||
|
||
### <a name="error-7418"></a> #7418 - Auth username empty
|
||
Der Benutzername darf nicht leer sein.
|
||
|
||
### <a name="error-7419"></a> #7419 - Authorization type not allowed
|
||
Authorization-Header war vorhanden, aber die Authentifizierung-Methode ist nicht erlaubt. Vermutlich Zugriff mit
|
||
Basic-Auth.
|
||
|
||
### <a name="error-7420"></a> #7420 - Digest nonce count not matching
|
||
Fehler nicht möglich: Der Nonce-Count wird momentan nicht geprüft.
|
||
|
||
### <a name="error-7421"></a> #7421 - Missing Permission
|
||
API-Account hat nicht die benötigten Berechtigungen
|
||
|
||
## Routing-Fehler
|
||
### <a name="error-7431"></a> #7431 - Route not found
|
||
### <a name="error-7432"></a> #7432 - Method not allowed
|
||
### <a name="error-7433"></a> #7433 - API-Method not found
|
||
|
||
## Endpoint-Fehler
|
||
### <a name="error-7451"></a> #7451 - Bad Request
|
||
### <a name="error-7452"></a> #7452 - Resource not found
|
||
Mögliche Ursachen:
|
||
- Das Ergebnis wurde über Filter zu stark begrenzt.
|
||
- Beim Abrufen einer einzelnen Resource wurde eine nicht existierende ID angegeben.
|
||
- Über die Paginierung wurde eine zu hohe Seite eingestellt. Siehe `pagination`-Property; der Wert von
|
||
`page_current` darf nicht über dem von `page_last` liegen.
|
||
- Die entsprechende Datenbanktabelle hat keine Inhalte.
|
||
|
||
### <a name="error-7453"></a> #7453 - Validation error
|
||
Dieser Fehler kann nur beim Ändern oder Anlegen von Resourcen auftreten. Bei der Validierung der Eingabedaten
|
||
ist ein Fehler aufgetreten.
|
||
|
||
In diesem Fall beinhaltet der Error-Response das Property `details`, das Aufschluss über die fehlerhaften Felder
|
||
gibt.
|
||
|
||
### <a name="error-7454"></a> #7454 - Invalid argument
|
||
Es wurde ein unzulässiger Request-Parameter (GET-Parameter) verwendet z.B. ein Filter-Parameter der nicht
|
||
zulässig ist.
|
||
|
||
### <a name="error-7455"></a> #7455 - Malformed request body
|
||
Das JSON- oder XML-Dokument im Request-Body konnte nicht dekodiert werden. Ungültige Zeichen oder eine
|
||
fehlerhafte Struktur können die Ursache sein. Überprüfen Sie die Daten ggf. mit Online-Validatoren.
|
||
|
||
### <a name="error-7456"></a> #7456 - Content type not supported
|
||
Der Request-Body konnte nicht dekodiert werden, weil kein gültiger Content-Type übergeben wurde.
|
||
|
||
## Webserver-Konfiguration fehlerhaft
|
||
|
||
### <a name="error-7481"></a> #7481 - Webserver-Konfiguration fehlerhaft (nicht genauer beschrieben)
|
||
|
||
### <a name="error-7482"></a> #7482 - PATH_INFO ist nicht gesetzt oder leer
|
||
Die PHP-Variable `$_SERVER['PATH_INFO']` ist nicht gesetzt oder leer, obwohl die aufgerufene URL darauf
|
||
schließen lässt dass die Variable gefüllt sein müsste. Der Fehler deutet darauf hin dass die
|
||
Webserver-Konfiguration fehlerhaft ist. Sie können sich mit der <a href="#failsafe">Failsafe-Variante</a>
|
||
behelfen. Damit kann die API auch ohne eine spezielle Webserver-Konfiguration verwendet werden, z.B. auf einem
|
||
Webspace bei dem die Änderung der Webserver-Konfiguration eingeschränkt ist.
|
||
Zur Fehlerbehebung siehe Abschnitt <a href="#nginx">Nginx-Konfiguration</a> oder
|
||
<a href="#apache">Apache-Konfiguration</a>
|
||
|
||
- title: Debug-Modus
|
||
content: |
|
||
Im Auslieferungszustand gibt die REST-API bei Fehlern nur ausgewählte Fehlertypen zurück (siehe
|
||
<a href="#fehler_codes">Fehler-Codes</a>).
|
||
|
||
### Beispiel Fehler-Response; Debug-Modus inaktiv
|
||
```json
|
||
{
|
||
"error": {
|
||
"code": 7482,
|
||
"http_code": 500,
|
||
"message": "Webserver configuration incorrect. Pathinfo is invalid.",
|
||
"href": "http://www.example.com/api/docs.html#error-7482"
|
||
}
|
||
}
|
||
```
|
||
|
||
Zur Fehleranalyse kann der Debug-Modus aktiviert werden um zusätzliche Informationen über Request- und
|
||
Konfigurationsvariablen zu erhalten. Debug-Informationen werden nur beim Auftreten eines Fehlers angehangen.
|
||
|
||
### Beispiel Fehler-Response mit aktivierten Debug-Modus
|
||
```json
|
||
{
|
||
"error": {
|
||
"code": 7482,
|
||
"http_code": 500,
|
||
"message": "Webserver configuration incorrect. Pathinfo is invalid.",
|
||
"href": "http://www.example.com/api/docs.html#error-7482"
|
||
},
|
||
"debug": {
|
||
"router": {
|
||
"controllerClass": "Xentral\\Modules\\Api\\Controller\\Version1\\StartController",
|
||
"controllerAction": "indexAction",
|
||
"resourceClass": "Xentral\\Modules\\Api\\Resource\\Resource",
|
||
"routerParams": []
|
||
},
|
||
"request": {
|
||
"isFailsafe": false,
|
||
"pathInfo": {
|
||
"actual": "",
|
||
"expected": "/v1/adressen/123"
|
||
},
|
||
"info": {
|
||
"method": "PUT",
|
||
"requestUri": "/api/v1/adressen/123",
|
||
"fullUri": "http://www.example.com/api/v1/adressen/123"
|
||
},
|
||
"serverParams": {
|
||
|
||
// Ausgabe entfernt; wie PHP-Variable `$_SERVER`
|
||
|
||
},
|
||
"header": {
|
||
"Content-Type": "application/json",
|
||
"Authorization": "Digest .........",
|
||
"Host": "www.example.com",
|
||
"Accept": "application/json"
|
||
},
|
||
"getParams": [],
|
||
"postParams": [],
|
||
"additionalParams": []
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## Debug-Modus aktivieren
|
||
|
||
**Der Debug-Modus ist nicht für Produktiv-Systeme geeignet und sollte nur zur Fehlersuche aktiviert werden.**
|
||
|
||
### Debug-Modus global aktivieren
|
||
|
||
In der Datei `/www/api/index.php` die Konstante `DEBUG_MODE` auf `true` stellen.
|
||
|
||
```php
|
||
define('DEBUG_MODE', true);
|
||
```
|
||
|
||
Der Debug-Modus ist dann global für alle API-Accounts aktiviert. Debug-Informationen werden aber nur beim
|
||
Auftreten eines Fehlers erzeugt.
|
||
|
||
- title: PHP Beispiel-Clients
|
||
content: |
|
||
## cURL
|
||
```php
|
||
if (!function_exists('curl_version')) {
|
||
throw new Exception('curl-Extension fehlt');
|
||
}
|
||
|
||
$api = array(
|
||
'url' => 'http://www.example.com/api/',
|
||
'resource' => 'v1/adressen?page=1&items=5',
|
||
'username' => 'Your-Username',
|
||
'password' => 'Your-Passwort',
|
||
);
|
||
|
||
$options = array(
|
||
CURLOPT_URL => $api['url'] . $api['resource'],
|
||
CURLOPT_HEADER => false,
|
||
CURLOPT_HTTPHEADER => array('Accept: application/json'), // oder 'application/xml'
|
||
CURLOPT_RETURNTRANSFER => true,
|
||
CURLOPT_FOLLOWLOCATION => true,
|
||
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST, // Digest Authentifizierung
|
||
CURLOPT_USERPWD => $api['username'] . ':' . $api['password'],
|
||
);
|
||
|
||
$ch = curl_init();
|
||
curl_setopt_array($ch, $options);
|
||
$response = curl_exec($ch);
|
||
|
||
if (curl_errno($ch)) {
|
||
throw new Exception(curl_error($ch));
|
||
}
|
||
|
||
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
||
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||
$result = json_decode($response, true);
|
||
|
||
echo "<pre>";
|
||
echo "<h1>HTTP-Status: {$statusCode}</h1>";
|
||
echo "<h2>Content-Type: {$contentType}</h2>";
|
||
var_dump($result);
|
||
echo "</pre>";
|
||
|
||
if ($ch != null) {
|
||
curl_close($ch);
|
||
}
|
||
```
|
||
|
||
## Guzzle
|
||
```php
|
||
if (!class_exists('GuzzleHttp\Client')) {
|
||
throw new Exception('Guzzle konnte nicht gefunden werden');
|
||
}
|
||
|
||
$api = array(
|
||
'url' => 'http://www.example.com/api/',
|
||
'resource' => 'v1/adressen?page=1&items=5',
|
||
'username' => 'Your-Username',
|
||
'password' => 'Your-Passwort',
|
||
);
|
||
|
||
$client = new GuzzleHttp\Client(array(
|
||
'base_url' => $api['url'],
|
||
));
|
||
|
||
$options = array(
|
||
'headers' => array('Accept' => 'application/json'), // oder 'application/xml'
|
||
'auth' => array($api['username'], $api['password'], 'digest'), // Digest Authentifizierung
|
||
);
|
||
$request = $client->createRequest('GET', $api['resource'], $options);
|
||
$response = $client->send($request);
|
||
|
||
$contentType = $response->getHeader('Content-Type');
|
||
$statusCode = $response->getStatusCode();
|
||
$statusMsg = $response->getReasonPhrase();
|
||
$result = json_decode($response->getBody()->getContents(), true);
|
||
|
||
echo "<pre>";
|
||
echo "<h1>HTTP-Status: {$statusCode} {$statusMsg}</h1>";
|
||
echo "<h2>Content-Type: {$contentType}</h2>";
|
||
var_dump($result);
|
||
echo "</pre>";
|
||
```
|
||
|
||
- title: Webserver-Konfiguration
|
||
content: |
|
||
## <a name="apache"></a> Apache
|
||
|
||
Damit die API richtig funktioniert sollte `mod_rewrite` aktiviert sein.
|
||
|
||
Der Aufruf ohne `mod_rewrite` ist ebenfalls möglich, dann muss allerdings die index.php in der URL vorkommen:
|
||
z.B.: `/www/api/index.php/v1/adressen`
|
||
|
||
### mod_rewrite aktivieren
|
||
```
|
||
$ sudo a2enmod rewrite
|
||
Enabling module rewrite.
|
||
To activate the new configuration, you need to run:
|
||
systemctl restart apache2
|
||
|
||
$ sudo systemctl restart apache2
|
||
```
|
||
|
||
### .htaccess Einbindung erlauben
|
||
Bei Ubuntu- und Debian-basierten Betriebssystemen geschieht das für den gesamten Webserver in der Datei
|
||
`/etc/apache2/apache2.conf`. Dort nach folgendem Eintrag suchen:
|
||
|
||
```
|
||
<Directory /var/www/>
|
||
Options Indexes FollowSymLinks
|
||
AllowOverride None
|
||
Require all granted
|
||
</Directory>
|
||
```
|
||
|
||
Hier muss das `AllowOverride None` zu `AllowOverride All` geändert werden. Anschließend die Apache2-Konfiguration
|
||
neu einlesen mit: `sudo service apache2 reload`.
|
||
|
||
Wichtig: Diese Anpassung ist nur exemplarisch. Aus Sicherheitsgründen sollten Sie die Einstellung nicht für
|
||
den gesamten Webserver erlauben. Um die Einstellung für einzelne Webseites vorzunehmen, sollten sie die
|
||
entsprechende VHost-Konfiguration anpassen.
|
||
|
||
### Beispiel VHost-Konfiguration für Apache 2.4
|
||
```
|
||
<VirtualHost *:80>
|
||
# ServerName auskommentieren falls Sie per IP zugreifen
|
||
ServerName xentral.example.com
|
||
ServerAdmin webmaster@example.com
|
||
|
||
# Pfad zum www-Verzeichnis ihrer Xentral-Installation
|
||
DocumentRoot /var/www/xentral/www
|
||
|
||
<Directory /var/www/xentral/www/>
|
||
AllowOverride All
|
||
Require all granted
|
||
</Directory>
|
||
|
||
ErrorLog ${APACHE_LOG_DIR}/xentral-error.log
|
||
CustomLog ${APACHE_LOG_DIR}/xentral-access.log combined
|
||
</VirtualHost>
|
||
```
|
||
|
||
## <a name="nginx"></a> Nginx
|
||
|
||
### Beispiel-Konfiguration
|
||
|
||
```
|
||
server {
|
||
listen 80 default_server;
|
||
listen [::]:80 default_server;
|
||
|
||
root /var/www/xentral/www;
|
||
|
||
index index.php index.html index.htm;
|
||
|
||
server_name www.example.com;
|
||
|
||
location / {
|
||
# First attempt to serve request as file, then
|
||
# as directory, then fall back to displaying a 404.
|
||
try_files $uri $uri/ =404;
|
||
}
|
||
|
||
location /api/ {
|
||
# '/api/' befindet sich relativ zum Document-Root und muss ggf. angepasst werden.
|
||
try_files $uri $uri/ @xentral_api;
|
||
}
|
||
|
||
location @xentral_api {
|
||
# '/api/' befindet sich relativ zum Document-Root und muss ggf. angepasst werden.
|
||
rewrite ^/api/(.*)$ /api/index.php/$1 last;
|
||
}
|
||
|
||
location ~ [^/]\.php(/|$) {
|
||
# Path Info korrekt an PHP-Skript weitergeben
|
||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||
if (!-f $document_root$fastcgi_script_name) {
|
||
return 404;
|
||
}
|
||
|
||
# Mitigate https://httpoxy.org/ vulnerabilities
|
||
fastcgi_param HTTP_PROXY "";
|
||
|
||
# With php-fpm (or other unix sockets):
|
||
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||
# With php-cgi (or other tcp sockets):
|
||
#fastcgi_pass 127.0.0.1:9000;
|
||
|
||
fastcgi_index index.php;
|
||
|
||
include fastcgi_params;
|
||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
|
||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||
}
|
||
|
||
# deny access to .htaccess files, if Apache's document root concurs with nginx's one
|
||
location ~ /\.ht {
|
||
deny all;
|
||
}
|
||
}
|
||
```
|
||
|
||
Außerdem muss `cgi.fix_pathinfo` in der php.ini auf `1` gestellt sein (Default).
|
||
|
||
Quelle: <https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/>
|
||
|
||
## <a name="failsafe"></a> Failsafe-Alternative
|
||
|
||
Sollte die Konfiguration des Webservers Probleme bereiten, oder aus anderen Gründen nicht möglich sein, so gibt
|
||
es die Möglichkeit die API ohne Anpassung der Webserver-Konfiguration zu nutzen.
|
||
|
||
Der Endpunkt wird dann nicht als Teil der Pfades übergeben, sondern als Query-Parameter `path`.
|
||
|
||
Beispiel: `/api/index.php?path=/v1/artikelkategorien&sort=bezeichnung`
|
||
|
||
- title: Standard API-Aufrufe
|
||
content: |
|
||
Es gibt auch die Möglichkeit die standard API über die neue URL abzurufen.
|
||
|
||
Struktur: `http://www.example.com/api/{Action}`
|
||
|
||
Beispiel: `http://www.example.com/api/ArtikelGet`
|
||
|
||
Eine Übersicht der möglichen Requests/Actions mit Beispielen:
|
||
<https://xentral.biz/helpdesk/api>
|
||
|
||
**In diesem Fall erwartet die API immer einen POST-Request und die Nutzdaten müssen im Request-Body
|
||
mitgeschickt werden.**
|
||
|
||
- title: Test-System
|
||
content: |
|
||
Um auf die API eines <a href="https://xentral.com/helpdesk/testsystem" target="_blank">Test-Systems</a>
|
||
zugreifen zu können, kann im HTTP-Header `MultiDb` der Datenbankname des Test-Systems angegeben werden.
|
||
Der Header muss bei jedem Request mitgeschickt werden.
|
||
|
||
### Beispiel HTTP-Request
|
||
```http
|
||
GET /api/v1/adressen HTTP/1.1
|
||
Host: www.example.com
|
||
Accept: application/json
|
||
MultiDb: xentral_test
|
||
```
|
||
|
||
|
||
/v1/aboartikel:
|
||
get:
|
||
displayName: Abo-Artikel abrufen
|
||
description: |
|
||
Endpunkt zum Abrufen von Abo-Artikeln.
|
||
|
||
Permission: `list_subscriptions`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Suche nach Abo-Artikel-Bezeichnung (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_equals:
|
||
description: Suche nach Abo-Artikel-Bezeichnung (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_startswith:
|
||
description: Suche nach Abo-Artikel-Bezeichnung (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
bezeichnung_endswith:
|
||
description: Suche nach Abo-Artikel-Bezeichnung (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
rabatt:
|
||
description: Suche nach Rabatt in Prozent (genaue Übereinstimmung)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_gt:
|
||
description: Suche nach Rabatt in Prozent (Rabatt größer Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_gte:
|
||
description: Suche nach Rabatt in Prozent (Rabatt größer gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_lt:
|
||
description: Suche nach Rabatt in Prozent (Rabatt kleiner Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_lte:
|
||
description: Suche nach Rabatt in Prozent (Rabatt kleiner gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
preis:
|
||
description: Suche nach Preis (genaue Übereinstimmung)
|
||
type: number
|
||
multipleOf: 0.0001
|
||
required: false
|
||
preis_gt:
|
||
description: Suche nach Preis (Preis größer Suchwert)
|
||
type: number
|
||
multipleOf: 0.0001
|
||
required: false
|
||
preis_gte:
|
||
description: Suche nach Preis (Preis größer gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.0001
|
||
required: false
|
||
preis_lt:
|
||
description: Suche nach Preis (Preis kleiner Suchwert)
|
||
type: number
|
||
multipleOf: 0.0001
|
||
required: false
|
||
preis_lte:
|
||
description: Suche nach Preis (Preis kleiner gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.0001
|
||
required: false
|
||
menge:
|
||
description: Suche nach Menge (Menge Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
menge_gt:
|
||
description: Suche nach Menge (Menge größer Suchwert)
|
||
type: integer
|
||
required: false
|
||
menge_gte:
|
||
description: Suche nach Menge (Menge größer gleich Suchwert)
|
||
type: integer
|
||
required: false
|
||
menge_lt:
|
||
description: Suche nach Menge (Menge kleiner Suchwert)
|
||
type: integer
|
||
required: false
|
||
menge_lte:
|
||
description: Suche nach Menge (Menge kleiner gleich Suchwert)
|
||
type: integer
|
||
required: false
|
||
startdatum:
|
||
description: Suche nach Startdatum (Startdatum Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
startdatum_gt:
|
||
description: Suche nach Startdatum (Startdatum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
startdatum_gte:
|
||
description: Suche nach Startdatum (Startdatum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
startdatum_lt:
|
||
description: Suche nach Startdatum (Startdatum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
startdatum_lte:
|
||
description: Suche nach Startdatum (Startdatum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
enddatum:
|
||
description: Suche nach Enddatum (Enddatum Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
enddatum_gt:
|
||
description: Suche nach Enddatum (Enddatum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
enddatum_gte:
|
||
description: Suche nach Enddatum (Enddatum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
enddatum_lt:
|
||
description: Suche nach Enddatum (Enddatum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
enddatum_lte:
|
||
description: Suche nach Enddatum (Enddatum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
waehrung:
|
||
description: Suche nach Waehrungscode (ISO3; genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
preisart:
|
||
description: |
|
||
Suche nach Preisart
|
||
|
||
(Gültige Werte `monat`, `monatx`, `jahr`, `wochen`, `30tage`, `360tage` oder `einmalig`)
|
||
type: string
|
||
required: false
|
||
dokumenttyp:
|
||
description: Suche nach Dokument-Typ (Gültige Werte `rechnung` oder `auftrag`)
|
||
type: string
|
||
required: false
|
||
artikel:
|
||
description: Suche nach Artikel-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
adresse:
|
||
description: Suche nach Adressen-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
gruppe:
|
||
description: Suche nach Abogruppen-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Suche nach Projekt-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=-bezeichnung,rabatt`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `rabatt`, `preis`, `menge`, `startdatum`, `enddatum`,
|
||
`abgerechnet_bis`, `reihenfolge`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
||
|
||
Verfügbare Includes: `gruppe`, `artikel`, `adresse`, `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Abo-Artikel anlegen
|
||
description: |
|
||
Abo-Artikel anlegen
|
||
|
||
Permission: `create_subscription`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
artikelnummer:
|
||
description: Artikelnummer (Pflichfeld)
|
||
required: true
|
||
type: string
|
||
bezeichnung:
|
||
description: Name des Abo-Artikels (Pflichtfeld)
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Abo-Artikel-Beschreibung
|
||
required: false
|
||
type: string
|
||
beschreibung_ersetzen:
|
||
description: |
|
||
Wenn `1`, wird nur die Beschreibung von hier ohne Artikelbeschreibung aus den Stammdaten
|
||
angezeigt. (Default `0`)
|
||
required: false
|
||
type: integer
|
||
startdatum:
|
||
description: Erstes Startdatum (Format `YYYY-MM-DD`) (Default = Aktuelles Datum)
|
||
required: false
|
||
type: date-only
|
||
enddatum:
|
||
description: Enddatum (Format `YYYY-MM-DD`) (Default `0000-00-00`)
|
||
required: false
|
||
type: date-only
|
||
preisart:
|
||
description: |
|
||
Zulässige Werte `monat`, `monatx`, `jahr`, `wochen`, `einmalig`, `30tage`, `360tage`
|
||
|
||
(Default `monat`)
|
||
required: false
|
||
type: string
|
||
zahlzyklus:
|
||
description: abhängig von `preisart` (Default `1`)
|
||
required: false
|
||
type: integer
|
||
dokumenttyp:
|
||
description: Automatisch anlegen als Auftrag oder Rechnung.
|
||
Zulässige Werte `rechnung`, `auftrag` (Default `rechnung`)
|
||
required: false
|
||
type: string
|
||
preis:
|
||
description: Netto Artikelpreis (Default `0.00`)
|
||
required: false
|
||
type: number
|
||
multipleOf: 0.0001
|
||
menge:
|
||
description: Artikelmenge (Default `0`)
|
||
required: false
|
||
type: number
|
||
multipleOf: 0.01
|
||
rabatt:
|
||
description: Rabatt in Prozent (Default `0.00`)
|
||
required: false
|
||
type: number
|
||
multipleOf: 0.01
|
||
waehrung:
|
||
description: Währung; dreistelliger ISO-Code (Default `EUR`)
|
||
required: false
|
||
type: string
|
||
gruppe:
|
||
description: Abo-Gruppen-ID (Default `0`)
|
||
required: false
|
||
type: integer
|
||
adresse:
|
||
description: |
|
||
Adressen-ID (Default `0`)
|
||
|
||
Wird überschrieben wenn Feld `kundennummer` gefüllt ist.
|
||
required: false
|
||
type: integer
|
||
kundennummer:
|
||
description: |
|
||
Kundennummer (kein Default)
|
||
|
||
Wenn gefüllt, wird Adress-ID ermittelt und in Feld `adresse` geschrieben.
|
||
required: false
|
||
type: string
|
||
projekt:
|
||
description: |
|
||
Projekt-ID (Default `0`)
|
||
|
||
Die erstellte Rechnung läuft auf dieses Projekt
|
||
required: false
|
||
type: integer
|
||
reihenfolge:
|
||
description: |
|
||
Wenn mehrere Artikel in einer Rechnung vorkommen, kann die Reihenfolge der Artikel damit
|
||
angepasst werden (Default `1`)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung": "Abo-Artikel 001",
|
||
"artikelnummer": "700006",
|
||
"preis": 9.52,
|
||
"zahlzyklus": 2,
|
||
"preisart": "wochen",
|
||
"kundennummer": "10001"
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegter Abo-Artikel wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 21,
|
||
"bezeichnung": "Abo-Artikel 001",
|
||
"beschreibung": "",
|
||
"beschreibung_ersetzen": 0,
|
||
"startdatum": "2019-05-27",
|
||
"enddatum": "0000-00-00",
|
||
"abgerechnet_bis": "0000-00-00",
|
||
"zahlzyklus": 2,
|
||
"preis": "9.5200",
|
||
"rabatt": "0.00",
|
||
"waehrung": "EUR",
|
||
"menge": 0,
|
||
"preisart": "wochen",
|
||
"dokumenttyp": "rechnung",
|
||
"artikel": 6,
|
||
"gruppe": 0,
|
||
"adresse": 3,
|
||
"kundennummer": "10000",
|
||
"reihenfolge": 1,
|
||
"projekt": 0
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelnen Abo-Artikel abrufen oder bearbeiten.
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Abo-Artikel-ID
|
||
get:
|
||
displayName: Einzelnen Abo-Artikel abrufen
|
||
description: |
|
||
Einzelnen Abo-Artikel abrufen
|
||
|
||
Permission: `edit_subscription`
|
||
put:
|
||
displayName: Abo-Artikel bearbeiten
|
||
description: |
|
||
Abo-Artikel bearbeiten (Felder siehe "Abo-Artikel anlegen")
|
||
|
||
Permission: `view_subscription`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"bezeichnung": "Abo-Artikel 001",
|
||
"beschreibung_ersetzen": 0,
|
||
"startdatum": "2019-01-01",
|
||
"enddatum": "2019-12-31",
|
||
"rabatt": "3.00",
|
||
"zahlzyklus": 1,
|
||
"waehrung": "EUR",
|
||
"preisart": "wochen",
|
||
"dokumenttyp": "rechnung",
|
||
"kundennummer": "10000"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierter Abo-Artikel wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 1,
|
||
"bezeichnung": "Abo-Artikel 001",
|
||
"beschreibung": "",
|
||
"beschreibung_ersetzen": 0,
|
||
"startdatum": "2019-01-01",
|
||
"enddatum": "2019-12-31",
|
||
"abgerechnet_bis": "2019-07-31",
|
||
"zahlzyklus": 1,
|
||
"preis": "0.17",
|
||
"rabatt": "3.00",
|
||
"waehrung": "EUR",
|
||
"menge": 100,
|
||
"preisart": "wochen",
|
||
"dokumenttyp": "rechnung",
|
||
"artikel": 2,
|
||
"gruppe": 1,
|
||
"adresse": 3,
|
||
"kundennummer": "10000",
|
||
"reihenfolge": 1,
|
||
"projekt": 0
|
||
}
|
||
}
|
||
|
||
delete:
|
||
displayName: Abo-Artikel löschen
|
||
description: |
|
||
Endpunkt zum Löschen von Abo-Artikeln
|
||
|
||
Permission: `delete_subscription`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; id des gelöschten Aboartikels wird zurückgegeben
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 1
|
||
}
|
||
}
|
||
404:
|
||
description: id wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/abogruppen:
|
||
get:
|
||
displayName: Abo-Gruppen abrufen
|
||
description: |
|
||
Endpunkt zum Abrufen von Abo-Gruppen
|
||
|
||
Permission: `list_subscription_groups`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_equals:
|
||
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_startswith:
|
||
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
bezeichnung_endswith:
|
||
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
gruppensumme:
|
||
description: Suche nach Gruppensumme-Kennzeichen (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
rabatt:
|
||
description: Suche nach Rabatt in Prozent (genaue Übereinstimmung)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_gt:
|
||
description: Suche nach Rabatt in Prozent (Rabatt größer Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_gte:
|
||
description: Suche nach Rabatt in Prozent (Rabatt größer gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_lt:
|
||
description: Suche nach Rabatt in Prozent (Rabatt kleiner Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
rabatt_lte:
|
||
description: Suche nach Rabatt in Prozent (Rabatt kleiner gleich Suchwert)
|
||
type: number
|
||
multipleOf: 0.01
|
||
required: false
|
||
projekt:
|
||
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=-bezeichnung,rabatt`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `rabatt`, `reihenfolge`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Abo-Gruppe anlegen
|
||
description: |
|
||
Abo-Gruppe anlegen
|
||
|
||
Permission: `create_subscription_group`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Name der Gruppe; erscheint auf der Rechnung (Pflichtfeld)
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Beschreibung der Gruppe; erscheint auf der Rechnung (optional)
|
||
required: false
|
||
type: string
|
||
rabatt:
|
||
description: Rabatt in Prozent (Default = 0.00)
|
||
required: false
|
||
type: number
|
||
multipleOf: 0.01
|
||
gruppensumme:
|
||
description: Nach jeder Auflistung der Artikel einer Gruppe, wird eine Gruppensumme auf dem Beleg
|
||
ausgegeben (1 = aktiv / 0 = inaktiv) (Default = 0)
|
||
required: false
|
||
type: integer
|
||
projekt:
|
||
description: |
|
||
Projekt-ID (Default = 0)
|
||
|
||
Die erstellte Rechnung läuft auf dieses Projekt
|
||
required: false
|
||
type: integer
|
||
reihenfolge:
|
||
description: Wenn mehrere Gruppen in einer Rechnung vorkommen, kann die Reihenfolge der Gruppen damit
|
||
angepasst werden (ab Version 18.3) (Default = 0)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
||
"rabatt": 2.50,
|
||
"gruppensumme": 1,
|
||
"projekt": 1,
|
||
"reihenfolge": 123
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Abo-Gruppe wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 14,
|
||
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
||
"beschreibung": "",
|
||
"rabatt": "2.50",
|
||
"gruppensumme": 1,
|
||
"projekt": 1,
|
||
"reihenfolge": 123
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Abo-Gruppe abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Abo-Gruppen-ID
|
||
get:
|
||
displayName: Einzelne Abo-Gruppe abrufen
|
||
description: |
|
||
Einzelne Abo-Gruppe abrufen
|
||
|
||
Permission: `view_subscription_group`
|
||
put:
|
||
displayName: Abo-Gruppe bearbeiten
|
||
description: |
|
||
Abo-Gruppe bearbeiten (Felder siehe "Abo-Gruppe anlegen")
|
||
|
||
Permission: `edit_subscription_group`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
||
"rabatt": 3.00
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Abo-Gruppe wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 14,
|
||
"bezeichnung": "Abo-Gruppe Verbrauschsmaterial",
|
||
"beschreibung": "",
|
||
"rabatt": "3.00",
|
||
"gruppensumme": 1,
|
||
"projekt": 1,
|
||
"reihenfolge": 123
|
||
}
|
||
}
|
||
|
||
|
||
/v1/adressen:
|
||
description: Adressen anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Adressliste abrufen
|
||
description: |
|
||
Adressenliste abrufen
|
||
|
||
Permission: `list_addresses`
|
||
queryParameters:
|
||
kundennummer:
|
||
description: Suche nach bestimmter Adresse mit Kundennummer
|
||
type: string
|
||
required: false
|
||
default: ""
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
responses:
|
||
200:
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": [
|
||
{
|
||
"id": 7,
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Schrauben Meier",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "13245",
|
||
"telefon": "12345678",
|
||
"telefax": "",
|
||
"mobile": "",
|
||
"email": "schrauben@meiermusterdorf.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
},
|
||
{
|
||
"id": 8,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
],
|
||
"pagination": {
|
||
"items_total": 50,
|
||
"items_current": 20,
|
||
"items_per_page": 20,
|
||
"page_current": 1,
|
||
"page_last": 3
|
||
}
|
||
}
|
||
post:
|
||
displayName: Adressen anlegen
|
||
description: |
|
||
Neue Adresse anlegen
|
||
|
||
Permission: `create_address`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Max Muster",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "12345",
|
||
"telefon": "0821123456789",
|
||
"telefax": "0821123456790",
|
||
"email": "info@maxmuellermuster.de",
|
||
"projekt": 1
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Angelegte Adresse wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 33,
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Max Muster",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "12345",
|
||
"telefon": "0821123456789",
|
||
"telefax": "0821123456790",
|
||
"mobile": "",
|
||
"email": "info@maxmuellermuster.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Adresse per ID abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Adressen-ID
|
||
get:
|
||
displayName: Einzelne Adresse abrufen
|
||
description: |
|
||
Einzelne Adresse abrufen
|
||
|
||
Permission: `view_address`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 7,
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Schrauben Meier GmbH",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "13245",
|
||
"telefon": "12345678",
|
||
"telefax": "",
|
||
"mobile": "",
|
||
"email": "schrauben@meiermusterdorf.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Adresse wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Adresse bearbeiten
|
||
description: |
|
||
Adresse bearbeiten
|
||
|
||
Permission: `edit_address`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"name": "Schrauben Meier GmbH",
|
||
"strasse": "Dorfstrasse 123",
|
||
"ort": "Musterdorf",
|
||
"plz": "12345",
|
||
"telefon": "0987654321"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Adresse wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 7,
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Schrauben Meier GmbH",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Dorfstrasse 123",
|
||
"ort": "Musterdorf",
|
||
"plz": "12345",
|
||
"telefon": "0987654321",
|
||
"telefax": "",
|
||
"mobile": "",
|
||
"email": "schrauben@meiermusterdorf.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
|
||
|
||
/v2/adressen:
|
||
description: Adressen abrufen
|
||
get:
|
||
displayName: Adressenliste abrufen
|
||
description: |
|
||
Adressenliste abrufen
|
||
|
||
Permission: `list_addresses`
|
||
queryParameters:
|
||
projekt:
|
||
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
firma:
|
||
description: Suche nach bestimmter Firmen-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
rolle:
|
||
description: Suche nach bestimmter Rolle (Wert `kunde` oder `lieferant`)
|
||
type: string
|
||
required: false
|
||
typ:
|
||
description: Suche nach bestimmtem Adresstyp (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
sprache:
|
||
description: Suche nach bestimmter Sprache (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
waehrung:
|
||
description: Suche nach bestimmtem Währungscode (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
land:
|
||
description: Suche nach bestimmtem Ländercode (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach bestimmter Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach bestimmter Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach bestimmter Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach bestimmter Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
lieferantennummer:
|
||
description: Suche nach bestimmter Lieferantennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lieferantennummer_equals:
|
||
description: Suche nach bestimmter Lieferantennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lieferantennummer_startswith:
|
||
description: Suche nach bestimmter Lieferantennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
lieferantennummer_endswith:
|
||
description: Suche nach bestimmter Lieferantennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
mitarbeiternummer:
|
||
description: Suche nach bestimmter Mitarbeiternummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
mitarbeiternummer_equals:
|
||
description: Suche nach bestimmter Mitarbeiternummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
mitarbeiternummer_startswith:
|
||
description: Suche nach bestimmter Mitarbeiternummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
mitarbeiternummer_endswith:
|
||
description: Suche nach bestimmter Mitarbeiternummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
email:
|
||
description: Suche nach bestimmter E-Mail-Adresse (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
email_equals:
|
||
description: Suche nach bestimmter E-Mail-Adresse (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
email_startswith:
|
||
description: Suche nach bestimmter E-Mail-Adresse (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
email_endswith:
|
||
description: Suche nach bestimmter E-Mail-Adresse (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
freifeld[1-10]:
|
||
description: |
|
||
Suche nach bestimmtem Wert im Freifeld1 bis Freifeld10 (ungefähre Übereinstimmung)
|
||
|
||
(Beispiel: `freifeld3=42`)
|
||
type: string
|
||
required: false
|
||
freifeld[1-10]_equals:
|
||
description: |
|
||
Suche nach bestimmtem Wert im Freifeld1 bis Freifeld10 (genaue Übereinstimmung)
|
||
|
||
(Beispiel: `freifeld3_equals=42`)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=name,-kundennummer`)
|
||
|
||
Verfügbare Felder: `name`, `kundennummer`, `lieferantennummer`, `mitarbeiternummer`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
responses:
|
||
200:
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": [
|
||
{
|
||
"id": 7,
|
||
"rolle": "lieferant",
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Schrauben Meier",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "13245",
|
||
"telefon": "12345678",
|
||
"telefax": "",
|
||
"mobile": "",
|
||
"email": "schrauben@meiermusterdorf.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
},
|
||
{
|
||
"id": 8,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
],
|
||
"pagination": {
|
||
"items_total": 50,
|
||
"items_current": 20,
|
||
"items_per_page": 20,
|
||
"page_current": 1,
|
||
"page_last": 3
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Adresse per ID abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Adressen-ID
|
||
get:
|
||
displayName: Einzelne Adresse abrufen
|
||
description: |
|
||
Einzelne Adresse abrufen
|
||
|
||
Permission: `view_address`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 7,
|
||
"rolle": "lieferant",
|
||
"typ": "firma",
|
||
"sprache": "deutsch",
|
||
"name": "Schrauben Meier GmbH",
|
||
"abteilung": "",
|
||
"unterabteilung": "",
|
||
"land": "DE",
|
||
"strasse": "Musterstrasse 6",
|
||
"ort": "Musterdorf",
|
||
"plz": "13245",
|
||
"telefon": "12345678",
|
||
"telefax": "",
|
||
"mobile": "",
|
||
"email": "schrauben@meiermusterdorf.de",
|
||
"projekt": 1,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Adresse wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/adresstyp:
|
||
description: Adresstyp anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Adresstypen abrufen
|
||
description: |
|
||
Adresstypen abrufen
|
||
|
||
Permission: `list_address_types`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Adresstyp mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_exakt:
|
||
description: Adresstyp mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
type:
|
||
description: |
|
||
Nach bestimmten Typ filtern (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `herr`, `frau`, `firma`
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Adresstyp eines Projekts filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
netto:
|
||
description: Netto-Adresstypen filtern (1 = netto / 0 = brutto)
|
||
type: boolean
|
||
required: false
|
||
aktiv:
|
||
description: Aktive/Inaktive Adresstypen filtern (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Adresstyp anlegen
|
||
description: |
|
||
Adresstyp anlegen
|
||
|
||
Permission: `create_address_type`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Bezeichnung des Adresstyps
|
||
required: true
|
||
type: string
|
||
type:
|
||
description: Adresstyp; Mögliche Werte `herr`, `frau`, `firma`
|
||
required: true
|
||
type: string
|
||
projekt:
|
||
description: Projekt
|
||
required: false
|
||
type: integer
|
||
netto:
|
||
description: Anzeige Belege in Netto (`1` = netto / `0` = brutto)
|
||
required: false
|
||
type: integer
|
||
aktiv:
|
||
description: Aktiv (`1` = aktiv / `0` = inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"type": "herr",
|
||
"bezeichnung": "Gentleman",
|
||
"aktiv": 1,
|
||
"projekt": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegter Adresstyp wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "5",
|
||
"type": "herr",
|
||
"bezeichnung": "Gentleman",
|
||
"projekt": "1",
|
||
"netto": "0",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelner Adresstyp abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Adresstyp-ID
|
||
get:
|
||
displayName: Einzelnen Adresstyp abrufen
|
||
description: |
|
||
Einzelnen Adresstyp abrufen
|
||
|
||
Permission: `view_address_type`
|
||
queryParameters:
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "1",
|
||
"type": "firma",
|
||
"bezeichnung": "Firma",
|
||
"projekt": "0",
|
||
"netto": "1",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
404:
|
||
description: Adresstyp wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Adresstyp bearbeiten
|
||
description: |
|
||
Adresstyp bearbeiten
|
||
|
||
Permission: `edit_address_type`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"type": "herr",
|
||
"bezeichnung": "Mr",
|
||
"aktiv": "1",
|
||
"projekt": "1"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierter Adresstyp wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "5",
|
||
"type": "herr",
|
||
"bezeichnung": "Mr",
|
||
"projekt": "1",
|
||
"netto": "0",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/artikel:
|
||
description: Artikel abrufen
|
||
get:
|
||
displayName: Artikelliste abrufen
|
||
description: |
|
||
Artikelliste abrufen
|
||
|
||
Permission: `list_articles`
|
||
queryParameters:
|
||
typ:
|
||
description: |
|
||
Artikel eines bestimmten Typs suchen (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `produkt`, `gebuehr`
|
||
type: string
|
||
required: false
|
||
nummer:
|
||
description: Suche nach Artikeln mit bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
nummer_equals:
|
||
description: Suche nach Artikeln mit bestimmter Artikelnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
nummer_startswith:
|
||
description: Suche nach Artikeln mit bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
nummer_endswith:
|
||
description: Suche nach Artikeln mit bestimmter Artikelnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
name_de:
|
||
description: Suche nach Artikeln mit bestimmtem deutschem Namen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_de_equals:
|
||
description: Suche nach Artikeln mit bestimmtem deutschem Namen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_de_startswith:
|
||
description: Suche nach Artikeln mit bestimmtem deutschem Namen (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
name_de_endswith:
|
||
description: Suche nach Artikeln mit bestimmtem deutschem Namen (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
name_en:
|
||
description: Suche nach Artikeln mit bestimmtem englischem Namen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_en_equals:
|
||
description: Suche nach Artikeln mit bestimmtem englischem Namen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_en_startswith:
|
||
description: Suche nach Artikeln mit bestimmtem englischem Namen (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
name_en_endswith:
|
||
description: Suche nach Artikeln mit bestimmtem englischem Namen (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Artikel nach Projekt filtern
|
||
type: integer
|
||
required: false
|
||
adresse:
|
||
description: Artikel nach Adresse filtern
|
||
type: integer
|
||
required: false
|
||
firma:
|
||
description: Artikel nach Firma filtern
|
||
type: integer
|
||
required: false
|
||
katalog:
|
||
description: Artikel nach Katalog filtern
|
||
type: integer
|
||
required: false
|
||
ausverkauft:
|
||
description: Suche nach ausverkauften Artikeln (1 = ausverkauft / 0 = nicht ausverkauft)
|
||
type: integer
|
||
required: false
|
||
startseite:
|
||
description: Suche nach Artikeln auf Startseite (1 = Startseite / 0 = nicht Startseite)
|
||
type: integer
|
||
required: false
|
||
topseller:
|
||
description: Suche nach Topseller-Artikeln (1 = Topseller / 0 = kein Topseller)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=typ,-nummer`)
|
||
|
||
Verfügbare Felder: `name_de`, `name_en`, `nummer`, `typ`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt,verkaufpreise`)
|
||
|
||
Verfügbare Includes: `projekt`, `verkaufspreise`, `dateien`, `lagerbestand`
|
||
|
||
###### Lagerbestand
|
||
|
||
**Beispiel – Lagerartikel**
|
||
|
||
```json
|
||
"lagerbestand": {
|
||
"lagernd": 12,
|
||
"reserviert": 0,
|
||
"offene_auftraege": 33,
|
||
"offene_bestellungen": 1,
|
||
"berechneter_bestand": -21,
|
||
"verkaufbar": 0
|
||
}
|
||
```
|
||
|
||
**Beispiel – Kein Lagerartikel**
|
||
|
||
```json
|
||
"lagerbestand": []
|
||
```
|
||
|
||
**Erklärung**
|
||
|
||
* **Lagernd**: Lagernde Menge über alle Lager, außer Sperrlager;
|
||
* **Reserviert**: Reservierte Menge
|
||
* **Offene Aufträge**: Menge aus offenen Aufträgen;
|
||
Es werden nur Aufträge mit dem Status FREIGEGEBEN berücksichtigt;
|
||
Aufträge mit Status ANGELEGT werden nicht berücksichtigt;
|
||
* **Offene Bestellungen**:
|
||
Es werden nur Bestellungen mit dem Status FREIGEGEBEN berücksichtigt;
|
||
Bestellungen mit Status ANGELEGT werden nicht berücksichtigt;
|
||
* **Berechneter Bestand**: *Lagernder Bestand* minus *Offene Aufträge*
|
||
* **Verkaufbar**: Wie *Berechneter Bestand*; wird nur nicht kleiner als `0`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
responses:
|
||
200:
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"typ": "produkt",
|
||
"nummer": "700001",
|
||
"checksum": "",
|
||
"projekt": 1,
|
||
"inaktiv": "",
|
||
"ausverkauft": 0,
|
||
"warengruppe": "",
|
||
"name_de": "Schraube M10x20",
|
||
"name_en": "",
|
||
"kurztext_de": "",
|
||
"kurztext_en": "",
|
||
"beschreibung_de": "",
|
||
"beschreibung_en": "",
|
||
"uebersicht_de": "",
|
||
"uebersicht_en": "",
|
||
"links_de": "",
|
||
"links_en": "",
|
||
"startseite_de": "",
|
||
"startseite_en": "",
|
||
"standardbild": "",
|
||
"herstellerlink": "",
|
||
"hersteller": "",
|
||
"teilbar": "",
|
||
"...": "Ausgabe gekürzt"
|
||
},
|
||
{
|
||
"id": 2,
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
]
|
||
}
|
||
# post:
|
||
# displayName: Artikel anlegen
|
||
# description: Neuen Artikel anlegen
|
||
# body:
|
||
# application/json:
|
||
# example: |
|
||
# {
|
||
# "name_de": "Name vom Artikel",
|
||
# "aktiv": "1",
|
||
# "hersteller": "Herstellername",
|
||
# "herstellernummer": "123",
|
||
# "ean": "234",
|
||
# "zolltarifnummer": "345",
|
||
# "mindestlager": "10",
|
||
# "mindestbestellung": "5",
|
||
# "gewicht": "1.5",
|
||
# "lagerartikel": "1",
|
||
# "einkaufspreise": {
|
||
# "staffelpreis": {
|
||
# "lieferantennummer": "70000",
|
||
# "ab_menge": "1",
|
||
# "bestellnummer": "123456789",
|
||
# "bezeichnunglieferant": "Artikel 123456789",
|
||
# "preis": "1.20",
|
||
# "waehrung": "EUR"
|
||
# }
|
||
# },
|
||
# "verkaufspreise": {
|
||
# "staffelpreis": {
|
||
# "ab_menge": "1",
|
||
# "preis": "2.20",
|
||
# "waehrung": "EUR"
|
||
# }
|
||
# }
|
||
# }
|
||
# responses:
|
||
# 200:
|
||
# description: Request erfolgreich; Angelegte Adresse wird zurückgeliefert
|
||
# body:
|
||
# application/json:
|
||
# example: |
|
||
# {
|
||
# "data": {
|
||
# "id": 20,
|
||
# "typ": "",
|
||
# "nummer": "1000005",
|
||
# "projekt": 0,
|
||
# "inaktiv": "0",
|
||
# "ausverkauft": "0",
|
||
# "name_de": "Name vom Artikel",
|
||
# "name_en": "",
|
||
# "kurztext_de": "",
|
||
# "kurztext_en": "",
|
||
# "beschreibung_de": "",
|
||
# "beschreibung_en": "",
|
||
# "hersteller": "Herstellername",
|
||
# "gewicht": "1.5",
|
||
# "lagerartikel": "1",
|
||
# "mindestlager": "10",
|
||
# "mindestbestellung": "5",
|
||
# "herstellernummer": "123",
|
||
# "ean": "234",
|
||
# "...": "Ausgabe gekürzt",
|
||
# "einkaufspreise": {
|
||
# "staffelpreis": {
|
||
# "ab_menge": "1.0000",
|
||
# "preis": "1.20000000",
|
||
# "waehrung": "EUR",
|
||
# "lieferantennummer": "70000",
|
||
# "projekt": "STANDARD",
|
||
# "bestellnummer": "123456789",
|
||
# "bezeichnunglieferant": "Artikel 123456789"
|
||
# }
|
||
# },
|
||
# "verkaufspreise": {
|
||
# "staffelpreis": {
|
||
# "ab_menge": "1.0000",
|
||
# "preis": "2.20000000",
|
||
# "vpe": "1",
|
||
# "waehrung": "EUR"
|
||
# }
|
||
# }
|
||
# }
|
||
# }
|
||
|
||
/{id}:
|
||
description: Einzelnen Artikel per ID abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Artikel-ID
|
||
get:
|
||
displayName: Einzelnen Artikel abrufen
|
||
description: |
|
||
Einzelnen Artikel abrufen
|
||
|
||
Permission: `view_article`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 1,
|
||
"typ": "produkt",
|
||
"nummer": "700001",
|
||
"checksum": "",
|
||
"projekt": 1,
|
||
"inaktiv": "",
|
||
"ausverkauft": 0,
|
||
"warengruppe": "",
|
||
"name_de": "Schraube M10x20",
|
||
"name_en": "",
|
||
"kurztext_de": "",
|
||
"kurztext_en": "",
|
||
"beschreibung_de": "",
|
||
"beschreibung_en": "",
|
||
"uebersicht_de": "",
|
||
"uebersicht_en": "",
|
||
"links_de": "",
|
||
"links_en": "",
|
||
"startseite_de": "",
|
||
"startseite_en": "",
|
||
"standardbild": "",
|
||
"herstellerlink": "",
|
||
"hersteller": "",
|
||
"teilbar": "",
|
||
"nteile": "",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Artikel wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
# put:
|
||
# displayName: Artikel bearbeiten
|
||
# description: Artikel bearbeiten
|
||
# body:
|
||
# application/json:
|
||
# example: |
|
||
# {
|
||
# "nummer": "100001",
|
||
# "name_de": "Name neu von Artikel",
|
||
# "aktiv": "1",
|
||
# "anabregs_text": "Text für Angebot, Auftrag, Rechnung usw.",
|
||
# "hersteller": "Herstellername",
|
||
# "herstellernummer": "123",
|
||
# "ean": "234",
|
||
# "zolltarifnummer": "345",
|
||
# "mindestlager": "10",
|
||
# "mindestbestellung": "5",
|
||
# "gewicht": "1.5",
|
||
# "lagerartikel": "1"
|
||
# }
|
||
# responses:
|
||
# 200:
|
||
# description: Request erfolgreich; Aktualisierter Artikel wird zurückgeliefert
|
||
# body:
|
||
# application/json:
|
||
# example: |
|
||
# {
|
||
# "data": {
|
||
# "id": 1,
|
||
# "typ": "produkt",
|
||
# "nummer": "700001",
|
||
# "checksum": "",
|
||
# "projekt": 1,
|
||
# "inaktiv": "",
|
||
# "ausverkauft": 0,
|
||
# "warengruppe": "",
|
||
# "name_de": "Schraube M10x20",
|
||
# "name_en": "",
|
||
# "kurztext_de": "",
|
||
# "kurztext_en": "",
|
||
# "beschreibung_de": "",
|
||
# "beschreibung_en": "",
|
||
# "uebersicht_de": "",
|
||
# "uebersicht_en": "",
|
||
# "links_de": "",
|
||
# "links_en": "",
|
||
# "startseite_de": "",
|
||
# "startseite_en": "",
|
||
# "standardbild": "",
|
||
# "herstellerlink": "",
|
||
# "hersteller": "",
|
||
# "teilbar": "",
|
||
# "nteile": "",
|
||
# "...": "Ausgabe gekürzt"
|
||
# }
|
||
# }
|
||
|
||
|
||
/v1/artikelkategorien:
|
||
description: Artikelkategorien anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Artikelkategorien abrufen
|
||
description: |
|
||
Artikelkategorien abrufen
|
||
|
||
Permission: `list_article_categories`
|
||
queryParameters:
|
||
parent:
|
||
description: Artikelkategorien mit Parent-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Artikelkategorien mit Projekt filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
bezeichnung:
|
||
description: Artikelkategorie mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_exakt:
|
||
description: Artikelkategorie mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
id_ext:
|
||
description: Artikelkategorie mit externer ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=parent,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `parent`, `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Artikelkategorie anlegen
|
||
description: |
|
||
Artikelkategorie anlegen
|
||
|
||
Permission: `create_article_category`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Name der Artikelkategorie
|
||
required: true
|
||
type: string
|
||
projekt:
|
||
description: Projekt-ID
|
||
required: false
|
||
type: integer
|
||
parent:
|
||
description: ID der Elternkategorie
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung": "Schaufelradbagger",
|
||
"projekt": 1,
|
||
"parent": 10
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Artikelkategorie wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 19,
|
||
"bezeichnung": "Schaufelradbagger",
|
||
"next_nummer": "",
|
||
"projekt": 1,
|
||
"geloescht": "0",
|
||
"externenummer": "0",
|
||
"parent": 10,
|
||
"steuer_erloese_inland_normal": "",
|
||
"steuer_aufwendung_inland_normal": "",
|
||
"steuer_erloese_inland_ermaessigt": "",
|
||
"steuer_aufwendung_inland_ermaessigt": "",
|
||
"steuer_erloese_inland_steuerfrei": "",
|
||
"steuer_aufwendung_inland_steuerfrei": "",
|
||
"steuer_erloese_inland_innergemeinschaftlich": "",
|
||
"steuer_aufwendung_inland_innergemeinschaftlich": "",
|
||
"steuer_erloese_inland_eunormal": "",
|
||
"steuer_erloese_inland_nichtsteuerbar": "",
|
||
"steuer_erloese_inland_euermaessigt": "",
|
||
"steuer_aufwendung_inland_nichtsteuerbar": "",
|
||
"steuer_aufwendung_inland_eunormal": "",
|
||
"steuer_aufwendung_inland_euermaessigt": "",
|
||
"steuer_erloese_inland_export": "",
|
||
"steuer_aufwendung_inland_import": "",
|
||
"steuertext_innergemeinschaftlich": null,
|
||
"steuertext_export": null,
|
||
"id_ext": 0
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Artikelkategorie abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Artikelkategorie-ID
|
||
get:
|
||
displayName: Einzelne Artikelkategorie abrufen
|
||
description: |
|
||
Einzelne Artikelkategorie abrufen
|
||
|
||
Permission: `view_article_category`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 1,
|
||
"bezeichnung": "1000000 Sonstiges",
|
||
"next_nummer": "1000000",
|
||
"projekt": 0,
|
||
"geloescht": "0",
|
||
"externenummer": "0",
|
||
"parent": 0,
|
||
"...": "Ausgabe gekürzt",
|
||
"id_ext": 0
|
||
}
|
||
}
|
||
404:
|
||
description: Artikelkategorie wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Artikelkategorie bearbeiten
|
||
description: |
|
||
Artikelkategorie bearbeiten
|
||
|
||
Permission: `edit_article_category`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"bezeichnung": "Schwimmbagger"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Artikelkategorie wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 19,
|
||
"bezeichnung": "Schwimmbagger",
|
||
"next_nummer": "",
|
||
"projekt": 1,
|
||
"geloescht": "0",
|
||
"externenummer": "0",
|
||
"parent": 0,
|
||
"...": "Ausgabe gekürzt",
|
||
"id_ext": 0
|
||
}
|
||
}
|
||
|
||
/v1/eigenschaften:
|
||
description: Eigenschaften für Artikel abrufen, erstellen, bearbeiten und löschen
|
||
get:
|
||
displayName: Eigenschaften abrufen
|
||
description: |
|
||
Eigenschaften abrufen
|
||
|
||
Permission: `list_property`
|
||
queryParameters:
|
||
artikel:
|
||
description: Artikel Id der die Eigenschaft zugewiesen ist (genaue Übereinstimmung) - Standardmäßig 0, da die Zuordnung zum Artikel über den Wert realisiert wird
|
||
type: integer
|
||
required: false
|
||
name:
|
||
description: Name der Eigenschaft (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
typ:
|
||
description: Typ der Eigenschaft (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Projekt dem die Eigenschaft zugewiesen ist (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
geloescht:
|
||
description: Markiert die Eigenschaft als gelöscht (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=artikel,-name`)
|
||
|
||
Verfügbare Felder: `artikel`, `name`, `typ`, `projekt`, `geloescht`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Eigenschaft anlegen
|
||
description: |
|
||
Eigenschaft anlegen
|
||
|
||
Permission: `create_property`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
artikel:
|
||
description: Artikel Id der die Eigenschaft zugewiesen werden soll
|
||
type: integer
|
||
required: false
|
||
name:
|
||
description: Name der Eigenschaft (muss eindeutig sein)
|
||
type: string
|
||
required: true
|
||
typ:
|
||
description: Typ der Eigenschaft
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Projekt dem die Eigenschaft zugewiesen ist
|
||
type: integer
|
||
required: false
|
||
geloescht:
|
||
description: Markiert die Eigenschaft als gelöscht
|
||
type: integer
|
||
required: false
|
||
example: |
|
||
{
|
||
"name": "Farbe",
|
||
"typ": "einzeilig"
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Eigenschaft wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 19,
|
||
"artikel": 0,
|
||
"name": "Farbe",
|
||
"typ": "einzeilig",
|
||
"projekt": 0,
|
||
"geloescht": "0"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Eigenschaft abrufen, bearbeiten, oder löschen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Eigenschaft-ID
|
||
get:
|
||
displayName: Einzelne Eigenschaft abrufen
|
||
description: |
|
||
Einzelne Eigenschaft abrufen
|
||
|
||
Permission: `view_property`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 19,
|
||
"artikel": 0,
|
||
"name": "Farbe",
|
||
"typ": "einzeilig",
|
||
"projekt": 0,
|
||
"geloescht": "0"
|
||
}
|
||
}
|
||
404:
|
||
description: Eigenschaft wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Eigenschaft bearbeiten
|
||
description: |
|
||
Eigenschaft bearbeiten
|
||
|
||
Permission: `edit_property`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"name": "Material"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Eigenschaft wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 19,
|
||
"artikel": 0,
|
||
"name": "Material",
|
||
"typ": "einzeilig",
|
||
"projekt": 0,
|
||
"geloescht": "0"
|
||
}
|
||
}
|
||
delete:
|
||
displayName: Einzelne Eigenschaft löschen
|
||
description: |
|
||
Einzelne Eigenschaft löschen - Eigenschaften sollten nur dann gelöscht werden wenn auch keine Werte mehr für sie vorliegen
|
||
|
||
Permission: `delete_property`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 19
|
||
}
|
||
}
|
||
404:
|
||
description: Eigenschaft wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/eigenschaftenwerte:
|
||
description: Eigenschaftenwerte für Artikel abrufen, erstellen, bearbeiten und löschen
|
||
get:
|
||
displayName: Eigenschaftenwerte abrufen
|
||
description: |
|
||
Eigenschaften abrufen
|
||
|
||
Permission: `list_property_value`
|
||
queryParameters:
|
||
artikel:
|
||
description: Artikel Id der die Eigenschaft zugewiesen ist (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
artikeleigenschaften:
|
||
description: Id der Eigenschaft (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
wert:
|
||
description: Wert der Eigenschaft (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=artikel,-wert`)
|
||
|
||
Verfügbare Felder: `artikel`, `wert`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Eigenschaftwert anlegen
|
||
description: |
|
||
Eigenschaftenwert anlegen
|
||
|
||
Permission: `create_property_value`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
artikel:
|
||
description: Artikel Id der der Eigenschaftenwert zugewiesen werden soll
|
||
type: integer
|
||
required: true
|
||
artikeleigenschaften:
|
||
description: Id der Eigenschaft
|
||
type: integer
|
||
required: true
|
||
wert:
|
||
description: Wert der Eigenschaft
|
||
type: string
|
||
required: false
|
||
example: |
|
||
{
|
||
"artikel": 1,
|
||
"artikeleigenschaften": 19,
|
||
"wert": "Gelb"
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegter Eigenschaftenwert wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 203,
|
||
"artikel": 1,
|
||
"artikeleigenschaften": 19,
|
||
"wert": "Gelb"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelnen Eigenschaftenwert abrufen, bearbeiten, oder löschen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Eigenschaftenwert-ID
|
||
get:
|
||
displayName: Einzelnen Eigenschaftenwert abrufen
|
||
description: |
|
||
Einzelnen Eigenschaftenwert abrufen
|
||
|
||
Permission: `view_property_value`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 203,
|
||
"artikel": 1,
|
||
"artikeleigenschaften": 19,
|
||
"wert": "Gelb"
|
||
}
|
||
}
|
||
404:
|
||
description: Eigenschaftenwert wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Eigenschaftenwert bearbeiten
|
||
description: |
|
||
Eigenschaftenwert bearbeiten
|
||
|
||
Permission: `edit_property_value`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"wert": "Holz"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierter Eigenschaftenwert wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 203,
|
||
"artikel": 1,
|
||
"artikeleigenschaften": 19,
|
||
"wert": "Holz"
|
||
}
|
||
}
|
||
delete:
|
||
displayName: Einzelnen Eigenschaftenwert löschen
|
||
description: |
|
||
Einzelnen Eigenschaftenwert löschen
|
||
|
||
Permission: `delete_property_value`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 203
|
||
}
|
||
}
|
||
404:
|
||
description: Eigenschaftenwert wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/belege/angebote:
|
||
description: Angebote abrufen
|
||
get:
|
||
displayName: Angebotsliste abrufen
|
||
description: |
|
||
Angebotsliste abrufen und Angebote suchen
|
||
|
||
Permission: `list_quotes`
|
||
queryParameters:
|
||
status:
|
||
description: |
|
||
Suche nach Angebotsstatus (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `angelegt`, `abgelehnt`, `beauftragt`, `bestellt`, `freigegeben`, `versendet`, `storniert`
|
||
type: string
|
||
required: false
|
||
belegnr:
|
||
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_equals:
|
||
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_startswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
belegnr_endswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Angebote eines bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=belegnr`)
|
||
|
||
Verfügbare Felder: `belegnr`, `datum`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
||
|
||
Verfügbare Includes: `positionen`, `protokoll`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
|
||
/{id}:
|
||
description: Einzelnes Angebot abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Angebots-ID
|
||
get:
|
||
displayName: Einzelnes Angebot abrufen
|
||
description: |
|
||
Einzelnes Angebot abrufen
|
||
|
||
Permission: `list_quotes`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 4,
|
||
"firma": 1,
|
||
"projekt": "1",
|
||
"status": "versendet",
|
||
"belegnr": "100003",
|
||
"kundennummer": "10000",
|
||
"datum": "2019-06-28",
|
||
"gueltigbis": "2019-04-10",
|
||
"adresse": 3,
|
||
"typ": "firma",
|
||
"name": "Max Muster",
|
||
"titel": "",
|
||
"strasse": "Musterstrasse 6",
|
||
"plz": "12345",
|
||
"ort": "Musterdorf",
|
||
"land": "DE",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Angebot wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/belege/auftraege:
|
||
description: Aufträge abrufen
|
||
get:
|
||
displayName: Auftragsliste abrufen
|
||
description: |
|
||
Auftragsliste abrufen und Aufträge suchen
|
||
|
||
Permission: `list_orders`
|
||
queryParameters:
|
||
status:
|
||
description: |
|
||
Suche nach Auftragssstatus (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `angelegt`, `bestellt`, `freigegeben`, `versendet`, `abgeschlossen`, `storniert`,
|
||
type: string
|
||
required: false
|
||
belegnr:
|
||
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_equals:
|
||
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_startswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
belegnr_endswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
angebot:
|
||
description: Aufträge nach Angebotsnummer filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
angebotid:
|
||
description: Aufträge nach Angebots-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Aufträge eines bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=belegnr`)
|
||
|
||
Verfügbare Felder: `belegnr`, `datum`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
||
|
||
Verfügbare Includes: `positionen`, `protokoll`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
|
||
/{id}:
|
||
description: Einzelnen Auftrag abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Auftrag-ID
|
||
get:
|
||
displayName: Einzelnen Auftrag abrufen
|
||
description: |
|
||
Einzelnen Auftrag abrufen
|
||
|
||
Permission: `list_orders`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 4,
|
||
"firma": 1,
|
||
"projekt": "1",
|
||
"status": "freigegeben",
|
||
"belegnr": "200003",
|
||
"kundennummer": "10002",
|
||
"ihrebestellnummer": null,
|
||
"datum": "2019-02-26",
|
||
"adresse": 5,
|
||
"typ": "firma",
|
||
"name": "Hans Huber",
|
||
"titel": "",
|
||
"strasse": "Musterstrasse 6",
|
||
"plz": "12345",
|
||
"ort": "Musterstadt",
|
||
"land": "DE",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Auftrag wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/belege/lieferscheine:
|
||
description: Lieferscheine abrufen
|
||
get:
|
||
displayName: Lieferscheinliste abrufen
|
||
description: |
|
||
Lieferscheinliste abrufen und Lieferscheine suchen
|
||
|
||
Permission: `list_delivery_notes`
|
||
queryParameters:
|
||
status:
|
||
description: |
|
||
Suche nach Lieferschein-Status (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `angelegt`, `freigegeben`, `abgeschlossen`, `versendet`, `storniert`
|
||
type: string
|
||
required: false
|
||
belegnr:
|
||
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_equals:
|
||
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_startswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
belegnr_endswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
internet:
|
||
description: Suche nach Internetnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
internet_equals:
|
||
description: Suche nach Internetnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
internet_startswith:
|
||
description: Suche nach Internetnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
internet_endswith:
|
||
description: Suche nach Internetnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
auftrag:
|
||
description: Lieferscheine nach Auftragsnummer filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
auftragid:
|
||
description: Lieferscheine nach Auftrags-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Lieferscheine eines bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=belegnr`)
|
||
|
||
Verfügbare Felder: `belegnr`, `datum`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
||
|
||
Verfügbare Includes: `positionen`, `protokoll`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
|
||
/{id}:
|
||
description: Einzelnen Lieferschein abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Lieferschein-ID
|
||
get:
|
||
displayName: Einzelnen Lieferschein abrufen
|
||
description: |
|
||
Einzelnen Lieferschein abrufen
|
||
|
||
Permission: `list_delivery_notes`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 4,
|
||
"firma": 1,
|
||
"projekt": "1",
|
||
"status": "freigegeben",
|
||
"lieferscheinart": "",
|
||
"belegnr": "300003",
|
||
"kundennummer": "10001",
|
||
"ihrebestellnummer": "",
|
||
"datum": "2019-06-12",
|
||
"adresse": 4,
|
||
"typ": "frau",
|
||
"name": "Eva Müller",
|
||
"strasse": "Musterweg 12a",
|
||
"plz": "12345",
|
||
"ort": "Musterdorf",
|
||
"land": "DE",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Lieferschein wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/belege/rechnungen:
|
||
description: Rechnungen abrufen
|
||
get:
|
||
displayName: Rechnungsliste abrufen
|
||
description: |
|
||
Rechnungsliste abrufen und Rechnungen suchen
|
||
|
||
Permission: `list_invoices`
|
||
queryParameters:
|
||
status:
|
||
description: |
|
||
Suche nach Rechnungs-Status (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `angelegt`, `freigegeben`, `versendet`, `storniert`
|
||
type: string
|
||
required: false
|
||
belegnr:
|
||
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_equals:
|
||
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_startswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
belegnr_endswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
auftrag:
|
||
description: Rechnungen nach Auftragsnummer filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
auftragid:
|
||
description: Rechnungen nach Auftrags-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Rechnungen eines bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=belegnr`)
|
||
|
||
Verfügbare Felder: `belegnr`, `datum`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
||
|
||
Verfügbare Includes: `positionen`, `protokoll`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
|
||
/{id}:
|
||
description: Einzelne Rechnung abrufen oder löschen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Rechnungs-ID
|
||
get:
|
||
displayName: Einzelne Rechnung abrufen
|
||
description: |
|
||
Einzelne Rechnung abrufen
|
||
|
||
Permission: `view_invoice`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 4,
|
||
"firma": 1,
|
||
"projekt": "1",
|
||
"status": "versendet",
|
||
"belegnr": "400002",
|
||
"datum": "2019-05-21",
|
||
"kundennummer": "10000",
|
||
"adresse": 3,
|
||
"typ": "firma",
|
||
"name": "Max Muster",
|
||
"strasse": "Musterstrasse 6",
|
||
"plz": "12345",
|
||
"ort": "Musterdorf",
|
||
"land": "DE",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Rechnung wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
delete:
|
||
displayName: Einzelne Rechnung löschen
|
||
description: |
|
||
Einzelne Rechnung löschen
|
||
|
||
Permission: `delete_invoice`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 18
|
||
}
|
||
}
|
||
404:
|
||
description: Rechnung wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/belege/gutschriften:
|
||
description: Gutschriften/Stornorechnungen abrufen
|
||
get:
|
||
displayName: Gutschriftenliste abrufen
|
||
description: |
|
||
Gutschriftenliste abrufen und Gutschriften suchen
|
||
|
||
Permission: `list_credit_memos`
|
||
queryParameters:
|
||
status:
|
||
description: |
|
||
Suche nach Gutschriften-Status (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `angelegt`, `freigegeben`, `versendet`, `storniert`
|
||
type: string
|
||
required: false
|
||
belegnr:
|
||
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_equals:
|
||
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
belegnr_startswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
belegnr_endswith:
|
||
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
kundennummer:
|
||
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_equals:
|
||
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kundennummer_startswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
kundennummer_endswith:
|
||
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
rechnung:
|
||
description: Gutschriften nach Rechnungsnummer filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
rechnungid:
|
||
description: Gutschriften nach Rechnungs-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Gutschriften eines bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=belegnr`)
|
||
|
||
Verfügbare Felder: `belegnr`, `datum`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
||
|
||
Verfügbare Includes: `positionen`, `protokoll`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
|
||
/{id}:
|
||
description: Einzelne Gutschrift abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Gutschriften-ID
|
||
get:
|
||
displayName: Einzelne Gutschrift abrufen
|
||
description: |
|
||
Einzelne Gutschrift abrufen
|
||
|
||
Permission: `view_credit_memo`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 1,
|
||
"firma": 1,
|
||
"projekt": "1",
|
||
"status": "versendet",
|
||
"belegnr": "900000",
|
||
"datum": "2019-08-07",
|
||
"stornorechnung": 0,
|
||
"kundennummer": "10001",
|
||
"adresse": 4,
|
||
"typ": "frau",
|
||
"name": "Eva Müller",
|
||
"strasse": "Musterweg 12a",
|
||
"plz": "12345",
|
||
"ort": "Musterdorf",
|
||
"land": "DE",
|
||
"...": "Ausgabe gekürzt"
|
||
}
|
||
}
|
||
404:
|
||
description: Gutschrift wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/crmdokumente:
|
||
description: CRM-Dokumente abrufen, anlegen und bearbeiten
|
||
get:
|
||
displayName: CRM-Dokumente abrufen
|
||
description: |
|
||
CRM-Dokumente abrufen und suchen
|
||
|
||
Permission: `list_crm_documents`
|
||
queryParameters:
|
||
typ:
|
||
description: Suche nach CRM-Dokumenten eines Typs (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
typ_equals:
|
||
description: |
|
||
Suche nach CRM-Dokumenten eines Typs (genaue Übereinstimmung)
|
||
|
||
Verfügbare Typen: `brief`, `email`, `telefon`, `notiz`
|
||
type: string
|
||
required: false
|
||
typ_exact:
|
||
description: (deprecated) gleich wie typ_equals
|
||
type: string
|
||
required: false
|
||
betreff:
|
||
description: Suche nach Betreff (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
betreff_equals:
|
||
description: Suche nach Betreff (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
betreff_exakt:
|
||
description: (deprecated) gleich wie betreff_equals
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Filtere nach Projekt (Projekt-ID)
|
||
type: integer
|
||
required: false
|
||
adresse_from:
|
||
description: Filtere nach Absender (Adresse-ID)
|
||
type: integer
|
||
required: false
|
||
adresse_to:
|
||
description: Filtere nach Empfänger (Adresse-ID)
|
||
type: integer
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`, `adresse_to`, `adresse_from`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: CRM-Dokument anlegen
|
||
description: |
|
||
CRM-Dokument anlegen
|
||
|
||
Permission: `create_crm_document`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
typ:
|
||
description: Mögliche Werte sind `email`, `brief`, `telefon`, `notiz`
|
||
required: true
|
||
type: string
|
||
betreff:
|
||
description: Betreff des CRM-Dokuments
|
||
required: true
|
||
type: string
|
||
content:
|
||
description: Inhalt des CRM-Dokuments
|
||
required: false
|
||
type: string
|
||
adresse_from:
|
||
description: Absender/Mitarbeiter (Adresse-ID)
|
||
required: false
|
||
type: integer
|
||
adresse_to:
|
||
description: Empfänger/Kunde (Adresse-ID)
|
||
required: false
|
||
type: integer
|
||
von:
|
||
description: Anzeigename Absender
|
||
required: false
|
||
type: string
|
||
an:
|
||
description: Anzeigename Empfänger
|
||
required: false
|
||
type: string
|
||
email_an:
|
||
description: E-Mail Adresse Empfänger
|
||
required: false
|
||
type: string
|
||
email_cc:
|
||
description: E-Mail Adresse CC
|
||
required: false
|
||
type: string
|
||
email_bcc:
|
||
description: E-Mail Adresse BCC
|
||
required: false
|
||
type: string
|
||
adresse:
|
||
description: Anschrift 1. Adresszeile
|
||
required: false
|
||
type: string
|
||
plz:
|
||
description: Anschrift Postleitzahl
|
||
required: false
|
||
type: string
|
||
ort:
|
||
description: Anschrift Ort
|
||
required: false
|
||
type: string
|
||
land:
|
||
description: Anschrift Land
|
||
required: false
|
||
type: string
|
||
datum:
|
||
description: Datum des Dokuments
|
||
required: false
|
||
type: date-only
|
||
uhrzeit:
|
||
description: Uhrzeit des Dokuments
|
||
required: false
|
||
type: time-only
|
||
projekt:
|
||
description: Projekt-ID
|
||
required: false
|
||
type: integer
|
||
signatur:
|
||
description: Signatur verwendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
printer:
|
||
description: Nachricht wurde gedruckt (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
fax:
|
||
description: Fax wurde versendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
sent:
|
||
description: Nachricht wurde versendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
deleted:
|
||
description: Nachricht wurde gelöscht (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"typ": "email",
|
||
"betreff": "AW: Antwort auf eine Frage",
|
||
"adresse_from": 1,
|
||
"adresse_to": 7,
|
||
"projekt": 1
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 14,
|
||
"adresse_from": 1,
|
||
"adresse_to": 7,
|
||
"typ": "email",
|
||
"von": "",
|
||
"an": "",
|
||
"email_an": "",
|
||
"send_as": "",
|
||
"email": "",
|
||
"email_cc": null,
|
||
"email_bcc": null,
|
||
"bearbeiter": null,
|
||
"firma_an": "",
|
||
"adresse": "",
|
||
"ansprechpartner": null,
|
||
"plz": "",
|
||
"ort": "",
|
||
"land": "",
|
||
"datum": "0000-00-00",
|
||
"uhrzeit": null,
|
||
"betreff": "AW: Antwort auf eine Frage",
|
||
"content": "",
|
||
"projekt": 1,
|
||
"internebezeichnung": "",
|
||
"signatur": 0,
|
||
"fax": 0,
|
||
"sent": 0,
|
||
"printer": 0,
|
||
"deleted": 0
|
||
}
|
||
}
|
||
400:
|
||
description: Request Body Fehlerhaft
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7453,
|
||
"http_code": 400,
|
||
"message": "Validation error",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7453",
|
||
"details": [
|
||
"The attribute 'betreff' is required."
|
||
]
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne CRM-Dokumente abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: CRM-Dokumenten-ID
|
||
get:
|
||
displayName: Einzelnes CRM-Dokument abrufen
|
||
description: |
|
||
Einzelnes CRM-Dokument abrufen.
|
||
|
||
Permission: `view_crm_document`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 4,
|
||
"adresse_from": 1,
|
||
"adresse_to": 7,
|
||
"typ": "telefon",
|
||
"von": "",
|
||
"an": "",
|
||
"email_an": "",
|
||
"send_as": "",
|
||
"email": "",
|
||
"email_cc": "",
|
||
"email_bcc": "",
|
||
"bearbeiter": "Mitarbeiter XY",
|
||
"firma_an": "",
|
||
"adresse": "",
|
||
"ansprechpartner": "",
|
||
"plz": "",
|
||
"ort": "",
|
||
"land": "",
|
||
"datum": "2019-11-05",
|
||
"uhrzeit": "12:04:00",
|
||
"betreff": "Fragen zur Bedienung",
|
||
"content": "- Keine Fragen, alles klar",
|
||
"projekt": 1,
|
||
"internebezeichnung": "",
|
||
"signatur": 0,
|
||
"fax": 0,
|
||
"sent": 0,
|
||
"printer": 0,
|
||
"deleted": 0
|
||
}
|
||
}
|
||
404:
|
||
description: CRM-Dokument wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: CRM-Dokument bearbeiten
|
||
description: |
|
||
CRM-Dokument bearbeiten
|
||
|
||
Permission: `view_crm_document`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
typ:
|
||
description: Mögliche Werte sind `email`, `brief`, `telefon`, `notiz`
|
||
required: true
|
||
type: string
|
||
betreff:
|
||
description: Betreff des CRM-Dokuments
|
||
required: true
|
||
type: string
|
||
content:
|
||
description: Inhalt des CRM-Dokuments
|
||
required: false
|
||
type: string
|
||
adresse_from:
|
||
description: Absender/Mitarbeiter (Adresse-ID)
|
||
required: false
|
||
type: integer
|
||
adresse_to:
|
||
description: Empfänger/Kunde (Adresse-ID)
|
||
required: false
|
||
type: integer
|
||
von:
|
||
description: Anzeigename Absender
|
||
required: false
|
||
type: string
|
||
an:
|
||
description: Anzeigename Empfänger
|
||
required: false
|
||
type: string
|
||
email_an:
|
||
description: E-Mail Adresse Empfänger
|
||
required: false
|
||
type: string
|
||
email_cc:
|
||
description: E-Mail Adresse CC
|
||
required: false
|
||
type: string
|
||
email_bcc:
|
||
description: E-Mail Adresse BCC
|
||
required: false
|
||
type: string
|
||
adresse:
|
||
description: Anschrift 1. Adresszeile
|
||
required: false
|
||
type: string
|
||
plz:
|
||
description: Anschrift Postleitzahl
|
||
required: false
|
||
type: string
|
||
ort:
|
||
description: Anschrift Ort
|
||
required: false
|
||
type: string
|
||
land:
|
||
description: Anschrift Land
|
||
required: false
|
||
type: string
|
||
datum:
|
||
description: Datum des Dokuments
|
||
required: false
|
||
type: date-only
|
||
uhrzeit:
|
||
description: Uhrzeit des Dokuments
|
||
required: false
|
||
type: time-only
|
||
projekt:
|
||
description: Projekt-ID
|
||
required: false
|
||
type: integer
|
||
signatur:
|
||
description: Signatur verwendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
printer:
|
||
description: Nachricht wurde gedruckt (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
fax:
|
||
description: Fax wurde versendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
sent:
|
||
description: Nachricht wurde versendet (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
deleted:
|
||
description: Nachricht wurde gelöscht (1=ja, 0=nein)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"typ": "brief",
|
||
"betreff": "Test Brief 14"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 14,
|
||
"adresse_from": 1,
|
||
"adresse_to": 7,
|
||
"typ": "brief",
|
||
"von": "",
|
||
"an": "",
|
||
"email_an": "",
|
||
"send_as": "",
|
||
"email": "",
|
||
"email_cc": null,
|
||
"email_bcc": null,
|
||
"bearbeiter": null,
|
||
"firma_an": "",
|
||
"adresse": "",
|
||
"ansprechpartner": null,
|
||
"plz": "",
|
||
"ort": "",
|
||
"land": "",
|
||
"datum": "0000-00-00",
|
||
"uhrzeit": null,
|
||
"betreff": "Test Brief 14",
|
||
"content": "",
|
||
"projekt": 1,
|
||
"internebezeichnung": "",
|
||
"signatur": 0,
|
||
"fax": 0,
|
||
"sent": 0,
|
||
"printer": 0,
|
||
"deleted": 0
|
||
}
|
||
}
|
||
400:
|
||
description: Request Body Fehlerhaft
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7453,
|
||
"http_code": 400,
|
||
"message": "Validation error",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7453",
|
||
"details": [
|
||
"The attribute 'betreff' is required."
|
||
]
|
||
}
|
||
}
|
||
404:
|
||
description: CRM-Dokument wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
delete:
|
||
displayName: CRM-Dokument löschen
|
||
description: |
|
||
CRM-Dokument löschen
|
||
|
||
Permission: `delete_crm_document`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 14
|
||
}
|
||
}
|
||
404:
|
||
description: CRM-Dokument wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/dateien:
|
||
description: Dateiliste abrufen und Dateien downloaden
|
||
get:
|
||
displayName: Dateiliste abrufen
|
||
description: |
|
||
Dateiliste abrufen.
|
||
|
||
Permission: `list_files`
|
||
queryParameters:
|
||
titel:
|
||
description: Suche nach Dateititel (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
titel_equals:
|
||
description: Suche nach Dateititel (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
titel_startswith:
|
||
description: Suche nach Dateititel (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
titel_endswith:
|
||
description: Suche nach Dateititel (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
dateiname:
|
||
description: Suche nach Dateiname (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
dateiname_equals:
|
||
description: Suche nach Dateiname (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
dateiname_startswith:
|
||
description: Suche nach Dateiname (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
dateiname_endswith:
|
||
description: Suche nach Dateiname (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
belegtyp:
|
||
description: Suche nach Zuweisungen zu Belegtyp (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
stichwort:
|
||
description: Suche nach Stichwort (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=dateiname`)
|
||
|
||
Verfügbare Felder: `dateiname`, `datum`, `titel`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=stichwoerter`)
|
||
|
||
Verfügbare Includes: `stichwoerter`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Datei anlegen/hochladen
|
||
description: |
|
||
Datei anlegen/hochladen
|
||
|
||
Permission: `create_files`
|
||
body:
|
||
application/x-www-form-urlencoded:
|
||
properties:
|
||
file_content:
|
||
description: Datei-Inhalt (Raw-Daten)
|
||
required: true
|
||
type: file
|
||
titel:
|
||
description: Datei-Titel
|
||
required: true
|
||
type: string
|
||
dateiname:
|
||
description: Dateiname (ohne Verzeichnis; Beispiel `foo.jpg`)
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Beschreibungstext
|
||
required: false
|
||
type: string
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Datei wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 123,
|
||
"titel": "Rechnung 400027",
|
||
"beschreibung": "Rechnung 400027 von Kunde Max Mustermann",
|
||
"nummer": "",
|
||
"firma": 1,
|
||
"ersteller": "",
|
||
"datum": "2018-11-15",
|
||
"version": 1,
|
||
"dateiname": "RE400027.pdf",
|
||
"bemerkung": "Initiale Version",
|
||
"size": "8427",
|
||
"stichwoerter": null,
|
||
"belegtypen": null,
|
||
"mimetype": "application/pdf",
|
||
"links": {
|
||
"download": "http://www.example.com/api/v1/dateien/123/download",
|
||
"base64": "http://www.example.com/api/v1/dateien/123/base64"
|
||
}
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Informationen zu einer Datei abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Datei-ID
|
||
get:
|
||
displayName: Informationen zu einer Datei abrufen
|
||
description: |
|
||
Informationen zu einer Datei abrufen
|
||
|
||
Permission: `view_file`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 115,
|
||
"titel": "Rechnung 400027",
|
||
"beschreibung": "",
|
||
"nummer": "",
|
||
"firma": 1,
|
||
"ersteller": "Max Mustermann",
|
||
"datum": "2018-11-15",
|
||
"version": 1,
|
||
"dateiname": "RE400027.pdf",
|
||
"bemerkung": "Initiale Version",
|
||
"size": "8427",
|
||
"stichwoerter": "Belege",
|
||
"belegtypen": "Verbindlichkeiten",
|
||
"mimetype": "application/pdf",
|
||
"links": {
|
||
"download": "http://www.example.com/api/v1/dateien/115/download",
|
||
"base64": "http://www.example.com/api/v1/dateien/115/base64"
|
||
}
|
||
}
|
||
}
|
||
404:
|
||
description: Datei wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
/download:
|
||
description: Datei downloaden
|
||
get:
|
||
displayName: Datei downloaden
|
||
description: |
|
||
Datei downloaden
|
||
|
||
Permission: `handle_assets`
|
||
responses:
|
||
200:
|
||
description: |
|
||
Request erfolgreich
|
||
|
||
Der Content-Type ist abhängig vom Mime-Type der Datei die gesendet wird.
|
||
/base64:
|
||
description: Dateiinhalt base64-kodiert abrufen
|
||
get:
|
||
displayName: Dateiinhalt base64-kodiert abrufen
|
||
description: |
|
||
Dateiinhalt base64-kodiert abrufen
|
||
|
||
Permission: `handle_assets`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
text/plain:
|
||
example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=
|
||
|
||
/v1/docscan:
|
||
description: DocumentScanner-Dateiliste abrufen und Dateien downloaden
|
||
get:
|
||
displayName: DocumentScanner-Dateiliste abrufen
|
||
description: |
|
||
DocumentScanner-Dateiliste abrufen
|
||
|
||
Permission: `list_scanned_documents`
|
||
queryParameters:
|
||
titel:
|
||
description: Suche nach Dateititel (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
titel_equals:
|
||
description: Suche nach Dateititel (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
titel_startswith:
|
||
description: Suche nach Dateititel (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
titel_endswith:
|
||
description: Suche nach Dateititel (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
dateiname:
|
||
description: Suche nach Dateiname (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
dateiname_equals:
|
||
description: Suche nach Dateiname (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
dateiname_startswith:
|
||
description: Suche nach Dateiname (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
dateiname_endswith:
|
||
description: Suche nach Dateiname (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach Datum (genaue Übereinstimmung; Format `YYYY-MM-DD`)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach Datum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach Datum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach Datum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach Datum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
belegtyp:
|
||
description: Suche nach Zuweisungen zu Belegtyp (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
stichwort:
|
||
description: Suche nach Stichwort (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
firma:
|
||
description: Suche nach Firmen-ID
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=dateiname`)
|
||
|
||
Verfügbare Felder: `dateiname`, `datum`, `titel`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=stichwoerter`)
|
||
|
||
Verfügbare Includes: `stichwoerter`, `metadata`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: DocumentScanner-Datei anlegen/hochladen
|
||
description: |
|
||
DocumentScanner-Datei anlegen/hochladen
|
||
|
||
Permission: `create_scanned_documents`
|
||
body:
|
||
multipart/form-data:
|
||
properties:
|
||
file_content:
|
||
description: Datei-Inhalt
|
||
required: true
|
||
type: file
|
||
titel:
|
||
description: Datei-Titel
|
||
required: true
|
||
type: string
|
||
dateiname:
|
||
description: Dateiname (ohne Verzeichnis; Beispiel `beleg.pdf`)
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Datei-Beschreibungstext
|
||
required: false
|
||
type: string
|
||
meta:
|
||
description: Meta-Daten
|
||
required: false
|
||
type: array
|
||
meta.invoice_number:
|
||
description: Rechnungsnummer
|
||
required: false
|
||
type: string
|
||
meta.invoice_date:
|
||
description: Rechnungsdatum (Format `YYYY-MM-DD`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_amount:
|
||
description: Rechnungsbetrag brutto (Beispiel `12345.67`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_tax:
|
||
description: Mehrwertsteuerbetrag der Rechnung (Beispiel `12345.67`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_currency:
|
||
description: Währungscode der Rechnung (Beispiel `EUR`)
|
||
required: false
|
||
type: string
|
||
application/x-www-form-urlencoded:
|
||
properties:
|
||
file_content:
|
||
description: Datei-Inhalt (Raw-Daten)
|
||
required: true
|
||
type: string
|
||
titel:
|
||
description: Datei-Titel
|
||
required: true
|
||
type: string
|
||
dateiname:
|
||
description: Dateiname (ohne Verzeichnis; Beispiel `beleg.pdf`)
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Datei-Beschreibungstext
|
||
required: false
|
||
type: string
|
||
meta:
|
||
description: Meta-Daten
|
||
required: false
|
||
type: array
|
||
meta.invoice_number:
|
||
description: Rechnungsnummer
|
||
required: false
|
||
type: string
|
||
meta.invoice_date:
|
||
description: Rechnungsdatum (Format `YYYY-MM-DD`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_amount:
|
||
description: Rechnungsbetrag brutto (Beispiel `12345.67`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_tax:
|
||
description: Mehrwertsteuerbetrag der Rechnung (Beispiel `12345.67`)
|
||
required: false
|
||
type: string
|
||
meta.invoice_currency:
|
||
description: Währungscode der Rechnung (Beispiel `EUR`)
|
||
required: false
|
||
type: string
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Datei wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 123,
|
||
"titel": "Rechnung 400027",
|
||
"beschreibung": "Rechnung 400027 von Kunde Max Mustermann",
|
||
"nummer": "",
|
||
"firma": 1,
|
||
"ersteller": "",
|
||
"datum": "2018-11-15",
|
||
"version": 1,
|
||
"dateiname": "RE400027.pdf",
|
||
"bemerkung": "Initiale Version",
|
||
"size": "8427",
|
||
"mimetype": "application/pdf",
|
||
"links": {
|
||
"download": "http://www.example.com/api/v1/dateien/123/download",
|
||
"base64": "http://www.example.com/api/v1/dateien/123/base64"
|
||
}
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Informationen zu einer DocumentScanner-Datei abrufen
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Datei-ID
|
||
get:
|
||
displayName: Informationen zu einer DocumentScanner-Datei abrufen
|
||
description: |
|
||
Informationen zu einer DocumentScanner-Datei abrufen
|
||
|
||
Permission: `view_scanned_documents`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 115,
|
||
"titel": "Rechnung 400027",
|
||
"beschreibung": "",
|
||
"nummer": "",
|
||
"firma": 1,
|
||
"ersteller": "Max Mustermann",
|
||
"datum": "2018-11-15",
|
||
"version": 1,
|
||
"dateiname": "RE400027.pdf",
|
||
"bemerkung": "Initiale Version",
|
||
"size": "8427",
|
||
"mimetype": "application/pdf",
|
||
"links": {
|
||
"download": "http://www.example.com/api/v1/dateien/115/download",
|
||
"base64": "http://www.example.com/api/v1/dateien/115/base64"
|
||
}
|
||
}
|
||
}
|
||
404:
|
||
description: Datei wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
|
||
/v1/gruppen:
|
||
description: Gruppen anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Gruppenliste abrufen
|
||
description: |
|
||
Gruppenliste abrufen
|
||
|
||
Permission: `list_groups`
|
||
queryParameters:
|
||
name:
|
||
description: Gruppe mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_exakt:
|
||
description: Gruppe mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kennziffer:
|
||
description: Gruppen mit bestimmter Kennziffer suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
kennziffer_exakt:
|
||
description: Gruppen mit bestimmter Kennziffer suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
art:
|
||
description: |
|
||
Gruppen mit bestimmter Art suchen (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: `gruppe`, `preisgruppe`, `verband`, `regionalgruppe`, `kategorie`, `vertreter`
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Gruppen mit bestimmten Projekt filtern
|
||
type: integer
|
||
required: false
|
||
kategorie:
|
||
description: Gruppen mit bestimmter Kategorie filtern
|
||
type: integer
|
||
required: false
|
||
aktiv:
|
||
description: Aktive/Inaktive Gruppen filtern (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=projekt,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `name`, `art`, `kennziffer`, `projekt`, `kategorie`, `aktiv`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Gruppe anlegen
|
||
description: |
|
||
Gruppe anlegen
|
||
|
||
Permission: `create_groups`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
name:
|
||
description: Bezeichnung der Gruppe
|
||
required: true
|
||
type: string
|
||
art:
|
||
description: Mögliche Werte sind `gruppe`, `preisgruppe`, `verband`, `regionalgruppe`, `kategorie` , `vertreter`
|
||
required: true
|
||
type: string
|
||
kennziffer:
|
||
description: Einmalige Kennziffer
|
||
required: true
|
||
type: string
|
||
projekt:
|
||
description: Projekt-ID
|
||
required: false
|
||
type: integer
|
||
kategorie:
|
||
description: Projekt-ID
|
||
required: false
|
||
type: integer
|
||
aktiv:
|
||
description: Gruppe aktiv? (1 = Aktiv / 0 = Inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"name": "Support",
|
||
"art": "gruppe",
|
||
"kennziffer": "SUPPORT",
|
||
"projekt": 0,
|
||
"kategorie": 0,
|
||
"aktiv": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Gruppe wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "11",
|
||
"name": "Support",
|
||
"art": "gruppe",
|
||
"kennziffer": "SUPPORT",
|
||
"internebemerkung": "",
|
||
"projekt": "0",
|
||
"kategorie": "0",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Gruppe abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Gruppe-ID
|
||
get:
|
||
displayName: Einzelne Gruppe abrufen
|
||
description: |
|
||
Einzelne Gruppe abrufen
|
||
|
||
Permission: `view_group`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "1",
|
||
"name": "Vertriebsleiter",
|
||
"art": "vertreter",
|
||
"kennziffer": "VETRL",
|
||
"internebemerkung": "",
|
||
"projekt": "0",
|
||
"kategorie": "0",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
404:
|
||
description: Gruppe wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Gruppe bearbeiten
|
||
description: |
|
||
Gruppe bearbeiten
|
||
|
||
Permission: `update_group`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"name": "Support (inaktiv)",
|
||
"art": "gruppe",
|
||
"kennziffer": "SUPPORT",
|
||
"aktiv": "0"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Gruppe wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "11",
|
||
"name": "Support (inaktiv)",
|
||
"art": "gruppe",
|
||
"kennziffer": "SUPPORT",
|
||
"internebemerkung": "",
|
||
"projekt": "0",
|
||
"kategorie": "0",
|
||
"aktiv": "0"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/laender:
|
||
description: Länder anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Länderliste abrufen
|
||
description: |
|
||
Länderliste abrufen
|
||
|
||
Permission: `list_countries`
|
||
queryParameters:
|
||
eu:
|
||
description: Länder innerhalb/außerhalb EU filtern (1 = EU / 0 = Nicht EU)
|
||
type: integer
|
||
required: false
|
||
iso:
|
||
description: Länder mit ISO-Code filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_de:
|
||
description: Länder mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_en:
|
||
description: Länder mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
id_ext:
|
||
description: Land mit externer ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=iso,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `bezeichnung_de`, `bezeichnung_en`, `iso` , `eu`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Land anlegen
|
||
description: |
|
||
Land anlegen
|
||
|
||
Permission: `create_countries`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung_de:
|
||
description: Deutsche Bezeichnung des Landes
|
||
required: true
|
||
type: string
|
||
bezeichnung_en:
|
||
description: Englische Bezeichnung des Landes
|
||
required: true
|
||
type: string
|
||
iso:
|
||
description: ISO-Code (ISO-3166 ALPHA 2)
|
||
required: true
|
||
type: string
|
||
eu:
|
||
description: EU (1 = EU / 0 = Nicht EU)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung_de": "Republik Togo",
|
||
"bezeichnung_en": "République Togolaise",
|
||
"iso": "TG",
|
||
"eu": 0
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegtes Land wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "246",
|
||
"iso": "TG",
|
||
"bezeichnung_de": "Republik Togo",
|
||
"bezeichnung_en": "République Togolaise",
|
||
"eu": "0",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelnes Land abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Land-ID
|
||
get:
|
||
displayName: Einzelnes Land abrufen
|
||
description: |
|
||
Einzelnes Land abrufen
|
||
|
||
Permission: `view_country`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "43",
|
||
"iso": "DE",
|
||
"bezeichnung_de": "Deutschland",
|
||
"bezeichnung_en": "Germany",
|
||
"eu": "1",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
404:
|
||
description: Land wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Land bearbeiten
|
||
description: |
|
||
Land bearbeiten
|
||
|
||
Permission: `edit_country`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"bezeichnung_de": "Togo",
|
||
"bezeichnung_en": "Republique Togolaise",
|
||
"iso": "TX",
|
||
"eu": 0
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisiertes Land wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "246",
|
||
"iso": "TX",
|
||
"bezeichnung_de": "Togo",
|
||
"bezeichnung_en": "Republique Togolaise",
|
||
"eu": "0",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
|
||
|
||
/v1/lagercharge:
|
||
description: Lagercharge abrufen
|
||
get:
|
||
displayName: Lagercharge abrufen
|
||
description: |
|
||
Lagercharge abrufen
|
||
|
||
Permission: `view_storage_batch`
|
||
queryParameters:
|
||
artikelnummer:
|
||
description: Suche nach bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
artikelnummer_equals:
|
||
description: Suche nach bestimmter Artikelnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
artikelnummer_startswith:
|
||
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
artikelnummer_endswith:
|
||
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
artikel:
|
||
description: Suche nach bestimmter Artikel-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
lagerplatzbezeichnung:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_equals:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_startswith:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_endswith:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
lagerplatz:
|
||
description: Suche nach bestimmter Lagerplatz-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
charge:
|
||
description: Suche nach bestimmter Charge (ungefähre Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
charge_equals:
|
||
description: Suche nach bestimmter Charge (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
charge_startswith:
|
||
description: Suche nach bestimmter Charge (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
charge_endswith:
|
||
description: Suche nach bestimmter Charge (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Datum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Datum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Datum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Datum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Datum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=artikelnummer,-menge`)
|
||
|
||
Verfügbare Felder: `lagerplatzbezeichnung`, `artikelnummer`, `charge`, `datum` , `menge`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
||
|
||
Verfügbare Includes: `artikel`, `lagerplatz`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
responses:
|
||
200:
|
||
description: |
|
||
Request erfolgreich
|
||
|
||
Die Menge wird gruppiert über drei Felder: `artikel`, `lagerplatz` und `charge`.
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": [
|
||
{
|
||
"artikel": 1,
|
||
"artikelnummer": "700001",
|
||
"lagerplatz": 1,
|
||
"lagerplatzbezeichnung": "HL001A",
|
||
"charge": "111111",
|
||
"datum": "2018-12-21",
|
||
"menge": "200.0000",
|
||
"internebemerkung": ""
|
||
},
|
||
{
|
||
"artikel": 1,
|
||
"artikelnummer": "700001",
|
||
"lagerplatz": 2,
|
||
"lagerplatzbezeichnung": "HL001B",
|
||
"charge": "222222",
|
||
"datum": "2018-12-21",
|
||
"menge": "300.0000",
|
||
"internebemerkung": ""
|
||
}
|
||
],
|
||
"pagination": {
|
||
"items_per_page": 20,
|
||
"items_current": 2,
|
||
"items_total": 2,
|
||
"page_current": 1,
|
||
"page_last": 1
|
||
}
|
||
}
|
||
|
||
|
||
/v1/lagermhd:
|
||
description: Lager-Mindesthaltbarkeitdatum abrufen
|
||
get:
|
||
displayName: Lager-Mindesthaltbarkeitdatum abrufen
|
||
description: |
|
||
Lager-Mindesthaltbarkeitdatum abrufen
|
||
|
||
Permission: `view_storage_best_before`
|
||
queryParameters:
|
||
artikelnummer:
|
||
description: Suche nach bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
artikelnummer_equals:
|
||
description: Suche nach bestimmter Artikelnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
artikelnummer_startswith:
|
||
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
artikelnummer_endswith:
|
||
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
artikel:
|
||
description: Suche nach bestimmter Artikel-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
lagerplatzbezeichnung:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_equals:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_startswith:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
lagerplatzbezeichnung_endswith:
|
||
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
lagerplatz:
|
||
description: Suche nach bestimmter Lagerplatz-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
charge:
|
||
description: Suche nach bestimmter Charge (ungefähre Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
charge_equals:
|
||
description: Suche nach bestimmter Charge (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
charge_startswith:
|
||
description: Suche nach bestimmter Charge (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
charge_endswith:
|
||
description: Suche nach bestimmter Charge (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
mhddatum:
|
||
description: Suche nach bestimmtem MHD-Datum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
mhddatum_gt:
|
||
description: Suche nach bestimmtem MHD-Datum (MHD-Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
mhddatum_gte:
|
||
description: Suche nach bestimmtem MHD-Datum (MHD-Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
mhddatum_lt:
|
||
description: Suche nach bestimmtem MHD-Datum (MHD-Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
mhddatum_lte:
|
||
description: Suche nach bestimmtem MHD-Datum (MHD-Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum:
|
||
description: Suche nach bestimmtem Datum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
datum_gt:
|
||
description: Suche nach bestimmtem Datum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_gte:
|
||
description: Suche nach bestimmtem Datum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lt:
|
||
description: Suche nach bestimmtem Datum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
datum_lte:
|
||
description: Suche nach bestimmtem Datum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=artikelnummer,-menge`)
|
||
|
||
Verfügbare Felder: `lagerplatzbezeichnung`, `artikelnummer`, `charge`, `mhddatum`, `datum` , `menge`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
||
|
||
Verfügbare Includes: `artikel`, `lagerplatz`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
responses:
|
||
200:
|
||
description: |
|
||
Request erfolgreich
|
||
|
||
Die Menge wird gruppiert über vier Felder: `artikel`, `lagerplatz`, `charge` und `mhddatum`.
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": [
|
||
{
|
||
"artikel": 1,
|
||
"artikelnummer": "700001",
|
||
"lagerplatz": 1,
|
||
"lagerplatzbezeichnung": "HL001A",
|
||
"charge": "444444",
|
||
"mhddatum": "2019-12-24",
|
||
"datum": "2018-12-21",
|
||
"menge": "300.0000",
|
||
"internebemerkung": "Charge und / oder MHD angelegt"
|
||
},
|
||
{
|
||
"artikel": 1,
|
||
"artikelnummer": "700001",
|
||
"lagerplatz": 4,
|
||
"lagerplatzbezeichnung": "HL002",
|
||
"charge": "555555",
|
||
"mhddatum": "2019-12-23",
|
||
"datum": "2018-12-21",
|
||
"menge": "289.0000",
|
||
"internebemerkung": "Produktion 400003 Einlagern"
|
||
}
|
||
],
|
||
"pagination": {
|
||
"items_per_page": 20,
|
||
"items_current": 2,
|
||
"items_total": 2,
|
||
"page_current": 1,
|
||
"page_last": 1
|
||
}
|
||
}
|
||
|
||
|
||
/v1/lieferadressen:
|
||
description: Lieferadressen anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Lieferadressen abrufen
|
||
description: |
|
||
Lieferadressen abrufen
|
||
|
||
Permission: `list_delivery_addresses`
|
||
queryParameters:
|
||
adresse:
|
||
description: Suche nach allen Lieferadressen einer bestimmten Hauptadresse
|
||
type: integer
|
||
required: false
|
||
standardlieferadresse:
|
||
description: Ist Standard-Lieferadresse? (0 = Keine Standard-Lieferadresse / 1 = Ist Standard-Lieferadresse)
|
||
type: integer
|
||
required: false
|
||
typ:
|
||
description: |
|
||
Nach bestimmten Adresstyp filtern (genaue Übereinstimmung)
|
||
|
||
Mögliche Werte: Siehe Adresstyp-Endpunkt: [GET /adresstyp](#adresstyp).
|
||
type: string
|
||
required: false
|
||
name:
|
||
description: Suche nach Name (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_equals:
|
||
description: Suche nach Name (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
name_startswith:
|
||
description: Suche nach Name (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
name_endswith:
|
||
description: Suche nach Name (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
land:
|
||
description: Suche nach Lieferadressen aus einem bestimmten Land (zweistelliger ISO-Code)
|
||
type: string
|
||
required: false
|
||
id_ext:
|
||
description: Lieferadresse mit externer ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=plz,-land`)
|
||
|
||
Verfügbare Felder: `typ`, `name`, `plz`, `land`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Lieferadresse anlegen
|
||
description: |
|
||
Lieferadresse anlegen
|
||
|
||
Permission: `create_delivery_address`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
name:
|
||
description: Name der Firma bzw. Person
|
||
required: true
|
||
type: string
|
||
adresse:
|
||
description: ID der Hauptadresse; Die angelegte Lieferadresse wird dieser Hauptadresse zugeordnet.
|
||
required: false
|
||
type: integer
|
||
typ:
|
||
description: Adresstyp; Siehe [Adresstyp-Endpunkt](#adresstyp) Feld `type`.
|
||
required: false
|
||
type: string
|
||
abteilung:
|
||
required: false
|
||
type: string
|
||
strasse:
|
||
required: false
|
||
type: string
|
||
ort:
|
||
required: false
|
||
type: string
|
||
plz:
|
||
required: false
|
||
type: string
|
||
telefon:
|
||
required: false
|
||
type: string
|
||
telefax:
|
||
required: false
|
||
type: string
|
||
email:
|
||
required: false
|
||
type: string
|
||
land:
|
||
description: ISO-Code (ISO-3166 ALPHA 2)
|
||
required: false
|
||
type: string
|
||
standardlieferadresse:
|
||
description: |
|
||
Als Standard-Lieferadresse markieren?
|
||
|
||
(`0` = Keine Standard-Lieferadresse / `1` = Ist Standard-Lieferadresse)
|
||
required: false
|
||
type: integer
|
||
ust_befreit:
|
||
description: |
|
||
Besteuerung
|
||
|
||
(`0` = Inland / `1` = EU-Lieferung / `2` = Export / `3` = Steuerfrei Inland)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"adresse": 5,
|
||
"typ": "herr",
|
||
"name": "Max Mustermann",
|
||
"abteilung": "Musterabteilung",
|
||
"strasse": "Musterweg",
|
||
"ort": "Musterort",
|
||
"plz": "12345",
|
||
"land": "DE",
|
||
"telefon": "0123-456789-9",
|
||
"telefax": "0123-456789-0",
|
||
"email": "max@mustermann.de",
|
||
"standardlieferadresse": 1,
|
||
"ust_befreit": 0
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Lieferadresse wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 23,
|
||
"typ": "herr",
|
||
"name": "Max Mustermann",
|
||
"abteilung": "Musterabteilung",
|
||
"...": "Ausgabe gekürzt",
|
||
"standardlieferadresse": 1,
|
||
"ust_befreit": 0,
|
||
"id_ext": null
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Lieferadresse abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Lieferadressen-ID
|
||
get:
|
||
displayName: Einzelne Lieferadresse abrufen
|
||
description: |
|
||
Einzelne Lieferadresse abrufen
|
||
|
||
Permission: `view_delivery_address`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 1,
|
||
"typ": "herr",
|
||
"name": "Max Mustermann",
|
||
"abteilung": "Musterabteilung",
|
||
"...": "Ausgabe gekürzt",
|
||
"standardlieferadresse": 1,
|
||
"ust_befreit": 0,
|
||
"id_ext": null
|
||
}
|
||
}
|
||
404:
|
||
description: Lieferadresse wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Lieferadresse bearbeiten
|
||
description: |
|
||
Lieferadresse bearbeiten
|
||
|
||
Permission: `edit_delivery_address`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"typ": "firma",
|
||
"name": "Mustermann Gmbh"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Lieferadresse wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 1,
|
||
"typ": "firma",
|
||
"name": "Mustermann Gmbh",
|
||
"abteilung": "Musterabteilung",
|
||
"...": "Ausgabe gekürzt",
|
||
"standardlieferadresse": 1,
|
||
"ust_befreit": 0,
|
||
"id_ext": null
|
||
}
|
||
}
|
||
delete:
|
||
displayName: Lieferadresse löschen
|
||
description: |
|
||
Lieferadresse löschen
|
||
|
||
Permission: `delete_delivery_address`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; ID der gelöschten Lieferadresse wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 1
|
||
}
|
||
}
|
||
|
||
/v1/reports:
|
||
displayName: /v1/reports
|
||
description: Berichte (neues Modul) abrufen
|
||
|
||
/{id}/download:
|
||
description: |
|
||
Einzelnen Bericht per ID herunterladen
|
||
|
||
Permission: `view_report`
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Bericht-ID
|
||
get:
|
||
displayName: Einzelnen Bericht herunterladen
|
||
description: Einzelnen Bericht herunterladen
|
||
queryParameters:
|
||
parameter:
|
||
description: Jeder Parameter, der in der Abfrage des Berichts vorkommt.
|
||
type: any
|
||
required: false
|
||
responses:
|
||
200:
|
||
description: |
|
||
Request erfolgreich
|
||
|
||
Der Content-Type ist abhängig vom Mime-Type des Formats, das im Bericht hinterlegt ist.
|
||
403:
|
||
description: Der Bericht ist nicht für den Zugriff über diesen API Account freigegeben.
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"http_code": 403,
|
||
"message": "Access denied"
|
||
}
|
||
}
|
||
404:
|
||
description: Bericht wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
500:
|
||
description: Der Bericht konnte nicht erstellt werden. Der Bericht ist eventuell fehlerhaft.
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7499,
|
||
"http_code": 500,
|
||
"message": "Unknown server error",
|
||
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7499"
|
||
}
|
||
}
|
||
/v1/steuersaetze:
|
||
description: Steuersätze anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Steuersätze abrufen
|
||
description: |
|
||
Steuersätze abrufen
|
||
|
||
Permission: `list_tax_rates`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Steuersatz mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
satz:
|
||
description: Nach Steuersatz filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
aktiv:
|
||
description: Aktive/Inaktive Steuersätze filtern (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=satz,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `satz`, `aktiv`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Steuersatz anlegen
|
||
description: |
|
||
Steuersatz anlegen
|
||
|
||
Permission: `create_tax_rate`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Bezeichnung des Steuersatzes
|
||
required: true
|
||
type: string
|
||
satz:
|
||
description: Steuersatz in Prozent (ohne Prozentzeichen; Dezimaltrenner = Punkt)
|
||
required: true
|
||
type: string
|
||
aktiv:
|
||
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung": "Steuer DE ermäßigt",
|
||
"satz": "7.00",
|
||
"aktiv": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegter Steuersatz wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "14",
|
||
"bezeichnung": "Steuer DE ermäßigt",
|
||
"satz": "7.00",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelnen Steuersatz abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Steuersatz-ID
|
||
get:
|
||
displayName: Einzelnen Steuersatz abrufen
|
||
description: |
|
||
Einzelnen Steuersatz abrufen
|
||
|
||
Permission: `view_tax_rate`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "1",
|
||
"bezeichnung": "Steuersatz DE normal",
|
||
"country_code": "DE",
|
||
"satz": "19.00",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
404:
|
||
description: Steuersatz wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Steuersatz bearbeiten
|
||
description: |
|
||
Steuersatz bearbeiten
|
||
|
||
Permission: `edit_tax_rates`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Bezeichnung des Steuersatzes
|
||
required: true
|
||
type: string
|
||
country_code:
|
||
description: Ländercode des Steuersatzes
|
||
required: false
|
||
type: string
|
||
satz:
|
||
description: Steuersatz in Prozent (ohne Prozentzeichen; Dezimaltrenner = Punkt)
|
||
required: true
|
||
type: string
|
||
aktiv:
|
||
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"bezeichnung": "Steuer DE normal",
|
||
"satz": "19.00"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierter Steuersatz wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "1",
|
||
"bezeichnung": "Steuer DE normal",
|
||
"country_code": "DE",
|
||
"satz": "19.00",
|
||
"aktiv": "1"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/trackingnummern:
|
||
get:
|
||
displayName: Trackingnummern abrufen
|
||
description: |
|
||
Endpunkt zum Abrufen von Trackingnummern
|
||
|
||
Permission: `list_tracking_numbers`
|
||
queryParameters:
|
||
tracking:
|
||
description: Suche nach bestimmter Trackingnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
tracking_equals:
|
||
description: Suche nach bestimmter Trackingnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
tracking_startswith:
|
||
description: Suche nach bestimmter Trackingnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
tracking_endswith:
|
||
description: Suche nach bestimmter Trackingnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
lieferschein:
|
||
description: Suche nach bestimmter Lieferscheinnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lieferschein_equals:
|
||
description: Suche nach bestimmter Lieferscheinnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
lieferschein_startswith:
|
||
description: Suche nach bestimmter Lieferscheinnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
lieferschein_endswith:
|
||
description: Suche nach bestimmter Lieferscheinnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
auftrag:
|
||
description: Suche nach bestimmter Auftragsnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
auftrag_equals:
|
||
description: Suche nach bestimmter Auftragsnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
auftrag_startswith:
|
||
description: Suche nach bestimmter Auftragsnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
auftrag_endswith:
|
||
description: Suche nach bestimmter Auftragsnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
internet:
|
||
description: Suche nach bestimmter Internetnummer (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
internet_equals:
|
||
description: Suche nach bestimmter Internetnummer (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
internet_startswith:
|
||
description: Suche nach bestimmter Internetnummer (Übereinstimmung am Anfang)
|
||
type: string
|
||
required: false
|
||
internet_endswith:
|
||
description: Suche nach bestimmter Internetnummer (Übereinstimmung am Ende)
|
||
type: string
|
||
required: false
|
||
versandart:
|
||
description: Suche nach bestimmter Versandart (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
versendet_am:
|
||
description: Suche nach bestimmtem Versanddatum (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
versendet_am_gt:
|
||
description: Suche nach bestimmtem Versanddatum (Datum größer Suchwert)
|
||
type: string
|
||
required: false
|
||
versendet_am_gte:
|
||
description: Suche nach bestimmtem Versanddatum (Datum größer gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
versendet_am_lt:
|
||
description: Suche nach bestimmtem Versanddatum (Datum kleiner Suchwert)
|
||
type: string
|
||
required: false
|
||
versendet_am_lte:
|
||
description: Suche nach bestimmtem Versanddatum (Datum kleiner gleich Suchwert)
|
||
type: string
|
||
required: false
|
||
adresse:
|
||
description: Suche nach bestimmter Adress-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
projekt:
|
||
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
land:
|
||
description: Suche nach bestimmtem Ländercode (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=-versendet_am,lieferschein`)
|
||
|
||
Verfügbare Felder: `tracking`, `auftrag`, `lieferschein`, `versandart`, `versendet_am` , `abgeschlossen`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Trackingnummer anlegen
|
||
description: |
|
||
Trackingnummer anlegen
|
||
|
||
Eines der Felder `internet`, `auftrag` oder `lieferschein` muss mindestens gefüllt sein!
|
||
|
||
Permission: `create_tracking_number`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
tracking:
|
||
description: Trackingnummer
|
||
required: true
|
||
type: string
|
||
internet:
|
||
description: Internetnummer aus Auftrag (Pflichtfeld, wenn Auftragsnummer und Lieferscheinnummer leer)
|
||
required: false
|
||
type: string
|
||
auftrag:
|
||
description: Auftragsnummer (Pflichtfeld, wenn Internetnummer und Lieferscheinnummer leer)
|
||
required: false
|
||
type: string
|
||
lieferschein:
|
||
description: Lieferscheinnummer (Pflichtfeld, wenn Auftragsnummer und Internetnummer leer)
|
||
required: false
|
||
type: string
|
||
anzahlpakete:
|
||
description: Anzahl Pakete
|
||
required: true
|
||
type: integer
|
||
gewicht:
|
||
description: Gewicht
|
||
required: true
|
||
type: string
|
||
versendet_am:
|
||
description: Versanddatum im Format `YYYY-MM-DD`
|
||
required: true
|
||
type: string
|
||
example: |
|
||
{
|
||
"tracking": "11223344556677889900",
|
||
"internet": "111001",
|
||
"auftrag": "200001",
|
||
"lieferschein": "300001",
|
||
"anzahlpakete": 1,
|
||
"gewicht": "2 kg",
|
||
"versendet_am": "2019-07-25"
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Trackingnummer wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 8,
|
||
"tracking": "11223344556677889900",
|
||
"adresse": 5,
|
||
"internet": "111001",
|
||
"auftrag": "200001",
|
||
"lieferschein": "300001",
|
||
"projekt": 1,
|
||
"versandart": "versandunternehmen",
|
||
"land": "DE",
|
||
"gewicht": "2 kg",
|
||
"abgeschlossen": 0,
|
||
"versendet_am": "2019-07-25",
|
||
"anzahlpakete": 1,
|
||
"retoure": 0,
|
||
"klaergrund": ""
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Trackingnummer abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Trackingnummer-ID
|
||
get:
|
||
displayName: Einzelne Trackingnummer abrufen
|
||
description: |
|
||
Einzelne Trackingnummer abrufen
|
||
|
||
Permission: `view_tracking_number`
|
||
put:
|
||
displayName: Trackingnummer bearbeiten
|
||
description: |
|
||
Trackingnummer bearbeiten (Felder siehe "Trackingnummer anlegen")
|
||
|
||
Permission: `edit_tracking_number`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"tracking": "11223344556677889900",
|
||
"versendet_am": "2019-06-22",
|
||
"anzahlpakete": 2
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierter Trackingnummern-Eintrag wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 8,
|
||
"tracking": "11223344556677889900",
|
||
"adresse": 5,
|
||
"internet": "111001",
|
||
"auftrag": "200001",
|
||
"lieferschein": "300001",
|
||
"projekt": 1,
|
||
"versandart": "versandunternehmen",
|
||
"land": "DE",
|
||
"gewicht": "2 kg",
|
||
"abgeschlossen": 0,
|
||
"versendet_am": "2019-06-22",
|
||
"anzahlpakete": 2,
|
||
"retoure": 0,
|
||
"klaergrund": ""
|
||
}
|
||
}
|
||
|
||
|
||
/v1/versandarten:
|
||
description: Versandarten anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Versandarten abrufen
|
||
description: |
|
||
Versandarten abrufen
|
||
|
||
Permission: `list_shipping_methods`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Versandart mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_exakt:
|
||
description: Versandart mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
type:
|
||
description: Versandart eines bestimmten Typs suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
type_exakt:
|
||
description: Versandart eines bestimmten Typs suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Versandarten eines Projekts filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
modul:
|
||
description: Versandarten mit bestimmtem Modul filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
aktiv:
|
||
description: Aktive/Inaktive Versandarten filtern (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Versandart anlegen
|
||
description: |
|
||
Versandart anlegen
|
||
|
||
Permission: `create_shipping_method`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Bezeichnung der Versandart
|
||
required: true
|
||
type: string
|
||
type:
|
||
description: Versandart-Typ (einmaliger Wert)
|
||
required: true
|
||
type: string
|
||
projekt:
|
||
description: Projekt
|
||
required: false
|
||
type: integer
|
||
aktiv:
|
||
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"type": "DHL",
|
||
"bezeichnung": "DHL",
|
||
"aktiv": 1,
|
||
"projekt": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Versandart wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "15",
|
||
"type": "DHL",
|
||
"bezeichnung": "DHL",
|
||
"aktiv": "1",
|
||
"projekt": "1",
|
||
"modul": "",
|
||
"paketmarke_drucker": "0",
|
||
"export_drucker": "0",
|
||
"ausprojekt": "1",
|
||
"versandmail": "0",
|
||
"geschaeftsbrief_vorlage": "0"
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Versandart abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Versandarten-ID
|
||
get:
|
||
displayName: Einzelnen Versandart abrufen
|
||
description: |
|
||
Einzelnen Versandart abrufen
|
||
|
||
Permission: `view_shipping_method`
|
||
queryParameters:
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "15",
|
||
"type": "DHL",
|
||
"bezeichnung": "DHL",
|
||
"aktiv": "1",
|
||
"projekt": "1",
|
||
"modul": "",
|
||
"paketmarke_drucker": "0",
|
||
"export_drucker": "0",
|
||
"ausprojekt": "1",
|
||
"versandmail": "0",
|
||
"geschaeftsbrief_vorlage": "0"
|
||
}
|
||
}
|
||
404:
|
||
description: Versandart wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Versandart bearbeiten
|
||
description: |
|
||
Versandart bearbeiten
|
||
|
||
Permission: `edit_shipping_method`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"type": "DHL_Paket",
|
||
"bezeichnung": "DHL Paket",
|
||
"aktiv": "1",
|
||
"projekt": "1"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Versandart wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "15",
|
||
"type": "DHL_Paket",
|
||
"bezeichnung": "DHL Paket",
|
||
"aktiv": "1",
|
||
"projekt": "1",
|
||
"modul": "",
|
||
"paketmarke_drucker": "0",
|
||
"export_drucker": "0",
|
||
"ausprojekt": "1",
|
||
"versandmail": "0",
|
||
"geschaeftsbrief_vorlage": "0"
|
||
}
|
||
}
|
||
|
||
|
||
/v1/wiedervorlagen:
|
||
description: Wiedervorlagen anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Wiedervorlagen abrufen
|
||
description: |
|
||
Wiedervorlagen abrufen
|
||
|
||
Permission: `list_resubmissions`
|
||
queryParameters:
|
||
adresse:
|
||
description: Wiedervorlagen mit bestimmter Address-ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
adresse_mitarbeiter:
|
||
description: Wiedervorlagen filtern die einem bestimmten Mitarbeiter (Address-ID) zugewiesen sind (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bearbeiter:
|
||
description: Wiedervorlagen filtern die einem bestimmten Bearbeiter (Address-ID) zugewiesen sind (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Wiedervorlagen mit bestimmter Projekt-ID filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
stages:
|
||
description: Wiedervorlagen mit bestimmter Stage-ID filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
id_ext:
|
||
description: Wiedervorlage mit externer ID filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=iso,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `datum_angelegt`, `zeit_angelegt`, `datum_erinnerung` , `zeit_erinnerung`,
|
||
`stages`, `prio`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Wiedervorlage anlegen
|
||
description: |
|
||
Wiedervorlage anlegen
|
||
|
||
Permission: `create_resubmission`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
datum_erinnerung:
|
||
description: Fälligkeits-Datum der Wiedervorlage (Format `2019-12-31`)
|
||
required: true
|
||
type: date-only
|
||
zeit_erinnerung:
|
||
description: Fälligkeits-Uhrzeit der Wiedervorlage (Format `23:59:59`)
|
||
required: true
|
||
type: time-only
|
||
datum_angelegt:
|
||
description: Anlage-Datum der Wiedervorlage (Format `2019-12-31`)
|
||
required: false
|
||
type: date-only
|
||
zeit_angelegt:
|
||
description: Anlage-Uhrzeit der Wiedervorlage (Format `23:59:59`)
|
||
required: false
|
||
type: time-only
|
||
bezeichnung:
|
||
description: Kurzbeschreibung
|
||
required: true
|
||
type: string
|
||
beschreibung:
|
||
description: Langbeschreibung
|
||
required: false
|
||
type: string
|
||
bearbeiter:
|
||
description: Address-ID des Bearbeiters
|
||
required: false
|
||
type: integer
|
||
adresse_mitarbeiter:
|
||
description: Address-ID des zuständigen Mitarbeiters
|
||
required: false
|
||
type: integer
|
||
datum_abschluss:
|
||
description: Abschlussdatum der Wiedervorlage (Format `2019-12-31`)
|
||
required: false
|
||
type: date-only
|
||
example: |
|
||
{
|
||
"bearbeiter": 4,
|
||
"bezeichnung": "Blumengießen",
|
||
"beschreibung": "Alle Blumen im Büro gießen",
|
||
"datum_erinnerung": "2019-12-31",
|
||
"zeit_erinnerung": "23:59:59",
|
||
"datum_abschluss": "2020-01-06",
|
||
"adresse_mitarbeiter": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Wiedervorlage wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": 49,
|
||
"adresse": 0,
|
||
"projekt": 0,
|
||
"bezeichnung": "Blumengießen",
|
||
"beschreibung": "Alle Blumen im Büro gießen",
|
||
"bearbeiter": 4,
|
||
"adresse_mitarbeiter": 1,
|
||
"datum_erinnerung": "2019-12-31",
|
||
"zeit_erinnerung": "23:59:59",
|
||
"datum_abschluss": "2020-01-06",
|
||
"oeffentlich": 0,
|
||
"abgeschlossen": 0,
|
||
"prio": 0,
|
||
"stages": 0,
|
||
"color": "",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Wiedervorlage abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Wiedervorlage-ID
|
||
get:
|
||
displayName: Einzelne Wiedervorlage abrufen
|
||
description: |
|
||
Einzelne Wiedervorlage abrufen
|
||
|
||
Permission: `view_resubmission`
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 49,
|
||
"adresse": 1,
|
||
"projekt": 1,
|
||
"bezeichnung": "Blumengießen",
|
||
"beschreibung": "Alle Blumen im Büro gießen",
|
||
"ergebnis": "",
|
||
"betrag": "5.00",
|
||
"erinnerung_per_mail": 0,
|
||
"bearbeiter": 4,
|
||
"adresse_mitarbeiter": 1,
|
||
"datum_angelegt": null,
|
||
"zeit_angelegt": null,
|
||
"datum_erinnerung": "2019-12-31",
|
||
"zeit_erinnerung": "23:59:00",
|
||
"datum_abschluss": "2020-01-06",
|
||
"oeffentlich": 0,
|
||
"abgeschlossen": 1,
|
||
"chance": 100,
|
||
"prio": 0,
|
||
"stages": 2,
|
||
"color": "",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
404:
|
||
description: Wiedervorlage wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Wiedervorlage bearbeiten
|
||
description: |
|
||
Wiedervorlage bearbeiten
|
||
|
||
Permission: `edit_resubmission`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"bearbeiter": 1,
|
||
"bezeichnung": "Blumengießen",
|
||
"datum_erinnerung": "2019-12-31",
|
||
"zeit_erinnerung": "23:59:59"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Wiedervorlage wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": 49,
|
||
"adresse": 1,
|
||
"projekt": 1,
|
||
"bezeichnung": "Blumengießen",
|
||
"beschreibung": "Alle Blumen im Büro gießen",
|
||
"ergebnis": "",
|
||
"betrag": "5.00",
|
||
"erinnerung_per_mail": 0,
|
||
"bearbeiter": 1,
|
||
"adresse_mitarbeiter": 1,
|
||
"datum_angelegt": null,
|
||
"zeit_angelegt": null,
|
||
"datum_erinnerung": "2019-12-31",
|
||
"zeit_erinnerung": "23:59:00",
|
||
"datum_abschluss": "2020-01-06",
|
||
"oeffentlich": 0,
|
||
"abgeschlossen": 1,
|
||
"chance": 100,
|
||
"prio": 0,
|
||
"stages": 2,
|
||
"color": "",
|
||
"id_ext": null
|
||
}
|
||
}
|
||
|
||
|
||
/v1/zahlungsweisen:
|
||
description: Zahlungsweisen anlegen, bearbeiten und abrufen
|
||
get:
|
||
displayName: Zahlungsweisen abrufen
|
||
description: |
|
||
Zahlungsweisen abrufen
|
||
|
||
Permission: `list_payment_methods`
|
||
queryParameters:
|
||
bezeichnung:
|
||
description: Zahlungsweise mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
bezeichnung_exakt:
|
||
description: Zahlungsweise mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
type:
|
||
description: Nach bestimmten Typ filtern (ungefähre Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
type_exakt:
|
||
description: Nach bestimmten Typ filtern (genaue Übereinstimmung)
|
||
type: string
|
||
required: false
|
||
projekt:
|
||
description: Zahlungsweise eines Projekts filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
modul:
|
||
description: Nach bestimmtem Modul filtern (genaue Übereinstimmung)
|
||
type: integer
|
||
required: false
|
||
aktiv:
|
||
description: Aktive/Inaktive Zahlungsweise filtern (1 = aktiv / 0 = inaktiv)
|
||
type: integer
|
||
required: false
|
||
sort:
|
||
description: |
|
||
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
||
|
||
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
||
type: string
|
||
required: false
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
page:
|
||
description: Seitenzahl
|
||
type: integer
|
||
required: false
|
||
default: 1
|
||
maximum: 1000
|
||
items:
|
||
description: Anzahl der Ergebnisse pro Seite
|
||
type: integer
|
||
required: false
|
||
default: 20
|
||
maximum: 1000
|
||
post:
|
||
displayName: Zahlungsweisen anlegen
|
||
description: |
|
||
Zahlungsweisen anlegen
|
||
|
||
Permission: `create_payment_method`
|
||
body:
|
||
application/json:
|
||
properties:
|
||
bezeichnung:
|
||
description: Bezeichnung der Zahlungsweise
|
||
required: true
|
||
type: string
|
||
type:
|
||
description: Zahlungsweise-Typ (einmaliger Wert)
|
||
required: true
|
||
type: string
|
||
verhalten:
|
||
description: Verhalten; Zulässige Werte sind `vorkasse`, `rechnung`, `lastschrift`
|
||
required: false
|
||
type: string
|
||
projekt:
|
||
description: Projekt
|
||
required: false
|
||
type: integer
|
||
aktiv:
|
||
description: Aktiv (`1` = aktiv / `0` = inaktiv)
|
||
required: false
|
||
type: integer
|
||
example: |
|
||
{
|
||
"type": "vorkasse",
|
||
"bezeichnung": "Vorkasse",
|
||
"verhalten": "vorkasse",
|
||
"aktiv": 1,
|
||
"projekt": 1
|
||
}
|
||
responses:
|
||
201:
|
||
description: Request erfolgreich; Angelegte Zahlungsweise wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "10",
|
||
"type": "vorkasse",
|
||
"bezeichnung": "Vorkasse",
|
||
"freitext": "",
|
||
"aktiv": "1",
|
||
"automatischbezahlt": "0",
|
||
"automatischbezahltverbindlichkeit": "0",
|
||
"projekt": "1",
|
||
"vorkasse": "0",
|
||
"verhalten": "vorkasse",
|
||
"modul": ""
|
||
}
|
||
}
|
||
|
||
/{id}:
|
||
description: Einzelne Zahlungsweise abrufen oder bearbeiten
|
||
uriParameters:
|
||
id:
|
||
type: integer
|
||
description: Zahlungsweisen-ID
|
||
get:
|
||
displayName: Einzelnen Zahlungsweise abrufen
|
||
description: |
|
||
Einzelnen Zahlungsweise abrufen
|
||
|
||
Permission: `view_payment_method`
|
||
queryParameters:
|
||
include:
|
||
description: |
|
||
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
||
|
||
Verfügbare Includes: `projekt`
|
||
type: string
|
||
required: false
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"data": {
|
||
"id": "1",
|
||
"type": "vorkasse",
|
||
"bezeichnung": "Vorkasse",
|
||
"freitext": "",
|
||
"aktiv": "1",
|
||
"automatischbezahlt": "0",
|
||
"automatischbezahltverbindlichkeit": "0",
|
||
"projekt": "0",
|
||
"vorkasse": "0",
|
||
"verhalten": "vorkasse",
|
||
"modul": ""
|
||
}
|
||
}
|
||
404:
|
||
description: Zahlungsweise wurde nicht gefunden
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"error": {
|
||
"code": 7452,
|
||
"http_code": 404,
|
||
"message": "Resource not found",
|
||
"href": "http://www.example.com/api/docs.html#error-7452"
|
||
}
|
||
}
|
||
put:
|
||
displayName: Zahlungsweise bearbeiten
|
||
description: |
|
||
Zahlungsweise bearbeiten
|
||
|
||
Permission: `edit_payment_method`
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"type": "lastschrift",
|
||
"bezeichnung": "Lastschrift",
|
||
"aktiv": "1",
|
||
"projekt": "1",
|
||
"verhalten": "lastschrift"
|
||
}
|
||
responses:
|
||
200:
|
||
description: Request erfolgreich; Aktualisierte Zahlungsweise wird zurückgeliefert
|
||
body:
|
||
application/json:
|
||
example: |
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "10",
|
||
"type": "lastschrift",
|
||
"bezeichnung": "Lastschrift",
|
||
"freitext": "",
|
||
"aktiv": "1",
|
||
"automatischbezahlt": "0",
|
||
"automatischbezahltverbindlichkeit": "0",
|
||
"projekt": "1",
|
||
"vorkasse": "0",
|
||
"verhalten": "lastschrift",
|
||
"modul": ""
|
||
}
|
||
}
|
||
|
||
|
||
#types:
|
||
# ZeroValue:
|
||
# description: Zero-value numbers, accepting either 0 or 0.00
|
||
# type: number
|
||
# enum:
|
||
# - 0
|
||
# - 0.00
|
||
# HundredthsValue:
|
||
# description: Non-zero two-decimal place values (positive and negative)
|
||
# type: number
|
||
# multipleOf: 0.01
|
||
# decimal:
|
||
# description: this type describes any monetary value comprised between -9,999,999,999,999.99 and 9,999,999,999,999.99
|
||
# type: ZeroValue | HundredthsValue
|
||
# default: 0.00
|
||
# minimum: -9999999999999.99
|
||
# maximum: 9999999999999.99
|
||
# examples:
|
||
# zero: 0
|
||
# zerozero: 0.00
|
||
# tenten: 10.10
|
||
# negative: -0.10
|