Browse the docs

API reference

Sales and events

Book every Scanimart sale, and catch up on missed events.

List completed sales

GET/v1/stores/{store_id}/sales

Every Scanimart sale at the store -- delivered online orders and paid in-store Scan & Go -- oldest first, for booking into your POS. The same sales arrive as sale.completed webhooks; this is the pull fallback. Covers the last 30 days.

Parameters

  • store_idinteger · pathrequired
  • cursorstring · query

    Opaque cursor from a previous page's next_cursor.

  • limitinteger · query

    Page size, 1–100. Default 50.

  • sincestring · query

    ISO 8601.

Returns · SaleList

Show 4 fields
  • objectstring
  • dataarray of objectrequired
    • objectstring
    • idstringrequired

      The Scanimart order id this sale came from.

    • event_idstringrequired

      The sale.completed event id; use it to acknowledge.

    • external_idstringnullablerequired
    • store_idintegerrequired
    • channelenumrequired

      * SCANIMART_ONLINE - SCANIMART_ONLINE * SCANIMART_INSTORE - SCANIMART_INSTORE

      SCANIMART_ONLINESCANIMART_INSTORE
    • sold_attimestamprequired
    • total_amountdecimal stringrequired
    • delivery_feedecimal stringnullablerequired
    • paymentobjectrequired
      • statusstringrequired
      • paidbooleanrequired
      • methodstringnullablerequired
    • linesarray of objectrequired
      • barcodestringnullablerequired
      • namestringnullablerequired
      • quantityintegerrequired
      • free_quantityintegernullablerequired

        Units of quantity given free by a buy-X-get-Y offer.

      • unit_pricedecimal stringnullablerequired

        Per paid unit, tax-inclusive.

      • mrpdecimal stringnullablerequired
      • line_totaldecimal stringrequired
      • sourceenumnullablerequired

        * catalog - catalog * store_item - store_item * misc - misc

        catalogstore_itemmisc
      • external_idstringnullablerequired

        Your id for this item, if you sent one.

  • has_morebooleanrequired
  • next_cursorstringnullablerequired

    Pass as cursor to get the next page.

Request
curl https://sandbox.api.scanimart.com/v1/stores/1042/sales \
  -H "Authorization: Bearer $SCANIMART_KEY"
Response · 200
{
  "object": "list",
  "data": [
    {
      "object": "sale",
      "id": "ORDER-1A2B3C4D5E",
      "event_id": "evt_8f14e45fceea167a5a36dedd4bea2543",
      "external_id": "BILL-20391",
      "store_id": 1042,
      "channel": "SCANIMART_ONLINE",
      "sold_at": "2026-10-08T10:15:00+05:30",
      "total_amount": "249.00",
      "delivery_fee": "249.00",
      "payment": {
        "status": "string",
        "paid": true,
        "method": "string"
      },
      "lines": [
        {
          "barcode": "8901725181222",
          "name": "Aashirvaad Atta 5kg",
          "quantity": 2,
          "free_quantity": 2,
          "unit_price": "249.00",
          "mrp": "249.00",
          "line_total": "249.00",
          "source": "catalog",
          "external_id": "BILL-20391"
        }
      ]
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Acknowledge booked sales

POST/v1/stores/{store_id}/sales/ack

For integrations that pull sales instead of receiving webhooks: tell Scanimart which sales you have booked, so stock you push afterwards is not adjusted for them. A 2xx to a sale.completed webhook does this automatically.

Parameters

  • store_idinteger · pathrequired
  • Idempotency-Keystring · header

    Any unique string (a UUID is ideal). Retrying with the same key returns the first result instead of acting twice. Kept for 24 hours.

Request body

  • event_idsarray of stringrequired

    event_ids from GET …/sales that you have booked.

Returns · SaleAck

Show 3 fields
  • objectstring
  • acknowledgedarray of stringrequired

    The event ids now booked.

  • unknownarray of stringrequired

    Ids that are not sale.completed events at this store since it connected you. Nothing was done with them.

Request
curl -X POST https://sandbox.api.scanimart.com/v1/stores/1042/sales/ack \
  -H "Authorization: Bearer $SCANIMART_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "event_ids": [
      "string"
    ]
  }'
Response · 200
{
  "object": "sale_ack",
  "acknowledged": [
    "string"
  ],
  "unknown": [
    "string"
  ]
}

List events

GET/v1/events

Order events at your connected stores, oldest first -- the same bodies webhooks carry. Use it to recover anything your endpoint missed. Covers the last 30 days.

Parameters

  • store_idinteger · query
  • cursorstring · query

    Opaque cursor from a previous page's next_cursor.

  • limitinteger · query

    Page size, 1–100. Default 50.

  • sincestring · query

    ISO 8601.

  • typeenum · query
    delivery.courier_assigneddelivery.courier_bookeddelivery.faileddelivery.rider_changedorder.acceptedorder.cancelledorder.deliveredorder.fulfilment_changedorder.out_for_deliveryorder.packedorder.payment_failedorder.payment_recoveredorder.picking_startedorder.placedsale.completedsale.exit_verified

Returns · EventList

Show 4 fields
  • objectstring
  • dataarray of objectrequired
    • idstringrequired

      Unique; dedupe on it. Deliveries are at-least-once.

    • objectstring
    • typeenumrequired

      * order.placed - order.placed * order.accepted - order.accepted * order.cancelled - order.cancelled * order.payment_failed - order.payment_failed * order.payment_recovered - order.payment_recovered * order.picking_started - order.picking_started * order.packed - order.packed * order.out_for_delivery - order.out_for_delivery * order.delivered - order.delivered * sale.completed - sale.completed * sale.exit_verified - sale.exit_verified * order.fulfilment_changed - order.fulfilment_changed * delivery.courier_booked - delivery.courier_booked * delivery.courier_assigned - delivery.courier_assigned * delivery.rider_changed - delivery.rider_changed * delivery.failed - delivery.failed * store.connected - store.connected * store.disconnected - store.disconnected * ping - ping

      order.placedorder.acceptedorder.cancelledorder.payment_failedorder.payment_recoveredorder.picking_startedorder.packedorder.out_for_deliveryorder.deliveredsale.completedsale.exit_verifiedorder.fulfilment_changeddelivery.courier_bookeddelivery.courier_assigneddelivery.rider_changeddelivery.failedstore.connectedstore.disconnectedping
    • api_versionstringrequired
    • modeenumrequired

      * live - live * test - test

      livetest
    • created_attimestamprequired
    • store_idintegernullablerequired
    • dataanyrequired

      order, actor, and per type previous_status, reason, channel, sale.

  • has_morebooleanrequired
  • next_cursorstringnullablerequired

    Pass as cursor to get the next page.

Request
curl https://sandbox.api.scanimart.com/v1/events \
  -H "Authorization: Bearer $SCANIMART_KEY"
Response · 200
{
  "object": "list",
  "data": [
    {
      "id": "ORDER-1A2B3C4D5E",
      "object": "event",
      "type": "order.placed",
      "api_version": "string",
      "mode": "live",
      "created_at": "2026-10-08T10:15:00+05:30",
      "store_id": 1042,
      "data": null
    }
  ],
  "has_more": false,
  "next_cursor": null
}