REST-Service

Unter der URL https://my.living-apps.de/rest/ ist eine REST-Schnittstelle zugänglich, die Ihnen über HTTP ermöglicht, Daten aus Ihren LivingApps abzurufen, neue Datensätze zu erzeugen, sowie vorhandene Datensätze zu ändern, oder zu löschen.

Autorisierung

Um die REST-Schnittstelle benutzen zu können, benötigen Sie einen Login-Token, den Sie unter Konfiguration ‣ Erweitert bei Account ‣ Login-Token anlegen können.

Login-Token

Login-Token anlegen, neu vergeben, oder löschen

Dieser Login-Token gewährt Ihren HTTP-Anfragen auf die REST-Schnittstelle dieselben Zugriffsrechte, die Sie als Benutzer auch haben.

In obigem Beispiel ist der Login-Token folgender Text:

6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI

Diesen Login-Token müssen Sie bei allen HTTP-Anfragen an die REST-Schnittstelle im Authorization-Header mitgeben und zwar folgendermaßen:

Authorization: Bearer 6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI

D.h. wenn Sie die Liste Ihrer LivingApps abrufen wollen, geht das beispielsweise mit curl folgendermaßen:

$ curl -s -X 'GET' \
   'https://my.living-apps.de/rest/apps' \
   -H 'accept: application/json' \
   -H 'Authorization: Bearer 6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI'

Falls Sie requests in Python verwenden, geht das folgendermaßen:

Python 3.13.2 (main, Feb  4 2025, 14:51:09) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> response.json()
...

Verfügbare Endpoints

GET https://my.living-apps.de/rest/apps

Gibt Informationen über alle Ihre LivingApps zurück.

GET https://my.living-apps.de/rest/apps/{app_id}

Gibt Informationen über die LivingApp mit der ID {app_id} zurück.

GET https://my.living-apps.de/rest/apps/{app_id}/records

Gibt Informationen über die Datensätze der LivingApp mit der ID {app_id} zurück.

POST https://my.living-apps.de/rest/apps/{app_id}/records

Legt in der LivingApp mit der ID {app_id} einen neuen Datensatz an.

GET https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}

Gibt Informationen über den Datensatz mit der ID {record_id} in der LivingApp mit der ID {app_id} zurück.

PUT https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}

Ändert den Datensatz mit der ID {record_id} in der LivingApp mit der ID {app_id}. Nicht übergebene Feldwerte werden auf „leer“ gesetzt.

PATCH https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}

Ändert den Datensatz mit der ID {record_id} in der LivingApp mit der ID {app_id}. Nicht übergebene Feldwerte werden nicht geändert.

DELETE https://my.living-apps.de/rest/apps/{app_id}/records/{record_id}

Löscht den Datensatz mit der ID {record_id} in der LivingApp mit der ID {app_id}.

POST https://my.living-apps.de/rest/files

Löscht den Datensatz mit der ID {record_id} in der LivingApp mit der ID {app_id}.

Unter https://my.living-apps.de/rest/docs finden Sie eine Liste dieser verfügbaren Endpoints und eine Erklärung der unterstützen Parameter.

Fehlermeldungen

Folgende Fehlermeldungen können bei der Verwendung des REST-Services auftreten:

„Bearer“-Token ungültig (bearer-token-invalid)

Der im Authorization-Header bei der HTTP-Abfrage übergebene Login-Token ist ungültig.

Beispiel:

