{"openapi":"3.1.0","info":{"title":"Atlas API","version":"1.0.0","description":"Dependency & vulnerability intelligence by asko.cloud. Authenticate with an API key from Integrationen: `Authorization: Bearer atlas_sk_…`. Rate limit: 120 requests per minute per key."},"servers":[{"url":"https://atlas.asko.cloud/api/v1"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"atlas_sk_…"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"}}},"Project":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"source":{"type":"string","enum":["github","git_url","upload","manual","api"]},"kind":{"type":"string"},"environment":{"type":["string","null"]},"repo_full_name":{"type":["string","null"]},"stats":{"type":"object","description":"open, act, attend, track_plus, track, critical, high, medium, low, kev, fixable, components"},"last_scanned_at":{"type":["string","null"],"format":"date-time"}}},"Finding":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"vuln_id":{"type":"string","examples":["GHSA-jfh8-c2jp-5v3q"]},"cve_ids":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"ecosystem":{"type":"string"},"package_name":{"type":"string"},"package_version":{"type":"string"},"fixed_version":{"type":["string","null"]},"severity":{"type":"string","enum":["critical","high","medium","low","none","unknown"]},"priority":{"type":"string","enum":["act","attend","track_plus","track"]},"risk_score":{"type":"integer","minimum":0,"maximum":100},"reasons":{"type":"array","items":{"type":"string"}},"cvss_score":{"type":["number","null"]},"epss":{"type":["number","null"]},"kev":{"type":"boolean"},"status":{"type":"string","enum":["open","fixed","ignored","accepted"]}}},"Scan":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","running","completed","failed"]},"phase":{"type":["string","null"],"enum":["fetch","inventory","match","finalize",null],"description":"Current step while running"},"progress":{"type":"object","description":"Counts found so far: manifests, components, findings; retrying while a transient error is retried"},"stats":{"type":"object"},"error":{"type":["string","null"]}}}}},"paths":{"/overview":{"get":{"summary":"Open findings across the organisation","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects":{"get":{"summary":"List projects","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create a project","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"source":{"type":"string","enum":["api","git_url","upload","manual"],"default":"api"},"repo_url":{"type":"string","description":"https URL, required for git_url"},"kind":{"type":"string"},"environment":{"type":"string"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{id}":{"get":{"summary":"Get a project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{id}/components":{"get":{"summary":"Component inventory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{id}/findings":{"get":{"summary":"Findings of a project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string","default":"open"}},{"name":"priority","in":"query","schema":{"type":"string","enum":["act","attend","track_plus","track"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}},"total":{"type":"integer"}}}}}}}}},"/projects/{id}/scans":{"post":{"summary":"Re-scan a repository project","description":"409 while a scan of the project is still queued or running; the body names that scan.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{id}/uploads":{"post":{"summary":"Upload a lockfile, archive or SBOM and scan it","description":"Use `?wait=120` to block until the scan has finished and `?fail_on=act` to receive HTTP 422 when findings of that priority (or higher) are open — ideal for CI gates.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","schema":{"type":"integer","maximum":300}},{"name":"fail_on","in":"query","schema":{"type":"string","enum":["act","attend","track_plus","track"]}},{"name":"filename","in":"query","schema":{"type":"string"},"description":"Required for raw (non-multipart) bodies"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}},"application/octet-stream":{}}},"responses":{"200":{"description":"Scan finished, gate passed","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Queued / still running","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Scan failed or gate failed","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/projects/{id}/sbom":{"get":{"summary":"CycloneDX 1.6 SBOM incl. known vulnerabilities","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/scans/{id}":{"get":{"summary":"Scan status","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"scan":{"$ref":"#/components/schemas/Scan"}}}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/findings":{"get":{"summary":"Findings across all projects","parameters":[{"name":"status","in":"query","schema":{"type":"string","default":"open"}},{"name":"priority","in":"query","schema":{"type":"string","enum":["act","attend","track_plus","track"]}},{"name":"kev","in":"query","schema":{"type":"boolean"}},{"name":"project_id","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/findings/{id}":{"patch":{"summary":"Triage a finding","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["open","ignored","accepted"]},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/vulnerabilities/{id}":{"get":{"summary":"Advisory details (GHSA, CVE, PYSEC, GO …)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/check":{"post":{"summary":"Check packages ad hoc (nothing is stored)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"packages":{"type":"array","items":{"type":"object","properties":{"ecosystem":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"},"purl":{"type":"string"}}}}}},"example":{"packages":[{"ecosystem":"npm","name":"lodash","version":"4.17.20"},{"purl":"pkg:pypi/django@3.2.0"}]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/news":{"get":{"summary":"Security news (optionally only items relevant to your stack)","parameters":[{"name":"relevant","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}