// 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.
Authentication کا طریقہ
ہر request کے Authorization header میں bearer token ہونا چاہیے۔ Tokens Account → API tokens سے issue ہوتے ہیں؛ plaintext آپ کو creation پر exactly once دکھایا جاتا ہے۔ Token revoke کرنے سے اگلی call پر 401 return ہوتا ہے۔
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 نہیں ہوتا۔
شرح کی حدیں
ہر 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) پر keyed cursor-based pagination use کرتے ہیں۔ Next page fetch کرنے کے لیے ?cursor=<next_cursor> pass کریں۔ Cursor concurrent writes کے تحت correct رہتا ہے (کوئی OFFSET skew نہیں)۔
Error کی شکلیں
ہر error ایک JSON object ہے جس میں کم از کم error key ہوتی ہے۔
{ "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": [...] } // 400Endpoint فہرست
Scan start کریں
/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 list کریں
/api/v1/scansCalling token سے tied org کے scans return کرتا ہے، 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 get کریں
/api/v1/scans/{scanId}Default طور پر scan envelope + per-category severity summary return کرتا ہے۔ Full report لینے کے لیے ?include_findings=true pass کریں (noisy scans کے لیے large؛ filters کے ساتھ findings endpoint prefer کریں)۔
curl -H "Authorization: Bearer fxv_..." \
https://fixvibe.app/api/v1/scans/8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4dFindings list کریں
/api/v1/findingsCaller کے org میں ہر scan کے across filterable 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 spec
Machine-readable spec /docs/api/openapi پر (text/yaml)۔ Typed clients کے لیے اسے اپنے favourite codegen (openapi-typescript، openapi-python-client، یا کسی بھی OpenAPI 3.1 toolchain) میں drop کریں۔
