Outrings
AI agents and automation

How do I audit a website from the command line?

Getting a complete, machine-readable audit with one curl command — and pulling out just the parts you need with jq.

3 min read
Short answer

One request, no key, no install: curl -s "https://outrings.com/api/v1/summary?url=example.com". Add | jq to read it, swap summary for a category name to narrow it, and add failedOnly=1 when you only want the problems.

The one-liner

curl -s "https://outrings.com/api/v1/summary?url=example.com" | jq

The scheme is optional, ?url= and ?domain= both work, and GET and POST behave identically. There is nothing to authenticate and nothing to install beyond jq, which is only there to make the JSON readable.

Getting less back

A full report is around 124 KB. Most of the time you want a fraction of that, and it is cheaper to ask for less than to filter afterwards.

CommandSizeUse when
/api/v1/score?url=…~1.7 KBYou need the number only
/api/v1/security?url=…~2–8 KBThe question is about one area
/api/v1/summary?url=…~8.5 KBScore plus what to fix. Best default.
/api/v1/full?url=…&format=compact&failedOnly=1~42 KBEverything wrong, no prose
/api/v1/full?url=…~124 KBYou want the raw evidence too

Pulling out the parts that matter

Four fields carry most of the value. This shape is a good default:

curl -s "https://outrings.com/api/v1/security?url=example.com" \
  | jq '{score, verdict,
         findings: [.problems[] | {severity, title, found}],
         ranked: [.priorityActions[] | {pointsIfFixed, effort, action}],
         notCovered,
         undetermined: [.undetermined[]?.id]}'

Note the last two. notCovered is what this service never examines; undetermined is what it tried and could not determine. Dropping them gives you a tidier output that quietly implies everything else passed.

Useful recipes

Just the score, for a shell variable

score=$(curl -s "https://outrings.com/api/v1/score?url=example.com" | jq -r '.score')
echo "$score"

Only critical and high findings

curl -s "https://outrings.com/api/v1/summary?url=example.com&minSeverity=high" \
  | jq -r '.priorityActions[] | "\(.severity)\t\(.title)"'

Fail a script when the score drops below a threshold

#!/usr/bin/env bash
set -euo pipefail

threshold=80
score=$(curl -sf "https://outrings.com/api/v1/score?url=$1" | jq -r '.score')

if (( $(echo "$score < $threshold" | bc -l) )); then
  echo "FAIL: $1 scored $score, below $threshold" >&2
  exit 1
fi
echo "OK: $1 scored $score"

The whole report as Markdown, for reading or pasting into a chat

curl -s "https://outrings.com/api/v1/llm?url=example.com"

Things worth knowing before you script it

  • Use curl -sf in scripts. Without -f, curl exits zero on a 502 and your script happily parses an error body.
  • Results are cached for ten minutes. Repeating a URL inside that window is free and does not consume quota. Add &refresh=1 only when you genuinely need a fresh run.
  • Rate limits are 40 audits an hour, 200 a day per client. Exceeding them returns 429 with Retry-After.
  • Errors are JSON. Non-2xx responses return {"ok": false, "error": "…"}. Unreachable targets give 502; private or reserved addresses give 403.
  • Timing. A fast audit is one to eight seconds. Set a generous client timeout — 30 seconds is comfortable.
If you are scripting more than a handful of sites, add a small delay between requests. Each audit makes dozens of requests to the target, so a tight loop is inconsiderate to the sites you are measuring as well as to the service.

What our audit reports about this

Every item below is measured directly, not inferred. Run it against your own site and the result names the exact rule or header responsible.

  • Every category available as its own endpoint, so a narrow question costs a few kilobytes rather than the whole report.
  • Response shaping — failedOnly, minSeverity, format=compact — applied at the source rather than by filtering afterwards.
  • Consistent JSON error bodies with meaningful status codes, so a script can distinguish unreachable from forbidden from rate-limited.
  • A Markdown rendering of the whole report at /api/v1/llm for reading or pasting into an assistant.

For agents and scripts, the same measurement is at /api/v1/summary?url=yoursite.com — see the API documentation.

Related questions

Do I need to install anything?

No. curl is present on macOS, Linux and modern Windows. jq is optional and only formats the output — the API works identically without it.

Is there a rate limit?

Forty audits per hour and two hundred per day per client. Each audit makes dozens of requests to the target site, so the limit exists to stop the service being used as a scanning proxy. Cached repeats do not count.

Can I audit a site I do not own?

Yes — it sends ordinary HTTP requests and reads public responses, exactly as a browser does. It is not a vulnerability scanner and does not probe for weaknesses.

How do I get the raw evidence rather than the verdicts?

Use /api/v1/full without format=compact. Every check carries the observed value it was decided from, which is what compact mode strips to save space.

Read next

All 100 guides · How every check works · API for agents