{"slug": "breaking-vercel-events-can-now-return-ai-gateway-budget-updated", "title": "Vercel: events can now return \"ai-gateway.budget.updated\"", "summary": "Vercel added a new event value, \"ai-gateway.budget.updated\", to the events[] field on its POST /v1/webhooks endpoint, expanding the list of webhook events that producers can emit. Vercel describes the change as additive, but it breaks exhaustive switches, strict parsers and generated client enums in code that reads POST /v1/webhooks. The new value joins existing AI Gateway events such as \"ai-gateway.auto-reload.limit-reached\" and \"ai-gateway.balance-depleted\".", "body_md": "## What changed\n\nProducer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `events[]` on `POST /v1/webhooks`.\n\nNew value: `ai-gateway.budget.updated`.\n\ncan now return \"ai-gateway.budget.updated\"\n\n## Who is affected\n\nCode that reads POST /v1/webhooks (events[]).\n\n## Before and after\n\n| Where | Before | After | \n|---|---|---|\n| POST /v1/webhooks · events[] | \"ai-gateway.auto-reload.limit-reached\", \"ai-gateway.balance-depleted\", \"alerts.triggered\", \"botid.anomaly\", \"budget.reached\", \"comment.created\", \"comment.deleted\", \"comment.mentioned\", \"comment.reaction-added\", \"comment.reaction-removed\", \"comment.resolved\", \"comment.unresolved\", \"comment.updated\", \"deployment\", \"deployment-canceled\", \"deployment-check-rerequested\", \"deployment-checks-completed\", \"deployment-error\", \"deployment-prepared\", \"deployment-ready\", \"deployment.blocked\", \"deployment.build-requested\", \"deployment.canceled\", \"deployment.check-rerequested\", \"deployment.checkrun.cancel\", \"deployment.checkrun.start\", \"deployment.checks.failed\", \"deployment.checks.succeeded\", \"deployment.cleanup\", \"deployment.created\", \"deployment.error\", \"deployment.integration.action.cancel\", \"deployment.integration.action.cleanup\", \"deployment.integration.action.start\", \"deployment.promoted\", \"deployment.ready\", \"deployment.rollback\", \"deployment.succeeded\", \"domain-created\", \"domain.auto-renew.changed\", \"domain.certificate.add\", \"domain.certificate.add.failed\", \"domain.certificate.deleted\", \"domain.certificate.renew\", \"domain.certificate.renew.failed\", \"domain.created\", \"domain.dns.records.changed\", \"domain.renewal\", \"domain.renewal.failed\", \"domain.transfer-in.completed\", \"domain.transfer-in.failed\", \"domain.transfer-in.started\", \"edge-config.created\", \"edge-config.deleted\", \"edge-config.items.updated\", \"firewall.attack\", \"firewall.custom-rule-anomaly\", \"firewall.system-rule-anomaly\", \"flag.created\", \"flag.deleted\", \"flag.segment.created\", \"flag.segment.deleted\", \"flag.segment.updated\", \"flag.updated\", \"function.archival-required\", \"function.removal-required\", \"integration-configuration-permission-updated\", \"integration-configuration-removed\", \"integration-configuration-scope-change-confirmed\", \"integration-configuration.permission-upgraded\", \"integration-configuration.removed\", \"integration-configuration.scope-change-confirmed\", \"integration-configuration.transferred\", \"integration-resource.project-connected\", \"integration-resource.project-disconnected\", \"marketplace.invoice.created\", \"marketplace.invoice.notpaid\", \"marketplace.invoice.overdue\", \"marketplace.invoice.paid\", \"marketplace.invoice.refunded\", \"marketplace.member.changed\", \"message.created\", \"message.deleted\", \"message.mentioned\", \"message.reaction-added\", \"message.reaction-removed\", \"message.updated\", \"observability.anomaly\", \"observability.anomaly-error\", \"observability.error-anomaly\", \"observability.usage-anomaly\", \"project-created\", \"project-removed\", \"project.created\", \"project.domain.created\", \"project.domain.deleted\", \"project.domain.moved\", \"project.domain.unverified\", \"project.domain.updated\", \"project.domain.verified\", \"project.env-variable.created\", \"project.env-variable.deleted\", \"project.env-variable.updated\", \"project.removed\", \"project.renamed\", \"project.rolling-release.aborted\", \"project.rolling-release.approved\", \"project.rolling-release.completed\", \"project.rolling-release.started\", \"test-webhook\", \"thread.resolved\", \"thread.unresolved\" | \"ai-gateway.auto-reload.limit-reached\", \"ai-gateway.balance-depleted\", \"ai-gateway.budget.updated\", \"alerts.triggered\", \"botid.anomaly\", \"budget.reached\", \"comment.created\", \"comment.deleted\", \"comment.mentioned\", \"comment.reaction-added\", \"comment.reaction-removed\", \"comment.resolved\", \"comment.unresolved\", \"comment.updated\", \"deployment\", \"deployment-canceled\", \"deployment-check-rerequested\", \"deployment-checks-completed\", \"deployment-error\", \"deployment-prepared\", \"deployment-ready\", \"deployment.blocked\", \"deployment.build-requested\", \"deployment.canceled\", \"deployment.check-rerequested\", \"deployment.checkrun.cancel\", \"deployment.checkrun.start\", \"deployment.checks.failed\", \"deployment.checks.succeeded\", \"deployment.cleanup\", \"deployment.created\", \"deployment.error\", \"deployment.integration.action.cancel\", \"deployment.integration.action.cleanup\", \"deployment.integration.action.start\", \"deployment.promoted\", \"deployment.ready\", \"deployment.rollback\", \"deployment.succeeded\", \"domain-created\", \"domain.auto-renew.changed\", \"domain.certificate.add\", \"domain.certificate.add.failed\", \"domain.certificate.deleted\", \"domain.certificate.renew\", \"domain.certificate.renew.failed\", \"domain.created\", \"domain.dns.records.changed\", \"domain.renewal\", \"domain.renewal.failed\", \"domain.transfer-in.completed\", \"domain.transfer-in.failed\", \"domain.transfer-in.started\", \"edge-config.created\", \"edge-config.deleted\", \"edge-config.items.updated\", \"firewall.attack\", \"firewall.custom-rule-anomaly\", \"firewall.system-rule-anomaly\", \"flag.created\", \"flag.deleted\", \"flag.segment.created\", \"flag.segment.deleted\", \"flag.segment.updated\", \"flag.updated\", \"function.archival-required\", \"function.removal-required\", \"integration-configuration-permission-updated\", \"integration-configuration-removed\", \"integration-configuration-scope-change-confirmed\", \"integration-configuration.permission-upgraded\", \"integration-configuration.removed\", \"integration-configuration.scope-change-confirmed\", \"integration-configuration.transferred\", \"integration-resource.project-connected\", \"integration-resource.project-disconnected\", \"marketplace.invoice.created\", \"marketplace.invoice.notpaid\", \"marketplace.invoice.overdue\", \"marketplace.invoice.paid\", \"marketplace.invoice.refunded\", \"marketplace.member.changed\", \"message.created\", \"message.deleted\", \"message.mentioned\", \"message.reaction-added\", \"message.reaction-removed\", \"message.updated\", \"observability.anomaly\", \"observability.anomaly-error\", \"observability.error-anomaly\", \"observability.usage-anomaly\", \"project-created\", \"project-removed\", \"project.created\", \"project.domain.created\", \"project.domain.deleted\", \"project.domain.moved\", \"project.domain.unverified\", \"project.domain.updated\", \"project.domain.verified\", \"project.env-variable.created\", \"project.env-variable.deleted\", \"project.env-variable.updated\", \"project.removed\", \"project.renamed\", \"project.rolling-release.aborted\", \"project.rolling-release.approved\", \"project.rolling-release.completed\", \"project.rolling-release.started\", \"test-webhook\", \"thread.resolved\", \"thread.unresolved\" | \n| GET /v1/webhooks/{id} · events[] | \"ai-gateway.auto-reload.limit-reached\", \"ai-gateway.balance-depleted\", \"alerts.triggered\", \"botid.anomaly\", \"budget.reached\", \"comment.created\", \"comment.deleted\", \"comment.mentioned\", \"comment.reaction-added\", \"comment.reaction-removed\", \"comment.resolved\", \"comment.unresolved\", \"comment.updated\", \"deployment\", \"deployment-canceled\", \"deployment-check-rerequested\", \"deployment-checks-completed\", \"deployment-error\", \"deployment-prepared\", \"deployment-ready\", \"deployment.blocked\", \"deployment.build-requested\", \"deployment.canceled\", \"deployment.check-rerequested\", \"deployment.checkrun.cancel\", \"deployment.checkrun.start\", \"deployment.checks.failed\", \"deployment.checks.succeeded\", \"deployment.cleanup\", \"deployment.created\", \"deployment.error\", \"deployment.integration.action.cancel\", \"deployment.integration.action.cleanup\", \"deployment.integration.action.start\", \"deployment.promoted\", \"deployment.ready\", \"deployment.rollback\", \"deployment.succeeded\", \"domain-created\", \"domain.auto-renew.changed\", \"domain.certificate.add\", \"domain.certificate.add.failed\", \"domain.certificate.deleted\", \"domain.certificate.renew\", \"domain.certificate.renew.failed\", \"domain.created\", \"domain.dns.records.changed\", \"domain.renewal\", \"domain.renewal.failed\", \"domain.transfer-in.completed\", \"domain.transfer-in.failed\", \"domain.transfer-in.started\", \"edge-config.created\", \"edge-config.deleted\", \"edge-config.items.updated\", \"firewall.attack\", \"firewall.custom-rule-anomaly\", \"firewall.system-rule-anomaly\", \"flag.created\", \"flag.deleted\", \"flag.segment.created\", \"flag.segment.deleted\", \"flag.segment.updated\", \"flag.updated\", \"function.archival-required\", \"function.removal-required\", \"integration-configuration-permission-updated\", \"integration-configuration-removed\", \"integration-configuration-scope-change-confirmed\", \"integration-configuration.permission-upgraded\", \"integration-configuration.removed\", \"integration-configuration.scope-change-confirmed\", \"integration-configuration.transferred\", \"integration-resource.project-connected\", \"integration-resource.project-disconnected\", \"marketplace.invoice.created\", \"marketplace.invoice.notpaid\", \"marketplace.invoice.overdue\", \"marketplace.invoice.paid\", \"marketplace.invoice.refunded\", \"marketplace.member.changed\", \"message.created\", \"message.deleted\", \"message.mentioned\", \"message.reaction-added\", \"message.reaction-removed\", \"message.updated\", \"observability.anomaly\", \"observability.anomaly-error\", \"observability.error-anomaly\", \"observability.usage-anomaly\", \"project-created\", \"project-removed\", \"project.created\", \"project.domain.created\", \"project.domain.deleted\", \"project.domain.moved\", \"project.domain.unverified\", \"project.domain.updated\", \"project.domain.verified\", \"project.env-variable.created\", \"project.env-variable.deleted\", \"project.env-variable.updated\", \"project.removed\", \"project.renamed\", \"project.rolling-release.aborted\", \"project.rolling-release.approved\", \"project.rolling-release.completed\", \"project.rolling-release.started\", \"test-webhook\", \"thread.resolved\", \"thread.unresolved\" | \"ai-gateway.auto-reload.limit-reached\", \"ai-gateway.balance-depleted\", \"ai-gateway.budget.updated\", \"alerts.triggered\", \"botid.anomaly\", \"budget.reached\", \"comment.created\", \"comment.deleted\", \"comment.mentioned\", \"comment.reaction-added\", \"comment.reaction-removed\", \"comment.resolved\", \"comment.unresolved\", \"comment.updated\", \"deployment\", \"deployment-canceled\", \"deployment-check-rerequested\", \"deployment-checks-completed\", \"deployment-error\", \"deployment-prepared\", \"deployment-ready\", \"deployment.blocked\", \"deployment.build-requested\", \"deployment.canceled\", \"deployment.check-rerequested\", \"deployment.checkrun.cancel\", \"deployment.checkrun.start\", \"deployment.checks.failed\", \"deployment.checks.succeeded\", \"deployment.cleanup\", \"deployment.created\", \"deployment.error\", \"deployment.integration.action.cancel\", \"deployment.integration.action.cleanup\", \"deployment.integration.action.start\", \"deployment.promoted\", \"deployment.ready\", \"deployment.rollback\", \"deployment.succeeded\", \"domain-created\", \"domain.auto-renew.changed\", \"domain.certificate.add\", \"domain.certificate.add.failed\", \"domain.certificate.deleted\", \"domain.certificate.renew\", \"domain.certificate.renew.failed\", \"domain.created\", \"domain.dns.records.changed\", \"domain.renewal\", \"domain.renewal.failed\", \"domain.transfer-in.completed\", \"domain.transfer-in.failed\", \"domain.transfer-in.started\", \"edge-config.created\", \"edge-config.deleted\", \"edge-config.items.updated\", \"firewall.attack\", \"firewall.custom-rule-anomaly\", \"firewall.system-rule-anomaly\", \"flag.created\", \"flag.deleted\", \"flag.segment.created\", \"flag.segment.deleted\", \"flag.segment.updated\", \"flag.updated\", \"function.archival-required\", \"function.removal-required\", \"integration-configuration-permission-updated\", \"integration-configuration-removed\", \"integration-configuration-scope-change-confirmed\", \"integration-configuration.permission-upgraded\", \"integration-configuration.removed\", \"integration-configuration.scope-change-confirmed\", \"integration-configuration.transferred\", \"integration-resource.project-connected\", \"integration-resource.project-disconnected\", \"marketplace.invoice.created\", \"marketplace.invoice.notpaid\", \"marketplace.invoice.overdue\", \"marketplace.invoice.paid\", \"marketplace.invoice.refunded\", \"marketplace.member.changed\", \"message.created\", \"message.deleted\", \"message.mentioned\", \"message.reaction-added\", \"message.reaction-removed\", \"message.updated\", \"observability.anomaly\", \"observability.anomaly-error\", \"observability.error-anomaly\", \"observability.usage-anomaly\", \"project-created\", \"project-removed\", \"project.created\", \"project.domain.created\", \"project.domain.deleted\", \"project.domain.moved\", \"project.domain.unverified\", \"project.domain.updated\", \"project.domain.verified\", \"project.env-variable.created\", \"project.env-variable.deleted\", \"project.env-variable.updated\", \"project.removed\", \"project.renamed\", \"project.rolling-release.aborted\", \"project.rolling-release.approved\", \"project.rolling-release.completed\", \"project.rolling-release.started\", \"test-webhook\", \"thread.resolved\", \"thread.unresolved\" | \n\n## Code that breaks\n\n```\nswitch (response.events[0]) {\n  // existing branches …\n  // no branch for \"ai-gateway.budget.updated\"\n  default:\n    throw new Error(\"unexpected events\");\n}\n```\n\nBased on Vercel’s published API specification. [How severity is decided](https://driftwatch.et/method).", "url": "https://wpnews.pro/news/breaking-vercel-events-can-now-return-ai-gateway-budget-updated", "canonical_source": "https://driftwatch.et/changes/vercel-2026-11-05-dc3ef933", "published_at": "2026-11-05 19:19:44+00:00", "updated_at": "2026-11-05 20:19:57.391320+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "ai-tools"], "entities": ["Vercel", "POST /v1/webhooks", "ai-gateway.budget.updated"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/breaking-vercel-events-can-now-return-ai-gateway-budget-updated", "markdown": "https://wpnews.pro/news/breaking-vercel-events-can-now-return-ai-gateway-budget-updated.md", "text": "https://wpnews.pro/news/breaking-vercel-events-can-now-return-ai-gateway-budget-updated.txt", "jsonld": "https://wpnews.pro/news/breaking-vercel-events-can-now-return-ai-gateway-budget-updated.jsonld"}}