HTTP Proxy Integration
The HTTP Proxy integration serves as an HTTP(S) proxy that injects a header into your request. This can be useful to interact with an API that requires a bearer token.
For example, the following snippet creates, attaches, and uses the http proxy integration to inject a header into a request.
exe.dev ▶ integrations add http-proxy --name mirror --target https://httpbin.org/ --header prettiest-of-them-all:me --attach vm:my-vm-name
Added integration mirror
Usage from a VM:
ssh my-vm-name.exe.xyz curl http://mirror.int.exe.xyz/
exe.dev ▶ ssh my-vm-name.exe.xyz curl -s http://mirror.int.exe.xyz/anything -Hfoo:bar
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Foo": "bar",
"Host": "httpbin.org",
"Prettiest-Of-Them-All": "me",
"User-Agent": "curl/8.5.0",
"X-Amzn-Trace-Id": "Root=1-69b339a2-0032d20f5263c6dc17235289"
},
"json": null,
"method": "GET",
"origin": "64.34.88.25",
"url": "https://httpbin.org/anything"
}
The HTTP Proxy integration supports HTTP basic auth as well. When the
injected header carries a real credential (e.g. --bearer), remember it is
stored server-side and never visible from the VM — see
Where secrets live.
Path rewriting with --strip-prefix
Some APIs mount every endpoint under a version prefix (say /api/v3) that
you want to drop when proxying: requests to the integration should reach the
target with the prefix removed. --strip-prefix does exactly that — a
static path prefix stripped from the front of each matching request before
forwarding:
exe.dev ▶ integrations add http-proxy --name myapi --target https://api.example.com --bearer sk-... --strip-prefix /api/v3
With that configuration, from an attached VM:
http://myapi.int.exe.xyz/api/v3/users→https://api.example.com/usershttp://myapi.int.exe.xyz/api/v3→https://api.example.com/http://myapi.int.exe.xyz/healthz→https://api.example.com/healthz(a path outside the prefix passes through unchanged)
Matching is segment-aligned: /api/v3x/other does not match /api/v3
and is forwarded verbatim. The prefix must start with /, contains no
regex — only letters, digits, and - _ . ~ in path segments — and composes
with --header/--bearer/basic-auth injection unchanged. Use
integrations edit <name> --strip-prefix <new> to change it, or
--strip-prefix="" to remove it. (The target URL itself still must not
carry a path; --strip-prefix is the sanctioned way to express a path
rewrite, in the request direction only.)
Peer Integrations (VM-to-VM)
The --peer flag turns an HTTP proxy integration into a VM-to-VM proxy: the
--target is another VM you own, and exe.dev injects a generated API key so
the source VM can reach the target without managing tokens itself. Requests
arrive at the target with an X-Exedev-Source-Vm header naming the caller.
The platform signs an attestation alongside it and delivers the header only
when that attestation verifies, so it cannot be forged.
exe.dev ▶ integrations add http-proxy --name talk-to-bob --target https://bob.<your-domain>/ --peer --attach vm:alice
From alice, requests to http://talk-to-bob.int.exe.xyz/ arrive at bob
with X-Exedev-Source-Vm: alice.
See the VM-to-VM Integration page for the full story: the auth model, using the source-VM header safely, UI setup, and a two-agent example.