Hoppa till innehållet

Shipments

Shipments: the physical fulfilment of sales orders, from warehouse release through picking, packing and carrier booking to delivery. Addressed by shipmentNumber. A shipment can cover several orders (consolidation) and an order can have several shipments (partial delivery), so shipments are their own resource rather than a sub-resource of the order.

12 calls GET POST Base URL https://api.erp.fluit.cloud/preview

Authentication, error codes, rate limits, idempotency and pagination apply to every call and are documented once under Getting started.

GET /shipments

List shipments

Returns a paginated list of shipments, newest business key last — sorted by shipmentNumber so paging is deterministic. ?modifiedSince= returns both created and modified shipments, so it can be used for delta sync; deletions are reported by GET /preview/deletions.

Show the full description

Each shipment carries all of its lines, including lines belonging to other orders on a consolidated shipment — use GET /preview/orders/{orderNumber}/shipments for the order-scoped view.

Query parameters

Field Type Description
search string Matches shipment number and tracking number, case-insensitively and on partial words.
orderNumber string Returns only the shipments fulfilling this sales order number.
status enum Filters on where the shipment stands in the pick-pack-ship flow. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
modifiedSince string(date-time) Returns only records created or changed at or after this instant (ISO 8601 UTC datetime). A change anywhere inside the record counts, including on its lines.
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicShipmentResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
createdDate string(date-time) UTC timestamp when the shipment was created.
deliveredDate string(date-time) · nullable UTC timestamp when the shipment was delivered. Null if not yet delivered.
lines ShipmentLine[] · nullable Shipment lines. Scoped to the addressed order when read through an order.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
plannedShipDate string(date) · nullable Planned ship date (ISO 8601 date). Null if not yet planned.
shipmentNumber string · nullable Unique shipment number, e.g. `SHIP-2026-00128`.
shippedDate string(date-time) · nullable UTC timestamp when the shipment was handed over to the carrier. Null if not yet shipped.
shippingMethodName string · nullable Name of the shipping method / carrier. Null if not set.
status enum Shipment status values exposed via the Public API. Mirrors the internal shipment lifecycle from warehouse release to delivery. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
totalWeightKg decimal · nullable Total weight in kilograms. Serialised as a decimal string. Null if not weighed.
trackingNumber string · nullable Carrier tracking number. Null until the shipment is booked with a carrier.
400 ProblemDetails ?status= got a value outside its list.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/shipments" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "createdDate": "2026-06-11T09:24:13.418",
      "deliveredDate": "2026-06-11T09:24:13.418",
      "lines": [
        {
          "itemName": "Widget A",
          "itemNumber": "WIDGET-A",
          "orderLineNumber": 42,
          "orderNumber": "SO-2026-1041",
          "pickedQuantity": "10",
          "quantity": "10",
          "unit": "st"
        }
      ],
      "links": {
        "self": "string"
      },
      "plannedShipDate": "2026-06-11",
      "shipmentNumber": "SH-2026-0455",
      "shippedDate": "2026-06-11T09:24:13.418",
      "shippingMethodName": "Parcel, next day",
      "status": "Hold",
      "totalWeightKg": "1.250",
      "trackingNumber": "ABC-001"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments

Create a shipment

Creates a shipment covering one or more sales orders and returns it in the same shape as GET /preview/shipments/{shipmentNumber}. The shipment starts in Released status with a line per allocated order line; drive it forward with the pick, pack, book, hand-over and mark-delivered actions.

Show the full description

Orders must be released before a shipment can be created for them. Passing several order numbers consolidates them; the orders must agree on delivery address and shipping method. Known error codes: SalesOrder.NotFound, Shipment.NoAllocatedLines, Shipment.InconsistentConsolidation.

Body required

Field Type Description
notes string · nullable Free-text notes on the shipment.
orderNumbers Required string[] Sales orders to fulfil. Pass more than one to consolidate them into a single shipment — they must share a delivery address and shipping method for consolidation to be accepted.
shippingMethodCode string · nullable Shipping method / carrier code. Defaults to the order's shipping method.

