Revenue API
The Revenue API returns every fiscal transaction in a date range — with its positions, payments and tax breakdown — in a single call. Use it for accounting exports, revenue reconciliation, BI warehouses or ad-hoc reports.
- Host:
my.apro.at - Auth: API key in
x-api-key - Content type:
application/json
Endpoints
| Variant | Endpoint | Location derived from |
|---|---|---|
| Path + key | POST /api/v1/locations/{location}/reports/receipts | {location} must match the key’s location. |
| Key only | POST /api/v1/reports/receipts | The API key itself. |
Both variants require a location-scoped API key. The key itself determines which location’s data is returned — there is no tenant-wide variant. Pick whichever feels more explicit in your client code — both return the same data and require the same key.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
after | ISO 8601 timestamp | ✅ | Return receipts after this point in time. |
before | ISO 8601 timestamp | ✅ | Return receipts before this point in time. |
limit | integer | — | Cap the number of results returned. |
afterTransactionID | GUID | — | Cursor — return transactions after this ID. Combine with limit for paging. |
Example request
{ "after": "2026-01-01T00:00:00Z", "before": "2026-02-01T00:00:00Z", "limit": 100, "afterTransactionID": "f03e11de-6330-4a03-a8a8-b6e5fd4e32a5"}Download: revenue-request.json
Response
An array of receipts. Each element is one transaction with its positions, payments and metadata.
Top-level fields
| Field | Type | Description |
|---|---|---|
transactionId | GUID | Unique transaction ID. |
transactionType | string | See Transaction types. |
receiptType | string | Beleg, Ausgangsrechnung, or Lieferschein. |
totalAmount | decimal | Gross total of the receipt. |
tip | decimal | Tip included in totalAmount. |
discount | decimal | Discount applied to the receipt. |
dateTime | ISO 8601 | When the transaction happened. |
business | Business | Tenant / operator record. |
staff | Staff | Operator / waiter. |
table | Table | Table or delivery spot (e.g. “Bar 1”, “Room 301”). |
customer | Customer · nullable | Invoice recipient, if any. |
payments | Payment[] | Payments settling the receipt. |
items | Item[] | Line items. |
Item
| Field | Type | Description |
|---|---|---|
id | integer | Unique item ID. |
number | string | Product number (as used in APRO). |
name | string | Product name. |
bookDate | ISO 8601 | Time the line was booked. |
grossAmount | decimal | Gross price. |
netAmount | decimal | Net price. |
quantity | decimal | Units sold. |
tax | Tax | Applied tax rate. |
category | Category | Product category (a.k.a. “Sparte”). |
Tax
| Field | Type | Description |
|---|---|---|
id | integer | Unique tax rate ID. |
value | decimal | Rate, e.g. 20.0 for 20 %. |
name | string | Display name, e.g. Mwst 20 %. |
Category
| Field | Type | Description |
|---|---|---|
id | string | Unique category ID. |
number | integer | Category number. |
name | string | Display name. |
Payment
| Field | Type | Description |
|---|---|---|
id | string | Unique payment ID. |
amount | decimal | Amount paid. |
paymentType | PaymentType | Method used. |
Payment type
| Field | Type | Description |
|---|---|---|
id | string | Unique payment method ID. |
number | integer | Payment method number. |
name | string | Display name, e.g. Bar, Kreditkarte. |
Business
| Field | Type | Description |
|---|---|---|
id | string | Tenant ID from the POS database. |
name | string | Legal name. |
Staff
| Field | Type | Description |
|---|---|---|
id | string | Unique staff ID. |
number | integer | Personnel number. |
name | string | Staff name. |
Table
| Field | Type | Description |
|---|---|---|
id | string | Unique table ID. |
number | integer | Table number. |
name | string | Table label, e.g. Bar 1, Restaurant 5. |
Example response
[ { "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 %" } } ] }]Download the same payload as a standalone file:
revenue-response.json
Transaction types
The transactionType discriminates what the row represents. For
revenue-effective reports, filter on Abrechnen (and
RechnungZurückholen for reversals).
| Type | Meaning |
|---|---|
Bonieren | Item booked on an open table. |
Verschieben | Table change. |
Abrechnen | Settlement — a paid receipt. |
Stornieren | Reversal of a booking. |
RechnungZurückholen | Reversal of a settlement. |
DebitBonieren | Debit booking. |
ARAusstellen · ARPreview · ARNachdruck · ARNachdruckOriginal | Outgoing invoice lifecycle. |
Tagesabschluss · TagesabschlussPreview | Day-end close / preview. |
Kellnerabschlag · KellnerabschlagPreview · KellnerabschlagUndo · Kelleruebergabe | Waiter hand-over / settlement. |
Startbeleg · Schlussbeleg · Nullbeleg · Monatsbeleg · JahresBeleg · Nacherfassungssammelbeleg | Legal fiscal receipts (RKSV). |
TischOeffnen · TischSchliessen · GaesteanzahlAendern · GaesteanzahlKorrigieren | Table lifecycle. |
BestellmanagerBestellung · …NextState · …SetFinaleState · …Undo · …Stornieren · …Verschieben · …NaechsterGang · …Statistik | Order-manager events. |
WarenkorbErstellen · WarenkorbUpdate · WarenkorbVerwerfen | Cart lifecycle. |
DatenExport · UndoDatenExport | Data export markers. |
Kassabuch · Bargeldzählung · TerminalKassenschnitt · Lieferantabschlag · LieferantabschlagVorschau · Ansehen · Information · SchankanlageQrCode · Abrechnen HSK · Abrechnen AR · AbrechnenNachdruck | Other operational events. |
Calculating revenue
To compute revenue-effective turnover over a response, keep only paid settlements and their reversals, and sum the net line totals:
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
There is no cursor-in-response — use the deterministic transactionId of
the last row you saw as afterTransactionID on the next request, keeping
after/before unchanged. Continue until the response contains fewer
rows than your limit.