Overzicht
Via de Boco API kun je programmatisch orders aanmaken en retouren indienen voor het maandelijks opzegbare huurmodel. Dit document bevat alle informatie die je nodig hebt om de koppeling te realiseren.
Purchase en rental orders via één endpoint.
Meubelstukken uit huurorders retourneren/opzeggen.
Quickstart
In 3 stappen aan de slag met de Boco API:
API key aanvragen
Neem contact op met je Boco contactpersoon om een API key te ontvangen. Je krijgt een test- en een live key.
Test je verbinding
Gebruik het ping endpoint om te verifiëren dat je key werkt en de verbinding actief is.
Eerste request plaatsen
Gebruik het minimale voorbeeld om je eerste test-order of retour aan te maken.
Authenticatie
Elke request moet een x-api-key header bevatten met jouw unieke API key. Deze key ontvang je van je Boco contactpersoon.
# Header toevoegen aan elk request
x-api-key: boco_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxOrders endpoint
https://api.bocooffice.com/v1/ordersContent-Type: application/json
Maak programmatisch purchase of rental orders aan.
Returns endpointNieuw v1.1
https://api.bocooffice.com/v1/returnsContent-Type: application/json
Retourneer meubelstukken uit een lopende huurorder. De huur stopt per de eerste van de volgende maand. Er wordt automatisch een ophaalverzoek aangemaakt.
- Retouren zijn alleen mogelijk op huurorders (
order_type: "rental") - De huur stopt altijd per de 1e van de volgende maand
- Er wordt automatisch een ophaalverzoek aangemaakt
- Je kunt niet meer items retourneren dan er actief gehuurd worden
- Eerdere retouren worden meegeteld bij de beschikbare hoeveelheid
Ping endpoint
Gebruik het ping endpoint om je authenticatie en verbinding te testen zonder een echte order aan te maken.
https://api.bocooffice.com/v1/pingVereist dezelfde x-api-key header als alle andere endpoints.
Response (200 OK)
{
"status": "ok",
"timestamp": "2026-03-09T12:00:00Z"
}cURL voorbeeld
curl -X GET \
https://api.bocooffice.com/v1/ping \
-H "x-api-key: boco_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Request Body — Orders
Stuur een JSON object met de volgende structuur:
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| order_type | string | Ja | "purchase" of "rental" |
| shipping_address | object | Ja | Afleveradres (zie hieronder) |
| items | array | Ja | Lijst met producten (zie hieronder) |
| delivery_date | string | Nee | Gewenste leverdatum (YYYY-MM-DD) |
| notes | string | Nee | Opmerkingen bij de order |
| customer_reference | string | Nee | Eigen referentienummer (bijv. PO-nummer) |
shipping_address object
| Veld | Verplicht | Beschrijving |
|---|---|---|
| street | Ja | Straat + huisnummer |
| postal_code | Ja | Postcode |
| city | Ja | Plaats |
| contact_name | Nee | Contactpersoon |
| country | Nee | Landcode (standaard: NL) |
| phone | Nee | Telefoonnummer |
items array
| Veld | Verplicht | Beschrijving |
|---|---|---|
| sku | Ja | Product SKU (case-insensitive, bijv. "BC-101W") |
| quantity | Ja | Aantal (1–1000) |
| unit_price_override | Nee | Handmatige stuksprijs (overschrijft catalogusprijs) |
BC-101-W), en valt terug op de product-SKU alleen als er geen variant-match is.Request Body — Returnsv1.1
Stuur een JSON object met de volgende structuur naar POST /v1/returns:
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| order_id | string (UUID) | Ja | Het ID van de oorspronkelijke huurorder |
| items | array | Ja | Lijst met te retourneren items |
| pickup_address | object | Ja | Ophaaladres voor de meubels |
| notes | string | Nee | Opmerkingen bij de retour |
items array
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| sku | string | Ja | Product SKU (case-insensitive) |
| quantity | integer | Ja | Aantal te retourneren (1–1000) |
| reason | string | Nee | Reden van retour |
pickup_address object
| Veld | Verplicht | Beschrijving |
|---|---|---|
| street | Ja | Straat + huisnummer |
| postal_code | Ja | Postcode |
| city | Ja | Plaats |
| contact_name | Ja | Contactpersoon voor ophaling |
| country | Nee | Landcode (standaard: NL) |
| phone | Nee | Telefoonnummer |
Response — Orders
Succes (201 Created)
{
"success": true,
"order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"order_number": "BC-00123",
"status": "pending",
"total_items": 8,
"subtotal": 1500.00,
"tax_amount": 315.00,
"total_amount": 1815.00
}| Veld | Beschrijving |
|---|---|
| order_id | Uniek order ID (UUID) |
| order_number | Leesbaar ordernummer |
| status | Altijd "pending" bij aanmaak |
| total_items | Totaal aantal stuks |
| subtotal | Subtotaal excl. BTW |
| tax_amount | BTW bedrag (21%) |
| total_amount | Totaal incl. BTW |
Response — Returnsv1.1
Succes (201 Created)
{
"success": true,
"return_id": "ret-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"return_number": "RET-00045",
"status": "confirmed",
"effective_date": "2026-04-01",
"pickup_scheduled": true,
"pickup_date": "2026-04-01",
"items_returned": 3,
"monthly_reduction": 189.00,
"message": "Huur stopt per 2026-04-01. Ophaalverzoek is aangemaakt."
}| Veld | Beschrijving |
|---|---|
| return_id | Uniek retour ID (UUID) |
| return_number | Leesbaar retournummer (RET-00001) |
| status | Altijd "confirmed" bij aanmaak |
| effective_date | Datum waarop huur stopt (1e van volgende maand) |
| pickup_scheduled | Boolean, altijd true |
| pickup_date | Geplande ophaaldatum |
| items_returned | Totaal aantal geretourneerde stuks |
| monthly_reduction | Bedrag waarmee maandelijkse huur daalt (excl. BTW) |
| message | Bevestigingsbericht |
Retour-specifieke foutcodes
| Code | Situatie | Voorbeeld |
|---|---|---|
| 400 | Geen huurorder | "Returns are only available for rental orders" |
| 400 | Te veel retourneren | "Cannot return 5 of BC-101W, only 3 currently rented" |
| 400 | SKU niet in order | "SKU BC-999X is not part of order BC-00123" |
| 400 | Order niet gevonden | "Order not found: a1b2c3d4..." |
| 401 | Auth fout | "Invalid API key" |
| 429 | Rate limit | "Rate limit exceeded. Try again in 1423 seconds." |
Test omgeving
De Boco API ondersteunt een volledige testomgeving. Je API key bepaalt in welke omgeving je werkt:
boco_test_xxxx…- Orders worden niet verwerkt
- Zichtbaar in een apart test dashboard
- Geen impact op voorraad of facturatie
- Ideaal voor integratie-ontwikkeling
boco_live_xxxx…- Orders worden echt verwerkt
- Voorraad wordt gereserveerd
- Facturen worden aangemaakt
- Gebruik pas na succesvolle tests
# Zelfde URL, andere key
POST https://api.bocooffice.com/v1/orders
x-api-key: boco_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # → test omgeving
x-api-key: boco_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # → live omgevingFoutcodes
| Code | Betekenis | Voorbeeld |
|---|---|---|
| 400 | Validatiefout | Ontbrekende velden, ongeldige SKU, te veel items |
| 401 | Authenticatiefout | Ontbrekende of ongeldige API key |
| 405 | Method Not Allowed | Gebruik POST voor orders en returns |
| 429 | Rate limit bereikt | Max 100 requests per uur overschreden |
| 500 | Serverfout | Interne fout, neem contact op |
400 — Validatiefouten
{ "error": "Missing required field: order_type" }{ "error": "SKU not found: BC-999X" }{ "error": "Quantity must be between 1 and 1000" }{ "error": "Maximum 50 items per order exceeded" }{ "error": "Returns are only available for rental orders" }401 — Authenticatiefouten
{ "error": "Missing x-api-key header" }{ "error": "Invalid API key" }{ "error": "API key has been revoked" }429 — Rate limit
{
"error": "Rate limit exceeded. Try again in 1423 seconds.",
"retry_after": 1423
}Limieten
Rate limit headers
Elke response bevat de volgende headers zodat je je verbruik kunt monitoren:
| Header | Beschrijving |
|---|---|
| X-RateLimit-Limit | Maximum requests per uur (100) |
| X-RateLimit-Remaining | Resterend aantal requests dit uur |
| X-RateLimit-Reset | Unix timestamp wanneer de limiet reset |
Voorbeeld response headers
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 73
X-RateLimit-Reset: 1741521600Voorbeelden
cURL — Order aanmaken
curl -X POST \
https://api.bocooffice.com/v1/orders \
-H "Content-Type: application/json" \
-H "x-api-key: boco_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"order_type": "purchase",
"shipping_address": {
"contact_name": "Jan Jansen",
"street": "Keizersgracht 100",
"postal_code": "1015 AA",
"city": "Amsterdam",
"country": "NL",
"phone": "+31612345678"
},
"delivery_date": "2026-04-15",
"notes": "Graag voor 10:00 leveren",
"customer_reference": "PO-2026-001",
"items": [
{
"sku": "BC-101W",
"quantity": 5,
"unit_price_override": 189.00
},
{
"sku": "BC-103Z",
"quantity": 3
}
]
}'Minimaal voorbeeld — Order
{
"order_type": "rental",
"shipping_address": {
"street": "Herengracht 50",
"postal_code": "1017 BN",
"city": "Amsterdam"
},
"items": [
{ "sku": "BC-201", "quantity": 10 }
]
}cURL — Retour aanmaken v1.1
curl -X POST \
https://api.bocooffice.com/v1/returns \
-H "Content-Type: application/json" \
-H "x-api-key: boco_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"items": [
{
"sku": "BC-101W",
"quantity": 2,
"reason": "Niet meer nodig"
},
{
"sku": "BC-103Z",
"quantity": 1,
"reason": "Kantoor verkleind"
}
],
"pickup_address": {
"street": "Keizersgracht 100",
"postal_code": "1015 AA",
"city": "Amsterdam",
"contact_name": "Jan Jansen",
"phone": "+31612345678"
},
"notes": "Graag ophalen op werkdagen tussen 9-17u"
}'Minimaal voorbeeld — Retour
{
"order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"items": [
{ "sku": "BC-101W", "quantity": 1 }
],
"pickup_address": {
"street": "Herengracht 50",
"postal_code": "1017 BN",
"city": "Amsterdam",
"contact_name": "Jan Jansen"
}
}Prijslogica (Orders)
De stuksprijs wordt als volgt bepaald (eerste match wint):
- unit_price_override — als je deze meestuurt, wordt die prijs gebruikt
- Dealer-specifieke prijs — indien geconfigureerd voor jouw account
- Variant prijs — price_override of basisprijs + aanpassing
BTW wordt automatisch berekend op 21%.
WebhooksComing soon
Binnenkort kunnen dealers een webhook URL configureren om realtime updates te ontvangen over orderstatus-wijzigingen.
Beschikbare events
order.confirmedOrder is bevestigd door Boco
order.shippedOrder is verzonden
order.deliveredOrder is afgeleverd
order.cancelledOrder is geannuleerd
Voorbeeld webhook payload
{
"event": "order.confirmed",
"order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"order_number": "BC-00123",
"timestamp": "2026-03-09T14:30:00Z"
}Changelog
| Datum | Versie | Wijziging |
|---|---|---|
| 2026-03-10 | v1.1 | Returns API endpoint toegevoegd — retouren aanmaken voor huurorders |
| 2026-01-09 | v1.0 | Initiële release Order API — orders aanmaken, authenticatie, rate limiting |
Heb je vragen over de integratie? Neem contact op met je Boco contactpersoon.
© 2026 Boco — API v1.1
