BimpHelp

Bimp webhooks: setup and event formats

Updated 7 min read

On this page
In short

A webhook is an HTTP request that Bimp sends to your URL when stock changes, a product is created or changed, or a customer order status changes. You add a webhook in "Company settings → Webhooks": specify a name, URL and type, and for stock and statuses also warehouses or statuses.

What a webhook is in Bimp

A webhook is an automatic HTTP request from Bimp to your address (endpoint) at the moment of an event. Your service receives the request and performs actions, for example updates stock on the website.

Bimp has three types of webhooks:

Type in the interfaceWhen it is sentWhat else you select
“Stock balances”stock changed (sale, receipt, write-off, transfer, etc.)warehouses
“Products”a product was created or changednone
“Customer order statuses”a customer order status changedstatuses

Webhooks complement the REST API: the initial data export is done with API requests (see Getting started with the API), and subsequent changes arrive as webhooks.

How to set up a webhook

To add a webhook, open the company settings, go to the Webhooks tab and create a record.

  1. Open Company settings → Webhooks.

  2. Click Add.

  3. In the “Add webhook” window, fill in the fields:

    • “Name”: any name;
    • “URL”: the address of your endpoint that requests will be sent to, for example https://mysite.com/webhook;
    • “Type”: “Products”, “Stock balances” or “Customer order statuses” (required).

    The "Add webhook" window with the "Name" field (My webhook), the URL field (https://mysite.com/webhook) and the expanded "Type" list with the options "Products", "Stock balances", "Customer order statuses"

  4. For the “Stock balances” type, in the “Warehouse” field check the warehouses to send events for.

    The "Add webhook" window with the "Stock balances" type and the expanded required "Warehouse" field with a list of warehouses "Main warehouse" and "warehouse" with checkboxes

  5. For the “Customer order statuses” type, in the “Status” field check the statuses that should trigger an event when an order moves to them (for example, “New”, “Paid”, “Shipped”, “Canceled”; the list depends on your company’s statuses).

    The "Add webhook" window with the "Customer order statuses" type and a list of statuses with checkboxes: Archive, In progress, Production, Shipped, On hold, Rejected, Completed, Overpayment remaining, Not shipped, Unpaid, New, Paid, Partially shipped, Partially paid

  6. Save the webhook. It appears in the list on the Webhooks tab with the columns “Name”, “URL”, “Type”, “Warehouse”, “Status”. Webhooks differ by the “Type” column.

    The webhook list on the Webhooks tab: three "My webhook" rows with the types "Customer order statuses" (statuses "In progress, Shipped"), "Stock balances" (warehouse "Main warehouse") and "Products"; a three-dot menu at the right of each row, the Add button at the top

To edit or delete a webhook, use the three-dot menu at the end of its row.

What the endpoint should look like

An endpoint is a public HTTPS URL of your service that accepts POST with a JSON body. The description below is based on the event formats; response requirements are not documented.

  • Accept the request, parse the JSON and respond quickly; move heavy processing to a queue.
  • Expect repeated and out-of-order events: identify the object by uuid/id, and determine freshness by the timestamp field (where present).
  • Do not rely on an event as the only source: periodically reconcile data with the API.

The “Stock balances” webhook

The “Stock balances” webhook is sent when product stock changes: on sales, receipts, write-offs and transfers. It fits when you need current stock on the website without waiting 10-30 minutes for the next scheduled run.

Example event body:

{
  "id": "product-id",
  "barcode": "product_barcode",
  "sku": "product_sku",
  "name": "Product Name",
  "total_physical": -1,
  "total_reserved": 1,
  "total_available": -2,
  "stock_details": [
    {
      "storage_id": "Warehouse-Id",
      "storage_name": "Storage Name",
      "physical": -1,
      "reserved": 1,
      "available": -2
    },
    {
      "storage_id": "Storage-Id",
      "storage_name": "Основний склад",
      "physical": 0,
      "reserved": 0,
      "available": 0
    }
  ],
  "timestamp": "2026-01-01T00:00:00.000Z"
}
FieldWhat it means
idproduct identifier in Bimp
barcode, sku, nameproduct barcode, SKU and name
total_physicalphysical stock across all warehouses
total_reservedreserved quantity
total_availableavailable quantity (physical stock minus reserve)
stock_detailsbreakdown by warehouse: storage_id, storage_name, physical, reserved, available
timestampevent time, ISO 8601 UTC

Available stock equals physical stock minus reserve, and can be negative (in the example: -1 physical, 1 reserved, -2 available).

The “Products” webhook

The “Products” webhook is sent when a product is created or changed in Bimp. You need it to synchronize the product directory (names, article numbers, SKUs, description, dimensions) with an external system without delay.

Example for a product without modifications:

{
  "product": {
    "uuid": "product-id",
    "name": "Product Name",
    "article": "product-article",
    "sku": "product-sku",
    "description": "product description",
    "picture": "product-picture.com",
    "isModification": false,
    "measurements": {
      "weight": 1,
      "length": 10,
      "width": 20,
      "height": 30
    }
  },
  "timestamp": "2026-01-01T00:00:00.000Z"
}

For a product modification, isModification equals true, and product gets a parent block with the parent product data (the same set of fields, without isModification):

{
  "product": {
    "uuid": "product-id",
    "name": "Product Name",
    "article": "product-article",
    "sku": "product-sku",
    "description": "product description",
    "picture": "product-picture.com",
    "isModification": true,
    "measurements": { "weight": 1, "length": 10, "width": 20, "height": 30 },
    "parent": {
      "uuid": "parent-product-id",
      "name": "Parent Name",
      "article": "parent-article",
      "sku": "parent-sku",
      "description": "parent description",
      "picture": "parent-picture.com",
      "measurements": { "weight": 2, "length": 20, "width": 30, "height": 40 }
    }
  },
  "timestamp": "2026-01-01T00:00:00.000Z"
}
FieldWhat it means
product.uuid, name, article, sku, descriptionproduct UUID, name, article number, SKU and description
product.picturelink to the photo
product.isModificationtrue if this is a modification of another product
product.measurementsweight, length, width, height
product.parentparent product; present only for modifications
timestampevent time, ISO 8601 UTC

The “Customer order statuses” webhook

The “Customer order statuses” webhook is sent when a customer order status changes to one of those selected in the webhook settings, for example “Paid”, “Shipped”, “Canceled”. It is useful when later processes depend on the status: delivery, reserve, fiscalization. For statuses, see Order statuses.

The event body contains the whole order:

{
  "order_id": "order-id",
  "comment": "order comment",
  "buyer": { "uuid": "buyer-id", "name": "Buyer Name" },
  "date": "2026-01-01T00:00:00",
  "name": "Buyer's order № 1 from 01.01.2026",
  "organization": { "uuid": "organization-id", "name": "Organization Name" },
  "quantityOrdered": 1,
  "quantityShipped": 1,
  "status": { "uuid": "status-id", "name": "Status Name" },
  "sumPayed": 0,
  "sumShipped": 0,
  "TTN": "",
  "docNumber": "1",
  "paymentEntity": { "uuid": "payment-id", "name": "Основна каса" },
  "project": { "uuid": "project-id", "name": "Project Name" },
  "contract": { "uuid": "contract-id", "name": "Contract Name" },
  "lineOfBusiness": { "uuid": "line-of-business-id", "name": "Line Of Business Name" },
  "warehouse": { "uuid": "warehouse-id", "name": "Warehouse Name" },
  "VATaccounted": false,
  "priceList": { "uuid": "Price-List-id", "name": "Price List Name" },
  "VATamount": 0,
  "products": [
    {
      "nomenclature": { "uuid": "nomenclature-id", "name": "Nomenclature Name" },
      "count": 1,
      "VAT": { "uuid": "VAT-id", "name": "VAT Name" },
      "VATamount": 0,
      "cost": 291.1,
      "amount": 291.1,
      "comment": "product comment",
      "discount": 0,
      "discountPercentage": 0,
      "shiped": 1,
      "warehouse": { "uuid": "warehouse-id", "name": "Warehouse Name" },
      "reserve": 1,
      "modification": null,
      "machinery": { "uuid": "machinery-id", "name": "Machinery Name" }
    }
  ]
}

Top-level fields:

FieldWhat it means
order_id, docNumber, name, date, commentorder identifier, number, name, date and comment
statusthe new status (uuid, name)
buyer, organization, contract, project, lineOfBusiness, warehouse, priceList, paymentEntityrelated objects with uuid and name: customer, organization, contract, project, line of business, warehouse, price list, cash desk or payment account
quantityOrdered, quantityShippedordered and shipped quantity
sumPayed, sumShippedpaid amount and shipped amount
TTNwaybill number (empty string if none)
VATaccounted, VATamountVAT accounting flag and VAT amount
productsorder lines

Line fields in products: nomenclature, count, VAT, VATamount, cost (price), amount (total), comment, discount, discountPercentage, shiped (shipped), warehouse, reserve (reserve), modification, machinery (equipment).

Common problems

The webhook does not arrive. Causes: the URL is not reachable from the external network, no warehouses or statuses are selected, or the event does not match the selected ones. Solution: check the URL and make sure the “Warehouse” or “Status” columns in the webhook list show the values you need.

The webhook arrives, but the data is outdated. Cause: events may arrive out of order. Solution: compare timestamp with the one already stored and ignore older events.

FAQ

Which events do Bimp webhooks support?

Three types: "Stock balances" (stock changes), "Products" (a product is created or changed) and "Customer order statuses" (a document status changes).

Why is a webhook better than periodically requesting stock?

A webhook arrives immediately after the change, so you do not have to wait 10-30 minutes for the next scheduled run. For the initial full export, still use the API.

How do I limit a stock webhook to specific warehouses?

When you select the "Stock balances" type, a required "Warehouse" field appears: check the warehouses whose changes should be sent. For the "Customer order statuses" type, you select statuses in the same way.

Can I edit or delete a webhook?

Yes. In the list on the Webhooks tab, you can edit or delete a webhook via the three-dot menu at the end of the row.

Was this article helpful?

Read next

Didn't find the answer?Write to us — support replies during business hours.