{"openapi":"3.1.0","info":{"title":"Inopay API","version":"1.0.0","description":"Inopay — infrastructure d'investissement ouverte pour BRVM/BVMAC/GSE. Non-custodial, portable KYC, routage d'ordres, webhooks signés HMAC-SHA256.","contact":{"email":"developers@getinopay.com","url":"https://getinopay.com/developers"}},"servers":[{"url":"https://api.getinopay.com","description":"Production"}],"security":[{"BearerSgi":[]},{"BearerUser":[]}],"components":{"securitySchemes":{"BearerSgi":{"type":"http","scheme":"bearer","bearerFormat":"inopay_live_* or inopay_test_*","description":"SGI API key issued via /v1/admin/sgis onboarding"},"BearerUser":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Investor JWT from /auth/login"}}},"paths":{"/v1/openapi.json":{"get":{"summary":"Ce document","tags":["Meta"],"security":[]}},"/v1/portfolio/sgi-directory":{"get":{"summary":"Liste publique des SGI","tags":["Directory"],"security":[]}},"/v1/portfolio/my-kyc":{"get":{"summary":"Mon statut KYC","tags":["Investor · KYC"],"security":[{"BearerUser":[]}]},"post":{"summary":"Créer/mettre à jour mon KYC","tags":["Investor · KYC"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/kyc-gap-analysis":{"get":{"summary":"Exigences d'une SGI (blockers + warnings)","tags":["Investor · KYC"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/connections":{"post":{"summary":"Créer connexion SGI","tags":["Investor · Connections"],"security":[{"BearerUser":[]}]},"get":{"summary":"Lister mes connexions","tags":["Investor · Connections"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/connections/{id}/otp/send":{"post":{"summary":"Envoyer OTP email","tags":["Investor · Connections"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/connections/{id}/otp/verify":{"post":{"summary":"Valider OTP et activer","tags":["Investor · Connections"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/connections/{id}":{"delete":{"summary":"Révoquer consentement","tags":["Investor · Connections"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/positions":{"get":{"summary":"Positions consolidées multi-SGI","tags":["Investor · Portfolio"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/events":{"get":{"summary":"Dividendes, ordres, frais","tags":["Investor · Portfolio"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/performance":{"get":{"summary":"Performance agrégée","tags":["Investor · Portfolio"],"security":[{"BearerUser":[]}]}},"/v1/portfolio/orders":{"post":{"summary":"Soumettre ordre routé vers SGI","tags":["Investor · Orders"],"security":[{"BearerUser":[]}]},"get":{"summary":"Lister mes ordres","tags":["Investor · Orders"],"security":[{"BearerUser":[]}]}},"/v1/sgi/portfolio/kyc-requirements":{"get":{"summary":"Config KYC de ma SGI","tags":["SGI · Config"],"security":[{"BearerSgi":[]}]},"put":{"summary":"Mettre à jour mes exigences","tags":["SGI · Config"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/connections":{"get":{"summary":"Investisseurs consentants","tags":["SGI · Portfolio"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/visibility-stats":{"get":{"summary":"AUM, nb users","tags":["SGI · Portfolio"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/sync-callback":{"post":{"summary":"Pousser positions + événements","tags":["SGI · Portfolio"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/orders":{"get":{"summary":"Ordres routés vers ma SGI","tags":["SGI · Orders"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/orders/{id}/execute":{"patch":{"summary":"Confirmer exécution (→ commission calculée)","tags":["SGI · Orders"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/orders/{id}/cancel":{"patch":{"summary":"Annuler ordre","tags":["SGI · Orders"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/billing/commissions":{"get":{"summary":"Récap commissions mensuelles","tags":["SGI · Billing"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/kyc-queue":{"get":{"summary":"File KYC investisseurs consentants","tags":["SGI · KYC"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/verification-sessions":{"get":{"summary":"Sessions verif (visio/agence/courrier)","tags":["SGI · KYC"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/verification-sessions/{id}/complete":{"post":{"summary":"Agent atteste complétion","tags":["SGI · KYC"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/branches":{"get":{"summary":"Mes agences (pour branch_visit)","tags":["SGI · Config"],"security":[{"BearerSgi":[]}]},"post":{"summary":"Ajouter une agence","tags":["SGI · Config"],"security":[{"BearerSgi":[]}]}},"/v1/sgi/portfolio/test-webhook":{"post":{"summary":"Tester mon endpoint webhook","tags":["SGI · Webhooks"],"security":[{"BearerSgi":[]}]}},"/v1/kyc/sessions":{"post":{"summary":"Créer session KYC investisseur","tags":["SGI · KYC v1"],"security":[{"BearerSgi":[]}]}},"/v1/kyc/{id}":{"get":{"summary":"État + attestation signée","tags":["SGI · KYC v1"],"security":[{"BearerSgi":[]}]}},"/v1/kyc/{id}/audit-trail":{"get":{"summary":"Journal chaîné Ed25519","tags":["SGI · KYC v1"],"security":[{"BearerSgi":[]}]}},"/v1/kyc/verify-attestation":{"post":{"summary":"Vérifier attestation offline","tags":["SGI · KYC v1"],"security":[{"BearerSgi":[]}]}}},"x-webhook-events":{"description":"Inopay POSTe vers webhook_url de votre SGI. Signature HMAC-SHA256 en header X-Inopay-Signature.","events":{"consent.granted":{"description":"Investisseur a consenti à partager avec votre SGI","payload":["connection_id","user_id","consent_expires_at"]},"consent.revoked":{"description":"Consentement révoqué","payload":["connection_id","user_id","reason"]},"kyc.validated":{"description":"Inopay a validé un dossier KYC d'un de vos investisseurs consentants","payload":["profile_id","level","email","valid_until"]},"attestation.revoked":{"description":"Attestation révoquée par Inopay","payload":["profile_id","attestation_id","reason"]},"order.routed":{"description":"Ordre investisseur routé vers votre SGI","payload":["order_id","user_id","instrument_isin","quantity","direction","gross_amount_fcfa"]},"order.executed":{"description":"Exécution confirmée (SGI déclenche)","payload":["order_id","execution_ref","gross_amount_fcfa","commission_fcfa","rate_bps","pilot"]},"test.ping":{"description":"Test delivery via /v1/sgi/portfolio/test-webhook","payload":["test","message","requested_at"]}},"headers":{"X-Inopay-Signature":"sha256=<hex hmac de body avec hmac_secret>","X-Inopay-Event":"event.name","X-Inopay-Delivery":"uuid unique de la livraison"},"retry_policy":"Backoff exponentiel : 30s, 2min, 10min, 1h, 6h. Abandon après 6 tentatives. Retry manuel possible via /v1/admin/webhook-deliveries/:id/retry."}}