Pick-Pack Service

Download OpenAPI specification:Download

Manage the picking and packing process in-store or in a warehouse.


Key Features:

  • Create picking lists
  • Supports wave picking
  • Update & recalculate orders on actual product weight packed (for example, the weight of bananas packed)

Key Benefits:

  • Turn your stores into mini DCs
  • Run efficient and streamlined pick-pack processes
  • Pack goods in the best way to deliver to customers
  • Boost your picking performance with wave picking to up to 800 picks per hour per person
  • Lay the foundation to increase your last mile performance by aggregating all orders of a delivery cycle

Orders

Manage pick-pack orders

Finishing an order

Finishes a specified order by:

  • Recalculating the current state
  • Changing the order status to packed
  • Deleting all assignees
  • Sending an order confirmation email

Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

header Parameters
saas-token
required
string

Token provided by the Emporix system, used to identify logged in customers. This token has an expiry date and is signed with a passphrase.

Responses
200

Event creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

500

Internal Service Error occurred.

post/{tenant}/orders/{orderId}/finish
Request samples
Response samples
application/json
{
  • "message": "Success",
  • "code": 200
}

Retrieving a packlist

Retrieves a packlist for the specified delivery date.

Note: If an order has the packingStatus set to CANCELLED, it will not be retrieved.


Required scopes

  • pickpack.pickpack_view
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

query Parameters
siteCode
required
string [ 3 .. 16 ] characters [a-zA-Z0-9_-]+

site code for the tenant

deliveryDate
required
stringYYYY-MM-DD

Date after which we want to filter the orders.

Responses
200

Order list

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

500

Internal Service Error occurred.

get/{tenant}/orders
Request samples
Response samples
application/json
[
  • {
    }
]

Retrieving an order

Retrieves a specified order's details.


Required scopes

  • pickpack.pickpack_view
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

Responses
200

Order

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

404

Resource has not been found.

500

Internal Service Error occurred.

get/{tenant}/orders/{orderId}
Request samples
Response samples
application/json
{
  • "id": "123",
  • "siteCode": "main",
  • "orderTotal": 10,
  • "valueOfGoods": 9.5,
  • "deposit": 0.5,
  • "coupons": 0,
  • "currency": "EUR",
  • "entries": [
    ],
  • "customer": {
    },
  • "delivery": {
    },
  • "payment": {
    },
  • "packingStatus": "INITIAL",
  • "assignees": [
    ],
  • "packagingProducts": [
    ],
  • "holdingAreaNumber": 10
}

Updating an order

Updates a specified order's status.

Note: If the order has the packingStatus set to CANCELLED, it is not possible to do any further operations on that order.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

header Parameters
saas-token
required
string

Token provided by the Emporix system, used to identify logged in customers. This token has an expiry date and is signed with a passphrase.

Request Body schema: application/json
packingStatus
required
string

The new status of the order

Enum: "INITIAL" "IN_PROGRESS" "PRE_PACKED" "PACKED" "CANCELLED"
Responses
200

Event creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

404

Resource has not been found.

500

Internal Service Error occurred.

patch/{tenant}/orders/{orderId}
Request samples
application/json
{
  • "packingStatus": "IN_PROGRESS"
}
Response samples
application/json
{
  • "message": "Success",
  • "code": 200
}

Updating packaging products for an order

Updates packaging products for a specified order.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

header Parameters
saas-token
required
string

Token provided by the Emporix system, used to identify logged in customers. This token has an expiry date and is signed with a passphrase.

Request Body schema: application/json
Array
entryId
required
string

The id of the product that was packed

packedCount
required
integer

The amount of packed items

Responses
200

Event creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

404

Resource has not been found.

500

Internal Service Error occurred.

put/{tenant}/orders/{orderId}/packaging
Request samples
application/json
[
  • {
    }
]
Response samples
application/json
{
  • "message": "Success",
  • "code": 200
}

Order cycles

Manage pick-pack order cycles

Retrieving all order cycles

Extracts all order delivery dates from the current time onwards.


Required scopes

  • pickpack.pickpack_view
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

query Parameters
siteCode
required
string [ 3 .. 16 ] characters [a-zA-Z0-9_-]+

site code for the tenant

Responses
200

Orders delivery dates

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

500

Internal Service Error occurred.

get/{tenant}/orderCycles
Request samples
Response samples
application/json
[
  • "2020-11-13"
]

Assignees

Manage pick-pack assignees

Adding an assignee to an order

Adds an assignee to a specified order.

Note: If the order has the packingStatus set to CANCELLED, it is not possible to modify the assignee for that order.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

query Parameters
force
boolean
Default: true

If set to true, the new assignee will replace the old one. If set to false, a bad request will be returned if the order already has an assignee.

Request Body schema: application/json
id
required
string

Identifier of an assignment

siteCode
required
string

Code of a site

firstName
required
string

First name of assignee

lastName
required
string

Last name of assignee

