fulkruma.product.created.v1
Fires when a product is created in Fulkruma — either by a direct POST /api/v1/products call or by an inbound Storlaunch product-sync webhook mirroring a product into Fulkruma's fulfilment context. Subscribe if you back your own catalog with Fulkruma's product object or provision dependent resources (warehouses-to-seed, marketing automation, accounting SKUs) at product creation time.
When it fires
Inside the same Prisma transaction as the Product insert. Exactly one emission per product ID; retries reuse the same evt_…. The auto-created Default variant is not broadcast as a separate event — it's implicit in the product creation.
Payload
{
"id": "evt_01HXAB7K3M9N2P5QRS8TVWXY3Z",
"type": "fulkruma.product.created.v1",
"occurredAt": "2026-05-12T10:42:00.123Z",
"accountId": "acc_01HX...",
"data": {
"productId": "prod_01HXAB7K3M9N2P5QRS8TVWXY3Z",
"name": "Espresso Beans 250g",
"type": "physical"
}
}
The data field is the minimal product summary. Fetch the full object including variants via GET /api/v1/products/:id if you need SKUs, dimensions, or pricing.
Handler examples
// Node
if (event.type === 'fulkruma.product.created.v1') {
const { productId, name, type } = event.data;
await catalog.mirror({ fulkrumaId: productId, name, fulfilmentType: type });
}
# Python
if event["type"] == "fulkruma.product.created.v1":
d = event["data"]
catalog.mirror(fulkruma_id=d["productId"], name=d["name"], fulfilment_type=d["type"])
// Go
if event.Type == "fulkruma.product.created.v1" {
var d struct{ ProductID, Name, Type string }
_ = json.Unmarshal(event.Data, &d)
catalog.Mirror(ctx, d.ProductID, d.Name, d.Type)
}
What to do
- Mirror the product into your own catalog if you use Fulkruma as the source of truth for fulfilment metadata.
- Provision dependent rows: a default stock level of 0 in each warehouse, low-stock alert thresholds, marketing automation triggers.
- Fan out to accounting (SKU registration) or analytics (new-product tracking).
Common pitfalls
- Treating the event as "available for sale". A new product has no stock until you post
initial_stockmovements. Don't surface it on a storefront based on this event alone. - Double-mirror loops. If your own catalog also creates Fulkruma products via API, guard against round-trips with a
metadata.sourcemarker. - Assuming the product carries variants here. The payload is intentionally minimal — fetch the product if you need variant info.
Related events
fulkruma.product.updated.v1— its fields change.fulkruma.product.archived.v1— it is archived.fulkruma.variant.created.v1/fulkruma.variant.archived.v1— its variants (updating a variant sends no webhook).
Next
- Webhooks reference — signature verification, retries, ordering.
- Products resource — the full object shape and write API.