Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.knoxcall.com/llms.txt

Use this file to discover all available pages before exploring further.

Ephemeral Proxy overview

KnoxCall’s Ephemeral Proxy lets you proxy any HTTPS request through KnoxCall without registering a Route first. Pass the target URL in the X-Knox-Proxy-URL header and send your payload as the request body; KnoxCall resolves any Vault token references, makes the request, applies redaction, and streams the response back. Think of it as Routes’ lower-friction cousin: same proxy core (secrets injection, egress controls, audit, redaction) without the upfront configuration step.

Why use it

ProblemWithout ephemeralWith ephemeral
Agent runtime needs to call an arbitrary URL oncePre-register every URL it might hit (impossible)One-shot proxy with the same secrets + audit story
Internal script needs to call an API, but not enough volume to deserve a RouteEither register it (config noise) or call it directly (audit gap)Use ephemeral; gets logged like any Route call
Testing a new integration before committing to itBuild a Route, throw it away afterEphemeral; nothing to clean up
Multi-tenant SaaS where each tenant’s URLs are unknown ahead of timeCan’t pre-registerEphemeral handles unknown URLs at runtime

How it differs from Routes

RoutesEphemeral
SetupRegister the URL, method, secrets, environment overridesNone — pass everything per-call
API path/proxy/{route_name}/v1/proxy
URLFixed at registrationPer-call
SecretsReference by name (configured on the Route)Reference by name (looked up per-call)
Audit rowproxy_mode='route'proxy_mode='ephemeral' (filterable in API Logs)
Best forIntegrations you call repeatedly with stable configOne-off calls, agent runtimes, ad-hoc work
The shared infrastructure (secrets, redaction, egress allowlist, rate limits, SSRF guard) applies to both.

Quick start

curl -X POST https://api.knoxcall.com/v1/proxy \
  -H "Authorization: Bearer $KC_API_KEY" \
  -H "X-Knox-Proxy-URL: https://api.example.com/orders" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "{{ token: cards.tok_J8K2M4N5P6Q7R8 }}",
    "amount": 4999
  }'
The HTTP method you use (POST above) is forwarded as-is. KnoxCall will:
  1. Read the target URL from the X-Knox-Proxy-URL header.
  2. Resolve {{ token: ... }} references in the body or query string against your Vaults (detokenizes, audits the read).
  3. Validate the URL: HTTPS only, hostname must resolve, IP must not be private/metadata.
  4. Make the call through KnoxCall’s egress (static IP if you’ve configured one).
  5. Apply redaction to the response based on your tenant’s redaction rules.
  6. Audit with proxy_mode='ephemeral' so you can filter the calls in API Logs.

Templating

Template expressions in the request body and query string are resolved before the call is forwarded:
  • {{ token: <vault>.<token-id> }} — detokenize from a Vault. Audited per-token.
  • {{ encrypted | json: <key>:<value> }} — emit a small encrypted JSON blob (decrypts when the recipient calls back through KnoxCall).
Headers are not templated — the template engine does not process {{ ... }} expressions in headers in v1. To inject a secret into an outbound Authorization header, use a Route instead. See proxy templating for the full spec.

Plan limits

TierEnabledOps/moRPS limitTokens per request
Freeno0020
Starteryes100k1020
Proyes1M10020
Enterpriseyesunlimitedunlimited20
The Free tier is off by default because the unbounded “any URL with API-key” surface is the most-abused KnoxCall capability. Enterprise tenants who only want pre-configured Routes can override to false even on a paid plan.

Security

  • HTTPS only. Plain HTTP is rejected.
  • SSRF guard: hostname must resolve to a public IP. Private (RFC1918), link-local, loopback, and metadata IPs (169.254.169.254) are blocked.
  • Tenant scoping: secrets and Vault tokens are scoped to your tenant; ephemeral calls can’t reference other tenants’ material.
  • Redaction: same redaction rules as Routes.
  • Audit: every call hits API Logs with proxy_mode='ephemeral'.

Next steps