Enterprise
Cursor Enterprise: Private Connectivity
Cursor Enterprise can reach systems that aren't on the public internet, such as self-hosted GitHub Enterprise Server, GitLab Enterprise, Bitbucket Data Center, Artifactory and Nexus. It supports two paths: AWS PrivateLink and Cloudflare Tunnel. PrivateLink can also carry webhooks from your Git host back to Cursor. To set it up, contact hi@cursor.com or your Cursor sales representative.

On this page
What private connectivity options does Cursor Enterprise support?
Cursor supports two private connectivity options for Enterprise teams: AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. and Cloudflare Tunnel. They cover self-hosted GitHub Enterprise Server (GHES), GitLab Enterprise, Bitbucket Data Center, Artifactory, Nexus and private source control APIs, plus webhook traffic from those systems back to Cursor. One setup serves the Cursor services that need your source control, including Cloud AgentsAgents that run in a Cursor-managed virtual machine, check out the repo, do the work and open a pull request, then shut down, with no load on your laptop. Press Enter for the full definition., BugbotCursor's automated PR reviewer that posts inline findings and can push fix commits from isolated VMs. Press Enter for the full definition., Security Agents and Cursor's backend services.
- Option
- AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition.
- Best for
- Private connectivity between Cursor and your Git provider or package registry, including webhook traffic back to Cursor
- Cloud provider
- AWS
- Option
- Cloudflare Tunnel
- Best for
- Cursor accessing a private origin when AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. is not practical
- Cloud provider
- Any environment that can run cloudflared
| Option | Best for | Cloud provider |
|---|---|---|
| AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. | Private connectivity between Cursor and your Git provider or package registry, including webhook traffic back to Cursor | AWS |
| Cloudflare Tunnel | Cursor accessing a private origin when AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. is not practical | Any environment that can run cloudflared |
Both options are listed as Supported in the Cursor docs.
Decide which traffic directions you need before you choose by cloud provider. Cursor documents PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. for traffic in both directions, including webhooks coming back to Cursor, and Cloudflare Tunnel for Cursor reaching a private origin. If your GitHub Enterprise Server has to send webhooks without public egress, the documented return path runs over PrivateLink.
Use AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. when your private Git provider or package registry is in AWS or can sit behind an AWS Network Load Balancer. Cursor calls it the preferred path for self-hosted GitHub Enterprise Server and GitLab Enterprise. Use Cloudflare Tunnel when you can't publish an AWS endpoint service, or when you need a deployment model that only requires an outbound tunnel from your network.
This is covered hands-on in Teams and Enterprise Admin — 6 short Units, free to read.
Rather do it than read about it? Run 11 interactive Cursor walkthroughs in a simulated editor. Free, no account needed.
What do we need before setting up private connectivity?
Have the items below in place before you contact Cursor. The last two depend on the path you pick, and permission to run cloudflared is usually the shorter conversation to have with a platform team.
- A Cursor Enterprise workspace.
- A self-hosted GitHub Enterprise Server, GitLab Enterprise, Bitbucket Data Center or private package registry (such as Artifactory or Nexus) reachable over HTTPS on port 443.
- A publicly trusted TLS certificate for the Git or registry hostname, plus DNS ownership for that hostname.
- AWS permissions to create endpoint services or interface VPC endpoints, if you use AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition..
- Permission to run
cloudflared, if you use Cloudflare Tunnel.
Check the certificate first. A publicly trusted certificate rules out one issued by an internal CA. Replacing the certificate on a host your whole engineering org clones from is rarely a same-week job, so confirm it before you book time with Cursor.
Cursor does not support self-signed certificates, unencrypted connections, SSH, custom ports or IPv6-only endpoint services for these paths. If a proxy sits in front of GitHub Enterprise Server, it must allow Cursor's GitHub App integration to use authenticated GitHub REST and GraphQL APIs.
Who does this work depends on the size of the org. On a team of eight, one person often owns the AWS account, the GitHub Enterprise Server host and the DNS zone, so the list is one checklist. In a larger org, those are three teams with three queues, so start the certificate request first.
How does AWS PrivateLink connect Cursor to a private Git provider?
AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. supports private traffic in either direction between Cursor and your Git provider or package registry. You may need one direction or both, depending on your network policy. Settle which before your first call with Cursor.
- Cursor to Git provider or registry
- Cursor clones repositories and calls Git APIs on your private GitHub Enterprise Server, GitLab Enterprise or Bitbucket Data Center host, or reaches a private package registry such as Artifactory or Nexus.
- Git provider to api2.cursor.sh
- Your host sends webhooks or callbacks to Cursor over a PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. endpoint without public internet egress.
For the Cursor-to-Git direction, you publish your provider behind an AWS endpoint service and give Cursor the details it needs to create its side of the connection. Follow the steps in order. Cursor can't create its interface endpoint until its principal is on your allowed principals list, and an attempt before that fails with InvalidServiceName. The error names the service, but the fix is in the principal list.
- 1Create a Network Load Balancer in front of your Git provider's or package registry's HTTPS endpoint, and publish it as an AWS VPC endpoint service.
- 2Send Cursor the endpoint service name, AWS region and Git or registry hostname. Say whether AWS-managed private DNS is enabled, and whether the load balancer preserves client IPs or your backend filters source IPs.
- 3Add the exact AWS principal Cursor provides to your endpoint service's allowed principals. If it is missing or doesn't match, AWS returns
InvalidServiceName. - 4After Cursor creates its interface endpoint, accept the connection in your AWS account if your endpoint service requires manual acceptance.
- 5Cursor handles DNS for its interface endpoint. If your endpoint service exposes AWS-managed private DNS, Cursor turns on private DNS for its endpoint. If it doesn't, Cursor creates private DNS on its side that maps your hostname to the endpoint's DNS name. Use the same hostname in Cursor that appears on your TLS certificate and in DNS.
If your endpoint service is outside us-east-1, enable cross-region access. If your load balancer preserves client IPs or your backend filters source IPs, allow Cursor's PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. subnet CIDRs 10.2.8.0/21, 10.2.24.0/21 and 10.2.40.0/21.
For the return direction, Cursor publishes an AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. endpoint service for api2.cursor.sh. You create an interface VPC endpoint in your AWS account and enable private DNS, so api2.cursor.sh resolves to private endpoint IPs from your Git provider's network. Cursor confirms your AWS principal is allowlisted before you create the endpoint. Send Cursor the principal, the VPC and region you plan to use, and the DNS mode you want.
Cursor recommends AWS-managed private DNS (private_dns_enabled = true). AWS then associates your VPC with the managed hosted zone, and no Route 53 record is needed. If you'd rather own the record, use a customer-managed private hosted zone instead.
The service lives in us-east-1 and is IPv4 only. Check that your Git provider's VPC sits in one of the supported consumer regions below before you design anything around this path.
- Field
- Service name
- Value
- com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7
- Field
- Home region
- Value
- us-east-1
- Field
- Supported consumer regions
- Value
- us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1, ap-southeast-2
- Field
- IP address types
- Value
- IPv4 only
- Field
- Private DNS name
- Value
- api2.cursor.sh
| Field | Value |
|---|---|
| Service name | com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7 |
| Home region | us-east-1 |
| Supported consumer regions | us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1, ap-southeast-2 |
| IP address types | IPv4 only |
| Private DNS name | api2.cursor.sh |
Endpoint service details for the api2.cursor.sh webhook path, per Cursor docs.
When should we use Cloudflare Tunnel instead?
Use Cloudflare Tunnel when AWS PrivateLinkAn AWS connection Cursor uses for private Git provider and repository-origin traffic; it does not cover model-provider traffic. Press Enter for the full definition. is not a fit. Cursor creates the tunnel and shares three things: a public hostname under Cursor-controlled DNS, a tunnel token through a secure 1Password share, and a sample cloudflared configuration. Your network runs cloudflared and opens outbound connections to Cloudflare, so no inbound firewall rule is required.
ingress:
- hostname: <cursor-provided-hostname>
service: https://<your-internal-service>:443
- service: http_status:404The outbound-only design changes what your security team reviews. Nothing opens inbound: cloudflared dials out to Cloudflare from inside your network, so the firewall change is an egress rule. In exchange, an internal service sits behind a public hostname under Cursor-controlled DNS. Show that part to your security reviewer before the tunnel is built.
Don't send the tunnel token through email or chat. Cursor delivers it to you through a secure 1Password share.
How do we confirm the private webhook path works?
Test it from the network path your Git provider itself uses: resolve api2.cursor.sh, then request it with curl. First finish the source control setup with Cursor's GitHub, GitLab or Bitbucket integration steps, using the same hostname that your TLS certificate and private DNS cover.
A test from a bastion or your laptop can pass while the real path fails, because the resolver that counts is the one GitHub Enterprise Server or GitLab Enterprise uses. If that DNS sits outside the endpoint VPC, forward api2.cursor.sh queries to the VPC resolver or create an equivalent private DNS override. Cursor's docs say not to create a public DNS override.
getent hosts api2.cursor.sh # or, if dig is available dig +short api2.cursor.sh curl -sS https://api2.cursor.sh/
- Every resolved IP should be inside your consumer VPC CIDR. Public IPs such as
3.x.x.xor44.x.x.xmean private DNS is not in effect. - The
curlrequest should return HTTP200with a body that starts withWelcome to Cursor., which means it reached a live Cursorapi2backend. - If
api2.cursor.shresolves to public IPs, enable AWS-managed private DNS or forward DNS to the endpoint VPC resolver.
Cursor's docs include a troubleshooting table, and several of its rows trace back to the allowed principals, the resolver path or a proxy in front of the Git host. A TCP timeout to api2.cursor.sh:443 points to a security group, NACL, route table or firewall blocking traffic to the endpoint ENIs. A TLS failure points to DNS aimed at the wrong target, or to a client that isn't sending SNI. If BugbotCursor's automated PR reviewer that posts inline findings and can push fix commits from isolated VMs. Press Enter for the full definition. or Cloud AgentsAgents that run in a Cursor-managed virtual machine, check out the repo, do the work and open a pull request, then shut down, with no load on your laptop. Press Enter for the full definition. reach GitHub Enterprise Server but fail during app setup, repo sync or webhook processing, a proxy is likely blocking or rewriting the authenticated GitHub REST and GraphQL calls.
If curl never returns Welcome to Cursor., send Cursor the timestamp, the source VPC and the resolved endpoint IPs.
Frequently asked questions
Does Cursor support Google Private Service Connect?
Not as a customer-facing service today. If you need private connectivity from a GCP VPC to Cursor services, or from Cursor to a private service in your GCP project, contact Cursor to scope the requirement. Until then, use AWS PrivateLink or Cloudflare Tunnel where those models fit.
Which Cursor services use this private connectivity setup?
The same setup serves the Cursor services that need source control access, including Cloud Agents, Bugbot, Security Agents and Cursor's backend services. Once private networking is in place, those services use the connected source control integration.
Why does AWS return InvalidServiceName when Cursor tries to connect?
Cursor can't create its interface endpoint until the AWS principal it provides is in your endpoint service's allowed principals. If that principal is missing or doesn't match exactly, AWS returns InvalidServiceName. Add the exact principal Cursor provides.
Does Cloudflare Tunnel need an inbound firewall rule?
No. Your network runs cloudflared, which opens outbound connections to Cloudflare. Cursor creates the tunnel and shares a public hostname under Cursor-controlled DNS, a tunnel token through a secure 1Password share and a sample configuration.
Which AWS regions can connect to Cursor's api2.cursor.sh endpoint service?
The endpoint service lives in us-east-1 and lists us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1 and ap-southeast-2 as supported consumer regions. It accepts IPv4 only.
Sources & last verified
- Cursor - Private Connectivity
- Cursor - Cloud Agents
- Cursor - Bugbot
- Cursor - GitHub integration
- Cursor - GitLab integration
- Cursor - Bitbucket integration
Cursor ships frequently. Last updated October 28, 2026.