Overview

The Omni API supports store associate activities for the following features: ISPU (In-Store PickUp), SFS (Ship-from Store), and STS (Ship-to Store). The API is based on a concept of queues and physical stores. Orders are assigned to physical stores and are in queues.

The relevant default queues are:

  • WAITING_FOR_PICK_ISPU
  • WAITING_FOR_CUSTOMER_PICK (both ISPU and STS orders)
  • WAITING_FOR_PICK_SFS
  • WAITING_FOR_PACK_SFS
  • WAITING_FOR_CHECKIN_STS
  • WAITING_FOR_INSTORE_CHECKIN_STS (STS orders processed as ISPU)
  • WAITING_FOR_PICK_DEL
  • WAITING_FOR_PACK_DEL
  • WAITING_FOR_DELIVERY

While there is a natural flow of orders through these queues for each feature, each queue is completely independent. There is no assumption that a Store Associate will process an order end to end without interruption. For example, an ISPU order could first appear in the WAITING_FOR_PICK_ISPU queue and then the WAITING_FOR_CUSTOMER_PICK queue. An individual Store Associate could process a WAITING_FOR_PICK_ISPU order and then process a different WAITING_FOR_CUSTOMER_PICK order because the customer arrived at the store to pick up an order. Or, in a large store, a single Store Associate could be assigned to process all of the orders in each queue.

Notes

Throughout this API documentation:

  • storeId refers to the identifier for your webstore and will probably always be the same.
  • nodeId refers to a physical store that was loaded through the ROM UI or the Facility Feed.
  • queueId refers to the queue.
  • $apiurl is a placeholder; Radial provides the value to you. It is the same for all of your API calls.

The following examples show minimum viable usage of the API. The API reference section lists more calls with additional payload detail.

Retrieve Orders in Queues by Retail Store and Queue

