Offsys documentatie

Beschikbaarheid

Beschikbaarheid

Er zijn twee manieren om te zien wat er van je producten vrij is:

Als bezet tellen alle orders die niet zijn afgewezen, dus ook aanvragen en offertes. Daarnaast tellen holds mee: producten in de winkelwagen van de widget. Een hold vervalt als de klant niet afrekent.

De API blokkeert geen producten die niet beschikbaar zijn. Dit dien je zelf te controleren.


Periode

VeldWaardeVerplichtOmschrijving
startDatumJaBegin van de periode, met of zonder tijd
endDatumJaEinde van de periode. Moet na start liggen
productsArrayNeeProductnummers, bijvoorbeeld products[]=1001&products[]=1010. Zonder dit veld krijg je alle producten
officeGetalNeeId van de vestiging. Zonder dit veld tellen alle vestigingen samen
pageGetalNeeZie pagina's
per_pageGetalNeeZie pagina's

Voorbeeld:

curl "https://api.offsys.nl/availability?start=2026-06-12%2010:00&end=2026-06-14%2018:00&products[]=1001&products[]=1010" \
-X GET \
-H "Authorization: 37d37675-59cd-431c-8d28-9553de7bae4d"

Resultaat:

{
"status": "success",
"period": {
"start": "2026-06-12 10:00:00",
"end": "2026-06-14 18:00:00",
"office": null
},
"products": [
{
"id": "1001",
"name": "Partytent 6x3 meter",
"stock": 4,
"preparation_time": 60,
"aftercare_time": 120,
"booked": 2,
"held": 0,
"available": 2,
"held_until": null,
"with_buffer": {
"booked": 3,
"held": 0,
"available": 1
},
"variants": []
},
{
"id": "1010",
"name": "Aanhanger",
"stock": 3,
"preparation_time": 0,
"aftercare_time": 0,
"booked": 1,
"held": 1,
"available": 1,
"held_until": "2026-06-01 14:35:00",
"with_buffer": {
"booked": 1,
"held": 1,
"available": 1
},
"variants": [
{
"id": 7,
"name": "Met huif",
"stock": 1,
"preparation_time": 0,
"aftercare_time": 0,
"booked": 0,
"held": 1,
"available": 0,
"held_until": "2026-06-01 14:35:00",
"with_buffer": {
"booked": 0,
"held": 1,
"available": 0
}
}
]
}
],
"meta": {
"total": 2,
"per_page": 100,
"current_page": 1,
"last_page": 1
}
}
VeldOmschrijving
stockTotale voorraad. Met office de voorraad van die vestiging, zonder office de voorraad van alle actieve vestigingen samen. null als het product geen voorraadbeheer heeft
bookedHoeveel er in de periode tegelijk in orders zit, op het drukste moment
heldHoeveel er in de periode tegelijk in winkelwagens van de widget ligt, op het drukste moment
availablestock min booked min held
held_untilWanneer de laatste hold vervalt
preparation_timeVoorbereidingstijd in minuten, vóór de levering
aftercare_timeNazorgtijd in minuten, na de retour
with_bufferDezelfde telling, met de voorbereidings- en nazorgtijd erbij. Zo rekent Offsys zelf

Reserveringen per dag

Haal van alle producten met voorraadbeheer de voorraad op, met per dag de reserveringen vanaf vandaag.


Voorbeeld:

curl "https://api.offsys.nl/stock" \
-X GET \
-H "Authorization: 37d37675-59cd-431c-8d28-9553de7bae4d"

Resultaat:

{
"status": "success",
"products": [
{
"id": "1001",
"name": "Partytent 6x3 meter",
"stock": 4,
"reserved_by_date": {
"2026-06-11": [
{
"type": "order",
"amount": 2,
"from": null,
"till": null,
"preparation_from": "23:30",
"aftercare_till": null,
"buffer_only": true,
"expires_at": null
}
],
"2026-06-12": [
{
"type": "order",
"amount": 2,
"from": "00:30",
"till": null,
"preparation_from": null,
"aftercare_till": null,
"buffer_only": false,
"expires_at": null
},
{
"type": "hold",
"amount": 1,
"from": "10:00",
"till": "17:00",
"preparation_from": "09:00",
"aftercare_till": "19:00",
"buffer_only": false,
"expires_at": "2026-06-01 14:35:00"
}
],
"2026-06-13": [
{
"type": "order",
"amount": 2,
"from": null,
"till": "18:00",
"preparation_from": null,
"aftercare_till": "20:00",
"buffer_only": false,
"expires_at": null
}
]
}
}
]
}

Een reservering staat op elke dag waarop het product bezet is.

VeldOmschrijving
typeorder of hold (in een winkelwagen van de widget)
amountAantal
fromBegintijd, alleen op de eerste dag
tillEindtijd, alleen op de laatste dag. Heeft een order geen retourdatum, dan is het product alleen op de leverdag bezet
preparation_fromBegin van de voorbereidingstijd, alleen op de dag waarop die begint
aftercare_tillEinde van de nazorgtijd, alleen op de dag waarop die eindigt
buffer_onlytrue als het product die dag alleen bezet is door voorbereidings- of nazorgtijd
expires_atAlleen bij een hold: wanneer die vervalt

Vestigingen en varianten

Heeft een product varianten of voorraad per vestiging, dan staan stock en reserved_by_date een niveau dieper:

  • Met varianten: in variants, per variant.
  • Met voorraad per vestiging: in offices, per vestiging (met id, name en place).
  • Met beide: in offices, en daarbinnen per variant in variants.
{
"id": "1001",
"name": "Partytent 6x3 meter",
"offices": [
{
"id": 1,
"name": "Hoofdvestiging",
"place": "Utrecht",
"stock": 3,
"reserved_by_date": { ... }
}
]
}

Holds staan bij elke vestiging.