Sari la conținutul principal

Auditul, din codul tău sau din agentul tău

O cheie, trei forme: JSON-ul complet cu dovezi, un apel doar pentru verdict și scanări în lot. Plus un server MCP, ca Claude Code, Cursor și alți agenți să întrebe singuri „site-ul ăsta e slop AI?”. Un cont gratuit vine cu o cheie și 30 de scanări pe lună.

Ia o cheie

Autentificare

Fiecare apel poartă cheia ta ca bearer token. Cheile încep cu ca_live_, se afișează o singură dată la creare și pot fi revocate din pagina contului. Sunt pentru servere și unelte, nu pentru browsere: API-ul nu are CORS.

Authorization: Bearer ca_live_…

Endpointuri

ApelCe face
POST /api/v1/scanPornește un audit pentru un URL. Corp: url, opțional mode (standard sau deeper), provenance (implicit true), webhook_url (https), lang (en sau ro: limba PDF-ului, a emailului de final și a webhookului). Răspunde 202 cu un id, sau 200 când același site a fost auditat în ultimele 10 minute. Contează o scanare. Pe un plan plătit, mode deeper cu provenance rulează verificarea de slop AI și pe 5, 10 sau 20 de pagini din crawl (Solo, Team, Partner), în provenance.sitewide; tot o singură scanare. Paginile interioare au verdict cu confidence null, pentru că ratele de eroare au fost măsurate pe pagini principale.
GET /api/v1/scan/{id}JSON-ul cu dovezi: stare și progres (cât așteaptă, queue.position și queue.est_wait_s, în secunde), scoruri, blocul de proveniență (bandă, încredere, cele două axe, semne și semne de design propriu, lineage, acoperire, linia legală), built_with (platforma, tema sau șablonul ei, cu versiunea și autorul când tema le scrie, și builderele de pagini de lângă ea), fiecare observație cu dovezile și recomandarea ei, linkuri către raport și PDF. Adaugă ?lang=ro ca să primești observațiile în română; altfel, în engleză.
GET /api/v1/verdict?url=Doar verdictul. Un rezultat de proveniență mai nou de 7 zile (max_age_days îl schimbă) vine imediat; altfel se pune la coadă o scanare, se contează una și primești 202 cu un id de interogat.
POST /api/v1/batchPână la mărimea de lot a planului tău, într-un singur apel. Tot lotul e verificat mai întâi față de cotă. Răspunde 202 cu un batch_id și cu URL-urile acceptate și respinse.
GET /api/v1/batch/{batch_id}Numărul de terminate, eșuate și în așteptare, plus un rând pe URL cu stare, scor general, bandă și link către raport.
GET /api/v1/mePlanul tău, consumul din luna curentă, limitele și numărul de chei active.

Exemplu

curl -X POST https://audit.crocky.host/api/v1/scan \
  -H "Authorization: Bearer ca_live_…" -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
# {"id":"3cfd…","status":"pending","cached":false,"result_url":"…/api/v1/scan/3cfd…","report_url":"…/report/3cfd…"}

curl -H "Authorization: Bearer ca_live_…" https://audit.crocky.host/api/v1/scan/3cfd…
# {"id":"3cfd…","status":"done","scores":{"performance":62,"seo":88,"security":74,"hosting":91,"accessibility":95,"overall":79},
#  "provenance":{"band":"LIKELY","probability":81,"tools":[],"tells":["E36","E03","E17"],"anti_tells":[],
#                "axes":{"discipline":54,"provenance":71},"lineage":{"tier_a":[],"tier_b":["…"]},
#                "legal":"Automated estimate from public signals - not a statement of fact about a site or its authors."},
#  "findings":[{"category":"security","severity":"high","title":"No Content-Security-Policy header", …}],
#  "checks":{"total":{"ran":310,"hit":29,"pass":281,"review":0,"na":75,"skip":0},"by_category":{"security":{…}, …},
#            "rows":[{"id":"chk:hdr_hsts","category":"security","name":"Strict-Transport-Security (HSTS) header","state":"found","severity":"high"},
#                    {"id":"path:/.env","category":"security","name":"/.env","state":"passed"}, …]}, …}

Benzile de verdict

CONFIRMED (un artefact de build numește unealta), LIKELY (cu un grad de încredere), POSSIBLE (plafonat, fără număr: designerii folosesc aceleași kituri), NONE (nicio dovadă găsită; greșește cam o dată din 12), UNMEASURED (nu s-a putut descărca sau randa). API-ul nu spune niciodată că un site e făcut de om. Ratele de eroare și ce înseamnă fiecare bandă sunt pe pagina despre slop AI.

Cum funcționează verificarea

Toate verificările, nu doar constatările

Fiecare rezultat are și checks: fiecare verificare rulată de audit, cu starea ei (passed, found, needs_review, not_applicable, not_run), severitatea acolo unde a găsit ceva și motivul acolo unde nu se aplica sau n-a putut rula. Findings arată doar ce a găsit o verificare; checks arată și ce a ieșit curat, ca să poți deosebi „verificat și în regulă” de „neverificat”. Numărătorile pe categorii vin cu orice rezultat, rândurile cu rezultatul complet.

Server MCP

Aceeași cheie merge pe un server MCP la /api/mcp (Streamable HTTP, JSON fără stare, fără SSE). Două unelte: check_site cu un URL întoarce verdictul cu dovezi când există un rezultat mai nou de 7 zile, altfel pune la coadă o scanare și îi spune modelului să apeleze get_result cu id-ul după 20 de secunde.

claude mcp add --transport http crocky-audit https://audit.crocky.host/api/mcp \
  --header "Authorization: Bearer ca_live_…"
{ "mcpServers": { "crocky-audit": {
    "url": "https://audit.crocky.host/api/mcp",
    "headers": { "Authorization": "Bearer ca_live_…" } } } }

Webhookuri

Trimite webhook_url la o scanare și facem un singur POST cu JSON-ul de dovezi când se termină, cu X-Crocky-Event: scan.completed și X-Crocky-Signature: sha256=… (HMAC-SHA256 peste corp cu secretul de semnare din pagina contului). Buget de trei secunde, fără reîncercări.

Planuri

PlanScanări pe lunăLotCheiMonitoarePagini pe tot site-ul
Free30510-
Solo30020255
Team2000100105010
Partner100005002550020

Fiecare cheie e limitată la 60 de cereri pe minut. Pentru un plan plătit scrie la audit@crocky.host; plata self-service vine mai târziu.

Erori

401 bad_keyCheie lipsă, revocată sau necunoscută.
402 quotaScanările lunare s-au terminat; corpul spune cât ai folosit și limita.
429 ratePeste 60 de cereri într-un minut pe o cheie.
400 validationURL greșit, mod necunoscut, lot prea mare, webhook fără https.
404 not_foundNicio scanare sau lot cu acel id pe contul tău.

Estimare automată din semnale publice, nu o afirmație factuală despre un site sau despre autorii lui.