Get started · terminal
An API key from the terminal
Two commands. A new account needs no browser. An existing account needs one click. Tell your coding agent to run this for you; it was written for that.
New account
pip install zeroproof
zeroproof signup --email you@example.comThat creates the account and saves an API key to ~/.zeroproof/credentials.json. Every SDK call reads it from there. To open the dashboard later, sign in at /platform with an email code to that address. No password is ever set.
Existing account
zeroproof loginPrints a link and a short code. Open the link, sign in, press Approve. The key is saved to the same file. If the command is stopped before you approve, run it again: it resumes the same code. zeroproof logout deletes the file.
Check it
zeroproof status
curl -s -o /dev/null -w "%{http_code}\n" \
-H "X-Api-Key: $(python -c 'import zeroproof; print(zeroproof.resolve_api_key())')" \
https://api.zeroproofai.com/datasets # 200First call
import zeroproof.simulations as zps
zps.datasets() # reads the saved key
data = zps.simulate(spec="specs/github", budget=20)
data.push("github-first-run") # stored on your accountAlready running an agent in production? Three environment variables send its traces here; see trace ingest. Everything hosted takes the same key as X-Api-Key; see API keys.
If you are a coding agent
Ask the person for the email address to sign up with. Do not invent one.
zeroproof signup --email <their address>. If it says the account exists, run zeroproof login and show them the link it prints.
Stays in ~/.zeroproof/credentials.json. Never paste it into the conversation. ZEROPROOF_API_KEY in the environment overrides the file.
One account per email. Five active keys per account. Five sign-ups per network address per day. Free daily allowance: 500k input and 1M output tokens.
Without Python
The CLI is a thin client over three routes. No authentication on any of them.
POST https://api.zeroproofai.com/signup
{"email": "you@example.com", "name": "my-agent"}
-> 201 {"api_key": "zp_...", "user_id": "...", "email": "...", "name": "..."}
-> 409 {"error": "account_exists"}
POST https://api.zeroproofai.com/device/code
{"name": "my-agent"}
-> 200 {"device_code", "user_code", "verification_uri_complete", "interval", "expires_in"}
show verification_uri_complete to the person, then poll:
POST https://api.zeroproofai.com/device/token
{"device_code": "...", "user_code": "..."}
-> 400 {"error": "authorization_pending"} keep polling every interval seconds
-> 200 {"api_key": "zp_...", "name": "...", "user_id": "..."} onceQuestions, or a higher limit: jacob@zeroproofai.com