Vercel Daemons can now call other services without going public
A new service binding on Vercel Daemons gives background workers a private, authenticated URL to another service in the same deployment, no public exposure required.
Vercel shipped service bindings for Daemons on 30 October. Daemons are Vercel’s long-running background workers, the thing you’d reach for instead of a short-lived function. Until now, if a daemon needed to talk to another service in the same deployment, that service had to be reachable some other way, typically by exposing it publicly.
A binding is declared on the daemon itself, naming the target service and an environment variable to receive its URL:
[[daemons.worker.bindings]]
type = "service"
service = "api"
format = "url"
env = "API_URL"
The daemon then calls it like any other HTTP endpoint: await fetch(new URL('jobs/next', process.env.API_URL)). Vercel handles routing, authentication and TLS, and the target service stays private. Bindings only run one way: a service cannot bind to a daemon. Each running instance also keeps calling the deployment that started it, even through a later promotion or rollback.
Why it matters: if you run a queue worker or similar background process on Vercel, this removes a reason to expose an internal API publicly just so a daemon can reach it. It is a small addition, but it closes a real gap in Vercel’s growing set of primitives for backends that are not a single request-response function.