The catalogue went from ten events to twenty-six. Products, variant groups, courier tracking, company settings and invoices can now all be pushed instead of polled.
The new events#
Products — product.created, product.updated, product.stock_changed,
product.price_changed, product.sold, product.archived, product.deleted.
Variant groups — product_group.created, product_group.updated,
product_group.deleted, keyed by your external_group_id.
Orders — order.awb_created (the waybill, with its number and tracking URL) and
order.tracking_updated (one per courier scan).
Everything else — question.answered, company.updated, company.bands_updated,
invoice.issued.
Every one is listed with its exact payload in the event reference.
We no longer send you your own changes#
A change your integration made through the API is not delivered back to you. You already know about it, and on a nightly catalogue sync it was thousands of deliveries telling you what you had just done.
It still reaches the seller's other integrations — a stock feed and an accounting system both connected will each hear about the other's writes — and anything changed in the Biklo dashboard reaches everyone.
You do not need to do anything. If you were filtering out your own writes at your end, you can stop.
One product edit is one event#
A write that touches several columns does not send several deliveries:
- A lifecycle change wins outright — deleted, archived, sold, approved, rejected — and nothing else is sent.
- Otherwise stock and price are announced, and both can fire.
- Otherwise a single
product.updatednaming what moved.
So a sync that changes a title and the stock sends product.stock_changed only,
not that plus an updated.
Two things to know before you subscribe to everything#
order.tracking_updated is the highest-volume event here — a parcel produces several
scans and every shipment in flight is polled. If you only want to know it arrived,
subscribe and filter on is_final; you keep the audit trail and lose nothing.
notification.sent is the next highest: one delivery per email and SMS we send about
your orders.
Both are genuinely useful. Neither is something to switch on without meaning to.
Smaller things in the same release#
Returns are identifiable. A return is an order in its own right, so it always
emitted order.status_changed — you just could not tell it apart from a normal order.
Every order event now carries is_return, and a return also carries
parent_order_id.
payout.updated gained needs_review, for a payout that failed and is waiting on
a person.
product.price_changed is in minor units, like every other amount in this API.
posts stores price in major units internally; the event does not leak that.
