Quickstart
Get a deterministic verdict on an API in one command. The agent path to a machine-readable result first, then dino init for the terminal.
Dino is the deterministic verification layer for APIs. The shortest path from an API to a verdict is one command: point Dino at a running GraphQL or REST endpoint and it tests the live API, evaluates the evidence, and returns a deterministic verdict you can gate a deploy on.
npx @dino-hq/cli scan --endpoint https://your-api.com/graphqlNo config file, no account, no setup. npx needs no install; to get the dino command directly, run npm install -g @dino-hq/cli.
How does an agent get a verdict from Dino?
An agent calls dino scan with --format json, reads the verdict from stdout, and branches on the exit code. The JSON on stdout is the machine contract; the exit code is the branch signal. Nothing needs a human to interpret prose.
dino scan --endpoint https://your-api.com/graphql --format json --quietThe result on stdout is a ScanResultV1 object (parseable with jq, chrome kept on stderr):
{
"contractVersion": "1.0",
"core": {
"operationCount": 19,
"health": { "score": 62, "level": "HIGH", "verdict": "At risk" },
"coverage": "full",
"operations": [ /* per-operation findings, health, coverage */ ]
},
"meta": { "generatedAt": "…", "introspectionLevel": "full" }
}The agent branches on the exit code without parsing anything:
dino scan --endpoint https://your-api.com/graphql --fail-on-high --format json --quiet
case $? in
0) echo "clean: safe to continue" ;;
3) echo "policy gate failed: HIGH/CRITICAL findings, do not ship" ;;
6) echo "partial coverage: reduced evidence, decide explicitly" ;;
*) echo "usage/transient/config/crash: recover or stop" ;;
esac0 clean · 3 policy gate failed · 6 partial coverage · 2 usage · 4 transient · 5 config · 70 crash. See the exit-code contract for the full table and precedence, and For AI agents for MCP discovery, error envelopes, and the retry loop.
The loop an agent runs:
agent changes the API → dino scan → read verdict + exit code → fix → dino scan againHow do I run Dino in a terminal?
Run dino scan --endpoint <url> for a one-off, or dino init to write a .dino.yml so you can just type dino scan. Both paths run the same verification pipeline and return the same verdict.
Run a one-off scan (zero config)
npx @dino-hq/cli scan --endpoint https://your-api.com/graphqlDino introspects the endpoint, discovers every operation, and runs the verification pipeline. --protocol graphql is the default.
Save the target with dino init
npx @dino-hq/cli initAnswer the prompts (endpoint, protocol, auth) and Dino writes a flat .dino.yml in the current directory:
# yaml-language-server: $schema=https://usedino.dev/schema.json
# Generated by dino init: see https://docs.usedino.dev for all options
endpoint: https://your-api.com/graphql
protocol: graphqlSecrets are never written to the file; auth references an environment variable (valueEnv), not a value. See the configuration reference.
Scan using the config
dino scanWith .dino.yml present, dino scan needs no flags. Add --format markdown for a human-readable report, or --format json for the machine contract.
What does the verdict tell me?
Every operation gets a health score, findings grouped by severity, and a coverage status; the API rolls up to one verdict word. The verdict is deterministic: the same observed evidence under the same verification policy produces the same verdict, every run.
| Field | What it means |
|---|---|
| Verdict | The roll-up you gate on: Healthy, Needs attention, At risk, Critical, or Untested |
| Health score | 0–100, or null when an operation was not tested |
| Findings | Grouped by severity: CRITICAL, HIGH, MEDIUM, LOW, CLEAN, UNTESTED |
| Coverage | full or partial. partial means reduced evidence (introspection was limited), which exits 6 unless you pass --accept-partial |
To turn findings into a deploy gate, add a policy flag: --fail-on-high exits 3 when any HIGH or CRITICAL finding exists. That 3 is the signal CI or an agent blocks on.
Next steps
For AI agents
The full machine contract: MCP, structured JSON, exit codes, error envelopes, and the verify loop.
Machine contracts
Every exit code, the JSON output shape, and the error envelope: the interfaces to build automation on.
CLI reference
Every command and flag, with human- and machine-readable output.
Configuration
The real .dino.yml schema, targets, protocols, the auth union, and environments.