Turbo link -> HTTP status client error (403 Forbidden)

I moved to a monoreppo and want to use remote caching (using nextjs 15.4.5 and turbo 2.5.5).

The issue is pretty simple, turbo login returns [HTTP 403] request to https://vercel.com/api/v5/user/tokens/current returned "Not authorized", so I need to force it using turbo login --force and now it work like a charm.
The issue comes with turbo link, which returns me a 403 right after choosing my repo.
? Enable Vercel Remote Cache for ~/work/numo ? yes × Could not get user information: Error making HTTP request: HTTP status client error (403 Forbidden) for │ url (https://vercel.com/api/v2/user) ├─▶ Error making HTTP request: HTTP status client error (403 Forbidden) for url (https://vercel.com/api/v2/ │ user) ╰─▶ HTTP status client error (403 Forbidden) for url (https://vercel.com/api/v2/user)
I have no clue on why it happened, is there any way to relink the project or redo the link from scratch. But I’m stuck there and can’t find any reason why.

Here is my turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "ui": "tui",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "inputs": ["$TURBO_DEFAULT$", ".env*"],
      "outputs": [".next/**", "!.next/cache/**"],
      "env": ["DATABASE_URL"]
    },
    "typecheck": {
      "dependsOn": ["^typecheck"]
    },
    "test": {
      "dependsOn": ["^build"],
      "cache": false
    },
    "test:unit": {
      "cache": false
    },
    "test:integration": {
      "dependsOn": ["^build"],
      "cache": false
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "clean": {
      "cache": false
    }
  }
}

My packages.json is on pnpm working just fine but I don’t think it’s link to the issue

Hey, are you running this lon local machine or on a CI runner like GitHub action?

Currently on local machine only, I have legit no clue why it’s happening to me, I’ve done nothing “deep” it’s the basic turbo login/link.
Do you have any leads?

Can you run turbo login --output-logs=full when this happens and share us the output?

It’s only force with –force, but that might be a good indication that something is off

`2025-09-14T19:48:08.671+0200 [DEBUG] turborepo_lib::shim: Global turbo version: 2.5.62025-09-14T19:48:08.671+0200 [TRACE] turborepo_repository::package_json: loading package.json from /Users/nerap/work/numo/package.json2025-09-14T19:48:08.673+0200 [TRACE] turborepo_repository::package_json: loading package.json from /Users/nerap/work/package.json2025-09-14T19:48:08.673+0200 [TRACE] turborepo_repository::package_json: loading package.json from /Users/nerap/package.json2025-09-14T19:48:08.673+0200 [TRACE] turborepo_repository::package_json: loading package.json from /Users/package.json2025-09-14T19:48:08.673+0200 [TRACE] turborepo_repository::package_json: loading package.json from /package.json2025-09-14T19:48:08.673+0200 [DEBUG] turborepo_lib::shim: Repository Root: /Users/nerap/work/numo2025-09-14T19:48:08.673+0200 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/nerap/work/numo/node_modules/turbo-darwin-arm64/bin/turbo2025-09-14T19:48:08.673+0200 [DEBUG] turborepo_lib::shim::local_turbo_state: No local turbo binary found at: /Users/nerap/work/numo/node_modules/turbo/node_modules/turbo-darwin-arm64/bin/turbo2025-09-14T19:48:08.673+0200 [TRACE] turborepo_repository::package_json: loading package.json from /Users/nerap/work/numo/node_modules/.pnpm/turbo@2.5.6/node_modules/turbo-darwin-arm64/package.json2025-09-14T19:48:08.673+0200 [DEBUG] turborepo_lib::shim::local_turbo_state: Local turbo path: /Users/nerap/work/numo/node_modules/.pnpm/turbo-darwin-arm64@2.5.6/node_modules/turbo-darwin-arm64/bin/turbo2025-09-14T19:48:08.673+0200 [DEBUG] turborepo_lib::shim::local_turbo_state: Local turbo version: 2.5.62025-09-14T19:48:08.674+0200 [DEBUG] turborepo_lib::shim: Running local turbo binary in /Users/nerap/work/numo/node_modules/.pnpm/turbo-darwin-arm64@2.5.6/node_modules/turbo-darwin-arm64/bin/turbo

2025-09-14T19:48:08.674+0200 [DEBUG] turborepo_lib::shim: supports_skip_infer_and_single_package true2025-09-14T19:48:08.679+0200 [DEBUG] turborepo_lib::shim: Global turbo version: 2.5.62025-09-14T19:48:08.771+0200 [TRACE] turborepo_telemetry::config: Telemetry config path: /Users/nerap/Library/Application Support/turborepo/telemetry.jsonturbo 2.5.6

2025-09-14T19:48:08.917+0200 [DEBUG] turborepo_auth::auth::login: found existing turbo token2025-09-14T19:48:08.935+0200 [TRACE] log: signal: Want2025-09-14T19:48:08.935+0200 [TRACE] log: signal found waiting giver, notifying2025-09-14T19:48:08.935+0200 [TRACE] log: poll_want: taker wants!2025-09-14T19:48:08.935+0200 [TRACE] log: signal: Want2025-09-14T19:48:08.935+0200 [TRACE] log: signal found waiting giver, notifying2025-09-14T19:48:08.935+0200 [TRACE] log: poll_want: taker wants!2025-09-14T19:48:09.028+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.028+0200 [TRACE] log: signal found waiting giver, notifying2025-09-14T19:48:09.028+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.028+0200 [TRACE] log: poll_want: taker wants!2025-09-14T19:48:09.028+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.099+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.099+0200 [TRACE] log: signal found waiting giver, notifying2025-09-14T19:48:09.099+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.099+0200 [TRACE] log: poll_want: taker wants!2025-09-14T19:48:09.099+0200 [TRACE] log: signal: Want2025-09-14T19:48:09.099+0200 [TRACE] turborepo_telemetry: Flushed telemetry event queue (num_events=10)2025-09-14T19:48:09.099+0200 [TRACE] log: signal: Closed2025-09-14T19:48:09.099+0200 [TRACE] log: signal: Closed2025-09-14T19:48:09.100+0200 [DEBUG] turborepo_telemetry: failed to record cache usage telemetry. error: Error making HTTP request: error sending request for url (https://telemetry.vercel.com/api/turborepo/v1/events)× [HTTP 403] request to https://vercel.com/api/v5/user/tokens/current returned “Not│ authorized”│ Try logging in again, or force a refresh of your token (turbo login --sso-team=your-team│ --force).`

