KASSA.AT API-Dokumentation

Die KASSA.AT API ermöglicht die Integration von Kassendaten in externe Systeme. Alle Endpunkte sind unter der folgenden Basis-URL erreichbar:

BASE URL
https://<company_dns>.kassa.at/api/v1/

<company_dns> ist der individuelle DNS-Name Ihrer Firma.

Authentifizierung

Alle API-Aufrufe benötigen einen Bearer Token im Authorization-Header:

HEADER
Authorization: <api_token>
Content-Type: application/json

Globale Fehler

Diese Fehler können bei jedem Aufruf auftreten.

HTTP StatusBedeutung
400Bad Request — Parametervalidierung fehlgeschlagen
401Unauthorized — Kein oder falscher Token / falsche Subdomain
429Too Many Requests — Rate Limit überschritten

400 Bad Request (Parametervalidierung fehlgeschlagen)

Die error_codes stammen aus der 1000er Reihe. Mehrere Fehler werden kommagetrennt im details-Array zurückgegeben.

400 Bad Request
JSON
{
  "status": 400,
  "error_code": 1000,
  "error": "Parametervalidation failed!",
  "details": [
    {
      "error_code": 1003,
      "error": "Parameter is not set!",
      "error_message": "Parameter 'username' is not set!"
    },
    {
      "error_code": 1004,
      "error": "Parameter is not set!",
      "error_message": "Parameter 'password' is not set!"
    }
  ]
}

401 Unauthorized (Kein Token übermittelt)

401 Unauthorized
JSON
{
  "status": 401,
  "error_code": 2009,
  "error": "Unauthorized!",
  "details": [
    {
      "error_code": 2003,
      "error": "Unauthorized!",
      "error_message": "No token given!"
    }
  ]
}

401 Unauthorized (Falscher Token übermittelt)

401 Unauthorized
JSON
{
  "status": 401,
  "error_code": 2009,
  "error": "Unauthorized!",
  "details": [
    {
      "error_code": 2004,
      "error": "Unauthorized!",
      "error_message": "Token is invalid!"
    }
  ]
}

401 Unauthorized (Falsche oder keine Subdomain)

Jeder Aufruf (ausgenommen Tokenerstellung und Companyerstellung) benötigt eine Subdomain. Sollte keine oder eine falsche Subdomain übergeben werden, wird dieser Fehler zurückgegeben.

401 Unauthorized
JSON
{
  "status": 401,
  "error_code": 2001,
  "error": "Company missing!",
  "details": [
    {
      "error_code": 2001,
      "error": "Company missing!",
      "error_message": "No company in subdomain!"
    }
  ]
}

/authentications

Die authentication-Aufrufe sind zur Erstellung von API-Tokens.

2.1.1 /create

POST https://api.kassa.at/api/v1/authentications/
ParameterTypPflichtBeschreibung
company_dnsstringPflichtDNS-Name der Firma (3–32 Zeichen)
usernamestringPflichtBenutzername des Administrators (3–64 Zeichen)
passwordstringPflichtPasswort (8–72 Zeichen)
descriptionstringOptionalBeschreibung für diesen Token
CURL
curl -X POST https://api.kassa.at/api/v1/authentications/ \
  -H 'Content-Type: application/json' \
  -d '{"company_dns":"meinefirma","username":"admin","password":"meinpasswort","description":"System XY"}'
200 OK
JSON
{"status":200,"data":[{"token":"224ac7a5-d4cc8055a2fe479b","description":"System XY","company":"meinefirma"}]}

2.1.2 /authenticate

2.1.2.1 Login via Weiterleitung

Dieser Aufruf ist der Einzige, der mit Views arbeitet. Im Falle, dass die Login-Daten nicht auf einer externen Seite eingegeben werden sollen, steht Ihnen folgende Methode zur Verfügung:

Erstellen Sie ein Formular, das den User auf unsere Webseite leitet. Dort gibt der User seine Login-Daten ein und der Token wird generiert. Der User wird dann mit dem Token zurück zu Ihrem Service geschickt, wo der Token schließlich von Ihnen ausgelesen werden kann.
GET https://api.kassa.at/api/v1/authentications/authenticate

Parameter

ParameterTypPflichtBeschreibung
return_path string Pflicht URL, die nach dem Login und Token-Erstellen aufgerufen werden soll.
description string Optional Zuordnungsbeschreibung, z. B. der Name eines Programmes das die API nutzt. Frei wählbarer String, kürzer als 250 Zeichen.

Beispiel HTML-Formular

HTML
<form action="https://api.kassa.at/api/v1/authentications/authenticate" method="get">
  <input name="return_path" type="hidden" value="https://foo-bar.at/receive-token">
  <input name="description" type="hidden" value="System XY">
  <button type="submit" name="Submit">Verbinden</button>
</form>

Nachdem der Token von unserer Seite aus erstellt wurde, wird der User an die zuvor im Parameter return_path spezifizierte Seite weitergeleitet. Auf dieser Seite muss dann der Token aus den mitgelieferten Parametern extrahiert werden.

Bezogen auf den oberen HTML-Snippet schaut der endgültige Link, auf den am Ende gewechselt wird, so aus:

URL
https://foo-bar.at/receive-token?key=4fa3d741-ab62f0a3d5c79e11

/companies

2.2.1 /create

POST https://api.kassa.at/api/v1/companies/
ParameterTypPflichtBeschreibung
companystringPflichtName der Firma (<64 Zeichen)
company_dnsstringPflichtGewünschter DNS-Name (3–32 Zeichen)
usernamestringPflichtAdmin-Benutzername
passwordstringPflichtPasswort (8–72 Zeichen)
emailstringPflichtE-Mail-Adresse (<64 Zeichen, gültiges Format)
silentboolOptionalKeine Bestätigungs-E-Mail senden. Werte: true, false
CURL
curl -X POST https://api.kassa.at/api/v1/companies/ \
  -H 'Content-Type: application/json' \
  -d '{"company":"Meine Firma GmbH","company_dns":"meinefirma","username":"admin","password":"meinpasswort","email":"admin@meinefirma.at"}'
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "company_dns": "meinefirma",
      "company": "Meine Firma GmbH"
    }
  ]
}

2.2.2 /determine_dns_name

GET https://api.kassa.at/api/v1/companies/determine_dns_name

Gibt einen verfügbaren DNS-Vorschlag basierend auf dem Firmennamen zurück.

ParameterTypPflichtBeschreibung
companystringPflichtFirmenname, für den ein DNS-Vorschlag generiert werden soll
CURL
curl -X GET 'https://api.kassa.at/api/v1/companies/determine_dns_name?company=Meine+Firma+GmbH'
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "company_dns": "meinefirmagmbh"
    }
  ]
}

