SPHIOR Logo
SPHIOR

SPHIOR · Référence API

Un endpoint. JSON en entrée, JSON en sortie.

L'API de sécurité SPHIOR vous permet d'analyser le code pour détecter les vulnérabilités et de transmettre un guide de correction déterministe à votre propre agent IA — depuis n'importe quel langage ou environnement.

https://api.sphior.comv1 (stable)REST / JSON
SPHIOR API

Référence API

L'API de sécurité SPHIOR vous permet d'analyser le code pour détecter les vulnérabilités et de transmettre un guide de correction déterministe à votre propre agent IA — depuis n'importe quel langage ou environnement.

Authentification

Authentification

Toutes les requêtes doivent inclure votre clé API dans l'en-tête Authorization en tant que jeton Bearer.

bash
curl https://api.sphior.com/v1/scan \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json"
N'exposez jamais votre clé API dans du code côté client ou des dépôts publics. Utilisez des variables d'environnement ou un gestionnaire de secrets.
Générez et gérez vos clés API dans la Console API. Maximum 5 clés actives par compte.
POST/v1/scan

Analyser le code

Analyse un extrait de code pour détecter les vulnérabilités. Retourne les résultats avec la sévérité, le score CVSS, le numéro de ligne et une recommandation de correction. Entièrement déterministe (sans IA) : le même code produit toujours les mêmes résultats — reproductible et prêt pour l'audit.

Corps de la requête

ParamètreTypeDescription
coderequiredstringLe code source à analyser. Taille max selon votre plan (10KB–10MB).
languagerequiredstringLangage: javascript, typescript, python, go, java, ruby, php, sql
policy_idstringID de politique personnalisée (plans Business+). OWASP par défaut.

Exemple de requête

bash
curl -X POST https://api.sphior.com/v1/scan \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "code": "app.get(\"/user\", (req, res) => { db.query(\"SELECT * FROM users WHERE id=\" + req.query.id) })",
    "language": "javascript"
  }'

Exemple de réponse

json
{
  "scan_id": "scan_01j9x7z3k8q4b5c2d6e7f8g9h0",
  "status": "completed",
  "language": "javascript",
  "findings": [
    {
      "id": "find_001",
      "type": "sql_injection",
      "severity": "critical",
      "cvss": 9.8,
      "line": 2,
      "column": 11,
      "message": "Unsanitized user input passed directly to SQL query",
      "cwe": "CWE-89",
      "owasp": "A03:2021",
      "fix_hint": "Use parameterized queries: db.query('SELECT * FROM users WHERE id = ?', [req.query.id])"
    }
  ],
  "summary": {
    "critical": 1, "high": 0, "medium": 0, "low": 0, "info": 0
  },
  "ai_calls": 0,
  "cached": false,
  "latency_ms": 12
}
POST/v1/fix

Obtenir un guide de correction

À partir d'un finding ID d'une analyse précédente, retourne un guide de correction déterministe : pourquoi c'est important, étapes de remédiation, emplacement et instructions pour votre agent IA. SPHIOR n'écrit pas de correctifs et ne transmet pas votre code source ; votre propre IA (via MCP) applique la correction.

Corps de la requête

ParamètreTypeDescription
scan_idrequiredstringID retourné par un appel /v1/scan précédent.
finding_idrequiredstringRésultat spécifique pour lequel générer un correctif.
contextstringContexte de code supplémentaire (fichier complet recommandé).

Exemple de réponse

json
{
  "fix_id": "fix_01j9x8a1b2c3d4e5f6g7h8i9j0",
  "scan_id": "scan_01j9x7z3k8q4b5c2d6e7f8g9h0",
  "finding_id": "find_001",
  "patched_code": null,
  "fix_context": {
    "finding_id": "find_001",
    "rule_id": "pattern.js.sql_concat",
    "severity": "critical",
    "cwe": "CWE-89",
    "owasp": "A03:2021",
    "why": "OS command / SQL injection: untrusted input reaches the query and can execute arbitrary statements.",
    "remediation_steps": [
      "Review the flagged code and identify the interpolated value.",
      "Use a parameterized query (e.g. WHERE id = ?) with bound parameters.",
      "Add a regression test covering the fixed behavior."
    ],
    "agent_instructions": "Open the file in your workspace and read the actual code yourself (it is NOT included here). Apply the remediation steps. A human must review your change before merge.",
    "data_boundary_note": "SPHIOR does not transmit your source code. This payload contains only finding metadata and deterministic remediation guidance."
  },
  "latency_ms": 9
}
GET/v1/rules

