# Secure internal communication between services (beta)

DevFeed: [Secure internal communication between services (beta)](<https://devfeed.tech/articles/secure-internal-communication-between-services-beta-1086.md>)

Original publisher: [Read original article](<https://vercel.com/changelog/secure-internal-communication-between-services>)

Author: Yury Selivanov

Published: 2026-07-01T19:00:00Z

Content type: release

Language: en

Sources: [Vercel News](<https://devfeed.tech/sources/vercel-news.md>)

Topics: [networking](<https://devfeed.tech/topics/networking.md>)

Tags: [authentication](<https://devfeed.tech/tags/authentication.md>), [backend](<https://devfeed.tech/tags/backend.md>), [communication](<https://devfeed.tech/tags/communication.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [next-js](<https://devfeed.tech/tags/next-js.md>), [observability](<https://devfeed.tech/tags/observability.md>), [routing](<https://devfeed.tech/tags/routing.md>), [tls](<https://devfeed.tech/tags/tls.md>), [vercel](<https://devfeed.tech/tags/vercel.md>)

## AI overview

Vercel introduces beta Service Bindings for private service-to-service calls within a deployment. Bindings inject an internal URL and let Vercel handle routing, authentication, and TLS; calls are visible in observability and have separate billing categories.

## Source excerpt

Service Bindings make it easy for one Vercel service to securely call another within the same deployment. When a service declares a binding for another service, Vercel automatically injects the configured environment variable. That means user code can fetch that URL normally, while Vercel handles the internal rewrite, routing, authentication, and TLS behind the scenes. This enables multi-service applications on Vercel, like a Next.js frontend calling a FastAPI backend, while preserving service isolation and keeping routing configuration simple: In the example above, my_frontend will be able to reach the my_backend service by making a fetch() request to BACKEND_INTERNAL_URL. On the FastAPI side, my_backend exposes a normal route: Under the hood That URL points inside Vercel, not at a public address. When your code fetches it, the request travels over Vercel's internal network to the same routing layer that handles every other request to your deployment, which sends it to the target service. It never hits the public route table, and Vercel sets up the TLS trust for you, so a plain HTTPS fetch works with no certificate config. A service is only reachable if you expose it, either publicly with a rewrite route or privately with a binding. Observability Service-to-service calls also appear in observability, so you can see which bound service was called and how long the request took: Pricing Service-to-service calls are billed as Service Requests and Fast Origin Transfer. They are not billed as CDN Requests or Fast Data Transfer. See services pricing and limits for current rates. Learn more Read the bindings documentation to declare bindings and see the full reference. Read more