Home delivery

Implementation is OPTIONAL

General flow

Client flow

  • add products into shopping cart

  • choose delivery method and time

  • authorize the payment

Merchant flow

  • confirm or reject order

  • process order and update order status

The payment will be settled after merchant has been sent out the order ! This process is needed because merchant may not be able to fully fill the order due the out of stock products.

The authorized payment will be released when merchant reject the order or authorization will be expired. Authorization expiration time is set by the card network.


Configure home delivery via Smarts manager UI. Smarts supports 3 delivery methods: courier, parcel, pickup by myself. Home delivery can be fully customized. You can set delivery price, reaction time for each store, availability time and dates, location and much more.

Implement required SDK methods for home delivery

Smarts Worker App can be used to manage home delivery orders. (optional)


You only need to create a new class, implement PickupAdapter interface and fill all required methods. API endpoints for home delivery are created automatically and secured with token.

It is important to add @Component annotation on top of the class. There is no restriction for class name or location in your project. Our SDK will find your implementation based on the interface (DI).

import ee.smarts.common.v1.Entities.pickup.Order;
import ee.smarts.starter.adapter.PickupAdapter;
import org.springframework.stereotype.Component;

public class PickupAdapterImpl implements PickupAdapter {

    public void onUpdate(Order order) {
      // implement this method. Will used when order was update in Smarts system
      // or via Smarts Worker App

    public void onCreate(Order order) {
      // implement this method. listener for new Orders

Use SmartsPickupExchange to update order status or get information from Smarts.

import ee.smarts.common.global.type.ShipmentStatus;
import ee.smarts.common.v1.Entities.pickup.Order;
import ee.smarts.common.v1.Exceptions.PermissionDeniedException;
import ee.smarts.starter.services.pickup.SmartsPickupExchange;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

public class PickupOrderServiceImpl {

    private final SmartsPickupExchange pickupExchange;

    void testCommunicationWithSmarts() throws PermissionDeniedException {
        Order order0 = pickupExchange.updateOrderStatus("INSTITUTION_ID", "ORDER_ID", ShipmentStatus.ASSEMBLE_READY);

        Order order1 = pickupExchange.findOrderById("INSTITUTION_ID", "ORDER_ID");
        Order order2 = pickupExchange.findOrderByInstitutionInvoiceId("INSTITUTION_ID", "INSTITUTION_INVOICE_ID");
        Order order3 = pickupExchange.findOrderBySmartsInvoiceId("INSTITUTION_ID", "SMARTS_INVOICE_ID");


Last updated