// 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 creation ਪਰ ਤੁਹਾਨੂੰ ਠੀਕ ਏਕ ਬਾਰ ਦਿਖਤਾ ਹੈ। Token revoke ਕਰਨੇ ਪਰ next call ਮੇਂ 401 ਲੌਟਤਾ ਹੈ।
curl -H "Authorization: Bearer fxv_..." \
https://fixvibe.app/api/v1/scansToken format: fxv_ ਕੇ ਬਾਦ 43 base64url characters। At 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 ਹੋਤਾ ਹੈ — ਕੋਟਾ ਅਤੇ ਸੀਮਾਏਂ ਵੇਖੋ।
ਪੇਜੀਨੇਸ਼ਨ
List endpoints (/api/v1/scans, /api/v1/findings) descending order ਮੇਂ (created_at, id) ਪਰ keyed 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 list ਕਰੋ
/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 prefer ਕਰੋ)।
curl -H "Authorization: Bearer fxv_..." \
https://fixvibe.app/api/v1/scans/8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4dFindings list ਕਰੋ
/api/v1/findingsCaller ਕੇ org ਕੇ ਹਰ scan ਮੇਂ 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 ਵੇਰਵਾ
Machine-readable spec /docs/api/openapi (text/yaml) ਪਰ ਹੈ। Typed clients ਕੇ ਲਿਏ ਇਸੇ ਅਪਨੇ ਪਸਂਦੀਦਾ codegen (openapi-typescript, openapi-python-client, ਯਾ ਕੋਈ ਭੀ OpenAPI 3.1 toolchain) ਮੇਂ drop ਕਰੋ।
