All broker calls are HTTP POST requests using wire version 1.

{
  "version": 1,
  "action": "webhook",
  "uuid": "proxied-client-id",
  "client": "192.0.2.10",
  "proto": "http",
  "dst": "203.0.113.20:443",
  "http": {
    "method": "GET",
    "url": "https://api.example.test/v1",
    "headers": {"Accept": ["application/json"]}
  }
}

uuid is logical identity from the effective rule file; client is the observed/recovered source IP and never substitutes for it. dst is the resolved and pinned address. http.headers contains only the action's send allowlist, with authorization, proxy-authorization, and cookie values masked.

Action Extra request 2xx response
webhook http empty body or envelope; continue
header.fetch http {"http":{"headers":{"Authorization":["Bearer …"]}}}
auth credential:{scheme,value} {"principal":"name"}

A non-2xx broker response denies. Its JSON message becomes the human error and http_status may select the client status; otherwise mitmania returns 403 ERR_OUTCALL_DENIED. Unreachable, timed-out, malformed, or forbidden-header responses become 502 ERR_OUTCALL_FAIL unless that action explicitly sets failOpen:true.

For header.fetch, a JSON null header value deletes it. Brokers may not set Host, Content-Length, Transfer-Encoding, Connection, Upgrade, or TE; proxy-only headers are stripped by the HTTP pipeline.

Cache behavior follows a constrained HTTP model driven by Cache-Control, Expires, ETag, and conditional validation. Cache partitions include the effective uuid and compiled action identity. A rule PUT probe never seeds the serving cache.