Download OpenAPI specification:
REST-to-SOAP proxy that integrates the BUBI bike-sharing system with BKK's SAP R/3 ECC 6.0 ERP. Exposes a JSON REST API and translates requests to WSDL-based SOAP web service calls.
SD interface — Submits billing line items to SAP Sales and Distribution. SAP creates an SD Order, generates an Invoice, reports to the NAV online invoice data service, and books the invoice to the customer account. Hungarian law requires an invoice at the time of BUBI service usage, regardless of payment success.
NAV interface — Validates Hungarian tax numbers against the National Tax and Customs Administration (NTCA) database and returns the legal entity's official registered name and address. Pre-validation is mandatory; NAV rejects invalid data during online invoice reporting.
| Date | Version | Notes |
|---|---|---|
| Fri Apr 10 2026 | 7.2.0 | SD: optional overrides.authId restored; SAP AuthId is overrides.authId when set, otherwise paymentTransaction.externalId (TransId remains externalId) |
| Fri Apr 10 2026 | 7.1.0 | SD: optional paymentTransaction.isFullyRefunded (boolean): with originalInvoiceId, false maps to INVOICETYPE "2" (partial refund), true or omitted maps to "3" (full refund) |
| Fri Apr 10 2026 | 7.0.0 | Breaking: overrides.authId removed; SAP AuthId is always paymentTransaction.externalId (same as TransId; no appended "1") SD: idempotency cache keys for SD change for the same payload vs releases before this until TTL expires |
| Thu Apr 09 2026 | 6.0.0 | Breaking: paymentTransaction.refundedTransactionId removed; use originalInvoiceId (string, optional, max 10) — the SAP invoiceId from the original POST /invoice response SD: Originalinvoicenumber now carries that SAP invoice number; INVOICETYPE remains "1" invoice / "2" corrective / "3" cancellation (char1), with "3" inferred when originalInvoiceId is set unless overrides.invoiceType is provided |
| Fri Mar 27 2026 | 5.0.2 | SD: POST /invoice now applies idempotency on selected SAP business fields (Id, AuthId, TransId, Invoicetype), reusing the same successful SAP response for duplicates |
| Thu Mar 26 2026 | 5.0.1 | SD: SAP ZbubiIf BankCard now receives `paymentTransaction.last4` as four characters (no asterisk padding) |
| Thu Mar 26 2026 | 5.0.0 | Breaking: POST /invoice removed top-level authIdOverride; use overrides.authId instead SD: optional overrides object on POST /invoice with authId and invoiceType for SAP ZbubiIf (integration / negative testing) |
| Mon Mar 23 2026 | 4.0.0 | Breaking: NAV lookup endpoint moved from GET /company/info to GET /legal-entity/info Breaking: NAV DTO/schema names renamed from NavGetCompanyInfo* to NavGetLegalEntityInfo* |
| Mon Mar 23 2026 | 3.0.0 | Breaking: POST /invoice now requires `user` in the request body Breaking: POST /invoice request field `company` renamed to `legalEntity` |
| Sat Mar 21 2026 | 2.1.0 | SD: optional authIdOverride on POST /invoice body to override SAP AuthId SD: salesOrderId in POST /invoice response extracts the numeric id when SAP EReturn is like "Sales order:0015537378" |
| Fri Mar 20 2026 | 2.0.0 | Breaking: paymentTransaction.id is number (1–9999999999), not string Breaking: refundedTransactionExternalId removed; use refundedTransactionId (number, optional) for storno Breaking: documentId and documentType removed (SAP Dummy1/Dummy2 no longer populated) SD: Itemprice and Itemamount sent as whole-forint strings (minor HUF units ÷ 100, no .00 fraction) Validation: last4 must be exactly 4 characters SD: SAP Invoicetype uses numeric codes ("1" invoice, "2" corrective, "3" cancellation/storno) |
| Thu Mar 19 2026 | 1.2.0 | NAV taxpayer validation interface (GET /company/info) Health check integration: SAP SOAP client readiness on /healthz Version indicator: running commit SHA on /healthz |
| Wed Mar 18 2026 | 1.1.0 | Structured SD request DTOs with validation SOAP connectivity: local WSDL files, TLS certificate handling Internal auth guard |
| Fri Mar 13 2026 | 1.0.0 | SD invoicing interface (POST /invoice) Basic SOAP-to-REST proxy for ZbubiWs Prometheus metrics for SD requests |
Returns a paginated list of outgoing SOAP request rows ordered by dispatched_at DESC. Use filters to narrow by status, date range, invoice ID, document, or SAP field values.
| dispatchedAtFrom | string Filter dispatched_at >= this ISO timestamp |
| dispatchedAtTo | string Filter dispatched_at <= this ISO timestamp |
| status | string Enum: "TRANSMITTED" "SAP_REJECTED" "TRANSPORT_ERROR" "IDEMPOTENCY_REPLAY" Filter by outcome status |
| invoiceId | string Filter by SAP invoice ID |
| transId | string Filter by SAP TRANS_ID |
| authId | string Filter by SAP AUTH_ID |
| posCode | string Filter by SAP POS_CODE |
| documentType | string (DocumentType) Enum: "ORDER" "INVOICE" Filter by document type |
| documentId | string Filter by document ID |
| page | number Default: 1 Page number (1-based) |
| limit | number Default: 100 Page size |
{- "data": [
- {
- "id": 1,
- "requestId": "a3bb189e-8bf9-3888-9912-ace4e6543002",
- "idempotencyKey": "sd:idempotency:v1:e3b0c44298fc1c149afb",
- "documentType": "ORDER",
- "documentId": "1234567",
- "paymentTransactionId": "9876543210",
- "paymentTransactionExternalId": "A1B2C3D4E5",
- "invoicetype": "1",
- "paymMode": "CC",
- "posCode": "BUBI_HU",
- "transId": "abc1234567",
- "matnr": "BUBI_60MIN",
- "authId": "A1B2C3",
- "itemnumber": "1",
- "servDat": "20260426",
- "time": "143022",
- "userId": "USR-00012345",
- "valFrom": "20260426",
- "valTo": "20260426",
- "quant": "1",
- "itemprice": "1500",
- "itemamount": "1905",
- "name1": "Kovács János",
- "emailAddress": "janos.kovacs@example.com",
- "country": "HU",
- "postCode1": "1051",
- "city1": "Budapest",
- "street": "Váci utca 1",
- "legalRel": "B2C",
- "taxNumber": "8123456789",
- "groupTaxNumber": "12345678-2-41",
- "legalEntityBillingName": "Acme Kft.",
- "legalEntityBillingCountry": "HU",
- "legalEntityBillingZip": "1051",
- "legalEntityBillingCity": "Budapest",
- "legalEntityBillingAddress": "Váci utca 1",
- "idField": "28135439",
- "bankCard": "1234",
- "originalinvoicenumber": "9215538727",
- "dummy1": null,
- "dummy2": null,
- "dummy3": null,
- "dummy4": null,
- "dispatchedAt": "2026-04-26T08:30:00.000Z",
- "respondedAt": "2026-04-26T08:30:01.234Z",
- "eStatus": "O",
- "eReturn": "Sales order: 9200000001",
- "invoiceId": "9215538727",
- "salesOrderId": "9200000001",
- "status": "TRANSMITTED",
- "reasonCode": null,
- "reasonContext": {
- "eReturn": "Material number 9999 not found"
}, - "createdAt": "2026-04-26T08:30:00.000Z",
- "updatedAt": "2026-04-26T08:30:01.234Z"
}
], - "total": 1042
}Streams all matching rows as a UTF-8 CSV in the BKK 3.0 column layout (39 columns, A–AM). Filter by status != TRANSMITTED to get the unsynchronised data view. Rows are ordered by dispatched_at ASC. Large result sets are batched internally.
| dispatchedAtFrom | string Filter dispatched_at >= this ISO timestamp |
| dispatchedAtTo | string Filter dispatched_at <= this ISO timestamp |
| status | string Enum: "TRANSMITTED" "SAP_REJECTED" "TRANSPORT_ERROR" "IDEMPOTENCY_REPLAY" Filter by outcome status |
| invoiceId | string Filter by SAP invoice ID |
| transId | string Filter by SAP TRANS_ID |
| authId | string Filter by SAP AUTH_ID |
| posCode | string Filter by SAP POS_CODE |
| documentType | string (DocumentType) Enum: "ORDER" "INVOICE" Filter by document type |
| documentId | string Filter by document ID |
| page | number Default: 1 Page number (1-based) |
| limit | number Default: 100 Page size |
Submits billing line items to the SAP SD SOAP endpoint. SAP creates an SD Order, generates an Invoice, reports to NAV, and books the invoice to the customer account.
required | object Common payment transaction data. | ||||||||||||||||||||||
| |||||||||||||||||||||||
required | Array of objects (SdItem) Array of billing line items. | ||||||||||||||||||||||
Array
| |||||||||||||||||||||||
object Optional overrides for SAP ZbubiIf fields (e.g. Invoicetype). Intended for advanced scenarios and integration / negative testing. | |||||||||||||||||||||||
| |||||||||||||||||||||||
required | object Private individual customer data. | ||||||||||||||||||||||
| |||||||||||||||||||||||
object Legal entity customer data. | |||||||||||||||||||||||
| |||||||||||||||||||||||
{- "paymentTransaction": {
- "id": 1234567890,
- "externalId": "kkkkkkG",
- "posCode": "BUBI0001",
- "processedAt": "2026-03-11T14:30:00.000Z",
- "customerRef": "1ww0g",
- "emailAddress": "test@example.com",
- "last4": "1234",
- "originalInvoiceId": "9215538727",
- "isFullyRefunded": true,
- "documentType": "ORDER",
- "documentId": "12345"
}, - "items": [
- {
- "productExternalSKU": "1236",
- "quantity": 1,
- "itemPrice": 100000,
- "validFrom": "2026-03-11T08:00:00.000Z",
- "validTo": "2026-03-11T20:00:00.000Z"
}
], - "overrides": {
- "authId": "customIdempotencyKey01",
- "invoiceType": "1"
}, - "user": {
- "name": "Test User",
- "country": "HU",
- "postCode": "1011",
- "city": "Budapest",
- "street": "Fo utca 1"
}, - "legalEntity": {
- "taxNumber": "11961552-2-42",
- "groupTaxNumber": "",
- "name": "Peek & Cloppenburg Kft",
- "country": "HU",
- "zipCode": "1087",
- "city": "Budapest",
- "address": "Kerepesi ut 9."
}
}{- "salesOrderId": "0015537378",
- "invoiceId": "9215538727",
- "errorType": "SAP_REJECTED",
- "errorMessage": "Duplicate invoice number"
}Validates a Hungarian tax number against the NAV database and returns the official registered legal entity name, address, and group tax number.
| taxNumber required | string = 8 characters Example: taxNumber=11961552 8-digit Hungarian taxpayer ID to validate against the NAV database. |
{- "valid": true,
- "taxpayerName": "Peek & Cloppenburg Kft",
- "taxNumber": "11961552-2-42",
- "groupTaxNumber": "17782672-5-44",
- "addresses": [
- {
- "type": "HQ",
- "countryCode": "HU",
- "postalCode": "2040",
- "city": "BUDAÖRS",
- "address": "BUDAPESTI ÚT 108"
}
]
}