The proxy is STACK's controlled path for outbound HTTP calls. It verifies the Passport, enforces scope and parameter constraints, injects the credential, and forwards the call upstream. An agent that uses this path does not receive the raw secret.
STACK cannot govern a call that bypasses the proxy. Passport checks, proxy detectors, and proxy audit records apply only to calls sent to /v1/proxy.
One endpoint, one header, one body. The X-Passport-Tokenheader carries the signed passport; the body describes the upstream call exactly as you would send it directly. Non-GET calls also carry a stable X-STACK-Authority-Request-Id operation handle.
POST /v1/proxy
X-Passport-Token: eyJhbGciOi...
X-STACK-Authority-Request-Id: operation_job_4821_message_0001
Authorization: Bearer $STACK_TOKEN
{
"service": "slack",
"method": "POST",
"url": "https://slack.com/api/chat.postMessage",
"headers": { "Content-Type": "application/json" },
"body": { "channel": "C0123", "text": "hi" }
}Steps 1-9 run before the upstream call. A failure in those steps prevents the call. After the provider responds, STACK screens and stores the permitted response before returning it.
Persist the operation handle before a non-GET call leaves the process. An unchanged retry with the same handle joins the first operation and can return its stored permitted response. A changed request conflicts. Generic HTTP operations receive one STACK dispatch; when the provider may have acted but no response can be proved, STACK reports the outcome as unknown instead of automatically sending the write again. Stripe refunds can use Stripe's native idempotency and provider lookup to recover the original refund.
Stored response payloads are encrypted and readable for up to 24 hours. Status and response reads require current access to the original agent, connection and request scope. The operation handle never grants access by itself. See Proxy API recovery.
Proxy mediation proves that STACK enforced the binding. It does not prove that the receiver independently verified a native signed-and-encrypted presentation. Native receiver verification uses the separate authority protocol.
Credentials live encrypted in the vault with KMS envelope encryption. At step 8, the proxy decrypts in-memory, builds the upstream auth header per the provider's convention (OAuth Bearer, basic, custom HMAC, etc.), and attaches it to the forwarded request. The agent does not receive the plaintext credential. The proxy call writes an audit entry.
Agents declare credential_access to scope how they can reach services. The proxy honours the mode at verify time.
These modes govern credentials held by STACK. They do not sandbox the runtime or block direct network calls made with credentials obtained elsewhere.