Live inventory in your ERP
Poll /inventory every few minutes to keep your stock dashboard in sync. Per-EAN endpoint for low-frequency lookups.
Connect your ERP, WMS, or purchasing system directly to our wholesale platform. Pull live inventory, place orders by EAN, and reconcile order status — all over a simple REST API authenticated with a single API key.
Use cases
Poll /inventory every few minutes to keep your stock dashboard in sync. Per-EAN endpoint for low-frequency lookups.
Schedule orders from your purchasing system. Submit by EAN, get back order number + total + VAT breakdown.
GET /orders/{id} returns current status (awaiting_wire → paid → shipped → delivered) so your finance system can match payments.
Skip product mapping — order by GTIN/EAN. Missing leading zeros and other dirty input are auto-normalised.
VIES-validated companies get 0% VAT automatically. The response includes the full breakdown for your accounting.
Every order accepts your internal PO number. It flows through to invoice + shipping documents.
Quick start
curl https://ol-y.com/api/v1/public/ping \
-H "X-API-Key: $OLY_API_KEY"curl "https://ol-y.com/api/v1/public/inventory?limit=200" \
-H "X-API-Key: $OLY_API_KEY"curl https://ol-y.com/api/v1/public/orders \
-H "X-API-Key: $OLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"purchase_order_number": "PO-2026-0418",
"payment_method": "wire",
"items": [
{ "ean": "7350012340001", "qty": 24 },
{ "ean": "7350012340018", "qty": 12 },
{ "ean": "7350012340025", "qty": 6 }
],
"shipping": {
"first_name": "Kevin",
"last_name": "Tir",
"company": "Acme Wholesale GmbH",
"street": "Hauptstrasse 12",
"postal_code":"10115",
"city": "Berlin",
"country": "DE",
"email": "purchasing@acme.example",
"phone": "+49 30 1234567"
}
}'Reference
Base URL: https://ol-y.com · all responses are JSON wrapped in { success, data, error? }.
| Method | Path | Scope |
|---|---|---|
| GET | /api/v1/public/ping | any |
| GET | /api/v1/public/inventory | read:inventory |
| GET | /api/v1/public/inventory/{ean} | read:inventory |
| GET | /api/v1/public/products | read:inventory |
| POST | /api/v1/public/orders | write:orders |
| GET | /api/v1/public/orders | read:orders |
| GET | /api/v1/public/orders/{id} | read:orders |
// Node.js — place a re-order from your ERP every Monday morning
const res = await fetch("https://ol-y.com/api/v1/public/orders", {
method: "POST",
headers: {
"X-API-Key": process.env.OLY_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
purchase_order_number: "PO-WEEKLY-" + new Date().toISOString().slice(0, 10),
payment_method: "invoice", // or "wire"
items: weeklyReorder, // [{ ean, qty }, ...]
shipping: defaultShipTo,
}),
});
const order = await res.json();
console.log("OLY order created:", order.data.order_number);{
"success": true,
"data": {
"order_id": "8e2f...",
"order_number": "TG10421",
"status": "awaiting_wire",
"payment_method": "wire",
"subtotal": 54000, // minor units (cents)
"vat_amount": 10260,
"vat_rate_pct": 19.0,
"vat_reverse_charge": false,
"total": 64260,
"currency": "EUR",
"purchase_order_number":"PO-2026-0418",
"items": [
{ "product_id": "...", "sku": "OLY-MAGN-001", "name": "Magnesium Bisglycinate", "quantity": 24, "price": 1500 }
]
}
}Authentication
Every request must include X-API-Key: vlx_live_…. Bearer tokens are also accepted: Authorization: Bearer vlx_live_….
Treat keys as secrets — store in env vars, never commit. Rotate via support if leaked.
Rate limits
More than enough for typical ERP polling (every 5 minutes = 12 calls/hour). Need higher quota for a marketplace integration? Contact us.
429 responses include a Retry-After header.
We issue keys for active wholesale accounts on request. Your purchasing system, our catalogue — no manual order forms.