Quickstart
Streamproof is an OpenAI-compatible proxy, so any client that speaks the OpenAI API works by changing the base URL. This page shows the Continue and Cline setup.
Replace YOUR-DEPLOYMENT with the host of your own deployment. The base URL always includes the /v1 suffix.
1. Deploy into your account
The proxy runs in your own Vercel project, pointed at your upstream base URL and key. Your provider key stays an environment variable in your project — we never receive it. The deploy and its environment variables are covered in the repository docs.
2. Issue each client a capped key
Client keys are stored only as SHA-256 hashes. Generate a key, hash it, and give it a monthly USD budget and an RPM limit:
node -e "console.log(require('crypto').createHash('sha256').update('sk-acme-...').digest('hex'))"The plaintext key is shown once, when it is issued. Over budget returns 402, over rate returns 429, an unknown key returns 401.
3. Point your clients at /v1
Continue
Add an OpenAI-compatible model to ~/.continue/config.yaml (or config.json on older versions):
name: streamproof
version: 0.0.1
models:
- name: streamproof
provider: openai
model: gpt-4o-mini
apiBase: https://YOUR-DEPLOYMENT/v1
apiKey: ${{ secrets.STREAMPROOF_API_KEY }}
roles:
- chat
- editapiBase must include the /v1 suffix. Continue appends /chat/completions to it.
Cline (VS Code)
In the Cline panel, choose OpenAI Compatible and fill in:
| API Provider | OpenAI Compatible |
|---|---|
| Base URL | https://YOUR-DEPLOYMENT/v1 |
| API Key | Your Streamproof client key |
| Model ID | gpt-4o-mini (or another model enabled on your proxy) |
Cline appends /chat/completions, so the base URL includes /v1.
Verify with curl
curl -sS https://YOUR-DEPLOYMENT/v1/chat/completions \
-H "authorization: Bearer $STREAMPROOF_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}],"stream":false}'A working response is HTTP 200 with an OpenAI-shaped body and choices[0].message.content populated. For streaming, add "stream": true and an accept: text/event-stream header.
When something goes wrong
| Status | Meaning |
|---|---|
| 401 | Unknown or revoked client key. |
| 402 | Client is over their monthly USD budget — refused, not billed. |
| 429 | Client is over their RPM limit. |
| 502 / 504 | Upstream unreachable or request exceeded the timeout. |
| 503 | Circuit breaker tripped after repeated upstream errors; resets after ~10s. |
A note on the private preview
While the preview is protected, the deployment sits behind Vercel Deployment Protection, so requests need an automation bypass header. That, your base URL and your client keys come with the setup — this page is the shape of it, not a live public demo.