The fulfillmentOrders?queueId API returns all orders in a single queue for a single physical store.

  • Call: POST
  • URL: (“$apiurl/fulfillmentOrders?queueId=Z”
  • JSON Payload: {“storeId”: “X”, “nodeId”: “Y”, “queueId:” “Z”}
  • Return Payload (JSON array): [{“storeId”:, “X”, “fulfillmentOrder”: {“storeId”: “X”, “fulfillmentOrderId”: “I”, “carrier”: “C”, “service”: “S”}, “webOrderId”: “B”, “nodeId”: “Y”, “queueId”: “Z”}]

The queueId Z in the URL and queueId Z in the JSON payload must be the same.

You can use this API to create:

  • A summary page for all queues and all stores.
  • A summary of all queues for one store.
  • A list of orders in a queue for a store.

This API also allows you to specify pagination: a number of items per page, and a page number to retrieve.

A standard flow for store fulfillment is to drill down from a page listing counts of orders per store or queue, to a page with counts of orders for each queue within a store, to a page listing orders within a particular queue for a particular store, to the processing of a particular order. Administrators have access to all these pages and associates have access to pages for their particular stores.

  • To create a summary of all queues for all stores, loop through all your physical stores and all relevant queues, calling the API once for each queueId and nodeId combination and aggregating or counting the responses.
  • To create a summary of all queues in one physical store, call the API once for each queue with the same nodeId, aggregating or counting the responses.
  • To create a summary of all physical stores for one queue, call the API once for each store, using the same queueId, aggregating or counting the responses.
  • To create a list of all orders in a particular queue assigned to a particular store, call the API once with the queueId and nodeId.

Process Individual Orders in a Queue

All Queues

This API returns details on a single order in a queue.

  • Call: POST
  • URL: $apiurl/fulfillmentOrders/Y
  • JSON Payload: {"storeId": "X", "fulfillmentOrderId": "Y”}
  • JSON Return Payload: {“fulfillmentOrder”: {“status”: “X”, “packages”: [], }

The fulfillmentOrderId Y in the URL and the fulfillmentOrderId Y in the JSON payload must match and must be a fulfillmentOrderId returned by the queueId API call.

When a Store Associate decides to process an individual order, you first need to get the detail on that order because:

  • The state of the order may have changed, and
  • Some of the information returned by the order detail call may be needed for subsequent calls.

The following conditions indicate that the order has been advanced by another Store Associate or is in an error state. Your application should inform the Store Associate if these conditions occur:

  • Status is 9000: shipment is canceled.
  • Status is 1600.002: shipment is invoiced. If the queue WAITING_FOR_PICK_ISPU, then the order is complete.
  • Status is 1600.002.10: The order has been picked up by the customer and is complete.

WAITING_FOR_PICK_ISPU, WAITING_FOR_PICK_SFS, WAITING_FOR_PICK_DEL

To retrieve fulfillment orders from these queues, use PickTicketGenerate and PickTicketUpdate.

  1. Make an API call to generate a pick ticket.
    • Call: POST
    • URL: $apiurl/nodes/Y/pickTicket/generate
    • JSON Payload {"storeId": “X '", "nodeId": “Y”, “queueId”: “Z”, "userId": "U", "fulfillmentOrderIds": [“O”]}

      The nodeId Y in the URL and JSON must match, and UserId U must be created in the ROM UI or loaded using the User Feed.

    • Return Payload: {“pickTicketDetails”: [{“pickTicketId”: “A”, “storeId”: “X”, “nodeId”: “Y”, “userId”: “U”, “pickTicketItems”: [{“id”: “I”, “itemDetails”: {“itemId”:“J”}, “quantity”: “K”},…]}]}
  2. Make an API call to confirm the pick ticket using values that were returned by the pick ticket generation call.
    • Call: PUT
    • URL: $apiurl/nodes/Y/pickTicket/update
    • JSON Payload: {“pickTicketDetails“: {“pickTicketId”: “A”, “action”: “CONFIRM”, “storeId”: “X”, “nodeId”: “Y”, “userId”: “U”, “holdLocation”: “H”, “pickTicketItems”: [{canceledQuantity”: “L”, “cancellationReasonCode”: “M”, “id”: “I”, “itemId”: “J”, “pickedQuantity”: “N”},…]}

WAITING_FOR_CUSTOMER_PICK

CustomerPickupDetails and CustomerPickupConfirm enable you to get the details on ISPU orders and confirm that the customer has picked them up.

  1. Make an API call to get customer pickup details, specifically ordered, picked, and canceled counts for each web line ID in the order.
    • Call: POST
    • URL: $apiurl/nodes/Y/customerPickups/Z
    • JSON Payload: {“storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z”}

      The nodeId Y in the URL and JSON must match, and the fulfillmentOrderId Z in the URL and JSON must match.

    • JSON Return: {“customerPickUpDetails”: [“customerPickupItems”: [{“webLineId”: “W”, “orderedQuantity”: “Q”, “pickedQuantity”: “QY”, “canceledQuantity”: “QN”, “cancellationReasonCode”, “R”}]]}

    Depending on the programming language you’re using, you may want to put this information into a hash table with the webLineId as the primary key.

  2. Make an API call to confirm customer pickup.
    • Call: PUT
    • URL: $apiurl/nodes/Y/customerPickUp/confirm
    • JSON Payload {“customerPickupDetails”: {“fulfillmentOrderId”: “Z”, “storeId”: “X”, “nodeId”: “Y”, “customerPickupItems”: [{“webLineId”: “W”, “itemId”: “I”, “customerPickedQuantity”: “QZ”, “canceledQuantiy”: “QN”, “cancellationReasonCode”: “R”, “backroomPickedQuantity”: “QY”}]}}

    The nodeId Y in the URL and JSON must match.

WAITING_FOR_PACK_SFS and WAITING_FOR_PACK_DEL

Once an order SFS or Associate Delivery order has been successfully picked and confirmed, the Store Associate must pack it and include a pack slip, then ship or deliver it to the customer. PackDetails provides the details on packed orders and PackSlipGenerate creates the pack slip. PackConfirm confirms that the order is packed. Finally, ShipmentConfirm confirms that the package has been shipped.

  1. If there are no packages in the details JSON, make an API call to create the packages, and then call details again as described above. This call should be made after the Store Associate has put the items into the cartons and recorded which cartons contain the items in your application.
    • Call: PUT
    • URL: $apiurl/fulfillmentOrders/Z/package/update
    • JSON Payload {“packDetails”: {“storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z”, “packages”: [{“action”: “CREATE”, “tracking number”: “T”, “boxId”: “B”, “boxWeight”: {“unit”: “LBS”, “value”: “V1”}, “packagingMaterialWeight”: {“unit”: “LBS”, “value”: “V2”}, “packageItems”: [{“itemId”: “I”, “webLineId”: “W”, “quantity”: “Q”}]}]}}

    The fulfillmentOrder Z values in the URL and payload must match

  2. Make an API call to generate a pack slip.
    • Call: POST
    • URL: $apiurl/fulfillmentOrders/Z/packslip/generate
    • JSON Payload: {“storeId”: “X”, “nodeId”: “Y”, “modifyAssociateId”: “M”, “fulfillmentOrderId”: “Z”}

    The fulfillmentOrder Z values in the URL and payload must match.

  3. Make an API call to confirm packing.
    • Call: POST
    • URL: $apiurl/fulfillmentOrders/Z/packageConfirm
    • JSON Payload {“storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z”}

    The fulfillmentOrder Z values in the URL and payload must match.

  4. Make an API call to confirm shipment.
    • Call: POST
    • URL: $apiurl/fulfillmentOrders/Z/shipmentConfirm
    • JSON Payload {“storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z”, “carrier”: “C”, “service”: “S”, “packages:” [{“packageId”: “P”, “trackingNumber”: “T”}]}

    The fulfillmentOrder Z values in the URL and payload must match.

WAITING_FOR_CHECKIN_STS and WAITING_FOR_INSTORE_CHECKIN_STS

STS orders must be checked in, whether they are shipped from another store or picked from a single store.

  • Make an API call to confirm checkin.
    • POST
    • URL: $apiurl/nodes/Y/fulfillmentOrders/Z/checkin
    • JSON Payload: {“fulfillmentOrder”: {“action”: “CONFIRM”, “storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z”, “holdLocation:” “H”, “checkInPackages”: [{“checkInPackageId”: “P”, “checkInPackageItems”: [{“itemId”: “I”, “webLineId”: “W”, “quantity”: “Q”, “checkInQuantity”: “QY”, “checkInCanceledQuantity”: “QN”, “checkInCancellationReasonCode”: “R”}]}}}

    The nodeId Y in the URL and JSON must match, and the fulfillmentOrderId Z in the URL and JSON must match.

WAITING_FOR_DELIVERY

When orders are delivered to customers, call the DeliveryConfirm API to confirm the delivery.

  • Make an API call to confirm delivery.
    • Call: POST
    • URL: $apiurl/fulfillmentOrders/Z/deliveryConfirm
    • JSON Payload: {“storeId”: “X”, “nodeId”: “Y”, “fulfillmentOrderId”: “Z}

    The nodeId Y in the URL and JSON must match, and the fulfillmentOrderId Z in the URL and JSON must match.

URI Summaries

Customer Pickup API

Operation Action URI Template Transaction Type
CustomerPickupConfirm PUT /stores/{storeId}/nodes/{nodeId}/customerPickUp/confirm Sends a confirmation that the customer has picked up the order.
CustomerPickupDetails POST /stores/{storeId}/nodes/{nodeId}/customerPickUps/{fulfillmentOrderId} Provides the details of the orders for customer pickup.
CustomerPickupReceipt POST /stores/{storeId}/nodes/{nodeId}/customerPickUp/receipts/{fulfillmentOrderId} Produces the receipt for the customer pickup.

Fulfillment Order API

Operation Action URI Template Transaction Type

FulfillmentOrderDetails

POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId} Provides the details of fulfillment orders.
FulfillmentOrderSummary POST /stores/{storeId}/fulfillmentOrder/search Provides a summary of fulfillment orders.
QueueAssignmentSummary POST /stores/{storeId}/nodes/{nodeId}/fulfillmentOrders?queueId={queueId} Provides a summary of the assignments in the specified queue.
FulfillmentOrderModify POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/Modify Shows a fulfillment order that has been modified.

Hold Ticket API

Operation Action URI Template Transaction Type

HoldTicketDetails

POST /stores/{storeId}/nodes/{nodeId}/holdTickets/{holdTicketId} Provides details of the specified Hold ticket.
HoldTicketGenerate POST /stores/{storeId}/nodes/{nodeId}/holdTicket/generate Generates hold tickets for the specified store/node.

Pick Ticket API

Operation Action URI Template Transaction Type

PickTicketGenerate

POST /stores/{storeId}/nodes/{nodeId}/pickTicket/generate Generates pick tickets for the specified store/node.
PickTicketSummary POST /stores/{storeId}/nodes/{nodeId}/pickTicket/search Provides a summary of the pick tickets for the specified store/node.
PickTicketDetails POST /stores/{storeId}/nodes/{nodeId}/pickTickets/{pickTicketId} Provides the details for a single pick ticket.
PickTicketUpdate PUT /stores/{storeId}/nodes/{nodeId}/pickTicket/update Updates the pick tickets for the specified store/node.

Putaway API

Operation Action URI Template Transaction Type

PutAwayConfirm

PUT /stores/{storeId}/nodes/{nodeId}/putAway/confirm Confirms that a putaway action has occurred.
PutAwaySummary POST /stores/{storeId}/nodes/{nodeId}/putAway/search Provides a summary of putaways at the specified store/node.

Alert API

Operation Action URI Template Transaction Type

FulfillmentAlertSummary

POST /stores/{storeId}/alert/fulfillment/search Provides a summary of alerts for a specified store/node.

Pack Slip API

Operation Action URI Template Transaction Type

PackSlipGenerate

POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/packslip/generate Generates a pack slip for a specified order at a specifed store.
PackSlipDetail POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/packslip/generate Generates a detailed pack slip for a specified order at a specified store.
PackConfirm (SFS) POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/packageConfirm Shows that the store associate has confirmed the package.
PackUpdate (SFS) PUT /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/package/update Provides updates for a specified packed order.
PackDetails (SFS) POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/packages?nodeId={nodeId} Provides details on packages for a specified packed order.

Delivery API

Operation Action URI Template Transaction Type

DeliveryConfirm

POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/deliveryConfirm Provides confirmation that a specified order was delivered.

Shipment API

Operation Action URI Template Transaction Type

ShipmentConfirm

POST /stores/{storeId}/fulfillmentOrders/{fulfillmentOrderId}/shipmentConfirm Provides confirmation that a specified order was shipped.

Check-In API (STS)

Operation Action URI Template Transaction Type

Check-InConfirm

POST /stores/{storeId}/nodes/{nodeId}/fulfillmentOrders/{fulfillmentOrderId}/checkin Provides confirmation that a specified order has been checked in.
Check-InDetails GET /stores/{storeId}/nodes/{nodeId}/fulfillmentOrders/{fulfillmentOrderId}/checkin Provides details on specified orders that have been checked in.

URI domain name: Radial recommends using the new domain at apg.radial.com. To connect to production Radial APIs, use the following form of the URL:

https://apg.radial.com/v1.0/proxyname/storecode/function

You should have received the applicable information for proxyname, storecode, and function from your Radial representative.

Note: The old domain will still be in operation until further notice from Radial. For more information on Radial API URIs, see API Requests and Responses.

Error Definitions

Order Error

Name

Description

Required

Definition

code

A code signifying the type of error

yes

See below

description

A description of the error instance

yes

String

causes

A list of String causes for the error containing the error code & description

yes

String

Order Error Codes and HTTP Error Statuses

Value

Description

HTTP Status

UNKNOWN_ERROR

An unexpected error happened that does not have a specific code.

500

DOWNSTREAM_ERROR

An error with an upstream service or system occurred.

500

BAD_REQUEST

The request was bad in some way and should not be re-attempted.

400

METHOD_NOT_SUPPORTED

The request method specified is not supported.

415

FAILED_VALIDATION

The request failed validation in some way and should be fixed.

400

RESOURCE_NOT_FOUND

A requested resource was not found.

404

MISMATCHED_IDENTIFIERS

Related identifiers did not match (in request path and body for example).

400

INTERNAL_ERROR

Internal error for unknown reasons.

500

MISSING_REQUIRED_SERVLET_PARAMETER

Missing a required servlet request parameter.

400

UNSUPPORTED_STORE

Could not find an associated OMS Seller for the provided storeId

400

Error Payload Example

Copy

{
    "code": "MISMATCHED_IDENTIFIERS",
    "description": "Mismatched path and body identifiers.",
    "causes": [
        "Mismatched path and body identifiers. storeId: TMSUS vs PETUS"
    ]
}