Webhook Health

How Yeethook monitors webhooks and what happens when something breaks.

Yeethook monitors every webhook on both the Apple side and the chat side (Slack and Discord). When something breaks, you see it in the dashboard and can fix it with one click.

Apple Webhook Health

For apps using Quick Start, Yeethook tracks the App Store Connect webhook it created. The health check compares what Apple has with what Yeethook expects, and returns one of these statuses:

  • Healthy. The webhook exists, is enabled, and the URL matches. Everything is working.
  • Deleted. Apple no longer has a webhook with this ID. This can happen if someone removes it from App Store Connect manually.
  • Disabled. The webhook exists but is turned off. Apple may disable a webhook after repeated delivery failures.
  • URL mismatch. The webhook exists and is enabled, but the URL doesn't match what Yeethook expects. This can happen if someone edits the webhook URL in App Store Connect.
  • Unknown. Yeethook couldn't reach the App Store Connect API to check. This is usually a temporary issue.

ASN V2 Health

If your app has App Store Server Notification event types configured, Yeethook also checks the Server Notifications V2 URL separately. This is a per-app URL that Apple uses for subscription and in-app purchase events.

ASN V2 statuses:

  • Healthy. The URL is set and matches the expected Yeethook endpoint.
  • URL mismatch. The URL is set but points somewhere else.
  • URL cleared. The URL field is empty. Subscription events won't be delivered.
  • Not configured. No ASN event types are selected for this app, so there's nothing to check.
  • Unknown. Yeethook couldn't reach the API to verify.

Channel Health (Slack and Discord)

Yeethook validates Slack and Discord channels when you connect them. If a channel becomes permanently invalid (the webhook URL is revoked, the channel is deleted, the Discord webhook is deleted, or the Slack app is uninstalled), Yeethook auto-deactivates the connection. This prevents a pile of failed deliveries and keeps your event pipeline clean. Other channels keep receiving events.

How delivery failures are handled

Every delivery attempt has a 10-second timeout. What happens next depends on the response:

ResponseSlackDiscordWhat Yeethook does
Webhook gone or invalid403, 404, 410401, 404Deactivates the channel immediately
Rate limited429429Waits for the provider's retry hint (Retry-After for Slack, retry_after for Discord), does not count as a failure, and retries the event later
Message rejected400400Logged as a failed delivery but does not count toward deactivation, since the webhook itself still works
Other errors or timeoutsAny other non-2xx, network error, timeoutAny other non-2xx (including 403), network error, timeoutCounts as a consecutive failure. After 5 in a row, the channel is deactivated

A successful delivery resets the consecutive failure count to zero.

Events that couldn't be delivered because of rate limits or temporary errors are picked up by a retry job that runs every 5 minutes. Each event is retried up to 5 times within one hour of being received.

Health checks

Yeethook can check whether a channel's webhook still exists without posting anything to your channel:

  • Slack: an empty request that Slack rejects without posting a message, but that still reveals whether the URL has been revoked.
  • Discord: a GET request on the webhook URL, which returns the webhook's metadata and posts nothing.

Reactivating a channel

You can reactivate a channel after fixing the underlying issue (reinstalling the Slack app, creating a new webhook in Slack or Discord, etc.). Reactivation requires pasting a fresh webhook URL. See Managing channels.

Repair actions

When a health check surfaces a problem, you can fix it from the dashboard. The available repair actions depend on the issue:

  • Recreate. For deleted webhooks. Yeethook creates a new Apple webhook with the same configuration (URL, secret, event types) and updates the stored webhook ID.
  • Re-enable. For disabled webhooks. Yeethook sends an update to Apple to turn the webhook back on.
  • Fix URL. For URL mismatches on the ASC webhook. Yeethook updates the Apple webhook URL to match the expected Yeethook endpoint.
  • Fix ASN V2 URL. For URL mismatches or cleared URLs on the Server Notifications endpoint. Yeethook reconfigures the ASN V2 URL in App Store Connect.

All repair actions require a valid p8 key, since Yeethook needs to authenticate with the App Store Connect API to make changes.

Checking health from the dashboard

Open any app in the dashboard and you'll see its webhook health status. If something is wrong, the status tells you what happened and offers the appropriate repair action. You can also trigger a fresh health check to get the latest state from Apple.

For Manual Setup apps (no p8 key), health monitoring is not available. Yeethook can't check Apple's side without API access. You manage those webhooks directly in App Store Connect.