Zum Inhalt springen

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

VarianteEndpunktStandort aus
Pfad + KeyPOST /api/v1/locations/{location}/reports/receipts{location} muss mit dem Standort des Keys übereinstimmen.
Nur KeyPOST /api/v1/reports/receiptsdem 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

FeldTypPflichtBeschreibung
afterISO 8601 TimestampNur Belege nach diesem Zeitpunkt.
beforeISO 8601 TimestampNur Belege vor diesem Zeitpunkt.
limitintegerAnzahl zurückgelieferter Belege begrenzen.
afterTransactionIDGUIDCursor — Transaktionen nach dieser ID liefern. Für Paging zusammen mit limit nutzen.

Beispielanfrage

POST /api/v1/reports/receipts
{
"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

FeldTypBeschreibung
transactionIdGUIDEindeutige Transaktions-ID.
transactionTypestringSiehe Transaktionstypen.
receiptTypestringBeleg, Ausgangsrechnung oder Lieferschein.
totalAmountdecimalBruttogesamtbetrag.
tipdecimalIm totalAmount enthaltenes Trinkgeld.
discountdecimalAbgezogener Rabatt.
dateTimeISO 8601Zeitpunkt der Transaktion.
businessBusinessUnternehmen / Mandant.
staffStaffBediener / Kellner.
tableTableTisch oder Bestellziel (z. B. Bar 1, Zimmer 301).
customerCustomer · nullableRechnungsempfänger (falls vorhanden).
paymentsPayment[]Zahlungen zum Beleg.
itemsItem[]Belegpositionen.

Item

FeldTypBeschreibung
idintegerEindeutige Artikel-ID.
numberstringArtikelnummer (in APRO).
namestringArtikelname.
bookDateISO 8601Buchungszeitpunkt.
grossAmountdecimalBruttopreis.
netAmountdecimalNettopreis.
quantitydecimalStückzahl.
taxTaxAngewendeter Steuersatz.
categoryCategorySparte.

Tax

FeldTypBeschreibung
idintegerEindeutige ID des Steuersatzes.
valuedecimalHöhe, z. B. 20.0 für 20 %.
namestringBezeichnung, z. B. Mwst 20 %.

Category

FeldTypBeschreibung
idstringEindeutige Sparten-ID.
numberintegerSparten-Nummer.
namestringBezeichnung.

Payment

FeldTypBeschreibung
idstringEindeutige Zahlungs-ID.
amountdecimalGezahlter Betrag.
paymentTypePaymentTypeVerwendetes Zahlungsmittel.

Payment type

FeldTypBeschreibung
idstringEindeutige Zahlungsmittel-ID.
numberintegerZahlungsmittel-Nummer.
namestringBezeichnung, z. B. Bar, Kreditkarte.

Business

FeldTypBeschreibung
idstringMandanten-ID aus der Kassendatenbank.
namestringFirmenname.

Staff

FeldTypBeschreibung
idstringEindeutige Mitarbeiter-ID.
numberintegerPersonalnummer.
namestringMitarbeitername.

Table

FeldTypBeschreibung
idstringEindeutige Tisch-ID.
numberintegerTischnummer.
namestringTischbezeichnung, z. B. Bar 1, Restaurant 5.

Beispielantwort

Response · zwei direkt aufeinanderfolgende Abrechnungen
[
{
"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).

TypBedeutung
BonierenArtikel auf offenen Tisch boniert.
VerschiebenTischwechsel.
AbrechnenAbschluss — bezahlter Beleg.
StornierenStornierung einer Buchung.
RechnungZurückholenRücknahme einer Abrechnung.
DebitBonierenDebit-Buchung.
ARAusstellen · ARPreview · ARNachdruck · ARNachdruckOriginalAusgangsrechnungs-Lifecycle.
Tagesabschluss · TagesabschlussPreviewTagesabschluss / Vorschau.
Kellnerabschlag · KellnerabschlagPreview · KellnerabschlagUndo · KellneruebergabeKellnerübergabe / Abschlag.
Startbeleg · Schlussbeleg · Nullbeleg · Monatsbeleg · JahresBeleg · NacherfassungssammelbelegGesetzliche Fiskalbelege (RKSV).
TischOeffnen · TischSchliessen · GaesteanzahlAendern · GaesteanzahlKorrigierenTisch-Lifecycle.
BestellmanagerBestellung · …NextState · …SetFinaleState · …Undo · …Stornieren · …Verschieben · …NaechsterGang · …StatistikBestellmanager-Events.
WarenkorbErstellen · WarenkorbUpdate · WarenkorbVerwerfenWarenkorb-Lifecycle.
DatenExport · UndoDatenExportDatenexport-Markierungen.
Kassabuch · Bargeldzählung · TerminalKassenschnitt · Lieferantabschlag · LieferantabschlagVorschau · Ansehen · Information · SchankanlageQrCode · Abrechnen HSK · Abrechnen AR · AbrechnenNachdruckWeitere 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.

Fehler

Siehe Authentifizierung → Fehlerantworten.