- Auth: API key (Authentication)
- Scope:
events:read - Cost: Free.
Use it to check which subscriptions are running and whether any was disabled after repeated failed deliveries (disabledReason).
Every webhook on your account, active or disabled, newest first. Free. Scope events:read.
Request
curl "https://api.installgraph.com/v1/webhooks" \
-H "Authorization: Bearer $INSTALLGRAPH_API_KEY"
Response
200. The example's stores are fictional.
{
"data": [
{
"id": "6731b2e4c9a1f20d8e4b7c15",
"app": {
"slug": "klaviyo",
"name": "Klaviyo",
"category": "email-sms"
},
"types": [
"removed"
],
"filters": {
"country": "US"
},
"url": "https://example.com/hooks/installgraph",
"description": null,
"status": "active",
"disabledReason": null,
"creditsPerDelivery": 10,
"createdAt": "2026-11-10T12:00:00.000Z",
"lastDeliveredAt": "2026-11-12T04:21:07.000Z"
}
],
"meta": {
"requestId": "6f1c2a9e-4b7d-4e2a-9c51-0d3b8e7f2a14",
"creditsUsed": 0,
"creditsCharged": 0,
"creditsRemaining": 2480,
"freeRepulls": 0
}
}
Fields
| Field | Type | Description |
|---|---|---|
data[].id |
string | |
data[].app |
AppSummary | |
data[].app.slug |
string | Example: klaviyo. |
data[].app.name |
string | The catalogue's name: our own for apps we curate, else the App Store listing title as written. Example: Klaviyo. |
data[].app.displayName |
string | What a merchant calls the app, read from its keyword-padded App Store title ("Preorder, Back In Stock ‑ STOQ" is STOQ). A developer's listings that share a brand keep the words that tell them apart (Swym Wishlist Plus). Equal to name until derived. Example: Klaviyo. |
data[].app.category |
Category | One of 28 values (see Data model). |
data[].app.kind |
string | shopify-app: an app installed from Shopify. web: a website technology installed outside Shopify, by pasting its tag into the theme or through a tag manager (Google Tag Manager, Meta Pixel, Hotjar). A vendor with both has one entry of each (meta-pixel and meta-facebook-instagram-app). One of shopify-app, web. |
data[].types |
string[] | One of installed, removed. |
data[].filters |
object | The company filters it was created with. |
data[].filters.country |
string | |
data[].filters.region |
string | |
data[].filters.industry |
string | |
data[].filters.aov |
string | |
data[].url |
string | |
data[].description |
string | null | |
data[].status |
string | disabled after 3 deliveries in a row failed every retry; create a new one. One of active, disabled. |
data[].disabledReason |
string | null | |
data[].creditsPerDelivery |
integer | Example: 10. |
data[].createdAt |
string (date-time) | |
data[].lastDeliveredAt |
string (date-time) | null |
Every keyed response also carries meta (requestId, creditsUsed, creditsRemaining, freeRepulls) and the X-Credits-* and X-RateLimit-* headers. See Credits and Rate limits.
Errors
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 401 | missing_api_key |
No key was sent. | Send Authorization: Bearer sfs_… or X-API-Key: sfs_…. |
| 401 | invalid_api_key |
The key is not one we issued. | Check for truncation or whitespace; keys are sfs_ plus 32 letters and digits. |
| 401 | api_key_revoked |
The key was revoked. | Make a new key at installgraph.com/account. |
| 403 | insufficient_scope |
The key lacks this endpoint's scope. | Use a key with the scope the endpoint lists (GET /v1/usage shows yours). |
| 403 | api_key_suspended |
The key is suspended. | Talk to us, quoting requestId. |
All codes: Errors.