# SAP Business One

> How SAP Business One feeds serial numbers to BatteryPass through the Service Layer.

> [!NOTE]
> This page describes an integration pattern. BatteryPass ships no connector for SAP Business One and has no
> partnership with SAP; nothing here is a vendor approval.

The Service Layer is the way in: OData V3 under `/b1s/v1` and OData V4 under `/b1s/v2`. It works with sessions:
the middleware signs in with `POST /Login`, keeps the session cookie and signs in again when the session ends. Use a
technical Business One user with read access to items, serial numbers and production orders only.

Webhooks are not documented for the Service Layer, so the middleware polls: for example every few minutes for
serial numbers created since the last run. It writes them into a file with the `generic-csv` preset (GTIN, serial
number, manufacturing date, facility) and stages it as in [units from production](https://passport.kabin.sh/docs/en/integrations/workflows/units-from-production).
Keep the Service Layer itself inside your network; only the middleware talks to BatteryPass.

## Interfaces and how they were checked

- **Vendor:** SAP
- **On-premise:** SAP Business One with Service Layer (SQL Server and SAP HANA)

The Service Layer works with sessions: the middleware signs in with POST /Login and keeps the session cookie. Webhooks are not documented for the Service Layer; the middleware finds changes by polling.

An integration pattern, not a connector: BatteryPass ships no ERP connector and holds no vendor certification.

| Interface                                                                                                                                                                               | Protocol | Sign-in | Events | Objects                                                                                      | Checked                                         |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------ | -------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| [`Service Layer /b1s/v1`](https://learning.sap.com/courses/leveraging-the-sap-business-one-service-layer/logging-in-and-logging-out-using-service-layer-api) (Service Layer (OData V3)) | OData V3 | Session | none   | Product/material master, Batch/serial number, Production order, Delivery/goods issue, Return | checked in the vendor documentation, 24/10/2026 |
| [`Service Layer /b1s/v2`](https://learning.sap.com/courses/leveraging-the-sap-business-one-service-layer/logging-in-and-logging-out-using-service-layer-api) (Service Layer (OData V4)) | OData V4 | Session | none   | Product/material master, Batch/serial number, Production order, Delivery/goods issue, Return | checked in the vendor documentation, 24/10/2026 |

**Import presets: Generic CSV file** (`generic-csv`): For any ERP and for files a middleware writes itself: GTIN, serial number, manufacturing date, facility (name or GLN), model version and battery status, with German and English column names.

| Column in the export                                          | Field in BatteryPass                                      |
| ------------------------------------------------------------- | --------------------------------------------------------- |
| `GTIN` (also EAN, GTIN-13, GTIN-14)                           | GTIN (GS1) `identification.gtin`                          |
| `Serial number` (also Seriennummer, serial_number)            | Serial number `identification.serial_number`              |
| `Manufacturing date` (also Herstelldatum, manufacturing_date) | Manufacturing date `identification.manufacturing_date`    |
| `Facility` (also Produktionsstätte, Facility GLN, Werk-GLN)   | Place of manufacture `identification.manufacturing_place` |
| `Model version` (also Modellversion, model_version)           | Model version `model_version`                             |
| `Battery status` (also Batteriestatus, battery_status)        | Battery status `identification.battery_status`            |

## Workflows

- [Units from production](https://passport.kabin.sh/docs/en/integrations/workflows/units-from-production.md): Serial numbers from the production confirmation or goods receipt are staged as an import; members review, commit and approve before any passport appears. Key scopes: import
- [Passport links back into the ERP](https://passport.kabin.sh/docs/en/integrations/workflows/passport-links-to-erp.md): The middleware follows the change feed and writes the GS1 Digital Link and the passport status to the serial number record in the ERP, so labels and delivery papers carry it. Key scopes: read
- [Returns and repairs as lifecycle events](https://passport.kabin.sh/docs/en/integrations/workflows/returns-and-repairs.md): Completed repairs, inspections and component replacements from service or return orders appear as events in the unit's history. Key scopes: read, condition
- [Product change leads to a new model version](https://passport.kabin.sh/docs/en/integrations/workflows/product-change.md): A change to the product master in the ERP triggers a notification; a member creates a new model version in BatteryPass. Declared data is never written automatically. Key scopes: read