Responses

201 PublicShipmentDetailResponse
  • Location — URL of the newly created resource.
Field Type Description
createdDate string(date-time) UTC timestamp when the shipment was created.
deliveredDate string(date-time) · nullable UTC timestamp when the shipment was delivered.
deliveryAddress DeliveryAddress Delivery address attached to a sales order.
externalBookingId string · nullable Carrier's own booking reference. Null until booked.
goodsLabel string · nullable Goods marking printed on the delivery note. Null if not set.
incotermsCode string · nullable Incoterms code, e.g. `DAP`. Null if not set.
lines ShipmentLine[] · nullable All lines on the shipment, across every order it fulfils.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the shipment was last modified. Null if never modified.
orderNumbers string[] · nullable Order numbers this shipment fulfils. More than one on a consolidated shipment.
packages ShipmentPackage[] · nullable Packages registered on the shipment.
plannedShipDate string(date) · nullable Planned ship date (ISO 8601 date). Null if not yet planned.
requestedDeliveryDate string(date) · nullable Requested delivery date (ISO 8601 date). Null if not set.
shipmentNumber string · nullable Unique shipment number, e.g. `SHIP-2026-00128`.
shippedDate string(date-time) · nullable UTC timestamp when the shipment was handed over to the carrier.
shippingMethodName string · nullable Name of the shipping method / carrier. Null if not set.
status enum Shipment status values exposed via the Public API. Mirrors the internal shipment lifecycle from warehouse release to delivery. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
totalWeightKg decimal · nullable Total weight in kilograms. Serialised as a decimal string.
trackingNumber string · nullable Carrier tracking number. Null until the shipment is booked with a carrier.
warehouseCode string · nullable Code of the warehouse the shipment ships from.
400 ProblemDetails orderNumbers is empty, the shipping method code does not exist, an order is not Released yet, or the consolidated orders disagree on customer or delivery address.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 409 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Consolidated with explicit carrier
{
  "notes": "Consolidated for weekly pickup",
  "orderNumbers": [
    "SO-2026-00042",
    "SO-2026-00043"
  ],
  "shippingMethodCode": "DHL-PALL"
}
Single order
{
  "orderNumbers": [
    "SO-2026-00042"
  ]
}
Response 201
{
  "createdDate": "2026-06-11T09:24:13.418",
  "deliveredDate": "2026-06-11T09:24:13.418",
  "deliveryAddress": {
    "city": "Stockholm",
    "contactPerson": "string",
    "countryCode": "SE",
    "email": "order@acme.se",
    "name": "Acme AB",
    "phone": "+46 8 123 45 67",
    "postalCode": "11122",
    "street1": "Storgatan 1",
    "street2": "string"
  },
  "externalBookingId": "string",
  "goodsLabel": "string",
  "incotermsCode": "STD",
  "lines": [
    {
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "orderLineNumber": 42,
      "orderNumber": "SO-2026-1041",
      "pickedQuantity": "10",
      "quantity": "10",
      "unit": "st"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "orderNumbers": [
    "SO-2026-1041"
  ],
  "packages": [
    {
      "heightCm": "299.00",
      "lengthCm": "299.00",
      "notes": "string",
      "packageNumber": "ABC-001",
      "trackingNumber": "ABC-001",
      "weightKg": "1.250",
      "widthCm": "299.00"
    }
  ],
  "plannedShipDate": "2026-06-11",
  "requestedDeliveryDate": "2026-06-11",
  "shipmentNumber": "SH-2026-0455",
  "shippedDate": "2026-06-11T09:24:13.418",
  "shippingMethodName": "Parcel, next day",
  "status": "Hold",
  "totalWeightKg": "1.250",
  "trackingNumber": "ABC-001",
  "warehouseCode": "MAIN"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

GET /shipments/{shipmentNumber}

Get a shipment by shipment number

Returns a shipment with its delivery address, lines and packages, plus the order numbers it fulfils — more than one on a consolidated shipment. Responses carry a weak ETag; pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.

Show the full description

The validator follows the whole record, so a change to a line or a package invalidates it too.

shipments:read Supports ETag

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment to read.

Responses

200 PublicShipmentDetailResponse
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
Field Type Description
createdDate string(date-time) UTC timestamp when the shipment was created.
deliveredDate string(date-time) · nullable UTC timestamp when the shipment was delivered.
deliveryAddress DeliveryAddress Delivery address attached to a sales order.
externalBookingId string · nullable Carrier's own booking reference. Null until booked.
goodsLabel string · nullable Goods marking printed on the delivery note. Null if not set.
incotermsCode string · nullable Incoterms code, e.g. `DAP`. Null if not set.
lines ShipmentLine[] · nullable All lines on the shipment, across every order it fulfils.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the shipment was last modified. Null if never modified.
orderNumbers string[] · nullable Order numbers this shipment fulfils. More than one on a consolidated shipment.
packages ShipmentPackage[] · nullable Packages registered on the shipment.
plannedShipDate string(date) · nullable Planned ship date (ISO 8601 date). Null if not yet planned.
requestedDeliveryDate string(date) · nullable Requested delivery date (ISO 8601 date). Null if not set.
shipmentNumber string · nullable Unique shipment number, e.g. `SHIP-2026-00128`.
shippedDate string(date-time) · nullable UTC timestamp when the shipment was handed over to the carrier.
shippingMethodName string · nullable Name of the shipping method / carrier. Null if not set.
status enum Shipment status values exposed via the Public API. Mirrors the internal shipment lifecycle from warehouse release to delivery. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
totalWeightKg decimal · nullable Total weight in kilograms. Serialised as a decimal string.
trackingNumber string · nullable Carrier tracking number. Null until the shipment is booked with a carrier.
warehouseCode string · nullable Code of the warehouse the shipment ships from.
304 Empty body.
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "createdDate": "2026-06-11T09:24:13.418",
  "deliveredDate": "2026-06-11T09:24:13.418",
  "deliveryAddress": {
    "city": "Stockholm",
    "contactPerson": "string",
    "countryCode": "SE",
    "email": "order@acme.se",
    "name": "Acme AB",
    "phone": "+46 8 123 45 67",
    "postalCode": "11122",
    "street1": "Storgatan 1",
    "street2": "string"
  },
  "externalBookingId": "string",
  "goodsLabel": "string",
  "incotermsCode": "STD",
  "lines": [
    {
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "orderLineNumber": 42,
      "orderNumber": "SO-2026-1041",
      "pickedQuantity": "10",
      "quantity": "10",
      "unit": "st"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "orderNumbers": [
    "SO-2026-1041"
  ],
  "packages": [
    {
      "heightCm": "299.00",
      "lengthCm": "299.00",
      "notes": "string",
      "packageNumber": "ABC-001",
      "trackingNumber": "ABC-001",
      "weightKg": "1.250",
      "widthCm": "299.00"
    }
  ],
  "plannedShipDate": "2026-06-11",
  "requestedDeliveryDate": "2026-06-11",
  "shipmentNumber": "SH-2026-0455",
  "shippedDate": "2026-06-11T09:24:13.418",
  "shippingMethodName": "Parcel, next day",
  "status": "Hold",
  "totalWeightKg": "1.250",
  "trackingNumber": "ABC-001",
  "warehouseCode": "MAIN"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/book

Book a shipment with the carrier

Books the shipment with the carrier behind its shipping method and returns the tracking number and the carrier's booking reference. Returns 200 rather than 204 because the tracking number is the point of the call — it is what gets sent to the customer.

Show the full description

Emits the shipment.booked webhook. The call reaches an external carrier system, so it can fail for reasons outside Fluit: a rejected address, a service the receiver's country does not allow, or the carrier being unreachable. Booking is normally triggered automatically when packing is confirmed; call this explicitly to retry a failed booking or when the shipping method does not auto-book.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the packed shipment to book.

Responses

200 BookShipmentResponse
Field Type Description
externalBookingId string · nullable The carrier's own booking reference.
trackingNumber string · nullable Carrier tracking number, if the carrier returned one.
400 ProblemDetails The shipment has no shipping method or no packages, the carrier behind it is not configured for booking, or the carrier rejected the booking — its message is in the problem details.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment is not packed.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/book" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 200
{
  "externalBookingId": "string",
  "trackingNumber": "ABC-001"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/hand-over

Hand a shipment over to the carrier

Records that the carrier has collected the shipment: status becomes PickedUp and shippedDate is stamped. This is what marks the goods as having left the warehouse, and it moves the underlying sales order lines to delivered.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment the carrier has collected.

Responses

204 Empty body.
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment is not ReadyForPickup, so there is nothing to hand over.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 400 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/hand-over" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

GET /shipments/{shipmentNumber}/lines

List the lines on a shipment

Returns every line on the shipment, across all orders it fulfils. Each line carries the orderNumber and orderLineNumber it originates from, so a consolidated shipment can be split back to its orders. Sorted by order number, then order line number.

shipments:read Paginated

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment whose lines to list.

Query parameters

Field Type Description
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicShipmentLineResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
itemName string · nullable Display name of the shipped item.
itemNumber string · nullable Item number of the shipped item.
orderLineNumber integer Line number of the sales order line this shipment line fulfils.
orderNumber string · nullable Order number of the sales order this line belongs to. Set on consolidated shipments.
pickedQuantity decimal Quantity picked so far. Serialised as a decimal string.
quantity decimal Quantity on this shipment. Serialised as a decimal string.
unit string · nullable Unit of measure code, e.g. `st`. Null when the line uses the item's base unit.
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/lines" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "orderLineNumber": 42,
      "orderNumber": "SO-2026-1041",
      "pickedQuantity": "10",
      "quantity": "10",
      "unit": "st"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/mark-delivered

Mark a shipment as delivered

Records that the shipment reached the recipient: status becomes Delivered and deliveredDate is stamped. Use this when delivery confirmation comes from somewhere other than the carrier integration — a driver app, a signed proof of delivery, or a customer confirming pickup. Emits the shipment.delivered webhook.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment that reached the recipient.

Responses

204 Empty body.
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment has not been handed over to the carrier yet, or is already delivered.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 400 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/mark-delivered" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/pack

Pack a shipment

Packs everything picked on the shipment into a package and, by default, confirms packing. Confirming triggers carrier booking when the shipping method is configured for it, so the response can come back with status Booked and a tracking number already set — read it with GET /preview/shipments/{shipmentNumber}.

Show the full description

Returns 200 rather than 204 because the resulting status is the point of the call. Packing is applied line by line and persists as it goes, so the outcome can be partial: lines that could not be packed are reported in skipped[] with a reason. When anything was skipped the shipment is left unconfirmed — confirmed comes back false — so the remaining lines can be handled in the warehouse app and this call repeated. packageNumber may be omitted when the shipment has exactly one package. With several packages it is required — the call fails rather than picking one arbitrarily.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the picked shipment to pack.

Body

Field Type Description
confirmWhenFullyPacked boolean Confirm packing when everything picked was packed. Default true. Confirming books the shipment with the carrier when the shipping method is set up for automatic booking.
packageNumber string · nullable Package to pack into. Optional when the shipment has exactly one package; required when it has several, otherwise the call returns 409.

Responses

200 PackShipmentResponse
Field Type Description
confirmed boolean Whether packing was confirmed. False when lines were skipped.
packageNumber string · nullable The package the quantities were packed into.
packedCount integer Number of lines packed by this call.
skipped PackShipmentSkippedLine[] · nullable Lines that could not be packed automatically, with the reason.
status enum Shipment status values exposed via the Public API. Mirrors the internal shipment lifecycle from warehouse release to delivery. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
400 ProblemDetails The shipment has no package to pack into — create one with POST /preview/shipments/{shipmentNumber}/packages.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No shipment with that shipment number, or no package with that package number on it.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment has not been picked, or it has several packages and packageNumber was omitted.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/pack" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Explicit package, leave unconfirmed
{
  "confirmWhenFullyPacked": false,
  "packageNumber": "PKG-1"
}
Single package, confirm and book
{}
Response 200
{
  "confirmed": true,
  "packageNumber": "ABC-001",
  "packedCount": 42,
  "skipped": [
    {
      "itemNumber": "WIDGET-A",
      "orderLineNumber": 42,
      "reason": "string"
    }
  ],
  "status": "Hold"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

GET /shipments/{shipmentNumber}/packages

List the packages on a shipment

Returns the physical packages (parcels) registered on the shipment with their weight, dimensions and per-package tracking numbers. Tracking numbers are null until the shipment is booked with a carrier. Sorted by package number.

shipments:read Paginated

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment whose packages to list.

Query parameters

Field Type Description
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicShipmentPackageResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
heightCm decimal · nullable Height in centimetres. Serialised as a decimal string.
lengthCm decimal · nullable Length in centimetres. Serialised as a decimal string.
notes string · nullable Free-text notes on the package. Null if not set.
packageNumber string · nullable Package number, unique within the shipment.
trackingNumber string · nullable Carrier tracking number for this individual package. Null until booked.
weightKg decimal · nullable Weight in kilograms. Serialised as a decimal string.
widthCm decimal · nullable Width in centimetres. Serialised as a decimal string.
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/packages" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "heightCm": "299.00",
      "lengthCm": "299.00",
      "notes": "string",
      "packageNumber": "ABC-001",
      "trackingNumber": "ABC-001",
      "weightKg": "1.250",
      "widthCm": "299.00"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/packages

Add a package to a shipment

Registers a physical package (parcel) on the shipment. Weight and dimensions are what the carrier prices and labels on, so set them when known — nShift rejects bookings for packages without a weight. A shipment needs at least one package before it can be packed. packageNumber is generated within the shipment if omitted.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment to add the package to.

Body required

Field Type Description
heightCm decimal · nullable Height in centimetres.
lengthCm decimal · nullable Length in centimetres.
notes string · nullable Free-text notes on the package.
packageNumber string · nullable Package number. Auto-generated within the shipment if omitted.
weightKg decimal · nullable Weight in kilograms.
widthCm decimal · nullable Width in centimetres.

Responses

201 PublicShipmentPackageResponse
  • Location — URL of the newly created resource.
Field Type Description
heightCm decimal · nullable Height in centimetres. Serialised as a decimal string.
lengthCm decimal · nullable Length in centimetres. Serialised as a decimal string.
notes string · nullable Free-text notes on the package. Null if not set.
packageNumber string · nullable Package number, unique within the shipment.
trackingNumber string · nullable Carrier tracking number for this individual package. Null until booked.
weightKg decimal · nullable Weight in kilograms. Serialised as a decimal string.
widthCm decimal · nullable Width in centimetres. Serialised as a decimal string.
400 ProblemDetails A weight or dimension is negative, or a field is longer than allowed.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment has already shipped and can no longer be modified.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/packages" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Full parcel
{
  "heightCm": "20",
  "lengthCm": "40",
  "notes": "Fragile",
  "packageNumber": "PKG-1",
  "weightKg": "12.5",
  "widthCm": "30"
}
Weight only
{
  "weightKg": "12.5"
}
Response 201
{
  "heightCm": "299.00",
  "lengthCm": "299.00",
  "notes": "string",
  "packageNumber": "ABC-001",
  "trackingNumber": "ABC-001",
  "weightKg": "1.250",
  "widthCm": "299.00"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/pick

Pick the lines on a shipment

Picks every outstanding quantity on the shipment from its allocated stock locations. Returns 200 rather than 204 because the outcome is partial by nature: lines that need a serial or batch number, or that lack stock at the allocated location, are reported in skipped[] with a reason and must be picked from the warehouse app.

Show the full description

By default the shipment advances to Picked when nothing was skipped; pass completeWhenFullyPicked=false to keep it open and call again.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the released shipment to pick.

Body

Field Type Description
completeWhenFullyPicked boolean Advance the shipment to Picked when every line came out picked. Default true. Set false to keep picking open across several calls.

Responses

200 PickShipmentResponse
Field Type Description
pickedCount integer Number of lines that were picked by this call.
skipped PickShipmentSkippedLine[] · nullable Lines that could not be picked automatically, with the reason.
status enum Shipment status values exposed via the Public API. Mirrors the internal shipment lifecycle from warehouse release to delivery. Hold Released Picking Picked ReadyForPickup Packing Packed Booked PickedUp InTransit Delivered Failed Cancelled
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment has already shipped and can no longer be picked.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 400 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/pick" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Pick without completing
{
  "completeWhenFullyPicked": false
}
Pick and complete
{}
Response 200
{
  "pickedCount": 42,
  "skipped": [
    {
      "itemNumber": "WIDGET-A",
      "orderLineNumber": 42,
      "reason": "string"
    }
  ],
  "status": "Hold"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /shipments/{shipmentNumber}/release

Release a shipment to the warehouse

Moves a shipment from Hold to Released so the warehouse can start picking. Shipments created through this API are already Released — this endpoint exists for shipments put on hold.

Path parameters

Field Type Description
shipmentNumber Required string Shipment number of the shipment on hold to release.

Responses

204 Empty body.
400 ProblemDetails The shipment could not be released because it has no lines to pick.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No shipment with that shipment number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The shipment is not on hold, so there is nothing to release.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/shipments/{shipmentNumber}/release" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 400
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

Schemas

The objects this group's calls refer to. The field tables above go one level deep and link here rather than repeating the same schema on every endpoint.

DeliveryAddress

PublicDeliveryAddressResponse

Delivery address attached to a sales order.

Field Type Description
city string · nullable City name.
contactPerson string · nullable Contact person at the delivery address. Null if not set.
countryCode string · nullable ISO 3166-1 alpha-2 country code, e.g. `SE`.
email string · nullable Email address at the delivery address. Null if not set.
name string · nullable Recipient company or person name.
phone string · nullable Phone number at the delivery address. Null if not set.
postalCode string · nullable Postal / ZIP code.
street1 string · nullable Street address line 1.
street2 string · nullable Street address line 2 (c/o, suite, etc.). Null if not set.

PackShipmentSkippedLine

PackShipmentSkippedLineResponse
Field Type Description
itemNumber string · nullable Item number on the skipped line.
orderLineNumber integer Order line number of the line that was skipped.
reason string · nullable Why the line could not be packed automatically.

PickShipmentSkippedLine

PickShipmentSkippedLineResponse
Field Type Description
itemNumber string · nullable Item number on the skipped line.
orderLineNumber integer Order line number of the line that was skipped.
reason string · nullable Why the line could not be picked automatically.

ShipmentLine

PublicShipmentLineResponse

A single shipment line, referencing the order line it fulfils.

Field Type Description
itemName string · nullable Display name of the shipped item.
itemNumber string · nullable Item number of the shipped item.
orderLineNumber integer Line number of the sales order line this shipment line fulfils.
orderNumber string · nullable Order number of the sales order this line belongs to. Set on consolidated shipments.
pickedQuantity decimal Quantity picked so far. Serialised as a decimal string.
quantity decimal Quantity on this shipment. Serialised as a decimal string.
unit string · nullable Unit of measure code, e.g. `st`. Null when the line uses the item's base unit.

ShipmentPackage

PublicShipmentPackageResponse

A physical package (parcel) on a shipment.

Field Type Description
heightCm decimal · nullable Height in centimetres. Serialised as a decimal string.
lengthCm decimal · nullable Length in centimetres. Serialised as a decimal string.
notes string · nullable Free-text notes on the package. Null if not set.
packageNumber string · nullable Package number, unique within the shipment.
trackingNumber string · nullable Carrier tracking number for this individual package. Null until booked.
weightKg decimal · nullable Weight in kilograms. Serialised as a decimal string.
widthCm decimal · nullable Width in centimetres. Serialised as a decimal string.