Responses
200

Event creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

404

Resource has not been found.

409

Conflict

500

Internal Service Error occurred.

post/{tenant}/orders/{orderId}/assignees
Request samples
application/json
{
  • "id": "123",
  • "firstName": "John",
  • "lastName": "Smith",
  • "siteCode": "main"
}
Response samples
application/json
{
  • "message": "Success",
  • "code": 200
}

Deleting an assignee from an order

Deletes a specified assignee from a specified order.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

orderId
required
string

Order's unique identifier.

assigneeId
required
string [ 3 .. 16 ] characters [a-zA-Z0-9_-]+

assignee which will be removed from order

Responses
204

The request has succeeded.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

500

Internal Service Error occurred.

delete/{tenant}/orders/{orderId}/assignees/{assigneeId}
Request samples
Response samples
application/json
{
  • "fault": {
    }
}

Recalculations

Manage pick-pack recalculations

Triggering an order recalculation

Triggers order recalculation for a specified order list.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

Request Body schema: application/json
orderIds
Array of strings

The order identifiers requiring recalculation. This attribute is optional. In case the job type is AUTOMATIC the orders for recalculation will be selected automatically based on last packing events.

jobType
required
string

The recalculation job types. Possible values:

  • MANUAL - it will recalculate all orders provided in the orderIds attribute
  • AUTOMATIC - it will find orders that need recalculation and trigger recalculation for them
Enum: "AUTOMATIC" "MANUAL"
Responses
200

Job creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

409

Conflict

500

Internal Service Error occurred.

post/{tenant}/jobs/recalculations
Request samples
application/json
{
  • "jobType": "MANUAL",
  • "orderIds": [
    ]
}
Response samples
application/json
{
  • "jobId": "string"
}

Retrieving a job

Retrieves a specified job.


Required scopes

  • pickpack.pickpack_view
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

jobId
required
string [ 3 .. 16 ] characters [a-zA-Z0-9_-]+

jobId of requested order recalculation job

Responses
200

Recalculation job response

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

404

Resource has not been found.

500

Internal Service Error occurred.

get/{tenant}/jobs/recalculations/{jobId}
Request samples
Response samples
application/json
{
  • "id": "123",
  • "jobType": "MANUAL",
  • "orders": [
    ],
  • "jobStatus": "SUCCESS",
  • "startedAt": "2021-03-04T13:45:00.883Z",
  • "finishedAt": "2021-03-04T13:45:00.883Z"
}

Events

Manage pick-pack events

Creating a new packing event

Creates a new packing event.

Note: If the order has the packingStatus set to CANCELLED, it is not possible to create any new packing events for that order.


Required scopes

  • pickpack.pickpack_manage
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

header Parameters
saas-token
required
string

Token provided by the Emporix system, used to identify logged in customers. This token has an expiry date and is signed with a passphrase.

Request Body schema: application/json
eventId
required
string

The event id generated by the client

orderNumber
required
string

The order number for which the packing event is created

productId
required
string

The product id for which the packing event is created

deliveryCycle
string

The delivery cycle for which the packing event is created

pickedAmount
integer

The amount of picked items

packedAmount
integer

The amount of packed items

canceledAmount
integer

The amount of cancelled items

supplierId
string

The supplier id

unit
required
string

The unit of the packed item

timestamp
required
string <date-time>

Timestamp of the packing event in ISO format

site
required
string

The site code for which the event is created

bookProduct
boolean
Responses
200

Event creation response

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

409

Conflict

500

Internal Service Error occurred.

post/{tenant}/events
Request samples
application/json
{
  • "eventId": "123",
  • "orderNumber": "123",
  • "productId": "123",
  • "deliveryCycle": "2023-10-13-11-test",
  • "pickedAmount": 1,
  • "packedAmount": 1,
  • "canceledAmount": 0,
  • "supplierId": "123",
  • "unit": "H87",
  • "timestamp": "2020-09-14T13:35:18.333Z",
  • "site": "main",
  • "bookProduct": true
}
Response samples
application/json
{
  • "message": "Success",
  • "code": 200
}

Retrieving all events

Retrieves all events after a specified timestamp.


Required scopes

  • pickpack.pickpack_view
SecurityOAuth2
Request
path Parameters
tenant
required
string [ 3 .. 16 ] characters ^[a-z][a-z0-9]+$

Your Emporix tenant's name.

Note: The tenant name should always be written in lowercase.

query Parameters
timestamp
string [ 3 .. 16 ] characters yyyy-MM-dd'T'HH:mm:ssZ

Date after which we want to filter the events.

pageNumber
integer >= 0

Number of the page.

pageSize
integer [ 0 .. 20000 ]

Size of the page.

Responses
200

Order entry event

400

Request was syntactically incorrect. Details will be provided in the response payload.

401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

500

Internal Service Error occurred.

get/{tenant}/events
Request samples
Response samples
application/json
[
  • {
    }
]