Skip to main content
Watches turn significant changes on apps and keywords into events (new versions, metadata and price changes, rating drops, review spikes, chart and rank moves). You can poll them for free with GET /v1/events, or have AppGoat push each event as it happens. Webhooks are free to use on paid plans; on Free, creating one returns 402 plan_limit.

Create an endpoint

The response contains the signing secret (whsec_…). It is returned only once; rotate it with PATCH /v1/webhooks/{id} and rotate_secret. event_types: null (the default) sends every type. Send a test event with POST /v1/webhooks/{id}/test. An organization can have up to 20 endpoints.

The delivery

Every webhook delivery is a POST with the event as JSON and these headers:
Answer with any 2xx within 10 seconds and do the work asynchronously.

Verify the signature

Compute HMAC-SHA256 of <t>.<raw request body> with your secret, compare it in constant time with v1, and reject timestamps older than 5 minutes.

Retries

A non-2xx answer (redirects included) or a timeout is retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts over about 2 days); after the last one the delivery is marked failed. Inspect them with GET /v1/webhooks/{id}/deliveries. An endpoint that fails 50 times in a row is disabled; PATCH it with active: true to turn it back on. Endpoint URLs must resolve to public addresses: localhost, private networks and URLs with credentials are refused with invalid_param.