Tout ce que fait l'interface passe par l'API REST. Une clé, un projet, et vos pipelines envoient leurs inventaires et leurs rapports. Vos outils lisent les résultats.
Créez une clé dans Paramètres › Clés API (propriétaire ou administrateur). Elle est affichée une seule fois, hachée côté serveur, révocable à tout moment. Envoyez-la dans l'en-tête Authorization. Une clé agit sur son organisation uniquement, dans la limite de ses portées : read (toutes les lectures), upload (envoi d'inventaires et de rapports SARIF, création du projet) et admin (réglages, décisions, canaux). Sans la portée requise : 403. Clé expirée : 401. Donnez à l'agent CI uniquement read et upload. Les clés expirent au bout d'un an par défaut.
curl -sS https://lysbor.com/api/v1/auth/me -H "Authorization: Bearer lys_votre_cle"
Un envoi remplace l'inventaire courant du projet, déclenche le scan et n'alerte que sur ce qui est nouveau. Formats : CycloneDX (JSON ou XML), SPDX (JSON), lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, requirements.txt, poetry.lock, Pipfile.lock, go.mod, go.sum, Cargo.lock, Gemfile.lock, composer.lock, packages.lock.json), rapports SARIF 2.1.
# inventaire (dépendances) curl -sS -f -X POST "https://lysbor.com/api/v1/projects/<PROJECT_ID>/sboms" \ -H "Authorization: Bearer $LYSBOR_API_KEY" -F "file=@sbom.cdx.json" # rapport de code / configuration (Semgrep, Trivy, gitleaks, ZAP, CodeQL…) curl -sS -f -X POST "https://lysbor.com/api/v1/projects/<PROJECT_ID>/sarif" \ -H "Authorization: Bearer $LYSBOR_API_KEY" -F "file=@semgrep.sarif"
La réponse contient le résumé (findings_summary ou scan.summary), le nombre de nouveautés et le nombre d'alertes envoyées : de quoi faire échouer un pipeline sur un seuil, ce que fait l'option --fail-on de l'agent.
# vulnérabilités ouvertes, triées : exploitées (KEV), sévérité, EPSS, CVSS
curl -sS "https://lysbor.com/api/v1/findings?project_id=<PROJECT_ID>&status=open" -H "Authorization: Bearer $LYSBOR_API_KEY"
# une ligne par vulnérabilité, tous projets
curl -sS "https://lysbor.com/api/v1/findings/by-vulnerability" -H "Authorization: Bearer $LYSBOR_API_KEY"
# résultats de code et de configuration
curl -sS "https://lysbor.com/api/v1/code-findings?project_id=<PROJECT_ID>" -H "Authorization: Bearer $LYSBOR_API_KEY"
# décision tracée (persiste aux envois suivants)
curl -sS -X POST "https://lysbor.com/api/v1/findings/<FINDING_ID>/override" -H "Authorization: Bearer $LYSBOR_API_KEY" \
-H "Content-Type: application/json" -d '{"status":"ignored","reason":"code non atteignable"}'
# appliquer un VEX fournisseur (CycloneDX VEX ou OpenVEX) : non affecté -> ignorée, affecté -> rouverte
curl -sS -X POST "https://lysbor.com/api/v1/projects/<PROJECT_ID>/vex" -H "Authorization: Bearer $LYSBOR_API_KEY" -F "file=@vendor.vex.json"GET /api/v1/projects/<PROJECT_ID>/sboms/<SBOM_ID>/export # CycloneDX 1.5 enrichi des vulnérabilités
GET /api/v1/projects/<PROJECT_ID>/sboms/<SBOM_ID>/vex # CycloneDX VEX : affecté / non affecté avec justification
GET /api/v1/projects/<PROJECT_ID>/sboms/<SBOM_ID>/licenses # inventaire des licences et écarts à la politique
GET /api/v1/projects/<PROJECT_ID>/sboms/<SBOM_ID>/diff # composants ajoutés, retirés, changés depuis l'envoi précédent
GET /api/v1/projects/<PROJECT_ID>/remediation.md # plan de correction en Markdown (consignes, commandes, CVE) pour un développeur ou un agent
GET /api/v1/findings/remediation.md # même plan pour toute l'organisation
GET /api/v1/projects/<PROJECT_ID>/code-findings.md # code et configuration à corriger (SARIF) en Markdown, pour un développeur ou un agent
GET|DELETE /api/v1/projects/<PROJECT_ID>/code-rules[/<ID>] # règles ignorées pour tout le projet (POST …/override avec "scope":"rule" pour en créer une)
POST /api/v1/hooks/images/<JETON> # webhook de poussée d'une image suivie : scan immédiat (adresse dans Projet › Intégrations › Webhook)
POST /api/v1/check {"packages": ["pkg:npm/lodash@4.17.20", …]} # verdict par paquet : block, warn, ok, unknown (politique de l'organisation)
POST /api/v1/gate -F head=@package-lock.json -F base=@base.lock # garde de pull request : seuls les paquets ajoutés ou montés de version sont vérifiés
GET /api/v1/policy/blocklist.json?ecosystem=npm # liste de blocage (paquets malveillants OSV + interdictions de l'organisation), ETag, pour un proxy de paquets
POST /api/v1/projects/<PROJECT_ID>/waivers # risque accepté sur un composant {component_id, reason, until_fix}
GET /api/v1/org/report.pdf # rapport de posture (NIS2, ISO 27001)
GET /api/v1/org/export # export complet de l'organisation (JSON)
GET /api/v1/org/audit.csv # journal d'activitéUn canal de type « webhook » reçoit un POST JSON à chaque lot de nouveautés (événement new_findings ou new_code_findings), signé HMAC SHA-256 avec votre secret dans l'en-tête X-Lysbor-Signature (sha256=…). Vérifiez la signature sur le corps brut avant de traiter. Seuls les hôtes publics en https sont acceptés.
Questions : contact. État du service.