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

bash
pip install zeroproof
zeroproof signup --email you@example.com

That 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

bash
zeroproof login

Prints 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

bash
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   # 200

First call

python
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 account

Already 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

Ask the person for the email address to sign up with. Do not invent one.

Run

zeroproof signup --email <their address>. If it says the account exists, run zeroproof login and show them the link it prints.

Key

Stays in ~/.zeroproof/credentials.json. Never paste it into the conversation. ZEROPROOF_API_KEY in the environment overrides the file.

Limits

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.

http
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": "..."}   once

Questions, or a higher limit: jacob@zeroproofai.com