curl --request POST \
--url https://api.appgoat.ai/v1/webhooks \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com/hooks/appgoat",
"event_types": [
"new_version",
"rating_drop"
]
}
'{
"data": {
"id": 123,
"kind": "webhook",
"url": "<string>",
"description": "<string>",
"event_types": [
"new_version"
],
"active": true,
"disabled_reason": "<string>",
"failure_count": 123,
"last_success_at": "2023-11-07T05:31:56Z",
"last_failure_at": "2023-11-07T05:31:56Z",
"secret": "<string>",
"secret_hint": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"credits_used": 123,
"credits_remaining": 123,
"request_id": "<string>",
"freshness": {
"fetched_at": "2023-11-07T05:31:56Z",
"age_seconds": 123,
"stale": true,
"refreshing": true,
"job_id": "<string>"
},
"next_cursor": "<string>",
"store": "apple",
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "invalid_param",
"message": "limit must be ≤ 100",
"hint": "Fix the parameter and retry.",
"docs": "https://appgoat.ai/docs/errors#invalid_param",
"param": "limit"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}Create webhook
kind:
webhook(default): POST of the event JSON, signed withappgoat-signature: t=<unix>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Thesecretis returned once, here (rotate with PATCH rotate_secret). Answer 2xx within 10 s.slack:urlis a Slack incoming webhook (https://hooks.slack.com/services/…).github:urlisowner/repo,github_tokena fine-grained token with Contents: read and write on it. Sends{ event_type: "appgoat.<type>", client_payload: <event> }to start a workflowon: repository_dispatch. Failed deliveries are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h; an endpoint failing 50 times in a row is disabled (PATCH active=true re-enables it). Free plan: 402 plan_limit (use GET /v1/events).
curl --request POST \
--url https://api.appgoat.ai/v1/webhooks \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com/hooks/appgoat",
"event_types": [
"new_version",
"rating_drop"
]
}
'{
"data": {
"id": 123,
"kind": "webhook",
"url": "<string>",
"description": "<string>",
"event_types": [
"new_version"
],
"active": true,
"disabled_reason": "<string>",
"failure_count": 123,
"last_success_at": "2023-11-07T05:31:56Z",
"last_failure_at": "2023-11-07T05:31:56Z",
"secret": "<string>",
"secret_hint": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"credits_used": 123,
"credits_remaining": 123,
"request_id": "<string>",
"freshness": {
"fetched_at": "2023-11-07T05:31:56Z",
"age_seconds": 123,
"stale": true,
"refreshing": true,
"job_id": "<string>"
},
"next_cursor": "<string>",
"store": "apple",
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "invalid_param",
"message": "limit must be ≤ 100",
"hint": "Fix the parameter and retry.",
"docs": "https://appgoat.ai/docs/errors#invalid_param",
"param": "limit"
}
}{
"error": {
"code": "invalid_param",
"message": "<string>",
"hint": "<string>",
"docs": "<string>",
"param": "<string>"
}
}Authorizations
Create a key at https://dash.appgoat.ai.
Body
https URL (webhook), Slack incoming webhook URL (slack) or owner/repo (github).
webhook, slack, github null = every type.
App / competitor_set watches: new_version (version + release notes), metadata_change (title, subtitle,
description, screenshots, icon, category…; payload.changes), price_change (price or in-app purchases),
featured (Editors' Choice, featuring, badges), in_app_event, installs_milestone (Play install bucket),
rating_drop (7-day drop ≥ settings.rating_drop), ratings_spike / review_spike (day count ≥
settings.spike_factor × the 14-day average), negative_review_spike (negative reviews per topic),
chart_enter / chart_leave (crossing the top settings.chart_top_n). Keyword watches: rank_change (the
watch's app moved ≥ settings.rank_move, or entered / left the ranking), keyword_entrant (new apps in the
top settings.keyword_top_n).
new_version, metadata_change, price_change, featured, in_app_event, installs_milestone, rating_drop, ratings_spike, review_spike, negative_review_spike, chart_enter, chart_leave, rank_change, keyword_entrant kind github only; never returned.