{
  "ok": true,
  "service": "Sterling Chain L3 — API publique Market Access (MM / OTC / HFT)",
  "version": "1.1.0",
  "mise_a_jour": "2026-09-26",
  "operateur": "Sterling Ibrahim Jomany — Opérateur Souverain, Sterling Chain L3",
  "contacts": {
    "officiel": "label45saintgobain@gmail.com",
    "business": "contact@sterlingchain.net",
    "telegram": "@sterling_ibrahim",
    "instagram_pro": "@label92saintgobain"
  },
  "encodage": "Toutes les réponses JSON de cette API sont servies en UTF-8 explicite (Content-Type: application/json; charset=utf-8).",
  "specification_openapi": "/public-sdk/openapi/sterling_public_api_v1.json",
  "sdk_public": "/public-sdk/ (README, SDK TypeScript, SDK Python zéro-dépendance, Postman, docs FIX 4.4)",
  "github": "https://github.com/Ibrahimsterlingjomany/Sterling-Chain-L3-Market-Access",
  "endpoints": {
    "market_data_rest": {
      "base": "/api/v1/market",
      "routes": ["/symbols", "/ticker", "/depth", "/klines", "/trades"],
      "parametres": "symbol=SLUSD/USDC | 92C/SLUSD · limit (depth ≤ 100, klines ≤ 1440)",
      "source": "Carnets OpenBook v2 mainnet-beta (lecture seule, cycle 10 s)",
      "limite_debit": "60 req/min/IP (burst 20)"
    },
    "websocket": {
      "endpoint": "wss://api.sterlingchain.net/ws/rfq",
      "abonnement": { "action": "SUBSCRIBE_MARKET", "channels": ["ticker", "l2", "trades"], "symbols": ["SLUSD/USDC", "92C/SLUSD"] },
      "sante": "GET /ws/rfq/health"
    },
    "handshake_ed25519": {
      "endpoint": "/api/v1/dvp/handshake",
      "etapes": [
        "GET /api/v1/dvp/handshake → termes du protocole (200)",
        "POST {\"pubkey\": \"<base58>\"} → nonce de défi (200)",
        "Signer ed25519(UTF-8 de la chaîne base64 du nonce) avec la clé du bot",
        "POST {\"pubkey\", \"nonce\", \"signature\"} → 201 Created + jeton Bearer (TTL 7 j)"
      ],
      "limite_emission": "1 jeton/IP/heure (429 EMISSION_PAR_IP_TROP_RECENTE)"
    },
    "dvp_build_submit": {
      "build": "POST /api/v1/dvp/build — construit la transaction v0 atomique (non signée)",
      "submit": "POST /api/v1/dvp/submit — co-signature Desk sur preuve de la jambe contrepartie",
      "authentification": "Authorization: Bearer <jeton du handshake>",
      "statuts": {
        "200": "Requête traitée — corps JSON détaillé",
        "400": "Payload invalide (motif dans le corps)",
        "403": "TAKER_NON_ADMIS_JETON — jeton absent/inconnu/révoqué (onboarding : /api/v1/dvp/handshake)",
        "409": "REFUS_DVP — garde de sûreté du Desk (ex. contrepartie à sec) : AUCUNE transaction construite, ZÉRO SLUSD libéré",
        "429": "Limite de débit (3 req/min/IP)"
      },
      "garantie": "Règlement atomique DvP : zéro SLUSD sans paiement reçu. build ne signe jamais ; submit ne diffuse jamais sans la co-signature ed25519 de la contrepartie."
    },
    "statut_desk": "GET /api/v1/dvp/status — verrous, politique de prix, couloir de décote institutionnel",
    "board_public": "https://sterlingchain.net/api/v1/exchange/board — offres RFQ avec qualification SCS (trois couches)"
  },
  "qualification": {
    "libelle": "Garanti par l'Asset de Staking L3 (SCS)",
    "nature": "Position déclarée de l'opérateur — qualification complète des trois couches (avec montant_verifie_independamment: false) dans /public-sdk/README.md"
  },
  "erreur_route_inconnue": "Toute route non définie renvoie un 404 JSON propre : erreur, pointeur vers cette documentation (GET /) et vers l'OpenAPI. Le chemin demandé n'est reproduit que s'il est standard (lettres, chiffres, / . _ -, ≤ 160 caractères) ; tout chemin contenant des caractères non standard (ex. collage de lien Markdown) est remplacé par la constante \"(chemin non standard - non reproduit)\" — aucun écho brut, aucun caractère cassé."
}
