For humans — the one-liner
Paste this into Claude Code (or any coding agent with shell access) from inside your project:For agents — the runbook
Create the account (one HTTP call, no browser)
POST https://api.knoxcall.com/v1/signup is unauthenticated — it exists to mint your first credential.- Omit
tenant_slug— the server derives an available one and returns it. Don’t iterate on slug collisions yourself. - Rate limit: 3 signups per hour per IP. Do not retry a 4xx.
- The response’s
data.starter.api_key.api_keyis a one-time plaintext test key. Store it immediately (e.g. in the user’s secret manager or an untracked.env.local) — it is never shown again. - The account is provisional: free plan, email unverified. A magic-link email has already been sent to the owner. You do not need to wait for it — everything below works now, in Test mode.
Verify the starter route works
The signup response includes
data.starter.curl — a ready-to-run request against a seeded demo route (getting-started, proxying httpbin.org). Run it verbatim. A JSON echo response proves the proxy, your key, and the tenant are all live.Discover what to proxy
Scan the project for outbound API calls and their credentials: HTTP client calls (fetch/axios/httpx/requests/Guzzle), base URLs in config, and API keys in
.env files. Each distinct upstream API becomes one KnoxCall route; each credential becomes one secret.Build the integration against the sandbox Management API
Your test key authenticates Prefer
https://sandbox.knoxcall.com/v1 (the Test-mode Management API). Full reference: API Reference, OpenAPI spec at /api-reference/openapi.yaml.For each upstream API:{{secret_id:UUID}} over {{secret:NAME}} in anything you persist — names break on rename, UUIDs don’t.Rewrite the application code
Exactly three changes per integration — see the AI Integration Guide for worked before/after examples and the path-concatenation rules:
- Replace the API base URL with
https://sandbox-{tenant_slug}.knoxcall.com/api(Test) — the path after the upstream’s base URL stays as-is. - Add headers
x-knoxcall-key: <key>andx-knoxcall-route: <route name>. - Remove the old credential from the code and env files — KnoxCall injects it server-side now.
x-knoxcall-route header, not by path matching. Paths concatenate: target_base_url.pathname + request.path. Do not duplicate the base path.Test end-to-end, then hand off to the human
Run the project’s test suite or exercise the changed call sites; check requests appear in the audit trail via
GET https://sandbox.knoxcall.com/v1/audit-logs.Then tell the user, explicitly:- Click the verification link KnoxCall emailed to them (unlocks the dashboard and Live mode).
- Log in at https://knoxcall.com, switch to Live mode, recreate the secrets with production credentials, and mint a Live API key from API Keys.
- Swap
sandbox-{slug}→{slug}in the proxy host and the test key for the Live key — via the environment config, not a code change.
Contract summary for tools
| What | Value |
|---|---|
| Signup | POST https://api.knoxcall.com/v1/signup — unauthenticated, JSON {email, tenant_name} minimum |
| Test Management API | https://sandbox.knoxcall.com/v1 — auth Bearer <test key> |
| Live Management API | https://api.knoxcall.com/v1 — auth Bearer <standard key> (post-verification) |
| Test proxy host | https://sandbox-{tenant_slug}.knoxcall.com/api/... |
| Live proxy host | https://{tenant_slug}.knoxcall.com/api/... |
| Proxy headers | x-knoxcall-key, x-knoxcall-route, optional x-knoxcall-environment |
| SDKs | npm i @knoxcall/sdk (exports signup()), pip install knoxcall (exports signup()) |
| Machine-readable docs | https://docs.knoxcall.com/llms.txt · OpenAPI: /api-reference/openapi.yaml |