/articles

2.3.1 /index

GET https://<company_dns>.kassa.at/api/v1/articles
Hinweis zur Pagination: Dieser Endpunkt gibt maximal 1.000 Einträge pro Anfrage zurück. Um alle Datensätze abzurufen, muss mit pagination_limit und pagination_page seitenweise iteriert werden.
ParameterTypPflichtBeschreibung
pagination_limitintOptionalEinträge pro Seite. Maximum: 1.000. Ohne Angabe werden maximal 1.000 Einträge zurückgegeben.
pagination_pageintOptionalSeitennummer (beginnt bei 1)
querystringOptionalVolltext-Suche
sortstringOptionalSortierfeld und Richtung
fieldsstringOptionalKommagetrennte Feldliste für Rückgabe (z. B. id,line_item_name,article_number)
filter_idstringOptionalFilter nach interner ID
filter_company_article_idstringOptionalFilter nach firmeninterner Artikel-ID
filter_line_item_namestringOptionalFilter nach Artikelname
filter_article_numberstringOptionalFilter nach Artikelnummer
filter_bar_codestringOptionalFilter nach Barcode 1
filter_bar_code_2stringOptionalFilter nach Barcode 2
filter_product_namestringOptionalFilter nach Produktname
filter_product_typestringOptionalFilter nach Produkttyp
filter_brandstringOptionalFilter nach Marke
filter_manufacturerstringOptionalFilter nach Hersteller
filter_supplier_article_numberstringOptionalFilter nach Lieferantenartikelnummer
filter_product_descriptionstringOptionalFilter nach Produktbeschreibung
filter_attributestringOptionalFilter über alle Attributfelder (attribute1–5)
filter_variant_descriptionstringOptionalFilter nach Variantenbeschreibung
filter_unitstringOptionalFilter nach Einheit
filter_default_quantitystringOptionalFilter nach Standardmenge
filter_gross_amount_per_itemstringOptionalFilter nach Bruttopreis
filter_sales_tax_percentagestringOptionalFilter nach Steuersatz
filter_favouriteboolOptionalNur Favoriten (true) oder nicht-Favoriten (false)
filter_foodboolOptionalNur Speisen (true) oder nicht (false)
filter_drinkboolOptionalNur Getränke (true) oder nicht (false)
filter_product_category_idstringOptionalFilter nach Kategorie-ID
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 1,
      "line_item_name": "Testartikel",
      "article_number": "ART001",
      "gross_amount_per_item": "9.99",
      "sales_tax_percentage": "20.0",
      "default_quantity": "1.0",
      "unit": "Stk",
      "bar_code": null,
      "bar_code_2": null,
      "favourite": false,
      "food": false,
      "drink": false
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2.3.2 /create

POST https://<company_dns>.kassa.at/api/v1/articles
ParameterTypPflichtBeschreibung
line_item_namestringPflichtArtikelname (<250 Zeichen)
gross_amount_per_itemfloatPflichtBruttopreis
sales_tax_percentagefloatPflichtSteuersatz: 0, 10, 13, 20
default_quantityfloatPflichtStandardmenge
article_numberstringOptionalArtikelnummer
unitstringOptionalEinheit (z. B. Stk, kg)
bar_codestringOptionalBarcode 1
bar_code_2stringOptionalBarcode 2
product_namestringOptionalProduktname (für Anzeige)
product_typestringOptionalProdukttyp
brandstringOptionalMarke
manufacturerstringOptionalHersteller
supplier_article_numberstringOptionalLieferantenartikelnummer
product_descriptionstringOptionalProduktbeschreibung
attribute1stringOptionalAttributfeld 1
attribute2stringOptionalAttributfeld 2
attribute3stringOptionalAttributfeld 3
attribute4stringOptionalAttributfeld 4
attribute5stringOptionalAttributfeld 5
variant_descriptionstringOptionalVariantenbeschreibung
favouriteboolOptionalAls Favorit markieren (true/false)
foodboolOptionalAls Speise kennzeichnen (true/false)
drinkboolOptionalAls Getränk kennzeichnen (true/false)
manual_gross_amount_entryboolOptionalPreis manuell eingeben (true/false)
manual_quantity_entryboolOptionalMenge manuell eingeben (true/false)
print_price_per_kgboolOptionalPreis pro kg drucken (true/false)
print_pickup_numberboolOptionalAbholnummer drucken (true/false)
product_category_idstringOptionalKommagetrennte Kategorie-IDs
201 Created
JSON
{
  "status": 201,
  "data": [
    {
      "id": 42,
      "line_item_name": "Testartikel",
      "article_number": "ART001",
      "gross_amount_per_item": "9.99",
      "sales_tax_percentage": "20.0",
      "default_quantity": "1.0",
      "unit": "Stk"
    }
  ]
}

2.3.3 /delete

DELETE https://<company_dns>.kassa.at/api/v1/articles/<id>
200 OK
JSON
{"status": 200, "data": []}

2.3.4 /update

PATCH https://<company_dns>.kassa.at/api/v1/articles/<id>

Aktualisiert einen Artikel. Alle Parameter aus /create können optional übergeben werden. Nur geänderte Felder müssen übermittelt werden.

200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 42,
      "line_item_name": "Testartikel (aktualisiert)",
      "gross_amount_per_item": "12.99",
      "sales_tax_percentage": "20.0",
      "default_quantity": "1.0"
    }
  ]
}

2.3.5 /product_categories

GET https://<company_dns>.kassa.at/api/v1/articles/<id>/product_categories
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 3,
      "name": "Getränke",
      "color": "#29ABE2"
    }
  ]
}

/customers

2.4.1 /index

GEThttps://<company_dns>.kassa.at/api/v1/customers
Hinweis zur Pagination: Dieser Endpunkt gibt maximal 1.000 Einträge pro Anfrage zurück. Um alle Datensätze abzurufen, muss mit pagination_limit und pagination_page seitenweise iteriert werden.
ParameterTypPflichtBeschreibung
pagination_limitintOptionalEinträge pro Seite. Maximum: 1.000. Ohne Angabe werden maximal 1.000 Einträge zurückgegeben.
pagination_pageintOptionalSeitennummer (beginnt bei 1)
querystringOptionalVolltext-Suche
sortstringOptionalSortierfeld und Richtung
fieldsstringOptionalKommagetrennte Feldliste für Rückgabe
filter_idstringOptionalFilter nach interner ID
filter_company_customer_idstringOptionalFilter nach firmeninterner Kunden-ID
filter_customer_numberstringOptionalFilter nach Kundennummer
filter_company_namestringOptionalFilter nach Firmenname
filter_first_namestringOptionalFilter nach Vorname
filter_last_namestringOptionalFilter nach Nachname
filter_addressstringOptionalFilter nach Adresse
filter_citystringOptionalFilter nach Stadt
filter_zipstringOptionalFilter nach PLZ
filter_countrystringOptionalFilter nach Land
filter_phone_numberstringOptionalFilter nach Telefonnummer
filter_fax_numberstringOptionalFilter nach Faxnummer
filter_emailstringOptionalFilter nach E-Mail
filter_uidstringOptionalFilter nach UID-Nummer
filter_tax_numberstringOptionalFilter nach Steuernummer
filter_noticestringOptionalFilter über alle Notizfelder (notice_1–3)
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 7,
      "customer_number": "K-0001",
      "company_name": "Musterfirma GmbH",
      "first_name": "Max",
      "last_name": "Mustermann",
      "address": "Musterstraße 1",
      "city": "Wien",
      "zip": "1010",
      "country": "Österreich",
      "phone_number": "+43 1 234567",
      "email": "max@musterfirma.at",
      "deleted": false
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2.4.2 /create

