· via Vercel blog
Vercel Daemons can now call private deployment services via service bindings
Vercel Daemons can now reach the services in their own deployment through service bindings, with Vercel handling routing, authentication and TLS while the target service stays private.

Vercel has added service bindings to Daemons, its long-running background compute offering, giving background workers a first-class way to call the HTTP services deployed alongside them. According to a Vercel changelog entry published on 30 October 2026, a daemon declares a binding that names a target service and an environment variable, and Vercel injects the service's URL into that variable at runtime.
How a binding is declared
The binding lives in the project's Vercel configuration, next to the definitions of the services and daemons themselves. In the example Vercel published, a deployment defines a service called api rooted at api/ with an entrypoint of main:app, and a daemon called worker rooted at worker/ that builds from a Dockerfile and runs one instance in the iad1 region. The worker then adds a binding entry of type service that points at api, requests it in url format, and names API_URL as the variable that will receive the address.
At runtime the daemon reads API_URL and treats it like any other HTTP endpoint — Vercel's sample is a plain fetch against a jobs/next path on that URL. Vercel says it takes care of the internal routing, the authentication between the two components, and TLS, and the target service stays private throughout.
One-way bindings, pinned deployments
Two constraints shape how the feature behaves. First, bindings point in one direction: a daemon can bind to a service, but services cannot bind back to daemons. The dependency edge always runs from background workers toward request-serving code, never the reverse.
Second, binding resolution happens per instance and holds for that instance's lifetime. Each daemon instance keeps calling the deployment that started it, even after a promotion or a rollback. A running worker is never silently re-pointed at whichever deployment happens to be live at the moment.
Why it matters
Background workers almost always need to reach an internal API — to pick up work, persist results, or trigger downstream steps. The conventional way to arrange that is to expose an endpoint and hand-manage credentials for it, which widens the attack surface and invites configuration drift. Service bindings collapse the problem: the target stays private, and routing, authentication and encryption become the platform's responsibility rather than the developer's.
The per-instance pinning is arguably the more consequential detail for anyone running long-lived workers. If internal calls were re-resolved on every promotion, a job in flight could straddle two incompatible API versions. By keeping each instance bound to the deployment that spawned it — including across rollbacks — Vercel makes a daemon's behavior deterministic for its whole lifetime. The trade-off is operational: teams now have to plan for draining old instances whenever the API they call changes shape, since those instances will keep talking to the old build by design.
For deployments that already pair daemons with services, the change amounts to a few lines of configuration with an outsized effect: internal calls between compute components become a declared dependency in the deployment manifest instead of runtime plumbing that has to be kept in sync by hand.
- #vercel
- #cloud
- #infrastructure
- #service-bindings
- #background-jobs