// docs / rest api
REST API
Bearer-authenticated JSON API for scan automation, scan status, and findings. Passive scans are available through REST; active scans are available for paid plans only after the domain is verified and explicitly authorized in the dashboard.
அங்கீகாரம்
ஒவ்வொரு request ம் Authorization header இல் bearer token கொண்டு இருக்க வேண்டும். Tokens Account → API tokens இலிருந்து issue செய்யப்படுகின்றன; plaintext உருவாக்கும் போது ஒருமுறை மட்டுமே உங்களுக்கு காட்டப்படும். Token revoke செய்தால் அடுத்த call இல் 401 திரும்பும்.
curl -H "Authorization: Bearer fxv_..." \
https://fixvibe.app/api/v1/scansToken format: fxv_ பின்னர் 43 base64url characters. Rest நிலையில் SHA-256 hash ஆக stored; plaintext server-side இல் ஒருபோதும் persist ஆகாது.
Rate வரம்புகள்
ஒவ்வொரு authenticated request மீதும் இரண்டு windows: 10 req/sec burst மற்றும் 60 req/min steady; இரண்டும் bearer hash அடிப்படையில் keyed. Quota enforcement (per-month scan caps) இதன் மேல் layer ஆகும் — Quotas & limits பார்க்கவும்.
பக்கமிடல்
List endpoints (/api/v1/scans, /api/v1/findings) descending order இல் (created_at, id) அடிப்படையிலான cursor-based pagination பயன்படுத்துகின்றன. அடுத்த page fetch செய்ய ?cursor=<next_cursor> pass செய்யவும். Concurrent writes இருந்தாலும் cursor சரியாக இருக்கும் (OFFSET skew இல்லை).
Error வடிவங்கள்
ஒவ்வொரு error ம் குறைந்தது error key கொண்ட JSON object ஆகும்.
{ "error": "invalid_token" } // 401
{ "error": "forbidden" } // 403
{ "error": "not_found" } // 404
{ "error": "quota_exceeded", "quota": {...} } // 429
{ "error": "rate_limited", "retry_after_seconds": 47 } // 429
{ "error": "invalid_input", "issues": [...] } // 400Endpoints பட்டியல்
Scan தொடங்கவும்
/api/v1/scansEnqueues a passive scan by default. For verified domains with active authorization, paid plans can request active mode. Returns immediately with a queued scan id; poll GET /api/v1/scans/[scanId] until status === "completed".
curl -X POST https://fixvibe.app/api/v1/scans \
-H "Authorization: Bearer fxv_..." \
-H "content-type: application/json" \
-d '{"target":"https://staging.example.com"}'// 200 response
{
"id": "8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4d",
"status": "queued",
"target": "https://staging.example.com",
"mode": "passive"
}உங்கள் scans பட்டியல்
/api/v1/scansCalling token உடன் இணைந்த org க்கான scans ஐ newest first ஆக திரும்ப அளிக்கிறது. ?cursor= மூலம் paginate செய்யவும். Default limit 50, max 100.
curl -H "Authorization: Bearer fxv_..." \
"https://fixvibe.app/api/v1/scans?limit=25"// 200 response
{
"scans": [
{
"id": "8f1c4e2a-...",
"target_url": "https://staging.example.com",
"target_hostname": "staging.example.com",
"mode": "passive",
"status": "completed",
"started_at": "2026-05-07T14:00:00Z",
"completed_at": "2026-05-07T14:00:23Z",
"findings_count": { "critical": 1, "high": 3, "medium": 7, "low": 2, "info": 4 },
"triggered_by": "api",
"created_at": "2026-05-07T14:00:00Z"
}
],
"next_cursor": "2026-05-07T14:00:00Z:8f1c4e2a-..."
}Scan பெறவும்
/api/v1/scans/{scanId}Default ஆக scan envelope + per-category severity summary திரும்பும். Full report பெற ?include_findings=true pass செய்யவும் (noisy scans க்கு பெரியதாக இருக்கும் — filters உடன் findings endpoint ஐப் பயன்படுத்துவது நல்லது).
curl -H "Authorization: Bearer fxv_..." \
https://fixvibe.app/api/v1/scans/8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4dFindings பட்டியல்
/api/v1/findingsCaller org இன் ஒவ்வொரு scan முழுவதும் filter செய்யக்கூடிய findings list. Filters: severity=critical,high, check_id=secrets.patterns, since=2026-04-01T00:00:00Z. Cursor-paginated.
curl -H "Authorization: Bearer fxv_..." \
"https://fixvibe.app/api/v1/findings?severity=critical,high&limit=50"// 200 response
{
"findings": [
{
"id": "...",
"scan_id": "...",
"check_id": "secrets.js-bundle-sweep",
"severity": "critical",
"title": "Supabase service role key exposed in JS bundle",
"description": "...",
"evidence": { ... },
"remediation": "...",
"cwe_id": "CWE-798",
"created_at": "2026-05-07T14:00:23Z"
}
],
"next_cursor": null
}OpenAPI specification
Machine-readable spec /docs/api/openapi (text/yaml) இல். Typed clients க்காக உங்கள் favourite codegen (openapi-typescript, openapi-python-client, அல்லது ஏதேனும் OpenAPI 3.1 toolchain) இல் drop செய்யவும்.