POSThttps://<company_dns>.kassa.at/api/v1/customers

Alle Parameter sind optional — mindestens ein Pflichtfeld muss jedoch angegeben werden.

ParameterTypPflichtBeschreibung
company_namestringOptionalFirmenname des Kunden
first_namestringOptionalVorname
last_namestringOptionalNachname
addressstringOptionalStraße und Hausnummer
citystringOptionalStadt
zipstringOptionalPostleitzahl
countrystringOptionalLand
phone_numberstringOptionalTelefonnummer
fax_numberstringOptionalFaxnummer
emailstringOptionalE-Mail-Adresse
uidstringOptionalUID-Nummer
tax_numberstringOptionalSteuernummer
customer_numberstringOptionalKundennummer
notice_1stringOptionalNotizfeld 1
notice_2stringOptionalNotizfeld 2
notice_3stringOptionalNotizfeld 3
201 Created
JSON
{
  "status": 201,
  "data": [
    {
      "id": 7,
      "customer_number": "K-0001",
      "first_name": "Max",
      "last_name": "Mustermann",
      "email": "max@musterfirma.at"
    }
  ]
}

2.4.3 /update

PATCHhttps://<company_dns>.kassa.at/api/v1/customers/<id>

Alle Felder aus /create können optional übergeben werden — nur geänderte Felder müssen übermittelt werden.

ParameterTypPflichtBeschreibung
idintPflichtInterne Kunden-ID (in URL)
company_namestringOptionalFirmenname
first_namestringOptionalVorname
last_namestringOptionalNachname
addressstringOptionalStraße und Hausnummer
citystringOptionalStadt
zipstringOptionalPostleitzahl
countrystringOptionalLand
phone_numberstringOptionalTelefonnummer
fax_numberstringOptionalFaxnummer
emailstringOptionalE-Mail-Adresse
uidstringOptionalUID-Nummer
tax_numberstringOptionalSteuernummer
customer_numberstringOptionalKundennummer
notice_1stringOptionalNotizfeld 1
notice_2stringOptionalNotizfeld 2
notice_3stringOptionalNotizfeld 3
200 OK
JSON
{"status": 200, "data": []}

2.4.4 /delete

DELETEhttps://<company_dns>.kassa.at/api/v1/customers/<id>

Setzt das deleted-Flag des Kunden auf true.

200 OK
JSON
{"status": 200, "data": []}

2.4.5 /customer_number

GEThttps://<company_dns>.kassa.at/api/v1/customers/customer_number
ParameterTypPflichtBeschreibung
customer_numberstringPflichtKundennummer nach der gesucht wird
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 7,
      "customer_number": "K-0001",
      "first_name": "Max",
      "last_name": "Mustermann"
    }
  ]
}

2.4.6 /addresses

GEThttps://<company_dns>.kassa.at/api/v1/customers/<id>/addresses

Gibt Adressfelder (address, city, zip, country) des Kunden zurück.

200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "address": "Musterstraße 1",
      "city": "Wien",
      "zip": "1010",
      "country": "Österreich"
    }
  ]
}

2.4.7 /contacts

GEThttps://<company_dns>.kassa.at/api/v1/customers/<id>/contacts

Gibt Kontaktfelder (company_name, first_name, last_name, phone_number, email, fax_number) des Kunden zurück.

200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "company_name": "Musterfirma GmbH",
      "first_name": "Max",
      "last_name": "Mustermann",
      "phone_number": "+43 1 234567",
      "email": "max@musterfirma.at",
      "fax_number": null
    }
  ]
}

2.4.8 /invoices

GEThttps://<company_dns>.kassa.at/api/v1/customers/<id>/invoices
Hinweis zur Pagination: Dieser Endpunkt gibt maximal 1.000 Einträge pro Anfrage zurück. Um alle Datensätze abzurufen, muss mit pagination_limit und pagination_page seitenweise iteriert werden.
ParameterTypPflichtBeschreibung
idintPflichtInterne Kunden-ID (in URL)
pagination_limitintOptionalEinträge pro Seite. Maximum: 1.000. Ohne Angabe werden maximal 1.000 Einträge zurückgegeben.
pagination_pageintOptionalSeitennummer (beginnt bei 1)
sortstringOptionalSortierfeld und Richtung
fieldsstringOptionalKommagetrennte Feldliste für Rückgabe
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 101,
      "invoiceno": "RE-2024-001",
      "date": "25.06.2024",
      "total": "49.90",
      "payment_method": "cash"
    }
  ],
  "pagination": {
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

/warehouses

2.5.1 /index

GEThttps://<company_dns>.kassa.at/api/v1/warehouses
ParameterTypPflichtBeschreibung
deletedboolOptionalNur gelöschte (true) oder nur aktive (false) Lager zurückgeben. Mögliche Werte: true, false, "true", "false"
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 1,
      "description": "Standard Lager",
      "deleted": false
    },
    {
      "id": 2,
      "description": "Außenlager",
      "deleted": false
    }
  ]
}

/inventories

2.6.1 /index

