CRITICAL — before anything else, use Read on ../shoplazza-common/SKILL.md.
It owns every cross-cutting mechanic: access tiers, the output envelope (.data), --dry-run,
--jq, schema, api rest, auth / profiles, and the safety protocol. This file covers only the
webhook domain and never repeats them.
Overview
The webhook module manages event subscriptions: a webhook binds a store event topic (e.g.
orders/create) to an address (an HTTPS endpoint the platform calls when the event fires).
It is spec-leaf only — no +shortcuts. Full CRUD + count.
Command map
Intent → command. Authoritative params/body live in shoplazza schema webhook.<cmd>.
| User intent | Command |
|---|---|
| Subscribe to an event (create) | webhook create --data '{"webhook":{"topic":"<event>","address":"<https-url>"}}' |
| List all webhooks | webhook list |
| Count webhooks (optionally filtered) | webhook count --params '{"address":"<url>","topic":"<event>"}' (params optional) |
| Get one webhook | webhook get --params '{"id":"<id>"}' |
| Update a webhook's address / topic | webhook update --params '{"id":"<id>"}' --data '{"webhook":{"address":"<url>","topic":"<event>"}}' |
Delete a webhook (destructive → --dry-run first) |
webhook delete --params '{"id":"<id>"}' --dry-run |
Event topics look like orders/create, orders/fulfilled, products/update, etc. The full
topic list isn't introspectable from the binary — confirm a topic with shoplazza schema webhook.create / the Open Platform docs; don't invent one.
Acting on a request
- Match intent to the leaf (no shortcuts here).
createneeds two required fields — ask withAskUserQuestionif either is missing, never fabricate: the event topic and the address (HTTPS endpoint). Forupdate/get/delete, the webhookidis required.create/updateare safe to run directly once required fields are present (subscriptions don't move money); use--dry-runfirst only if the user asks.deleteis destructive — it silently stops event delivery and cannot be undone. It follows the shoplazza-common safety protocol:--dry-runfirst, restate which subscription (topic + address, not just the id), then stop and wait for the user's go-ahead.
Boundaries
Reads like an event/order/product task, actually belongs here:
| Sounds like orders / products | Actually belongs to | Command |
|---|---|---|
| "Notify my system automatically when an order ships" / notify my system when an order ships | HERE (webhook) — it's a subscription | webhook create --data '{"webhook":{"topic":"orders/fulfilled",…}}' |
| "Notify me when a product is updated" / get notified when a product is updated | HERE (webhook) | webhook create --data '{"webhook":{"topic":"products/update",…}}' |
Subscribing to an event is a webhook, not an orders/products command. (Serves the
event-webhook routing collision.)
Permissions · Scope
Authorization is by domain. Grant: auth login --domain webhook. Look up exact scope literals
with shoplazza auth scopes.
Gotchas
Domain-specific only (generic rules are in shoplazza-common).
| Symptom | Cause | Fix |
|---|---|---|
Guessed a topic and it was rejected |
The topic enum isn't in the binary's help | Confirm via schema webhook.create / Open Platform docs; ask the user if unsure — don't invent |
create fails |
topic and address are both required in the webhook body |
--data '{"webhook":{"topic":"…","address":"…"}}' |
address rejected |
Endpoints must be reachable HTTPS URLs | Pass a full https:// URL |
Recipes
# 1. Subscribe: push order-created events to an endpoint
webhook create --data '{"webhook":{"topic":"orders/create","address":"https://api.myapp.com/hooks/orders"}}'
# 2. List current subscriptions
webhook list
# 3. Update a webhook's address
webhook update --params '{"id":"246"}' --data '{"webhook":{"address":"https://new.example.com/hook"}}'
# 4. Delete a subscription: look up what it is, preview, then STOP for the user's go-ahead
webhook get --params '{"id":"135"}' --jq '.data.webhook | {topic, address}'
webhook delete --params '{"id":"135"}' --dry-run
# 5. Count webhooks pointing at an address
webhook count --params '{"address":"https://api.myapp.com/hooks"}'
References
- Per-command flags:
shoplazza webhook <cmd> --help - Params / body / response:
shoplazza schema webhook.<cmd> - Cross-cutting mechanics (auth / tiers / output envelope /
--dry-run/ safety):../shoplazza-common/SKILL.md