Lister les règles

Liste toutes les règles de sécurité actives disponibles pour votre plan. Retourne l'ID de règle, la catégorie, la sévérité et les langages applicables.

bash
curl https://api.sphior.com/v1/rules \
  -H "Authorization: Bearer sk_live_..." \
  -G -d "language=javascript" -d "severity=critical"

Paramètres de requête

ParamètreTypeDescription
languagestringFiltrer par langage (ex. python, go). Omettre pour tous.
severitystringFiltrer par sévérité: critical, high, medium, low, info
categorystringFiltrer par catégorie OWASP: injection, auth, crypto

Webhooks

Enregistrez une URL de webhook dans la Console API pour recevoir des événements en temps réel lors de la fin d'analyse ou la détection de vulnérabilités critiques.

Types d'événements

scan.completed

Déclenché à la fin d'une analyse. Contient scan_id, résumé et nombre de résultats.

scan.critical_found

Déclenché immédiatement lors de la détection d'une vulnérabilité critique.

spend_cap.reached

Déclenché lorsque les dépenses mensuelles atteignent le plafond configuré.

spend_cap.warning

Déclenché lorsque les dépenses atteignent 80% du plafond.

Les payloads webhook sont signés avec HMAC-SHA256. Vérifiez toujours l'en-tête X-SPHIOR-Signature avant de traiter.

Codes d'erreur

L'API SPHIOR utilise les codes d'état HTTP standard. Les réponses d'erreur sont en JSON avec les champs error et code.

StatutCodeSignification
401unauthenticatedClé API manquante ou invalide.
403forbiddenLa clé n'a pas la permission pour cette opération.
400invalid_requestJSON malformé, champs requis manquants ou langage non supporté.
413payload_too_largeLa taille du code dépasse la limite de votre plan.
429spend_cap_reachedLe plafond de dépenses mensuel est atteint. Seuls les résultats de règles sont retournés.
429rate_limitedTrop de requêtes par seconde. Attendez et réessayez.
500internal_errorErreur serveur inattendue. Réessayez avec un backoff exponentiel.
json
// Error response shape
{
  "error": "Missing required field: language",
  "code": "invalid_request",
  "status": 400
}

SDKs

Les SDKs officiels sont disponibles pour TypeScript/JavaScript et Python. Les deux encapsulent l'API REST avec des réponses typées, des relances automatiques et la gestion du plafond de dépenses.

TypeScript / Node.js

bash
npm install @sphior/sdk
typescript
import { SphiorClient } from "@sphior/sdk";

const sphior = new SphiorClient({ apiKey: process.env.SPHIOR_API_KEY });

const result = await sphior.scan({
  code: fs.readFileSync("./auth.ts", "utf8"),
  language: "typescript",
});

for (const finding of result.findings) {
  console.log(`${finding.severity.toUpperCase()}: ${finding.message} (line ${finding.line})`);
  console.log("Fix hint:", finding.fix_hint);
}

// Hand a finding to your own AI agent to fix (deterministic guidance, no code sent):
const guidance = await sphior.fix({ scan_id: result.scan_id, finding_id: result.findings[0].id });
console.log(guidance.fix_context.remediation_steps);

Python

bash
pip install sphior-sdk
python
from sphior import SphiorClient

client = SphiorClient(api_key=os.environ["SPHIOR_API_KEY"])

result = client.scan(
    code=open("app.py").read(),
    language="python",
)

for finding in result.findings:
    print(f"{finding.severity.upper()}: {finding.message} (line {finding.line})")
    print("Fix hint:", finding.fix_hint)

# Hand a finding to your own AI agent to fix (deterministic guidance, no code sent):
guidance = client.fix(scan_id=result.scan_id, finding_id=result.findings[0].id)
print(guidance.fix_context["remediation_steps"])

Tarifs

L'API facture des frais de plateforme simples pour l'accès. L'analyse et le guide de correction s'exécutent sur un moteur entièrement déterministe — sans facturation par appel IA. Les plans diffèrent par les limites de débit, de taille de code et le support.

PlanPlatform feeScanningFix guidance
Free$0/moIncludedIncluded
Developer$29/moIncludedIncluded
Business$99/moIncludedIncluded
Enterprise$299+/moIncludedIncluded
Le moteur déterministe maintient des coûts stables et prévisibles. Les limites de débit par seconde et de taille de code évoluent selon le plan ; configurez-les dans la Console API.