GEThttps://<company_dns>.kassa.at/api/v1/warehouses/<warehouse_id>/inventories
Artikelfilter verpflichtend: Es muss mindestens article_numbers (bzw. article_number) oder article übergeben werden. Fehlt beides, wird ein 400-Fehler zurückgegeben. Bei article_numbers sind maximal 1.000 Einträge erlaubt.
ParameterTypPflichtBeschreibung
warehouse_idintPflichtID des Lagers (in URL)
article_numberstringPflicht*Filter nach einer Artikelnummer. *Pflicht wenn weder article_numbers noch article gesetzt.
article_numbersstring / arrayPflicht*Filter nach mehreren Artikelnummern. Kommagetrennt oder als Array. Maximum: 1.000 Einträge. *Pflicht wenn weder article_number noch article gesetzt.
articleintPflicht*Filter nach interner Artikel-ID. *Pflicht wenn weder article_number noch article_numbers gesetzt.
activeboolOptionalNur aktive oder inaktive Inventories
inspect_stockboolOptionalWenn true: aktuellen Lagerstand im Feld stock zurückgeben
⚠️ Rate-limitiert. Bei zu vielen Anfragen: HTTP 429 mit Retry-After-Header.
400 Bad Request — fehlender Artikelfilter
JSON
{
  "status": 400,
  "error_code": 1000,
  "error": "Parametervalidation failed!",
  "details": [
    {
      "error_code": 1047,
      "error": "Parameter is not set!",
      "error_message": "Parameter 'article_numbers' or 'article' is required!"
    }
  ]
}
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "id": 15,
      "article": {
        "id": 2,
        "line_item_name": "Testartikel",
        "article_number": "ART001"
      },
      "warehouse": {
        "id": 1,
        "description": "Standard Lager"
      },
      "active": true,
      "warning_at": 5,
      "stock": "13.42"
    }
  ]
}
POSThttps://<company_dns>.kassa.at/api/v1/warehouses/<warehouse_id>/inventories/search

POST-Variante von /index — identische Parameter, ideal für große Artikelnummer-Arrays im Body. Antwortstruktur identisch mit 2.6.1.

CURL
curl -X POST https://<company_dns>.kassa.at/api/v1/warehouses/1/inventories/search \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"article_numbers": ["ART001","ART002","ART003"], "inspect_stock": true}'

2.6.3 /stock (GET)

GEThttps://<company_dns>.kassa.at/api/v1/warehouses/<warehouse_id>/inventories/<inventory_id>/stock
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "stock": "13.42"
    }
  ]
}

2.6.4 /stock (POST)

POSThttps://<company_dns>.kassa.at/api/v1/warehouses/<warehouse_id>/inventories/<inventory_id>/stock
ParameterTypPflichtBeschreibung
quantityfloatPflichtNeuer absoluter Lagerstand
textstringOptionalBeschreibung der Lagerbewegung (<100 Zeichen)
CURL
curl -X POST https://<company_dns>.kassa.at/api/v1/warehouses/1/inventories/15/stock \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"quantity": 13.42, "text": "Lagerstandsprüfung: Mai"}'
200 OK
JSON
{
  "status": 200,
  "data": [
    {
      "inventory": {
        "id": 15,
        "article": {
          "id": 2,
          "line_item_name": "Dies ist ein Testartikel",
          "article_number": null
        },
        "warehouse": {
          "id": 1,
          "description": "Standard Lager"
        },
        "warning_at": 5,
        "created_at": {"format": "DD.MM.YYYY hh:mm:ss", "localized": "05.07.2018 11:25"},
        "updated_at": {"format": "DD.MM.YYYY hh:mm:ss", "localized": "05.07.2018 11:25"}
      },
      "old_stock": "-4.0",
      "new_stock": "13.42"
    }
  ]
}
400 Bad Request (Warehouse-ID nicht gefunden)
JSON
{
  "status": 400,
  "error_code": 3000,
  "error": "Object not found!",
  "details": [
    {
      "error_code": 3008,
      "error": "Object not found!",
      "error_message": "No warehouse found with given parameter!"
    }
  ]
}

/movements

2.7.1 /create

POSThttps://<company_dns>.kassa.at/api/v1/warehouses/<warehouse_id>/inventories/<inventory_id>/movements
ParameterTypPflichtBeschreibung
quantityfloatPflichtMenge (positiv = Zugang, negativ = Abgang)
textstringOptionalBeschreibung (<100 Zeichen)
typestringOptionalErzwingt Richtung: "increase" oder "decrease"
CURL
curl -X POST https://<company_dns>.kassa.at/api/v1/warehouses/1/inventories/15/movements \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"quantity": -2, "text": "Ich hatte hunger"}'
201 Created
JSON
{
  "status": 201,
  "data": [
    {
      "id": 3010,
      "inventory": {
        "id": 15,
        "article": {
          "id": 2,
          "line_item_name": "Dies ist ein Testartikel"
        },
        "warehouse": {
          "id": 1,
          "description": "Standard Lager"
        },
        "old_stock": "13.42",
        "new_stock": "11.42"
      },
      "quantity": "-2.0",
      "description": "Ich hatte hunger",
      "created_at": {"format": "DD.MM.YYYY hh:mm:ss", "localized": "11.01.2021 11:49"},
      "updated_at": {"format": "DD.MM.YYYY hh:mm:ss", "localized": "11.01.2021 11:49"}
    }
  ]
}
400 Bad Request (Warehouse-ID nicht gefunden)
JSON
{
  "status": 400,
  "error_code": 3000,
  "error": "Object not found!",
  "details": [
    {
      "error_code": 3008,
      "error": "Object not found!",
      "error_message": "No warehouse found with given parameter!"
    }
  ]
}

/manual_receipts

Nacherfassen und Abrufen von Handbons (RKSV-konform signiert).

2.8.1 /create

POSThttps://<company_dns>.kassa.at/api/v1/manual_receipts
ParameterTypPflichtBeschreibung
invoicenostring / intPflichtBelegnummer (<80 Zeichen)
datestringPflichtBelegdatum: dd.mm.yyyy oder yyyy-mm-dd
pricefloat / stringPflichtBruttobetrag. Dezimaltrennzeichen: Punkt oder Komma (als String). Muss ein Zahlenformat sein.
taxintPflichtSteuersatz. Üblicherweise 0. Möglich: 0, 10, 13, 20
payment_methodstringPflichtZ. B. "cash", "karte", "überweisung"
customerobjectOptionalKundendaten. Ist customer_number gesetzt und stimmt mit einem bestehenden, nicht gelöschten Kunden überein, wird dieser verwendet — sonst wird ein neuer Kunde aus den übergebenen Daten angelegt. Alle Felder siehe Tabelle unten.
usernamestringOptionalKassier-Benutzer
register_numberstringOptionalKassanummer
file_returnstringOptional"no-file" → nur JSON  |  "base64" → PDF als Base64  |  weggelassen → PDF-Download

Felder für customer

