List Wares
Returns a paginated list of all wares and services of the company, sorted by internal ID ascending. With term set, the list is sorted by relevance instead.
This endpoint supports no incremental filters (updatedSince, deletedSince). Master-data changes require a full sync. See Full sync vs. incremental sync for how to track stock changes without a full sync of /wares itself.
The stock block has no field for open purchase orders. To check whether a ware has one, use GET /wares/purchases?wareId={uuid}.
Request
GET /api/oauth/v2/resource/wares
Header
| Header | Value |
|---|---|
Authorization | Bearer {access_token} |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
offset | integer | No | Start position (default: 0) |
limit | integer | No | Number of results (default: 50, max: 200) |
type | string | No | Filter by ware or service |
status | string | No | Filter by status. Allowed values: active, archived, deleted, all. Comma-separated multiple values are supported, default all. See Conventions |
categoryId | string (UUID) | No | Return only wares of a specific category |
term | string | No | Search term, matched against name, internal number, and number |
Response
Success (200 OK)
Example: with Stock management licensed
json
{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
"name": "Kompressionsstrumpf Klasse II",
"description": "Paar, Größe M",
"number": "1004",
"internalNumber": "KS-M-002",
"type": "ware",
"price": 39.90,
"vat": 20,
"color": "#00adba",
"sellable": true,
"deliverable": true,
"invoiceSortIndex": 0,
"archived": false,
"deleted": false,
"category": "d4e5f6a7-b8c9-0123-defa-123456789012",
"groups": [{ "name": "Verbandsmaterial" }],
"storages": ["f6a7b8c9-d0e1-2345-fabc-345678901234"],
"distributors": ["a7b8c9d0-e1f2-3456-abcd-456789012345"],
"tenancies": ["f0e1d2c3-b4a5-6789-fedc-ba9876543210"],
"stock": {
"stockEffective": 24,
"stockAvailable": 20,
"stockMinimum": 10,
"stockTarget": 30,
"purchasingPriceNet": 18.50,
"sellingPriceNet": 33.25,
"unit": "pcs",
"unitBase": 1,
"unitBaseSign": false,
"deliveryNotice": null,
"storageNotice": null,
"distributorNotice": null
}
}
],
"meta": {
"total": 142,
"offset": 0,
"limit": 50
}
}Example: without Stock management licensed
The stock key is not present in this case — it does not exist, and is not returned as null.
json
{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
"name": "Kompressionsstrumpf Klasse II",
"description": "Paar, Größe M",
"number": "1004",
"internalNumber": "KS-M-002",
"type": "ware",
"price": 39.90,
"vat": 20,
"color": "#00adba",
"sellable": true,
"deliverable": true,
"invoiceSortIndex": 0,
"archived": false,
"deleted": false,
"category": "d4e5f6a7-b8c9-0123-defa-123456789012",
"groups": [],
"storages": [],
"distributors": [],
"tenancies": ["f0e1d2c3-b4a5-6789-fedc-ba9876543210"]
}
],
"meta": {
"total": 142,
"offset": 0,
"limit": 50
}
}Response fields
| Field | Type | Description |
|---|---|---|
data | Array | List of wares |
data[].id | string (UUID) | Unique ID of the ware |
data[].name | string | Name of the ware |
data[].description | string | null | Description text |
data[].number | string | null | Number of the ware |
data[].internalNumber | string | null | Internal number of the ware |
data[].type | string | ware or service |
data[].price | number | null | Sales price |
data[].vat | number | VAT rate in percent (e.g. 20) |
data[].color | string | Color as hex code (e.g. #00adba) |
data[].sellable | boolean | Whether the ware can be sold |
data[].deliverable | boolean | Whether the ware can be delivered |
data[].invoiceSortIndex | integer | Sort position on the invoice |
data[].archived | boolean | Whether the ware is archived |
data[].deleted | boolean | Whether the ware is deleted |
data[].category | string (UUID) | null | ID of the assigned category, loadable via Get Ware Category |
data[].groups | Array | Assigned quick-selection groups |
data[].groups[].name | string | Name of the quick-selection group (no id — groups have no UUID) |
data[].storages | Array<string (UUID)> | IDs of the assigned storages, loadable via Get Storage |
data[].distributors | Array<string (UUID)> | IDs of the assigned distributors, loadable via Get Distributor |
data[].tenancies | Array<string (UUID)> | IDs of the assigned tenants |
data[].stock | object | Only present when the Stock management add-on is licensed and the owning user of your API access has the Lagerverwaltung: Anzeigen permission. If not, this key is missing entirely — not null. |
data[].stock.stockEffective | number | Current physical stock |
data[].stock.stockAvailable | number | Stock available for sale |
data[].stock.stockMinimum | number | Configured minimum stock |
data[].stock.stockTarget | number | Configured target stock |
data[].stock.purchasingPriceNet | number | null | Net purchasing price |
data[].stock.sellingPriceNet | number | null | Net selling price |
data[].stock.unit | string | null | Stock unit (e.g. pcs) |
data[].stock.unitBase | number | null | Base quantity used for unit conversion |
data[].stock.unitBaseSign | boolean | Base unit flag (default: false). Does not contain a label such as “pcs” |
data[].stock.deliveryNotice | string | null | Note about delivery |
data[].stock.storageNotice | string | null | Note about storage |
data[].stock.distributorNotice | string | null | Note about the distributor |
meta.total | integer | Total number of wares |
meta.offset | integer | Current start position |
meta.limit | integer | Number of returned entries |
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/wares?offset=0&limit=50&type=beispiel&status=beispiel&categoryId=b2c3d4e5-f6a7-8901-bcde-f01234567890&term=Muster" \
-H "Authorization: Bearer {access_token}"Parameter
Zuerst Token anfordern
Possible errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | Invalid type or status value, or categoryId is not a valid UUID format |
| 401 | invalid_client | Invalid or missing access token |
| 403 | insufficient_scope | Scope wares not present |