Hoppa till innehållet

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
Anrop
curl "https://app.inventelo.com/api/v1/stock-levels?sku=7350012345678" \
  -H "Authorization: Bearer $INVENTELO_API_KEY"
Svar · 200 OK
{
  "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

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 prefixet inv_live_ eller inv_test_.
    Bas-URL
    https://app.inventelo.com/api/v1, JSON över HTTPS.
    Paginering
    limit och cursor. Svaret innehåller meta.has_more och meta.next_cursor.
    Ändrat sedan
    since med en ISO 8601-tid hämtar bara det som ändrats sedan förra synken.
    Skapa eller uppdatera
    PUT skapar eller uppdaterar på ert eget external_id eller affärsnyckel, så samma anrop kan skickas igen utan dubbletter.
    Fel
    { "error": { "code", "message", "request_id" } } och X-Request-ID i varje svar.
    Rate limits
    100 anrop per minut per nyckel med X-RateLimit-Limit, X-RateLimit-Remaining och Retry-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
    Webhook-leverans
    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"
      }
    }
    Verifiera signaturen · Node.js
    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.

    1. Skapa en API-nyckel

      En administratör skapar nyckeln under API-nycklar i Inventelo och väljer behörigheter. Nyckeln visas en gång.

    2. Gör första anropet

      Skicka nyckeln som Bearer-token och hämta till exempel lagersaldot för en artikel.

    3. Prenumerera på händelser

      Lägg till er webhook-URL, välj händelser och verifiera signaturen med er hemlighet.

    4. 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.

    PUT /purchase-orders
    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.