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/graphql

No 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 --quiet

The 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" ;;
esac

0 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 again

How 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/graphql

Dino 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 init

Answer the prompts (endpoint, protocol, auth) and Dino writes a flat .dino.yml in the current directory:

.dino.yml
# 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: graphql

Secrets are never written to the file; auth references an environment variable (valueEnv), not a value. See the configuration reference.

Scan using the config

dino scan

With .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.

FieldWhat it means
VerdictThe roll-up you gate on: Healthy, Needs attention, At risk, Critical, or Untested
Health score0100, or null when an operation was not tested
FindingsGrouped by severity: CRITICAL, HIGH, MEDIUM, LOW, CLEAN, UNTESTED
Coveragefull 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