webhook_endpoint_url, signed with your app’s
client_secret. Delivery runs on the same signed, retrying pipeline as
Agent Gateway webhooks — the difference is that app webhooks are keyed
by your client secret, so you already hold everything needed to verify them.
Subscribing
You do not call a subscribe endpoint. Declare the topics you want on an app version’swebhook_topics, and set the delivery target as your app’s
webhook_endpoint_url. When a merchant installs an approved version, the platform
auto-registers those topics for that install and delivers to your endpoint.
Delivery format
Each event is aPOST to your endpoint with a signature header and a JSON envelope:
Verify the signature
The signature isHMAC-SHA256(client_secret, raw_body), hex-encoded and prefixed sha256=.
Compute it over the raw request bytes — not a re-serialized object — and compare in constant
time.
During the 72-hour secret-rotation grace,
signatures may be produced with either the new or the previous secret. If you have just rotated,
accept a body that verifies against either secret until you have fully cut over.
Retries
A delivery is considered successful on a2xx. Any network error or a >= 400 response is
retried — up to 5 attempts with exponential backoff. Make your handler idempotent:
de-duplicate on webhook_id, since a retry re-delivers the same event.
App lifecycle topics
Commerce topics
App versions may also subscribe to store-resource topics to react to merchant activity. Common ones:
See the webhook reference for the full topic catalog. Only topics your
app actually needs should appear on a version — unused subscriptions are noise the review team
will question.
GDPR compliance topics (
customers/data_request, customers/redact, shop/redact) are mandatory
for public-marketplace apps in a later phase. Custom-distribution api apps can subscribe now if
they handle customer PII.