ParameterTypPflichtBeschreibung
customer_numberstringOptionalKundennummer (<60 Zeichen). Schlüssel für die Zuordnung zu einem bestehenden Kunden.
company_namestringOptionalFirmenname des Kunden (<120 Zeichen)
first_namestringOptionalVorname (<100 Zeichen)
last_namestringOptionalNachname (<100 Zeichen)
addressstringOptionalStraße und Hausnummer (<100 Zeichen)
citystringOptionalStadt (<100 Zeichen)
zipstringOptionalPostleitzahl (<100 Zeichen)
countrystringOptionalLand (<100 Zeichen)
phone_numberstringOptionalTelefonnummer (<100 Zeichen)
fax_numberstringOptionalFaxnummer (<100 Zeichen)
emailstringOptionalE-Mail-Adresse (<100 Zeichen)
uidstringOptionalUID-Nummer (<100 Zeichen)
tax_numberstringOptionalSteuernummer (<100 Zeichen)
notice_1stringOptionalNotizfeld 1 (<240 Zeichen)
notice_2stringOptionalNotizfeld 2 (<240 Zeichen)
notice_3stringOptionalNotizfeld 3 (<240 Zeichen)

Alle Felder sind optional und identisch zu /customers/create.

CURL — Beispiel (nur JSON)
curl -X POST https://<company_dns>.kassa.at/api/v1/manual_receipts \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"invoiceno":"RE-2024-001","date":"25.06.2024","price":"49.90","tax":0,"payment_method":"cash","file_return":"no-file"}'
CURL — Beispiel (mit vollständigen Kundendaten)
curl -X POST https://<company_dns>.kassa.at/api/v1/manual_receipts \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{
    "invoiceno": "RE-2024-001",
    "date":      "25.06.2024",
    "price":     "49.90",
    "tax":       0,
    "payment_method": "cash",
    "customer": {
      "customer_number": "K-0042",
      "company_name":    "Musterfirma GmbH",
      "first_name":      "Max",
      "last_name":       "Mustermann",
      "address":         "Musterstraße 1",
      "city":            "Wien",
      "zip":             "1010",
      "country":         "Österreich",
      "phone_number":    "+43 1 234567",
      "fax_number":      "+43 1 234568",
      "email":           "max@musterfirma.at",
      "uid":             "ATU12345678",
      "tax_number":      "123/4567",
      "notice_1":        "Stammkunde",
      "notice_2":        "",
      "notice_3":        ""
    },
    "file_return": "no-file"
  }'
CURL — Beispiel (PDF-Download)
curl -X POST https://<company_dns>.kassa.at/api/v1/manual_receipts \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"invoiceno":"RE-2024-001","date":"25.06.2024","price":"49.90","tax":0,"payment_method":"cash"}' \
  --output beleg.pdf

2.8.2 /index

GEThttps://<company_dns>.kassa.at/api/v1/manual_receipts
ParameterTypPflichtBeschreibung
numberintOptional*Interne Rechnungsnummer
invoicenostringOptional*Handbon-Belegnummer
register_numberstringOptionalSuche auf eine Kasse einschränken
file_returnstringOptional"base64" oder weggelassen (PDF-Download)

* Entweder number oder invoiceno ist verpflichtend.


/invoices NEU in v1.4

Erstellen und Abrufen von Rechnungen mit einer oder mehreren Positionen. Eine Position kann entweder einen bestehenden Artikel referenzieren oder eine freie Position sein. Rechnungen können optional einem Kunden zugeordnet werden.

2.9.1 /create

POSThttps://<company_dns>.kassa.at/api/v1/invoices
ParameterTypPflichtBeschreibung
line_itemsarrayPflichtArray mit mindestens einer Position. Jede Position ist ein Objekt und referenziert einen bestehenden, nicht gelöschten Artikel entweder über { article_id, quantity } (interne Artikel-ID) oder { company_article_id, quantity } (firmeninterne Artikel-ID) — Name, Preis und Steuersatz werden dann vom Artikel übernommen. Alternativ eine freie Position ohne Artikelbezug: { name, price, tax, quantity }. quantity ist bei allen Varianten optional, Standardwert 1.
payment_methodstringPflichtZ. B. "cash", "karte", "überweisung"
customerobjectOptionalKundendaten. Ist customer_number gesetzt und stimmt mit einem bestehenden, nicht gelöschten Kunden überein, wird dieser verwendet — sonst wird ein neuer Kunde aus den übergebenen Daten angelegt. Alle Felder siehe Tabelle unten.
usernamestringOptionalKassier-Benutzer. Ohne Angabe wird der authentifizierte API-Benutzer verwendet.
register_numberstringOptionalKassanummer. Ohne Angabe wird die Standard-Kasse des Benutzers verwendet.
file_returnstringOptional"no-file" → nur JSON  |  "base64" → PDF als Base64  |  weggelassen → PDF-Download

Felder für customer

ParameterTypPflichtBeschreibung
customer_numberstringOptionalKundennummer (<60 Zeichen). Schlüssel für die Zuordnung zu einem bestehenden Kunden.
company_namestringOptionalFirmenname des Kunden (<120 Zeichen)
first_namestringOptionalVorname (<100 Zeichen)
last_namestringOptionalNachname (<100 Zeichen)
addressstringOptionalStraße und Hausnummer (<100 Zeichen)
citystringOptionalStadt (<100 Zeichen)
zipstringOptionalPostleitzahl (<100 Zeichen)
countrystringOptionalLand (<100 Zeichen)
phone_numberstringOptionalTelefonnummer (<100 Zeichen)
fax_numberstringOptionalFaxnummer (<100 Zeichen)
emailstringOptionalE-Mail-Adresse (<100 Zeichen)
uidstringOptionalUID-Nummer (<100 Zeichen)
tax_numberstringOptionalSteuernummer (<100 Zeichen)
notice_1stringOptionalNotizfeld 1 (<240 Zeichen)
notice_2stringOptionalNotizfeld 2 (<240 Zeichen)
notice_3stringOptionalNotizfeld 3 (<240 Zeichen)

Alle Felder sind optional und identisch zu /customers/create. Es gibt keine Pflichtfelder innerhalb von customer — auch ein leeres Objekt {} ist zulässig, legt dann aber einen leeren Kunden ohne Bezeichnung an.

Jede Position in line_items ist entweder eine Artikel-Referenz (per article_id oder company_article_id) oder eine freie Position — nie mehrere davon gleichzeitig:

{ "article_id": 42, "quantity": 2 }
{ "company_article_id": 1007, "quantity": 2 }
{ "name": "Pfand", "price": "5,00", "tax": 20 }
CURL — Beispiel
curl -X POST https://<company_dns>.kassa.at/api/v1/invoices \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{
    "line_items": [
      { "article_id": 42, "quantity": 2 },
      { "name": "Pfand", "price": "5,00", "tax": 20 }
    ],
    "payment_method": "karte",
    "customer": { "customer_number": "K-0001" },
    "file_return": "no-file"
  }'

Beispiel mit Artikel-Referenz über company_article_id

