Umsatz API
Die Umsatz-API liefert alle umsatzrelevanten Transaktionen eines Zeitraums — samt Positionen, Zahlungen und Steueraufteilung — in einer einzigen Abfrage. Ideal für Buchhaltungsexporte, Umsatzabstimmung, BI-Warehouses oder Ad-hoc-Reports.
- Host:
my.apro.at - Auth: API-Key im
x-api-key - Content type:
application/json
Endpunkte
| Variante | Endpunkt | Standort aus |
|---|---|---|
| Pfad + Key | POST /api/v1/locations/{location}/reports/receipts | {location} muss mit dem Standort des Keys übereinstimmen. |
| Nur Key | POST /api/v1/reports/receipts | dem API-Key selbst. |
Beide Varianten erfordern einen standortgebundenen API-Key. Der Key selbst bestimmt, welche Standortdaten geliefert werden — einen mandantenweiten Endpunkt gibt es nicht. Wähle, was im Client-Code klarer ist — beide liefern dieselben Daten und benötigen denselben Key.
Request-Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
after | ISO 8601 Timestamp | ✅ | Nur Belege nach diesem Zeitpunkt. |
before | ISO 8601 Timestamp | ✅ | Nur Belege vor diesem Zeitpunkt. |
limit | integer | — | Anzahl zurückgelieferter Belege begrenzen. |
afterTransactionID | GUID | — | Cursor — Transaktionen nach dieser ID liefern. Für Paging zusammen mit limit nutzen. |
Beispielanfrage
{ "after": "2026-01-01T00:00:00Z", "before": "2026-02-01T00:00:00Z", "limit": 100, "afterTransactionID": "f03e11de-6330-4a03-a8a8-b6e5fd4e32a5"}Download: revenue-request.json
Antwort
Ein Array von Belegen. Jedes Element ist eine Transaktion mit Positionen, Zahlungen und Metadaten.
Top-Level-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
transactionId | GUID | Eindeutige Transaktions-ID. |
transactionType | string | Siehe Transaktionstypen. |
receiptType | string | Beleg, Ausgangsrechnung oder Lieferschein. |
totalAmount | decimal | Bruttogesamtbetrag. |
tip | decimal | Im totalAmount enthaltenes Trinkgeld. |
discount | decimal | Abgezogener Rabatt. |
dateTime | ISO 8601 | Zeitpunkt der Transaktion. |
business | Business | Unternehmen / Mandant. |
staff | Staff | Bediener / Kellner. |
table | Table | Tisch oder Bestellziel (z. B. Bar 1, Zimmer 301). |
customer | Customer · nullable | Rechnungsempfänger (falls vorhanden). |
payments | Payment[] | Zahlungen zum Beleg. |
items | Item[] | Belegpositionen. |
Item
| Feld | Typ | Beschreibung |
|---|---|---|
id | integer | Eindeutige Artikel-ID. |
number | string | Artikelnummer (in APRO). |
name | string | Artikelname. |
bookDate | ISO 8601 | Buchungszeitpunkt. |
grossAmount | decimal | Bruttopreis. |
netAmount | decimal | Nettopreis. |
quantity | decimal | Stückzahl. |
tax | Tax | Angewendeter Steuersatz. |
category | Category | Sparte. |
Tax
| Feld | Typ | Beschreibung |
|---|---|---|
id | integer | Eindeutige ID des Steuersatzes. |
value | decimal | Höhe, z. B. 20.0 für 20 %. |
name | string | Bezeichnung, z. B. Mwst 20 %. |
Category
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Sparten-ID. |
number | integer | Sparten-Nummer. |
name | string | Bezeichnung. |
Payment
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Zahlungs-ID. |
amount | decimal | Gezahlter Betrag. |
paymentType | PaymentType | Verwendetes Zahlungsmittel. |
Payment type
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Zahlungsmittel-ID. |
number | integer | Zahlungsmittel-Nummer. |
name | string | Bezeichnung, z. B. Bar, Kreditkarte. |
Business
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Mandanten-ID aus der Kassendatenbank. |
name | string | Firmenname. |
Staff
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Mitarbeiter-ID. |
number | integer | Personalnummer. |
name | string | Mitarbeitername. |
Table
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Tisch-ID. |
number | integer | Tischnummer. |
name | string | Tischbezeichnung, z. B. Bar 1, Restaurant 5. |
Beispielantwort
[ { "transactionId": "f03e11de-6330-4a03-a8a8-b6e5fd4e32a5", "transactionType": "Abrechnen", "receiptType": "Beleg", "totalAmount": 3.2, "tip": 0.0, "discount": 0.0, "dateTime": "03.10.2021 21:59:57", "business": { "id": "1", "name": "APRO Kassensysteme" }, "staff": { "id": "8", "number": 9500, "name": "Onlinekellner" }, "table": { "id": "76", "number": 76, "name": "Daniel Z" }, "customer": null, "payments": [ { "id": "04b2d2f5-8765-41b5-ad5c-aed802dc23bc", "amount": 3.2, "paymentType": { "id": 26, "nr": 200, "name": "Smorder Kreditkarte" } } ], "items": [ { "id": "38", "number": 216, "name": "Cola 0,5", "bookDate": "03.10.2021 21:59:55", "grossAmount": 3.2, "netAmount": 3.2, "quantity": 1.0, "tax": { "id": "5", "value": 5.0, "name": "Mwst 5 %" } } ] }, { "transactionId": "db2b90d1-ab37-4557-b169-2289c3004a0a", "transactionType": "Abrechnen", "receiptType": "Beleg", "totalAmount": 3.2, "tip": 0.0, "discount": 0.0, "dateTime": "03.10.2021 22:00:12", "business": { "id": "1", "name": "APRO Kassensysteme" }, "staff": { "id": "8", "number": 9500, "name": "Onlinekellner" }, "table": { "id": "76", "number": 76, "name": "Daniel Z" }, "customer": null, "payments": [ { "id": "bb3e6300-0cc3-4922-80c4-a8a4c3530d3c", "amount": 3.2, "paymentType": { "id": 26, "nr": 200, "name": "Smorder Kreditkarte" } } ], "items": [ { "id": "38", "number": 216, "name": "Cola 0,5", "bookDate": "03.10.2021 22:00:11", "grossAmount": 3.2, "netAmount": 3.2, "quantity": 1.0, "tax": { "id": "5", "value": 5.0, "name": "Mwst 5 %" } } ] }]Dieselbe Payload als eigenständige Datei herunterladen:
revenue-response.json
Transaktionstypen
Der transactionType unterscheidet, was eine Zeile repräsentiert. Für
umsatzrelevante Reports auf Abrechnen filtern (und
RechnungZurückholen für Rückholungen).
| Typ | Bedeutung |
|---|---|
Bonieren | Artikel auf offenen Tisch boniert. |
Verschieben | Tischwechsel. |
Abrechnen | Abschluss — bezahlter Beleg. |
Stornieren | Stornierung einer Buchung. |
RechnungZurückholen | Rücknahme einer Abrechnung. |
DebitBonieren | Debit-Buchung. |
ARAusstellen · ARPreview · ARNachdruck · ARNachdruckOriginal | Ausgangsrechnungs-Lifecycle. |
Tagesabschluss · TagesabschlussPreview | Tagesabschluss / Vorschau. |
Kellnerabschlag · KellnerabschlagPreview · KellnerabschlagUndo · Kellneruebergabe | Kellnerübergabe / Abschlag. |
Startbeleg · Schlussbeleg · Nullbeleg · Monatsbeleg · JahresBeleg · Nacherfassungssammelbeleg | Gesetzliche Fiskalbelege (RKSV). |
TischOeffnen · TischSchliessen · GaesteanzahlAendern · GaesteanzahlKorrigieren | Tisch-Lifecycle. |
BestellmanagerBestellung · …NextState · …SetFinaleState · …Undo · …Stornieren · …Verschieben · …NaechsterGang · …Statistik | Bestellmanager-Events. |
WarenkorbErstellen · WarenkorbUpdate · WarenkorbVerwerfen | Warenkorb-Lifecycle. |
DatenExport · UndoDatenExport | Datenexport-Markierungen. |
Kassabuch · Bargeldzählung · TerminalKassenschnitt · Lieferantabschlag · LieferantabschlagVorschau · Ansehen · Information · SchankanlageQrCode · Abrechnen HSK · Abrechnen AR · AbrechnenNachdruck | Weitere operative Ereignisse. |
Umsatzberechnung
Um den umsatzrelevanten Umsatz einer Antwort zu berechnen, behält man bezahlte Abrechnungen samt Rückholungen und summiert die Netto-Positionen:
response .filter(x => x.paymentGroup.name === "Umsatzwirksam" && ["Abrechnen", "RechnungZurückholen"].includes(x.transactionType) ) .map(x => x.items.reduce((sum, item) => sum + item.netAmount * item.quantity, 0) ) .reduce((sum, val) => sum + val, 0);Paging
Es gibt keinen Cursor in der Antwort — nutzen Sie die deterministische
transactionId der zuletzt gesehenen Zeile als afterTransactionID der
nächsten Anfrage, after/before bleiben unverändert. So lange
iterieren, bis die Antwort weniger Zeilen liefert als Ihr limit.