>>> import pprint, requests
>>> login_token = "falsch"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> pprint.pprint(response.json())
{'detail': 'Bearer token is invalid.',
 'status': 401,
 'title': 'Unauthorized access',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-bearer-token-invalid'}

„Basic“-Autorisierung ungültig (basic-auth-invalid)

Es ist auch möglich sich mittels „Basic“-Autorisierung (also über Benutzername und Passwort) zu autorisieren. Dieser Fehler tritt auf, wenn Benutzername oder Passwort ungültig sind.

Beispiel:

>>> import pprint, requests
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...     },
...     auth=("user@example.org", "falsch"),
... )
>>> pprint.pprint(response.json())
{'detail': 'Basic authentication credentials are invalid.',
 'status': 401,
 'title': 'Unauthorized access',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-bascic-auth-ivalid'}

Authorization-Header fehlt (authorization-missing)

Der Authorization-Header wurde bei der HTTP-Abfrage gar nicht mitgesendet.

Beispiel:

>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...     },
... )
>>> pprint.pprint(response.json())
{'detail': 'Header `Authorization` is missing.',
 'status': 401,
 'title': 'Unauthorized access',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-authorization-missing'}

Autorisierung ungültig (authorization-invalid)

Der bei der HTTP-Abfrage gesendete Authorization-Header enthält weder eine „Basic“-Autorisierung noch eine „Bearer“-Autorisierung.

Beispiel:

>>> import pprint, requests
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": "falsch",
...     },
... )
>>> pprint.pprint(response.json())
{'detail': 'Header `Authorization` contains neither `Basic` nor `Bearer`.',
 'status': 401,
 'title': 'Unauthorized access',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-authorization-invalid'}

LivingApp unbekannt (unknown-app)

Die bei der HTTP-Abfrage gesendete LivingApp-ID ist ungültig.

Beispiel:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/000000000000000000000000",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '000000000000000000000000',
 'detail': 'The LivingApp specified via `app_id` does not exist.',
 'status': 404,
 'title': 'LivingApp not found',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-unknown-app'}

Keine Zugriffrechte auf LivingApp (no-app-permission)

Der bei der HTTP-Abfrage übergebene Benutzer hat nicht die nötigen Zugriffrechte auf der spezifizierten LivingApp.

Beispiel:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/680a201a8f45887b855d1b99",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a201a8f45887b855d1b99',
 'detail': 'You don't have permission to access the LivingApp specified via `app_id`.',
 'status': 403,
 'title': 'LivingApp not accessible',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-no-app-permission'}

Keine Rechte zum Erzeugen einer LivingApp (no-permission-app-creation)

Der bei der HTTP-Abfrage übergebene Benutzer hat nicht die nötigen Rechte, um einen neue LivingApp anzulegen.

Beispiel:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "name": "My App",
...         "description": "My new App",
...         "gramgen": "m",
...         "typename_nom_sin": "Test",
...         "typename_gen_sin": "Test",
...         "typename_dat_sin": "Test",
...         "typename_acc_sin": "Test",
...         "typename_nom_plu": "Test",
...         "typename_gen_plu": "Test",
...         "typename_dat_plu": "Test",
...         "typename_acc_plu": "Test",
...         "controls": {
...             "my_string": {"label": "My_string", "fulltype": "string/text", "description": "My description"},
...             "my_number": {"label": "My Number", "fulltype": "number", "required": True},
...         },
...     }
... )
>>> pprint.pprint(response.json())
{'detail': 'You don't have permission to create a new LivingApp.',
 'status': 403,
 'title': 'No permission to create a new LivingApp',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_no_permission_app_creation'}

Datensatz nicht gefunden (record-not-found)

Der Datensatz mit der bei der HTTP-Abfrage übergebenen ID existiert nicht in der spezifizierten LivingApp (oder Sie haben in dieser LivingApp nur das Recht, die Ihnen zugewiesenen Datensätze zu sehen, und der spezifizierte Datensatz gehört nicht dazu).

Beispiel:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/680a23234731c68fdf429d23/records/000000000000000000000000",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a23234731c68fdf429d23',
 'detail': 'The record specified via `record_id` does not exist in the '
           'LivingApp specified via `app_id` (or is not accessible).',
 'record_id': '000000000000000000000000',
 'status': 404,
 'title': 'Record not found',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-record-not-found'}

Feld nicht gefunden (field-not-found)

Der Feld-Identifizierer, der bei der HTTP-Abfrage zum Anlegen oder Ändern von Datensätzen übergeben wurde, existiert nicht in der spezifizierten LivingApp.

Beispiel:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps/680a23234731c68fdf429d23/records",
...     headers={
...         "Accept" : "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "fields": {
...             "falsch": 42,
...         },
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '680a23234731c68fdf429d23',
 'control_identifier': 'falsch',
 'detail': 'The field with the identifier in `control_identifier` does not '
           'exist in the LivingApp specified via `app_id`.',
 'status': 400,
 'title': 'Field identifier not found',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-field-not-found'}

Ungültiger Feld-Wert (illegal-field-value)

Der Feld-Wert, der bei der HTTP-Abfrage zum Anlegen oder Ändern von Datensätzen übergeben wurde, ist für diesen Feld-Typ ungültig, d.h. er hat den falschen Typ oder einen ungültigen Wert.

Beispiele:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "fields": {
...             "nachname": 42,
...         },
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '5bffc841c26a4b5902b2278c',
 'control_identifier': 'nachname',
 'control_type': 'string',
 'detail': 'The given value must be `None` or of type `str`, but is of type '
           '`int`.',
 'field_type': 'int',
 'field_value': '42',
 'status': 400,
 'title': 'Unsupported field value',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-illegal-field-value'}
>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "fields": {
...             "geburtsdatum": "2000",
...         },
...     },
... )
>>> pprint.pprint(response.json())
{'app_id': '5bffc841c26a4b5902b2278c',
 'control_identifier': 'geburtsdatum',
 'control_type': 'date/date',
 'detail': 'The given `date/date` value must conform to the format `%Y-%m-%d`, '
           "but it doesn't.",
 'field_type': 'str',
 'field_value': "'2000'",
 'status': 400,
 'title': 'Unsupported field value',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-illegal-field-value'}

Ungültiger Ziel-Applikation (invalid-target-app)

Der Wert, der bei Anlegen einer App für ein App-Lookup-Feld als Parameter lookup_app angegeben wurde ist ungültig.

Dies kann beispielsweise sein, wenn None übergeben wurde:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "name": "My App",
...         "description": "My new App",
...         "gramgen": "m",
...         "typename_nom_sin": "Test",
...         "typename_gen_sin": "Test",
...         "typename_dat_sin": "Test",
...         "typename_acc_sin": "Test",
...         "typename_nom_plu": "Test",
...         "typename_gen_plu": "Test",
...         "typename_dat_plu": "Test",
...         "typename_acc_plu": "Test",
...         "controls": {
...             "my_applookupselect": {"label": "my_applookupselect", "fulltype": "applookup/select", "lookup_app": None},
...         },
...     }
... )
>>> pprint.pprint(response.json())
{'detail': '`lookup_app` is missing or empty',
 'status': 400,
 'title': 'Invalid target app',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_invalid_target_app'}

Oder auch wenn die URL nicht mit der Basis-URL übereinstimmt:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.post(
...     "https://my.living-apps.de/rest/apps",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     json={
...         "name": "My App",
...         "description": "My new App",
...         "gramgen": "m",
...         "typename_nom_sin": "Test",
...         "typename_gen_sin": "Test",
...         "typename_dat_sin": "Test",
...         "typename_acc_sin": "Test",
...         "typename_nom_plu": "Test",
...         "typename_gen_plu": "Test",
...         "typename_dat_plu": "Test",
...         "typename_acc_plu": "Test",
...         "controls": {
...             "my_multipleapplookupselect": {"label": "my_multipleapplookupselect", "fulltype": "multipleapplookup/select", "lookup_app": "https://www.example.com"},
...         },
...     }
... )
>>> pprint.pprint(response.json())
{'detail': 'The given `lookup_app` value must be a valid URL for a target LivingApp, so it must start with `https://my.living-apps.de/rest/apps/`, but it doesn't.',
 'status': 400,
 'title': 'Invalid target app',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la_erw_rest_service_error_invalid_target_app'}

Ungültiger vSQL-Ausdruck (invalid-vsql-expression)

Der vSQL-Ausdruck, der bei der HTTP-Abfrage, die alle Datensätze einer LivingApp zurückliefert, als Parameter filter oder orderby übergeben wurde, ist ungültig.

Dies kann beispielsweise sein, weil eine ungültige Syntax verwendet wurde:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept" : "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     params={
...         "filter": "now() >= ++x",
...     },
... )
>>> pprint.pprint(response.json())
{'detail': 'The vSQL expression `now() >= ++x` is invalid',
 'exception': 'antlr3.exceptions.NoViableAltException: '
              "NoViableAltException(38!=[''])",
 'expression': 'now() >= ++x',
 'status': 400,
 'title': 'Invalid vSQL expression',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}

oder weil ein Feld angegeben wird, das nicht existiert:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept" : "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     params={
...         "filter": "r.v_falsch.startswith('prefix')",
...     },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'The attribute name `v_falsch` is unknown.',
           'expression': 'r.v_falsch',
           'operation': 'Attribute access operation (`A.name`)'},
 'context': 'where',
 'detail': "The `where` vSQL expression `r.v_falsch.startswith('prefix')` is "
           'invalid',
 'exception': 'll.la.vsql.VSQLUnknownNameError',
 'root': {'expression': "r.v_falsch.startswith('prefix')",
          'operation': 'Method call (`A.name(B, ...)`)'},
 'status': 400,
 'title': 'Invalid vSQL expression',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}