Statt der internen article_id kann auch die firmeninterne Artikelnummer (company_article_id, dasselbe Feld wie bei filter_company_article_id unter /articles/index) verwendet werden — praktisch, wenn das anbindende System Artikel über die eigene Nummerierung statt über die interne KASSA.AT-ID führt:

CURL — Beispiel (company_article_id)
curl -X POST https://<company_dns>.kassa.at/api/v1/invoices \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{
    "line_items": [
      { "company_article_id": 1007, "quantity": 2 }
    ],
    "payment_method": "cash",
    "file_return": "no-file"
  }'

Beispiel mit vollständigen Kundendaten

Wird customer_number mitgegeben und ist noch kein Kunde mit dieser Nummer hinterlegt, wird aus allen übergebenen Feldern ein neuer Kunde angelegt:

CURL — Beispiel (neuer Kunde mit allen Feldern)
curl -X POST https://<company_dns>.kassa.at/api/v1/invoices \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{
    "line_items": [
      { "article_id": 42, "quantity": 1 }
    ],
    "payment_method": "karte",
    "customer": {
      "customer_number": "K-0042",
      "company_name":    "Musterfirma GmbH",
      "first_name":      "Max",
      "last_name":       "Mustermann",
      "address":         "Musterstraße 1",
      "city":            "Wien",
      "zip":             "1010",
      "country":         "Österreich",
      "phone_number":    "+43 1 234567",
      "fax_number":      "+43 1 234568",
      "email":           "max@musterfirma.at",
      "uid":             "ATU12345678",
      "tax_number":      "123/4567",
      "notice_1":        "Stammkunde",
      "notice_2":        "",
      "notice_3":        ""
    },
    "file_return": "no-file"
  }'
201 Created — file_return: "no-file"
JSON
{
  "status": 201,
  "invoice_data": {
    "invoice_number": "Rechnungs-Nr: 42",
    "register": "Kassa-Nr: K1",
    "payment_method": "Kreditkarte",
    "date": "25.06.2026",
    "line_item_data": [
      { "name": "Testartikel", "quantity": "2", "gross_amount_per_item": "19,99 €", "tax": "20 %", "gross_total": "39,98 €" },
      { "name": "Pfand", "quantity": "1", "gross_amount_per_item": "5,00 €", "tax": "20 %", "gross_total": "5,00 €" }
    ],
    "sum": "Summe 44,98 €",
    "taxes": [
      { "percentage": "20 %", "exkl": "37,48", "ust": "7,50", "gross_total": "44,98" }
    ],
    "customer": {
      "id": 7,
      "customer_number": "K-0001",
      "company_name": "Musterfirma GmbH",
      "first_name": "Max",
      "last_name": "Mustermann"
    },
    "qr_code": "..."
  }
}
Ohne zugeordneten Kunden ist customer im Response null.
400 Bad Request — Artikel nicht gefunden, gelöscht oder ohne Steuersatz
JSON
{
  "status": 400,
  "error_code": 3000,
  "error": "Object not found!",
  "details": [
    {
      "error_code": 3014,
      "error": "Object not found!",
      "error_message": "No article found with given article_id(s): 9999"
    }
  ]
}

2.9.2 /index

GEThttps://<company_dns>.kassa.at/api/v1/invoices
ParameterTypPflichtBeschreibung
numberintPflichtInterne Rechnungsnummer
register_numberstringOptionalSuche auf eine Kasse einschränken
file_returnstringOptional"base64" oder weggelassen (PDF-Download)
CURL
curl -X GET https://<company_dns>.kassa.at/api/v1/invoices \
  -H 'Content-Type: application/json' \
  -H 'authorization: <api_token>' \
  -d '{"number": 42}' \
  --output rechnung.pdf
400 Bad Request — Rechnung nicht gefunden
JSON
{
  "status": 400,
  "error_code": 3000,
  "error": "Object not found!",
  "details": [
    {
      "error_code": 3013,
      "error": "Object not found!",
      "error_message": "No invoice found with given parameters ( number: 9999 )"
    }
  ]
}

Error Codes

1000er — Parametervalidierung

Die Fehler der 1000er Reihe beschreiben Parametervalidierungsfehler.