Can you also share output of curl -4 ifconfig.me from same machine?

What Is My IP Address? - ifconfig.me
Need a robust API to Geolocate IPs and fetch other crucial information? Try IPinfo.io.

Your Connection

IP Address 90.127.8.85
User Agent Mozilla/5.0 (compatible; ExampleBot/1.0)
Language
Referer
Method GET
Encoding
MIME Type */*
Charset
X-Forwarded-For 90.127.8.85,34.160.111.145

Command Line Interface

$ curl ifconfig.me 90.127.8.85
$ curl ifconfig.me/ip 90.127.8.85
$ curl ifconfig.me/ua Mozilla/5.0 (compatible; ExampleBot/1.0)
$ curl ifconfig.me/lang
$ curl ifconfig.me/encoding
$ curl ifconfig.me/mime */*
$ curl ifconfig.me/charset
$ curl ifconfig.me/forwarded 90.127.8.85,34.160.111.145
$ curl ifconfig.me/all ip_addr: 90.127.8.85
remote_host: unavailable
user_agent: Mozilla/5.0 (compatible; ExampleBot/1.0)
port: 49452
language:
referer:
connection:
keep_alive:
method: GET
encoding:
mime: */*
charset:
via: 1.1 google
forwarded: 90.127.8.85,34.160.111.145

$ curl ifconfig.me/all.json {"ip_addr":"90.127.8.85","user_agent":"Mozilla/5.0 (compatible; ExampleBot/1.0)","port":"49452","method":"GET","mime":"*/*","via":"1.1 google","forwarded":"90.127.8.85,34.160.111.145"}
© 2024 ifconfig.me

I have the same issue, I tried

npx turbo login –force

and it generates a new token, but I get 403 again running

npx turbo link

output:

turbo 2.5.6


>>> Remote Caching

Remote Caching makes your caching multiplayer,
sharing build outputs and logs between developers and CI/CD systems.

Build and deploy faster.

For more information, visit: https://turborepo.com/docs/core-concepts/remote-caching

? Enable Vercel Remote Cache for ~/Projects/[***] ? yes
  × Could not get user information: Error making HTTP request: HTTP status client error (403 Forbidden) for url (https://vercel.com/api/v2/user)
  ├─▶ Error making HTTP request: HTTP status client error (403 Forbidden) for url (https://vercel.com/api/v2/user)
  ╰─▶ HTTP status client error (403 Forbidden) for url (https://vercel.com/api/v2/user)