Inventelo API
Ett API för hela lagret.
REST och JSON över HTTPS, OpenAPI 3.1 och signerade webhooks. Artiklar, saldon, ordrar, inleveranser, returer, transporter och 3PL-kunder går att läsa, skapa och automatisera från era egna system.
- REST och JSON
- OpenAPI 3.1
- Signerade webhooks
curl "https://app.inventelo.com/api/v1/stock-levels?sku=7350012345678" \
-H "Authorization: Bearer $INVENTELO_API_KEY"{
"data": [
{
"product_id": "0b8e6c1e-2f4a-4c1f-9a51-3f7d2c9e8a10",
"sku": "7350012345678",
"ean": "7350012345678",
"name": "Vattenflaska 750 ml, stål",
"active": true,
"total_qty": 1240,
"reserved_qty": 86,
"available_qty": 1154,
"last_in_date": "2026-09-12"
}
],
"meta": { "has_more": false, "next_cursor": null }
}- 13endpoints
- 8resursområden
- 44webhook-händelser
- 3.1OpenAPI-specifikation
Principer
Byggt för integrationer som håller.
Samma konventioner i hela API:t, så att en integration mot ordrar fungerar på samma sätt som en mot returer eller debitering.
API-nycklar med behörigheter
En nyckel per system med exakt de behörigheter som behövs. Nycklar lagras hashade, kan få utgångsdatum och återkallas direkt.
OpenAPI 3.1
Maskinläsbar specifikation för kodgenerering, Postman och interaktiv dokumentation.
Signerade webhooks
Händelser skickas när de sker, signerade med HMAC-SHA256, med automatiska omförsök och omleverans via API.
Paginering i varje lista
Cursor-baserade sidor som håller även när data ändras. Hämta bara det som ändrats med since.
Förutsägbara fel
Samma felformat överallt med kod, meddelande och request-id, så att felsökning tar minuter.
Tydliga rate limits
X-RateLimit-headers i varje svar och Retry-After när gränsen nås.
Resurser
Allt i lagret, som endpoints.
13 endpoints i 8 resursområden. Alla sökvägar utgår från https://app.inventelo.com/api/v1.
- Artiklar 1
- Lagersaldo 2
- Ordrar 1
- Plockrundor 1
- Inköpsordrar 5
- Returer 1
- Webhook-leveranser 1
- API-specifikation 1
Artiklar
Läs aktiva artiklar kopplade till API-nyckelns tenant.1 endpoints
- read:products
- GET
/productsLista artiklar för tenanten
Lagersaldo
Läs summerat saldo och saldo per plats och batch.2 endpoints
- read:stock
- GET
/stock-levelsSaldo per artikel: totalt, reserverat och tillgängligt - GET
/stock-itemsSaldo per lagerplats och batch med bäst före och mottagningsdatum
Ordrar
Läs försäljningsordrar för API-nyckelns tenant.1 endpoints
- read:orders
- GET
/ordersLista ordrar och inkludera orderrader
Plockrundor
Läs plockrundor och deras status.1 endpoints
- read:picking
- GET
/pick-wavesLista plockrundor för tenanten
Inköpsordrar
Läs, skapa och uppdatera inköpsordrar samt paketaviseringar.5 endpoints
- read:purchase-orders
- write:purchase-orders
- GET
/purchase-ordersLista inköpsordrar med rader, beställt och mottaget antal - GET
/purchase-orders/{id}Hämta en inköpsorder via id, external_id eller nummer - PUT
/purchase-ordersSkapa eller uppdatera en inköpsorder - POST
/purchase-orders/{id}/cancelMakulera en inköpsorder som inte har mottagits - PUT
/purchase-orders/{id}/shipmentsUppdatera paketuppgifter före ankomst
Returer
Läs returer för API-nyckelns tenant.1 endpoints
- read:returns
- GET
/returnsLista returer med RMA, status, orsak och spårning
Webhook-leveranser
Köa om en tidigare webhook-leverans för försök igen.1 endpoints
- write:webhooks
- POST
/webhooks/deliveries/{id}/replayKöa om en webhook-leverans
API-specifikation
Hämta OpenAPI 3.1-specifikationen.1 endpoints
- GET
/openapiHämta OpenAPI 3.1-specifikationen
Konventioner
Samma regler i varje anrop.
Det här gäller för alla resurser, så att ni kan bygga en klient en gång och återanvända den.
- Autentisering
Authorization: Bearer inv_live_…. Nycklar skapas per system och har prefixetinv_live_ellerinv_test_.- Bas-URL
https://app.inventelo.com/api/v1, JSON över HTTPS.- Paginering
limitochcursor. Svaret innehållermeta.has_moreochmeta.next_cursor.- Ändrat sedan
sincemed en ISO 8601-tid hämtar bara det som ändrats sedan förra synken.- Skapa eller uppdatera
PUTskapar eller uppdaterar på ert egetexternal_ideller affärsnyckel, så samma anrop kan skickas igen utan dubbletter.- Fel
{ "error": { "code", "message", "request_id" } }ochX-Request-IDi varje svar.- Rate limits
- 100 anrop per minut per nyckel med
X-RateLimit-Limit,X-RateLimit-RemainingochRetry-After. - Tider och datum
- ISO 8601 i UTC. Datum utan tid skrivs som
YYYY-MM-DD.
Webhooks
Få veta när det händer, inte när ni frågar.
Prenumerera på händelser i stället för att polla. Varje leverans signeras med er hemlighet, loggas och görs om automatiskt om er server inte svarar.
- 44 händelsetyper för ordrar, sändningar, lager, inleveranser, returer och 3PL
- HMAC-SHA256-signatur i X-Inventelo-Signature
- Automatiska omförsök och omleverans via API
- Leveranslogg med svarskod och antal försök
Ordrar
- wms.order.received
- wms.order.allocated
- wms.order.backordered
- wms.order.on_hold
- wms.order.released
- wms.order.picked
- wms.order.packed
- wms.order.shipped
- wms.order.delivered
- wms.order.cancelled
- wms.order.address_changed
Sändningar
- wms.shipment.created
- wms.shipment.in_transit
- wms.shipment.out_for_delivery
- wms.shipment.ready_for_pickup
- wms.shipment.delivered
- wms.shipment.exception
- wms.shipment.returned_to_sender
Lager
- wms.stock.changed
- wms.stock.low
- wms.stock.out_of_stock
- wms.stock.adjusted
- wms.stock.moved
- wms.batch.blocked
- wms.batch.expiring
Inleverans
- wms.purchase_order.created
- wms.purchase_order.received
- wms.purchase_order.closed
- wms.receipt.discrepancy
- wms.supplier_case.updated
Returer
- wms.return.announced
- wms.return.received
- wms.return.inspected
- wms.return.restocked
Plock och inventering
- wms.pick_wave.released
- wms.pick_wave.completed
- wms.pick.shortage
- wms.cycle_count.completed
Artiklar, recall och 3PL
- wms.product.upserted
- wms.product.archived
- wms.recall.started
- wms.recall.completed
- wms.client.created
- wms.billing.period_closed
POST /inventelo/webhooks HTTP/1.1
X-Inventelo-Event: wms.purchase_order.received
X-Inventelo-Signature: sha256=9f2c4e…
X-Inventelo-Delivery-Id: 5b0d7a1c-…
X-Inventelo-Attempt: 1
{
"event_type": "wms.purchase_order.received",
"delivered_at": "2026-09-15T09:12:44.512Z",
"tenant_id": "7c1e0f52-…",
"data": {
"purchase_order_id": "e41a9b30-…",
"line_id": "93d2c5f8-…",
"sku": "7350012345678",
"qty": 240,
"batch_number": "L2409",
"best_before_date": "2027-03-31",
"location_code": "1-90-07"
}
}import { createHmac, timingSafeEqual } from 'node:crypto';
// rawBody är request-bodyn exakt som den kom in, före JSON-tolkning
export function isValidInventeloWebhook(rawBody, signature, secret) {
const hmac = createHmac('sha256', secret).update(rawBody).digest('hex');
const a = Buffer.from(`sha256=${hmac}`);
const b = Buffer.from(signature ?? '');
return a.length === b.length && timingSafeEqual(a, b);
}Kom igång
Från nyckel till första synk på en eftermiddag.
Skapa en API-nyckel
En administratör skapar nyckeln under API-nycklar i Inventelo och väljer behörigheter. Nyckeln visas en gång.
Gör första anropet
Skicka nyckeln som Bearer-token och hämta till exempel lagersaldot för en artikel.
Prenumerera på händelser
Lägg till er webhook-URL, välj händelser och verifiera signaturen med er hemlighet.
Gå i drift
Följ rate limit-headers, logga request-id och övervaka webhook-leveranserna.
Skicka en inköpsorder från affärssystemet.
Samma anrop skapar ordern första gången och uppdaterar den sedan. Inventelo matchar på external_id, och lagret ser inleveransen direkt i skannern.
curl -X PUT "https://app.inventelo.com/api/v1/purchase-orders" \
-H "Authorization: Bearer $INVENTELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_number": "PO-10442",
"external_id": "erp-10442",
"supplier": { "name": "Leverantör AB" },
"expected_arrival": "2026-09-22",
"lines": [
{ "sku": "7350012345678", "qty": 240 },
{ "sku": "7350012345685", "qty": 120 }
]
}'Vanliga frågor
Frågor om API:t
Hur får vi en API-nyckel?
En administratör i ert Inventelo-konto skapar nycklar under API-nycklar och väljer vilka behörigheter varje nyckel ska ha. Är ni inte kund ännu visar vi gärna API:t i en demo.
Finns det en OpenAPI-specifikation?
Ja. Specifikationen följer OpenAPI 3.1 och kan importeras i Postman eller Insomnia, eller användas för att generera klienter i valfritt språk.
Hur hanterar vi rate limits?
Varje nyckel har 100 anrop per minut. Läs X-RateLimit-Remaining i svaren och vänta enligt Retry-After om ni får svar 429.
Hur verifierar vi en webhook?
Beräkna HMAC-SHA256 av den råa request-bodyn med er hemlighet och jämför med X-Inventelo-Signature i konstant tid. Svara med 2xx inom 15 sekunder.
Vad händer om vår server inte svarar?
Leveransen görs om automatiskt. Misslyckade leveranser syns i leveransloggen och kan skickas igen via API när er server är tillbaka.
Kan en 3PL-kund få en egen nyckel?
Ja. Nycklar kan begränsas till en lagerägare, så att kundens system bara når kundens egna artiklar, ordrar och saldon.
Bygg mot Inventelo
Berätta vad ni vill automatisera.
Vi går igenom er integration, rätt endpoints och händelser, och hjälper er hela vägen till drift.