Codeerrorerror_message
1000Parametervalidation failed!Parametervalidation failed!
1001Parameter is not set!Parameter 'company' is not set!
1002Parameter is not set!Parameter 'company_dns' is not set!
1003Parameter is not set!Parameter 'username' is not set!
1004Parameter is not set!Parameter 'password' is not set!
1005Parameter is not set!Parameter 'email' is not set!
1006Parameter is invalid!Parameter 'company' doesn't match expected length (<64)!
1007Parameter is invalid!Parameter 'company_dns' includes forbidden characters (a-z A-Z 0-9 - _)!
1008Parameter is invalid!Parameter 'company_dns' doesn't match expected length (3..32)!
1009Parameter is invalid!Parameter 'company_dns' is already used!
1010Parameter is invalid!Parameter 'username' doesn't match expected length (3..64)!
1011Parameter is invalid!Parameter 'password' doesn't match expected length (8..72)!
1012Parameter is invalid!Parameter 'email' is invalid!
1013Parameter is not set!Parameter 'line_item_name' is not set!
1014Parameter is not set!Parameter 'quantity' is not set!
1015Parameter is not set!Parameter 'gross_amount_per_item' is not set!
1026Parameter is not set!Parameter 'sales_tax_percentage' is not set!
1027Parameter is invalid!Parameter 'line_item_name' doesn't match expected length (<250)!
1028Parameter is invalid!Parameter 'quantity' is not the right format. Check the documentation to see the right format!
1029Parameter is invalid!Parameter 'gross_amount_per_item' is not the right format. Check the documentation to see the right format!
1030Parameter is invalid!Parameter 'sales_tax_percentage' must be '0', '10', '13', '20' or '5'!
1031Parameter is invalid!Well done. You found a hidden achievement. Parameter 'product_description' doesn't match expected length (<15000000)! Did you do that on purpose?
1032Parameter is invalid!Parameter 'article' must be an integer (0-9)!
1035Parameter is invalid!Parameter 'deleted' must be 'true' or 'false'!
1036Parameter is not set!Parameter 'warehouse_id' is not set!
1037Parameter is invalid!Parameter 'warehouse_id' must be an integer (0-9)!
1038Parameter is invalid!Parameter 'active' must be 'true' or 'false'!
1039Parameter is not set!Parameter 'inventory_id' is not set!
1040Parameter is invalid!Parameter 'inventory_id' must be an integer (0-9)!
1041Parameter is invalid!Parameter 'text' doesn't match expected length (0..100)!
1042Parameter is invalid!Parameter 'type' must be 'increase' or 'decrease'!
1043Parameter is invalid!Parameter 'inspect_stock' must be true or false!
1044Parameter is invalid!Parameter 'description' doesn't match expected length (<250)!
1045Parameter is invalid!Parameter 'article_number' doesn't match expected length (0..60)!
1046Parameter is invalid!Parameter 'quantity' can't be 0!
1049Parameter is invalid!Parameter 'silent' must be 'true' or 'false'!
1050Parameter is not set!Parameter 'pagination_limit' is not set, while 'pagination_page' is set!
1051Parameter is not set!Parameter 'pagination_page' is not set, while 'pagination_limit' is set!
1052Parameter is invalid!Parameter 'pagination_limit' must be an integer (0-9)!
1053Parameter is invalid!Parameter 'pagination_page' must be an integer (0-9)!
1054Parameter is invalid!Parameter 'sort' is not the right format. Check the documentation to see the right format!
1055Parameter is invalid!Parameter 'filter_id' must be an integer (0-9)! But filteroperators can be used as shown in the documentation!
1056Parameter is invalid!Parameter 'filter_company_article_id' must be an integer (0-9)! But filteroperators can be used as shown in the documentation!
1057Parameter is invalid!Parameter 'filter_default_quantity' is not the right format. Check the documentation to see the right format!
1058Parameter is invalid!Parameter 'filter_sales_tax_percentage' must be '0', '10', '13', '20' or '5'! But filteroperators can be used as shown in the documentation!
1059Parameter is invalid!Parameter 'filter_gross_amount_per_item' is not the right format. Check the documentation to see the right format!
1060Parameter is invalid!Parameter 'filter_favourite' must be 'true' or 'false'!
1061Parameter is invalid!Parameter 'filter_food' must be 'true' or 'false'!
1062Parameter is invalid!Parameter 'filter_drink' must be 'true' or 'false'!
1063Parameter is invalid!Parameter 'filter_product_category_id' must be an integer (0-9)! But filteroperators can be used as shown in the documentation!
1064Parameter not allowed!Parameter 'fields' does not allow value '{fieldname}'! Read the documentation to see what fieldnames are allowed in this action!
1065Parameter not allowed!Parameter '{parameter_key}' is not an allowed filter! Read the documentation to see what filters are allowed in this action!
1066Parameter is not set!Parameter 'default_quantity' is not set!
1067Parameter is invalid!Parameter 'default_quantity' is not the right format. Check the documentation to see the right format!
1068Parameter is invalid!Parameter 'unit' doesn't match expected length (<10)!
1069Parameter is invalid!Parameter 'bar_code' doesn't match expected length (<60)!
1070Parameter is invalid!Parameter 'bar_code_2' doesn't match expected length (<60)!
1071Parameter is invalid!Parameter 'article_number' doesn't match expected length (<60)!
1072Parameter is invalid!Parameter 'product_name' doesn't match expected length (<60)!
1073Parameter is invalid!Parameter 'product_type' doesn't match expected length (<60)!
1074Parameter is invalid!Parameter 'brand' doesn't match expected length (<60)!
1075Parameter is invalid!Parameter 'manufacturer' doesn't match expected length (<60)!
1076Parameter is invalid!Parameter 'supplier_article_number' doesn't match expected length (<60)!
1077Parameter is invalid!Parameter 'attribute1' doesn't match expected length (<60)!
1078Parameter is invalid!Parameter 'attribute2' doesn't match expected length (<60)!
1079Parameter is invalid!Parameter 'attribute3' doesn't match expected length (<60)!
1080Parameter is invalid!Parameter 'attribute4' doesn't match expected length (<60)!
1081Parameter is invalid!Parameter 'attribute5' doesn't match expected length (<60)!
1082Parameter is invalid!Parameter 'variant_description' doesn't match expected length (<60)!
1083Parameter is invalid!Parameter 'favourite' must be 'true' or 'false'!
1084Parameter is invalid!Parameter 'food' must be 'true' or 'false'!
1085Parameter is invalid!Parameter 'drink' must be 'true' or 'false'!
1086Parameter is invalid!Parameter 'product_category_id' is not the right format. Check the documentation to see the right format!
1087Parameter is invalid!Parameter 'manual_gross_amount_entry' must be 'true' or 'false'!
1088Parameter is invalid!Parameter 'manual_quantity_entry' must be 'true' or 'false'!
1089Parameter is invalid!Parameter 'print_price_per_kg' must be 'true' or 'false'!
1090Parameter is invalid!Parameter 'print_pickup_number' must be 'true' or 'false'!
1091Parameter is not set!Parameter 'article_id' is not set!
1092Parameter is invalid!Parameter 'article_id' must be an integer (0-9)!
1093Parameter not allowedParameter 'fields' can not start or end with ','!
1094Parameter is invalid!Parameter 'filter_company_customer_id' must be an integer (0-9)! But filteroperators can be used as shown in the documentation!
1095Parameter is invalid!Parameter 'company_name' doesn't match expected length (<120)!
1096Parameter is invalid!Parameter 'first_name' doesn't match expected length (<100)!
1097Parameter is invalid!Parameter 'last_name' doesn't match expected length (<100)!
1098Parameter is invalid!Parameter 'address' doesn't match expected length (<100)!
1099Parameter is invalid!Parameter 'city' doesn't match expected length (<100)!
1100Parameter is invalid!Parameter 'zip' doesn't match expected length (<100)!
1101Parameter is invalid!Parameter 'country' doesn't match expected length (<100)!
1102Parameter is invalid!Parameter 'phone_number' doesn't match expected length (<100)!
1103Parameter is invalid!Parameter 'fax_number' doesn't match expected length (<100)!
1104Parameter is invalid!Parameter 'email' doesn't match expected length (<100)!
1105Parameter is invalid!Parameter 'uid' doesn't match expected length (<100)!
1106Parameter is invalid!Parameter 'tax_number' doesn't match expected length (<100)!
1107Parameter is invalid!Parameter 'customer_number' doesn't match expected length (<60)!
1108Parameter is invalid!Parameter 'notice_1' doesn't match expected length (<240)!
1109Parameter is invalid!Parameter 'notice_2' doesn't match expected length (<240)!
1110Parameter is invalid!Parameter 'notice_3' doesn't match expected length (<240)!
1111Parameter is invalid!Parameter 'customer_id' must be an integer (0-9)!
1112Parameter is not set!Parameter 'customer_number' is not set!
1113Parameter is not set!Parameter 'invoiceno' is not set!
1114Parameter is not set!Parameter 'date' is not set!
1115Parameter is not set!Parameter 'price' is not set!
1116Parameter is not set!Parameter 'tax' is not set!
1117Parameter is not set!Parameter 'payment_method' is not set!
1118Parameter is invalid!The value '{payment_method}' given for the payment method does not match the expected value. Possible values: 'bar', 'cash', 'karte', 'kreditkarte', 'credit_card', 'überweisung', 'transfer'
1119Parameter is invalid!Parameter 'tax' must be '0', '10', '13' or '20'
1120Parameter is not set!Parameter 'invoiceno' or 'number' is not set! You need one of this two Parameters
1121Parameter is not set!Parameter 'payment_method' is not set!
1122Parameter is not set!Parameter 'line_items' is not set or empty! At least one line item is required.
1123Parameter is not set!Line item #{position}: either 'article_id', 'company_article_id' or 'name', 'price' and 'tax' must be given!
1124Parameter is not set!Parameter 'number' is not set!
1125Parameter is invalid!Parameter 'line_items' must be an array of line items!
1126Parameter is invalid!Line item #{position} must be an object!
1127Parameter is invalid!Parameter 'customer' must be an object!
1128Parameter is invalid!Parameter 'price' must be a number!

