{"openapi":"3.1.0","info":{"title":"Belook API","version":"1.0.0","description":"API centralisée de la plateforme financière et d'escrow Belook (Belook Pay, Escrow, Tontines, Crypto, KYC).","contact":{"name":"Belook Security & Engineering Team","url":"https://belook.com","email":"security@belook.com"}},"servers":[{"url":"/api","description":"Serveur API actuel"}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Jeton JWT utilisateur ou administrateur passé dans l'en-tête Authorization: Bearer <token>"},"IdempotencyHeader":{"type":"apiKey","in":"header","name":"Idempotency-Key","description":"Clé unique d'idempotence pour les mutations financières (UUID v4 recommandé)"}},"schemas":{"StandardResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object"},"message":{"type":"string"}}},"StandardError":{"type":"object","properties":{"success":{"type":"boolean","example":false},"error":{"type":"string","example":"ValidationError"},"message":{"type":"string","example":"Données invalides fournies"}}}}},"paths":{"/business/organizations/{orgId}/checkout":{"post":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"400":{"description":"Données invalides"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"409":{"description":"Compte de destination inactif"},"423":{"description":"Module verrouillé"},"429":{"description":"Limite de requêtes atteinte"}},"summary":"Retrouver ou créer le Checkout d’un compte d’entreprise","description":"Session utilisateur Belook. Rôle owner, admin ou finance_manager ; module Liens de paiement ouvert pour les écritures. Le compte de destination appartient à l’organisation. La réponse inclut public_url et snippets.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["destination_account_id"],"properties":{"destination_account_id":{"type":"string","format":"uuid"}}}}}}}},"/business/organizations/{orgId}/payment-links":{"get":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"},{"name":"kind","in":"query","schema":{"type":"string","enum":["link","checkout"]}}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"429":{"description":"Limite de requêtes atteinte"}},"summary":"Lister les liens de paiement de l’entreprise","description":"Session utilisateur et rôle financier (owner, admin, representative, director ou finance_manager)."}},"/business/organizations/{orgId}/invoices":{"get":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"kind","in":"query","schema":{"type":"string"}},{"name":"customer_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"429":{"description":"Limite de requêtes atteinte"}},"summary":"Lister les factures, devis et avoirs","description":"Session utilisateur et rôle financier. Données limitées à l’organisation."}},"/business/organizations/{orgId}/accounts":{"get":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"429":{"description":"Limite de requêtes atteinte"}},"summary":"Lister les comptes bancaires en devises de l’entreprise","description":"Session utilisateur et rôle financier. La réponse fournit notamment id, currency_code, status et holder_type."}},"/business/organizations/{orgId}/network-status":{"get":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"429":{"description":"Limite de requêtes atteinte"}},"summary":"Lire le statut d’ouverture partagé avec le réseau public","description":"Tout membre actif hors personnel de caisse. Retourne is_open (null si non renseigné), is_visible, version et can_manage."},"patch":{"tags":["Business"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"orgId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Organisation dont l’utilisateur est membre actif"}],"responses":{"200":{"description":"Réponse { success: true, data: … } dans le périmètre de l’entreprise"},"401":{"description":"Session utilisateur absente ou expirée"},"403":{"description":"Rôle insuffisant ou fonctionnalité indisponible"},"404":{"description":"Organisation inconnue ou étrangère à l’utilisateur"},"409":{"description":"Version dépassée : relire le statut avant de réessayer"},"422":{"description":"Données invalides ou entreprise inactive"},"429":{"description":"Limite de requêtes atteinte"},"503":{"description":"Statut temporairement indisponible"}},"summary":"Modifier le statut d’ouverture de l’entreprise","description":"Entreprise active ; propriétaire ou administrateur membre. Modification atomique et auditée. Ne modifie jamais la publication ou l’adresse.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["version","is_open"],"properties":{"version":{"type":"integer","minimum":0,"maximum":2147483646},"is_open":{"type":["boolean","null"]}}}}}}}},"/health":{"get":{"summary":"Bilan de santé du service","tags":["System"],"responses":{"200":{"description":"État du système et connectivité base de données/cache"}}}},"/auth/login":{"post":{"summary":"Connexion utilisateur standard (Email/Mot de passe ou Téléphone)","tags":["Authentication"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["identifier","password"],"properties":{"identifier":{"type":"string","example":"user@example.com"},"password":{"type":"string","example":"••••••••"}}}}}},"responses":{"200":{"description":"Connexion réussie avec token JWT et refresh token"},"401":{"description":"Identifiants invalides ou compte verrouillé"}}}},"/auth/logout":{"post":{"summary":"Déconnexion et révocation de session active","tags":["Authentication"],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Session invalidée avec succès"}}}},"/transfers":{"post":{"summary":"Créer un transfert d'argent (P2P, Bancaire, Mobile Money)","tags":["Transfers & Payments"],"security":[{"BearerAuth":[]},{"IdempotencyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","currency","recipientIdentifier"],"properties":{"amount":{"type":"number","minimum":0.01,"example":50},"currency":{"type":"string","example":"EUR"},"recipientIdentifier":{"type":"string","example":"@alice"},"note":{"type":"string","example":"Remboursement dîner"}}}}}},"responses":{"200":{"description":"Transfert exécuté avec succès"},"409":{"description":"Opération concurrente ou clé d'idempotence déjà traitée"}}}},"/escrows":{"get":{"summary":"Lister les transactions Escrow de l'utilisateur","tags":["Escrow"],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Liste des transactions sous séquestre"}}},"post":{"summary":"Créer une nouvelle transaction Escrow sécurisée","tags":["Escrow"],"security":[{"BearerAuth":[]},{"IdempotencyHeader":[]}],"responses":{"201":{"description":"Transaction Escrow créée et en attente de financement"}}}},"/tontines":{"get":{"summary":"Lister les tontines auxquelles l'utilisateur participe","tags":["Tontines"],"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Liste des tontines"}}}}}}