Applies to:
- Plan -
- Deployment - Braintrust-hosted
- Use case - Troubleshoot HTTP 401s and intermittent TLS handshake resets for remote eval servers using the Braintrust-hosted app and EU API endpoints
Summary
A remote eval server can return HTTP 401 onGET /list when its outbound login request fails.
What is happening
The eval server and thebt CLI perform an outbound login to the app URL to validate session tokens. If that POST fails, the server can report the failure as 401 for GET /list.
- CloudFront backs
api-eu.braintrust.dev. Do not rely on a fixed set of IPs resolved once for this hostname, because CloudFront address ranges can change. - If requests reset during the TLS handshake, ask your network team to investigate connectivity from the failing pod.
- The remote eval server requires the
x-bt-org-nameheader. If bothAuthorizationandx-bt-auth-tokenare present, it uses the token fromx-bt-auth-token
Fix or suggestion
Option 1: Allow hostname-based HTTPS egress (recommended)
- Add hostname-based HTTPS allow rules for
api-eu.braintrust.devandwww.braintrust.dev
Option 2: If hostname rules are not possible
- Work with your network team to establish reliable HTTPS connectivity from the pod to
www.braintrust.devandapi-eu.braintrust.dev - If your network team uses an IP allowlist for
api-eu.braintrust.dev, keep the published CloudFront address ranges current.
How to confirm it worked
After either egress approach:-
Verify from the affected pod that HTTPS requests to
www.braintrust.devandapi-eu.braintrust.devcomplete without TLS errors. -
Run the login test from the affected pod using the same current token received by the remote eval server. If both auth headers are present, use the token from
x-bt-auth-token. Keep the token local. Repeat the test to confirm HTTP 200, anorg_infoarray containing your organization name, and no TLS resets. -
Repeat the previously failing
GET /listrequests from the affected pod and confirm they continue to return200. Confirm that matching pod logs with the samerequest_idshowstatus=200
Notes
- See the Remote evals docs for architecture and URLs: Remote evals.
- When reproducing the failed
GET /listrequest, capture its UTC time, URL and method, response body, request or response ID, matching pod logs, and received auth and org headers. Redact token values.