2000er — Authentifizierung

Die Fehler dieser Nummern beschreiben einen Fehler bei der Authentifizierung.

Codeerrorerror_message
2000Company missing!No company with given dns_name!
2001Company missing!No company in subdomain!
2002User invalid!Username or password invalid or not an admin!
2003Unauthorized!No token given!
2004Unauthorized!Token is invalid!
2008User invalid!User invalid!
2009Unauthorized!Unauthorized!
2010Operation not possible!Operation not possible!

3000er — Objekt nicht gefunden

Fehler der 3000er Serie zeigen an, dass durch eingegebene Daten kein Ergebnis gefunden wurde, z.B. eine ID in der URL zeigt auf keinen existierenden Eintrag.

Codeerrorerror_message
3000Object not found!Object not found!
3007Object not found!No inventory found with given parameter!
3008Object not found!No warehouse found with given parameter!
3009Object not found!No user found with given parameter!
3010Object not found!No product_category found with given parameter (id: {id-number})!
3011Object not found!No article found with given parameter (article_id: {article_id})!
3012Object not found!No customer found with given parameter (customer_id: {customer_id})!
3013Object not found!No invoice found with given parameters (...)
3014Object not found!No article found with given article_id(s): {article_id(s)} / company_article_id(s): {company_article_id(s)}
3015Object not found!No register found with given register_number: {register_number}
3016Object not found!No user found with given username: {username}
3017Object not found!Article(s) {article_id(s)} have no tax percentage configured and cannot be used for invoicing

4000er — Operation nicht möglich

Fehler der 4000er Reihe zeigen an, dass eine Funktion (momentan) nicht ausgeführt werden kann. Dies kann an Settings liegen, die die Funktion stören, oder Parameter, mit denen die Funktion nicht arbeiten kann.

Codeerrorerror_message
4006No possible value available!Your given companyname (parameter 'company') doesn't work with this function!

4290er — Rate Limiting

Codeerrorerror_message
4290Rate limit exceeded!Rate limit exceeded!
4291Rate limit exceeded!Too many inventory requests. Please retry after <n>s
Bei HTTP 429 wird der Response-Header Retry-After mit der Wartezeit in Sekunden gesetzt.

Glossar

Parameter-Glossar

BegriffBeschreibung
<company_dns> Die Subdomain der Firma. Diese wird bei Erstellung der Firma bekanntgegeben und kann (momentan nur über die Webseite, nicht per API) in den Firmeneinstellungen eingesehen und verändert werden.
<api_token> Der generierte Token muss immer mitgegeben werden. Zur Tokengenerierung siehe /authentications/create.
<n> Bezeichnet die ID des Objekts, das in der Adresse davor steht. Beispiel: /api/v1/warehouses/<n>/inventories — hier ist <n> die ID des Lagers, in dem nach Inventories gesucht werden soll.

Changelog

v1.4 — 07.09.2026

  • Neu: POST /invoices — Rechnungen mit einer oder mehreren Positionen erstellen (Artikel-Referenz oder freie Position)
  • Neu: GET /invoices — Rechnungen abrufen
  • Neu: Parameter customer für POST /invoices und POST /manual_receipts — bestehenden Kunden per customer_number zuordnen oder neuen Kunden anlegen
  • Neu: line_items in POST /invoices können Artikel auch über company_article_id (firmeninterne Artikelnummer) statt nur über die interne article_id referenzieren
  • Neu: Feld customer in der invoice_data-Antwort von POST /invoices und POST /manual_receipts
  • Fehlercodes hinzugefügt: 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 3014, 3015, 3016, 3017
  • Korrektur: Fehlercodes 1113–1120 (Parametervalidierung für /manual_receipts) waren bereits seit v1.3 aktiv, aber in dieser Dokumentation nie aufgeführt — jetzt ergänzt

v1.3 — 25.06.2026

  • Neu: POST /manual_receipts — Handbons erstellen (RKSV-konform)
  • Neu: GET /manual_receipts — Handbons abrufen
  • Neu: POST /inventories/search — POST-Variante des Inventory-Index
  • Neu: Parameter article_numbers (Array) für GET /inventories
  • Neu: Parameter type für POST /movements
  • Neu: Rate Limiting für GET /inventories (Fehlercodes 4290/4291)
  • Neu: Fehlercode 3013

v1.2.0 — 25.04.2022

  • Neu: /articles/index, /articles/create, /articles/update, /articles/delete, /articles/product_categories
  • Neu: /customers/index, /customers/create, /customers/update, /customers/destroy, /customers/customer_number, /customers/addresses, /customers/contacts, /customers/invoices
  • Fehlercodes hinzugefügt: 1013, 1015, 1026, 1027, 1029, 1030, 1031, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 3010, 3011

v1.1.0 — 07.04.2021

  • Neu: /companies/create, /companies/determine_dns_name
  • Fehlercodes hinzugefügt: 1001, 1005, 1006, 1009, 1012, 1047, 1048, 1049, 2010, 3009, 4006
  • Die Subdomain wurde bei Calls ohne company_dns von dev auf api geändert
  • Bei /inventories/stock (POST) und /movements (POST): fehlerhafter Fehlercode 1036 durch korrekten Code 1039 ersetzt

v1.0.0 — 12.01.2021

  • Neu: /authentications/create, /authentications/authenticate
  • Neu: /warehouses/index
  • Neu: /warehouses/inventories/index, /warehouses/inventories/stock (GET), /warehouses/inventories/stock (POST), /warehouses/inventories/movements/create
  • Fehlercodes hinzugefügt: 1000, 1002, 1003, 1004, 1007, 1008, 1010, 1011, 1014, 1028, 1032, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 2000, 2002, 2003, 2004, 2008, 2009, 3000, 3007, 3008