oder weil ein nicht existierendes Attribut verwendet wird:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept" : "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     params={
...         "filter": "r.v_geburtstag.year >= today().falsch",
...     },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'The attribute name `falsch` is unknown.',
           'expression': 'today().falsch',
           'operation': 'Attribute access operation (`A.name`)'},
 'context': 'where',
 'detail': 'The `where` vSQL expression `r.v_geburtstag.year >= '
           'today().falsch` is invalid',
 'exception': 'll.la.vsql.VSQLUnknownNameError',
 'root': {'expression': 'r.v_geburtstag.year >= today().falsch',
          'operation': 'Greater-than or equal comparison (`A >= B`)'},
 'status': 400,
 'title': 'Invalid vSQL expression',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}

oder weil eine Funktion mit den falschen Argumenten aufgerufen wird:

>>> import pprint, requests
>>> login_token = "6809fb00tDfPWbTVNvyeGxFQSFvNYSPTwZybcEQTBsSeMLwVeYZauwSKrEuuvxjqcdqygkoPoQJTJClxdUnSPhenetVXBzJeWI"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/5bffc841c26a4b5902b2278c/records",
...     headers={
...         "Accept" : "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
...     params={
...         "filter": "r.v_geburtstag >= >= date(2000, 2, False)",
...     },
... )
>>> pprint.pprint(response.json())
{'cause': {'detail': 'Type combination `INT`, `INT`, `BOOL` is not supported.',
           'expression': 'date(2000, 2, False)',
           'operation': 'Function call (`name(A, ...)`)'},
 'context': 'where',
 'detail': 'The `where` vSQL expression `r.v_geburtstag >= date(2000, 2, '
           'False)` is invalid',
 'exception': 'll.la.vsql.VSQLSubnodeTypesError',
 'root': {'expression': 'r.v_geburtstag >= date(2000, 2, False)',
          'operation': 'Greater-than or equal comparison (`A >= B`)'},
 'status': 400,
 'title': 'Invalid vSQL expression',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-invalid-vsql-expression'}

Request-Parameter ungültig (request-validation-failed)

Dieser Fehler tritt dann auf, wenn Parameter bei der HTTP-Abfrage ein ungültiges Format haben, also beispielsweise, wenn eine App- oder Datensatz-ID nicht dem vorgeschriebenen Format entspricht.

Beispiel:

>>> login_token = "680a032bdtUrdhiMqYLfCRtAiVLMXxmQuKdvpPSBDGuTGsDpdliRYMGaKYoBOxNYDynSxANtfGyJJwpMGtevJtqEiRwDMfZGFh"
>>> response = requests.get(
...     "https://my.living-apps.de/rest/apps/falsch",
...     headers={
...         "Accept": "application/json",
...         "Authorization": f"Bearer {login_token}",
...     },
... )
>>> pprint.pprint(response.json())
{'errors': [{'ctx': {'pattern': '^[0-9a-f]{24,}$'},
             'input': 'falsch',
             'loc': ['path', 'app_id'],
             'msg': "String should match pattern '^[0-9a-f]{24,}$'",
             'type': 'string_pattern_mismatch'}],
 'status': 422,
 'title': 'Request validation error.',
 'type': 'https://my.living-apps.de/docs/REST-Service.html#la-erw-rest-service-error-request-validation-failed'}

Interne Fehlermeldungen

Die folgenden Fehlermeldungen sind interne Fehler, die bei der normalen Verwendung des REST-Services nicht auftreten können (aber hier trotzdem der Vollständigheit halber aufgeführt werden).

Sollte einer dieser Fehler bei Ihnen auftreten, so wenden Sie sich bitte an LivingLogic.

Unbekannter Benutzer (unknown-user)

Bei der Verwendung einer internen API konnte der Benutzer nicht bestimmt werden.

„Bearer“-Token fehlt (bearer-token-missing)

Bei der Verwendung einer internen API konnte der „Bearer“-Token nicht gefunden werden.

Datensatz konnte nicht angelegt werden (record-not-created)

Ein interner Datenbank-Fehler ist während das Anlegens eines Datensatzes aufgetreten.

Datensatz konnte nicht geändert werden (record-not-updated)

Ein interner Datenbank-Fehler ist während das Ändern eines Datensatzes aufgetreten.

Datensatz konnte nicht gelöscht werden (record-not-deleted)

Ein interner Datenbank-Fehler ist während das Löschens eines Datensatzes aufgetreten.