BotWitness, a mechanical mite with an orange lens BotWitness

Developer docs

The BotWitness API

A tamper-evident record of what sites told AI crawlers. Auth with an API key from your dashboard: Authorization: Bearer <key> or ?key=<key>.

Lookup: GET /permission

Current or as-of-date verdict for a domain + AI crawler. Current/recent (30 days) is free; older dates need a Monitoring plan. Coverage (tracking_since) is always free.

curl "https://bot-witness.com/permission?domain=nytimes.com&agent=GPTBot&as_of=2024-06-01" \
  -H "Authorization: Bearer $KEY"

Certificate: GET /permission/certificate key

Returns a signed Certificate of Capture PDF for the record on a date. Consumes one certificate credit (unlimited on Monitoring).

curl "https://bot-witness.com/permission/certificate?domain=nytimes.com&agent=GPTBot" \
  -H "Authorization: Bearer $KEY" -o certificate.pdf

History: GET /history

Timeline of directive states for a domain (full history on Monitoring; 30-day window otherwise).

curl "https://bot-witness.com/history?domain=nytimes.com&agent=ClaudeBot" -H "Authorization: Bearer $KEY"

Change feed: GET /changes

curl "https://bot-witness.com/changes?domain=nytimes.com&since=2026-01-01"

Coverage: GET /coverage free

curl "https://bot-witness.com/coverage?domain=nytimes.com"

Change alerts: POST /subscriptions Monitoring

Get notified when a tracked domain changes its AI directives, by email ("kind":"email") or an HMAC-signed webhook. Webhook verify: sha256 = HMAC(secret, X-PR-Timestamp + "." + body).

curl -X POST https://bot-witness.com/subscriptions -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"email","endpoint":"[email protected]","domains":"nytimes.com,reddit.com"}'

Compliance attestation: GET /attestation Monitoring

The AI-operator artifact: what robots.txt permitted a named crawler across up to 100 domains over a date range, per-capture verdicts, JSON or filing-ready PDF. See the product page.

curl "https://bot-witness.com/attestation?agent=GPTBot&domains=nytimes.com,wsj.com&from=2026-01-01&to=2026-07-01&format=pdf" \
  -H "Authorization: Bearer $KEY" -o attestation.pdf

Violation check: POST /violations Monitoring

Paste server-log hits (structured, or raw Apache/nginx lines); each is judged against the robots.txt capture in effect at its timestamp, RFC-9309 path matching. Stateless, hits are never stored.

curl -X POST https://bot-witness.com/violations -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"yoursite.com","agent":"GPTBot","hits":[{"time":"2026-07-10T06:12:01Z","path":"/private/x","agent":"GPTBot"}]}'

Compliance audit: POST /audit Audit / Monitoring

The productized violation check: the same stateless evaluation, aggregated into a citable report, per-crawler findings, disallowed-hit exhibits, and every governing snapshot cited. See the product page.

curl -X POST https://bot-witness.com/audit -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"yoursite.com","agent":"GPTBot","log":"<raw access-log lines>","format":"pdf"}' \
  -o compliance-audit.pdf

Exposure report: POST /exposure Exposure / Monitoring

Probe AI models for reproduction of your work. Returns a tiered report (verbatim reproduction facts + a calibrated membership signal), an investigative signal, never a fabricated probability. See the product page. GET /exposure/config lists the models probed and the caps.

curl -X POST https://bot-witness.com/exposure -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"work_title":"My Novel","corpus":"<paste your text>","acknowledge":true}'
# add "format":"pdf" (or ?format=pdf) for the filing-ready PDF
# add "mode":"contamination" to run the same probes as a Benchmark Contamination Report

Opt-out efficacy report: POST /optout/report Opt-Out / Monitoring

The archive × probes flagship: your domain's dated, timestamped opt-out record joined with reproduction/recognition probes of the models released since. See the product page.

curl -X POST https://bot-witness.com/optout/report -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"yoursite.com","corpus":"<paste your text>","acknowledge":true,"format":"pdf"}' \
  -o optout-efficacy.pdf

GPAI disclosure report: POST /gpai/report GPAI / Monitoring

The EU AI Act Art. 53(1)(d) record as a filing-ready artifact: every dated revision of each watched disclosure surface, cadence vs the six-month yardstick, optional term search in the latest published text. See the product page.

curl -X POST https://bot-witness.com/gpai/report -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"terms":["yoursite.com"],"format":"pdf"}' -o gpai-disclosure-report.pdf

Copyright traps: /exposure/traps Exposure / Monitoring

Publish a timestamped random canary (POST, body {work_title?}), list yours with last probe results (GET), re-probe the models on demand (GET /exposure/traps/<id>/probe). The daily watch re-captures the public page for free; Exposure Monitoring re-probes models automatically.

Exposure monitoring: /exposure/watches Exposure Monitoring

Enroll a work for recurring probes: re-run automatically when the model roster changes or monthly, with email alerts on deltas. GET lists watches, POST enrolls ({work_title, corpus, acknowledge}), POST /exposure/watches/<id>/run re-probes now (rate-limited), DELETE /exposure/watches/<id> stops.

Watch streams: GET /watch, GET /watch/history free coverage

The non-domain evidence streams: gpai (EU training-data disclosures), wba (agent signing-key directories), mcp / mcp-tools (registry entries and live tool manifests), hf (Hugging Face model license/gating state).

curl "https://bot-witness.com/watch?kind=hf&q=llama"
curl "https://bot-witness.com/watch/history?kind=wba&key=chatgpt.com"

Report: GET /report.json free

Aggregate stats behind the public report.

Evidence packages: per matter

Litigation-grade ZIP (captures, RFC-3161 tokens, Merkle proofs, standalone verifier) for a domain and date range, operator-delivered. See the service page.