Changelog
Elke wijziging in de publieke API, nieuwste eerst. Wijzigingen binnen v1 voegen alleen toe; een verwijdering of onverenigbare wijziging kondigen we hier minstens 12 maanden van tevoren aan. Zie Versies en uitfasering.
21 oktober 2026: een ingepakte order kan terug naar packing
- Corrigeert een inpakker een inpakfout, dan gaat een
packedorder terug naarpacking, om opnieuw te worden ingepakt.GET /api/v1/orders/changesmeldt dat als eenorder.status_changednaarpacking. Verder verandert er niets:packingwas al een van de statussen. Zie Wat er daarna in het magazijn gebeurt.
18 oktober 2026: wanneer de klant bestelde
POST /api/v1/ordersneemt een optioneleordered_at: wanneer de klant de order plaatste, als ISO 8601-datum-tijd met offset, of als losse datum (YYYY-MM-DD) als je alleen de dag weet. Picked bewaart het, toont het op de orderpagina en dateert de pakbon ermee. Zonder het veld verandert er niets: de order komt binnen zoals voorheen.
18 oktober 2026: een order kan terug naar pending
- Een order waarvan de pickronde voor het einde stopt, gaat van
pickingterug naarpending, om opnieuw te worden ingepland.GET /api/v1/orders/changesmeldt dat als eenorder.status_changednaarpending, en de order houdt zijnpicked_quantity. Verder verandert er niets:pendingwas al een van de statussen. Zie Wat er daarna in het magazijn gebeurt.
18 oktober 2026: de referentie beschrijft elke fout
- Elke
4xxen5xxin de API-referentie noemt nu de foutvorm die je al krijgt:messageen een vastecode, plus het velderrorsbij een422. Op de lijn verandert niets; een client die uit de specificatie is gegenereerd, kan nucodelezen. - De specificatie noemt haar tags en een supportcontact, en beschrijft elke operatie.
18 oktober 2026: links op elk antwoord
- Elke v1-resource en -pagina draagt
_linksin HAL-stijl, een veld dat er alleen bij komt. Een resource met een eigenGETlinkt naar zichzelf: een ontvangst, een procesrun, een voorraadstand, de nodecatalogus. Een pagina linkt naar zichzelf en de pagina's ernaast (_links.next,_links.prev), met je filters erin:GET /api/v1/locations,GET /api/v1/stock/changes, enGET /api/v1/stockmetchanged_since.GET /api/v1/stock/changes/feedlinkt zijn volgende lezing zolanghasMorewaar is.GET /api/v1/warehousesen eenskus-lezing vanGET /api/v1/stocklinken naar zichzelf. POST /api/v1/receiptsenPOST /api/v1/processes/{process}/runsantwoorden een nieuwe ontvangst of run met eenLocation-header waar je hem terugleest. Een dry run, en een antwoord dat een eerder gemaakte teruggeeft, hebben er geen.
17 oktober 2026: orderwijzigingen volgen
GET /api/v1/orders/changes?after={cursor}leest elke wijziging van je orders na een cursor, oudste eerst: een order die een status krijgt (order.status_changed), en een zending die wordt aangemaakt, naar een andere vervoerder gaat, een label krijgt, aan de vervoerder wordt meegegeven, wordt bezorgd, mislukt of terugkomt (shipment.created,shipment.carrier_changed,shipment.label_created,shipment.dispatched,shipment.delivered,shipment.failed,shipment.returned). Elke wijziging bevat de order zoals hij nu is, en de pagina linkt_links.nextzolang er meer wacht. Daarvoor isorders:readnodig. Zie Orderwijzigingen volgen.
17 oktober 2026: een order teruglezen
GET /api/v1/orders/{id}leest een order terug: de status; per regelpicked_quantity,shipped_quantityenclosed_short_quantity(de eerste twee null, dus niet geteld, zolang het magazijn voor de order niets telt); en de zendingen met vervoerder, trackingnummer, de trackinglink van de vervoerder, en elk pakket onderparcelsals hij in meerdere de deur uitging. Daarvoor is het nieuwe rechtorders:readnodig. De naam en het adres van de klant staan er nooit in. Zie Volg de order tot hij verzonden is.POST /api/v1/ordersantwoordt op een nieuwe order met eenLocation-header en_links.order, waar je hem terugleest. Antwoorden krijgen HAL-achtige_links: een veld dat er alleen bijkomt, dus niets wat je nu leest verschuift.
15 oktober 2026: een antwoord gebruiken in latere stappen
- Een stap die wacht op een signaal of een callback kan velden uit zijn
payloadofdatain outputs zetten die latere stappen tonen en gebruiken.POST /api/v1/process-runs/callbacks/{token}antwoordt422alsdatazo'n veld mist of er een van een ander type heeft, en het werk blijft wachten. Een signaal naarPOST /api/v1/process-events/{eventKey}dat er een mist, maakt die stap niet wakker. Zie Gebruik het antwoord in latere stappen. - Een signaal dat binnenkomt nadat Opgeven na van een stap voorbij is, maakt niets meer wakker: de stap gaat verder met
timed_out, wanneer Picked er ook aan toekomt. Eerder kon een signaal in de minuut na de time-out nog winnen.
15 oktober 2026: een antwoord van je eigen systeem
POST /api/v1/process-runs/callbacks/{token}beantwoordt een stap die je systeem aanroept: de stap roept je endpoint aan met eencallback_urlvoor eenmalig gebruik, en terugbellen maakt dat ene stuk werk wakker met jeoutcomeendata. Er is geen API-token nodig. Zie Laat je systeem over een stap beslissen.
15 oktober 2026: een correctie in hoe orderregels hun product vinden
POST /api/v1/ordersvergelijkt deproduct_external_refvan een regel alleen met producten die je in Picked beheert. Een product dat een gekoppeld ERP of een gekoppelde webshop heeft geïmporteerd, draagt het id van dat systeem als referentie, en een orderregel kon zo het verkeerde product noemen. Zo'n product wordt nu op de SKU of barcode van de regel gevonden, en een regel die nergens bij past krijgt een tijdelijk product, vermeld inprovisioned_products. Deexternal_refvan zo'n tijdelijk product is leeg als de referentie van de regel zijn SKU was of de referentie van een ander product: koppel het aan je regel viasku. Dit geldt meteen, een uitzondering op de 12 maanden aankondiging hierboven: de oude vergelijking kon het verkeerde product laten versturen, en nog geen enkele koppeling rekende erop. Zie Orders doorsturen.
14 oktober 2026: een procesrun starten
POST /api/v1/processes/{process}/runsstart een run van een proces, aangewezen met zijn publieke id, met devariableswaarmee hij start: hij komt op de vloer klaar om opgepakt te worden, zoals een geplande run.GET /api/v1/process-runs/{id}leest hem terug. Beide hebben het nieuwe rechtprocess-runs:writenodig. Zie Een procesrun starten vanuit een ander systeem.- De
Idempotency-Key-header: bijPOST /processes/{process}/runsgeeft een herhaling met dezelfde sleutel binnen 24 uur het eerste antwoord terug, en opent er niets. Zie Idempotentie. Picked-Dry-Run: truewerkt ook bij het starten van een run.
13 oktober 2026: magazijn- en locatie-id's, en antwoorden in het Engels
GET /api/v1/warehousesgeeft je magazijnen met dewarehouse_iddie orders en ontvangsten nodig hebben, enGET /api/v1/locationsje locaties met delocation_idwaarop voorraadwijzigingen filteren. Elk API-token mag beide aanroepen, met welke rechten ook. Zie Aan de slag.- Elk antwoord van
/api/v1is in het Engels, ook de foutmelding inmessageen de validatiefouten inerrors, in welke taal de server ook draait.
13 oktober 2026: voorraadniveaus die sinds een moment veranderden
GET /api/v1/stockneemtchanged_since: de niveaus van elk product waarvan de voorraad, de orderclaims of de locaties sindsdien veranderden, per pagina. Orderclaims stonden nooit in/stock/changes, dus zo merkt een webshop dat een order voorraad nam. Het antwoord heeft de vorm van eenskus-aanvraag, metpaginationerbij. Zie De voorraad in je webshop bijhouden.
13 oktober 2026: een cursor op voorraadwijzigingen
GET /api/v1/stock/changes/feed?after=<cursor>: de voorraadwijzigingen na een cursor, oudste eerst, met denextCursorom daarna te sturen enhasMore. Een wijziging die binnenkomt terwijl je leest, sla je niet over en lees je niet dubbel.GET /api/v1/stock/changesgeeft nog steeds pagina's, ongewijzigd. Zie Voorraadwijzigingen doorbladeren.
13 oktober 2026: de basis van v1
Deze vermelding legt de v1-API vast zoals hij erbij stond toen deze handleidingen verschenen. Elke latere wijziging staat erboven.
Endpoints
| Endpoint | Wat het doet | Recht |
|---|---|---|
POST /api/v1/orders |
Een fulfilmentorder importeren. | orders:write |
GET /api/v1/stock |
De voorraad van één SKU lezen, of van maximaal 100 tegelijk. | stock:read |
GET /api/v1/stock/changes |
Door de geschiedenis van voorraadwijzigingen bladeren. | stock:read |
POST /api/v1/receipts |
Een verwachte levering aanmelden. | receipts:write |
GET /api/v1/receipts/{id} |
De voortgang van een ontvangst teruglezen. | receipts:write |
POST /api/v1/process-events/{eventKey} |
Een signaal sturen dat de processen wekt die erop wachten. | process-events:write |
GET /api/v1/node-catalog |
Elk type procesnode opvragen, met het schema van zijn configuratie. | elk geldig token |
Gedrag
- Eén foutmelding voor elke mislukking, met een vaste
code. - Rate limits van 200 verzoeken per minuut voor de voorraad-endpoints en 60 voor de rest, per werkruimte, met
X-RateLimit-LimitenX-RateLimit-Remainingop elk antwoord op een geauthenticeerde aanroep. - Idempotente orderimports op
external_id, en leveringsaanmeldingen opreference. - Proefruns met de header
Picked-Dry-RunopPOST /api/v1/ordersenPOST /api/v1/receipts.